@browserlessapi/inferlo 0.4.0 → 0.6.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.
Files changed (142) hide show
  1. package/README.md +21 -3
  2. package/dist/adonisjs.d.ts +33 -0
  3. package/dist/adonisjs.js +30 -0
  4. package/dist/adonisjs.js.map +1 -0
  5. package/dist/ai/index.d.ts +22 -8
  6. package/dist/ai/index.js +107 -15
  7. package/dist/ai/index.js.map +1 -1
  8. package/dist/ai/providers.js +5 -4
  9. package/dist/ai/providers.js.map +1 -1
  10. package/dist/ai/public.d.ts +21 -0
  11. package/dist/ai/public.js +17 -0
  12. package/dist/ai/public.js.map +1 -0
  13. package/dist/ai/tool.d.ts +47 -0
  14. package/dist/ai/tool.js +85 -0
  15. package/dist/ai/tool.js.map +1 -0
  16. package/dist/ai-client.d.ts +3 -0
  17. package/dist/ai-client.js +8 -0
  18. package/dist/ai-client.js.map +1 -0
  19. package/dist/api-version.d.ts +32 -0
  20. package/dist/api-version.js +45 -0
  21. package/dist/api-version.js.map +1 -0
  22. package/dist/app.d.ts +117 -5
  23. package/dist/app.js +667 -156
  24. package/dist/app.js.map +1 -1
  25. package/dist/audit.d.ts +50 -0
  26. package/dist/audit.js +92 -0
  27. package/dist/audit.js.map +1 -0
  28. package/dist/cache.d.ts +92 -0
  29. package/dist/cache.js +245 -0
  30. package/dist/cache.js.map +1 -0
  31. package/dist/cli/main.js +45 -5
  32. package/dist/cli/main.js.map +1 -1
  33. package/dist/config.d.ts +16 -0
  34. package/dist/config.js +101 -0
  35. package/dist/config.js.map +1 -0
  36. package/dist/db/table.d.ts +31 -0
  37. package/dist/db/table.js +140 -1
  38. package/dist/db/table.js.map +1 -1
  39. package/dist/deprecation.d.ts +23 -0
  40. package/dist/deprecation.js +70 -0
  41. package/dist/deprecation.js.map +1 -0
  42. package/dist/describe.d.ts +68 -5
  43. package/dist/describe.js +38 -3
  44. package/dist/describe.js.map +1 -1
  45. package/dist/elysia.d.ts +49 -0
  46. package/dist/elysia.js +10 -0
  47. package/dist/elysia.js.map +1 -0
  48. package/dist/env.d.ts +2 -0
  49. package/dist/env.js +5 -4
  50. package/dist/env.js.map +1 -1
  51. package/dist/express.d.ts +38 -0
  52. package/dist/express.js +18 -0
  53. package/dist/express.js.map +1 -0
  54. package/dist/fastify.d.ts +52 -0
  55. package/dist/fastify.js +65 -0
  56. package/dist/fastify.js.map +1 -0
  57. package/dist/h3.d.ts +76 -0
  58. package/dist/h3.js +61 -0
  59. package/dist/h3.js.map +1 -0
  60. package/dist/hapi.d.ts +45 -0
  61. package/dist/hapi.js +57 -0
  62. package/dist/hapi.js.map +1 -0
  63. package/dist/hono.d.ts +26 -0
  64. package/dist/hono.js +10 -0
  65. package/dist/hono.js.map +1 -0
  66. package/dist/index.d.ts +27 -5
  67. package/dist/index.js +9 -2
  68. package/dist/index.js.map +1 -1
  69. package/dist/jobs.d.ts +24 -0
  70. package/dist/jobs.js +35 -6
  71. package/dist/jobs.js.map +1 -1
  72. package/dist/koa.d.ts +51 -0
  73. package/dist/koa.js +45 -0
  74. package/dist/koa.js.map +1 -0
  75. package/dist/lambda.d.ts +110 -0
  76. package/dist/lambda.js +169 -0
  77. package/dist/lambda.js.map +1 -0
  78. package/dist/logging.d.ts +23 -0
  79. package/dist/logging.js +87 -0
  80. package/dist/logging.js.map +1 -0
  81. package/dist/mcp.d.ts +1 -7
  82. package/dist/mcp.js +18 -4
  83. package/dist/mcp.js.map +1 -1
  84. package/dist/metrics.d.ts +48 -0
  85. package/dist/metrics.js +184 -0
  86. package/dist/metrics.js.map +1 -0
  87. package/dist/module.d.ts +52 -0
  88. package/dist/module.js +152 -0
  89. package/dist/module.js.map +1 -0
  90. package/dist/nestjs.d.ts +43 -0
  91. package/dist/nestjs.js +47 -0
  92. package/dist/nestjs.js.map +1 -0
  93. package/dist/nextjs.d.ts +35 -0
  94. package/dist/nextjs.js +33 -0
  95. package/dist/nextjs.js.map +1 -0
  96. package/dist/openapi.d.ts +3 -1
  97. package/dist/openapi.js +16 -3
  98. package/dist/openapi.js.map +1 -1
  99. package/dist/permissions.d.ts +26 -0
  100. package/dist/permissions.js +78 -0
  101. package/dist/permissions.js.map +1 -0
  102. package/dist/react-router.d.ts +41 -0
  103. package/dist/react-router.js +42 -0
  104. package/dist/react-router.js.map +1 -0
  105. package/dist/redact.d.ts +19 -0
  106. package/dist/redact.js +150 -0
  107. package/dist/redact.js.map +1 -0
  108. package/dist/request-matcher.d.ts +4 -0
  109. package/dist/request-matcher.js +14 -0
  110. package/dist/request-matcher.js.map +1 -0
  111. package/dist/route.d.ts +54 -1
  112. package/dist/route.js +24 -0
  113. package/dist/route.js.map +1 -1
  114. package/dist/secure-headers.d.ts +8 -0
  115. package/dist/secure-headers.js +61 -0
  116. package/dist/secure-headers.js.map +1 -0
  117. package/dist/serve.d.ts +72 -1
  118. package/dist/serve.js +201 -61
  119. package/dist/serve.js.map +1 -1
  120. package/dist/sessions.d.ts +72 -0
  121. package/dist/sessions.js +171 -0
  122. package/dist/sessions.js.map +1 -0
  123. package/dist/sveltekit.d.ts +72 -0
  124. package/dist/sveltekit.js +68 -0
  125. package/dist/sveltekit.js.map +1 -0
  126. package/dist/tracing.d.ts +118 -0
  127. package/dist/tracing.js +204 -0
  128. package/dist/tracing.js.map +1 -0
  129. package/dist/trpc.d.ts +57 -0
  130. package/dist/trpc.js +142 -0
  131. package/dist/trpc.js.map +1 -0
  132. package/dist/tsed.d.ts +32 -0
  133. package/dist/tsed.js +13 -0
  134. package/dist/tsed.js.map +1 -0
  135. package/llms.txt +15 -5
  136. package/package.json +99 -3
  137. package/templates/app/AGENTS.md +12 -6
  138. package/templates/app/_env.example +2 -0
  139. package/templates/app/src/app.ts +15 -8
  140. package/templates/app/src/config.ts +17 -0
  141. package/templates/app/src/server.ts +9 -9
  142. package/templates/app/src/routes/health.ts +0 -3
package/dist/lambda.js ADDED
@@ -0,0 +1,169 @@
1
+ import { clientIps } from "./client-ip.js";
2
+ import { InferloError } from "./errors.js";
3
+ const fix = 'Pass the app from createApp: export const handler = toLambdaHandler(app), or toLambdaHandler(app, { prefix: "/prod", streaming: true }).';
4
+ /** Content types sent as text; everything else is base64 encoded so binary bodies arrive unchanged. */
5
+ const TEXT = /^(text\/|application\/(json|[^;]*\+json|xml|[^;]*\+xml|javascript|x-www-form-urlencoded|graphql)|image\/svg\+xml)/i;
6
+ function isV2(event) {
7
+ return event.version === "2.0" && typeof event.rawPath === "string";
8
+ }
9
+ function base64ToBytes(text) {
10
+ const binary = atob(text);
11
+ const bytes = new Uint8Array(binary.length);
12
+ for (let i = 0; i < binary.length; i++)
13
+ bytes[i] = binary.charCodeAt(i);
14
+ return bytes;
15
+ }
16
+ function bytesToBase64(bytes) {
17
+ let binary = "";
18
+ for (let i = 0; i < bytes.length; i += 0x8000)
19
+ binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
20
+ return btoa(binary);
21
+ }
22
+ /** Turns a Lambda HTTP event into a Request, and records the caller's address for rate limits by IP. */
23
+ function toRequest(event, prefix) {
24
+ const headers = new Headers();
25
+ let method;
26
+ let path;
27
+ let query;
28
+ let ip;
29
+ if (isV2(event)) {
30
+ method = event.requestContext.http.method;
31
+ path = event.rawPath;
32
+ query = event.rawQueryString ?? "";
33
+ for (const [name, value] of Object.entries(event.headers ?? {}))
34
+ if (value !== undefined)
35
+ headers.set(name, value);
36
+ // Function URLs and HTTP APIs move the Cookie header into event.cookies.
37
+ if (event.cookies?.length)
38
+ headers.set("cookie", event.cookies.join("; "));
39
+ ip = event.requestContext.http.sourceIp;
40
+ }
41
+ else {
42
+ method = event.httpMethod;
43
+ path = event.path;
44
+ const params = new URLSearchParams();
45
+ const multiQuery = event.multiValueQueryStringParameters;
46
+ if (multiQuery) {
47
+ for (const [name, values] of Object.entries(multiQuery))
48
+ for (const value of values ?? [])
49
+ params.append(name, value);
50
+ }
51
+ else {
52
+ for (const [name, value] of Object.entries(event.queryStringParameters ?? {}))
53
+ if (value !== undefined)
54
+ params.append(name, value);
55
+ }
56
+ query = params.toString();
57
+ const multi = event.multiValueHeaders;
58
+ if (multi) {
59
+ for (const [name, values] of Object.entries(multi))
60
+ for (const value of values ?? [])
61
+ headers.append(name, value);
62
+ }
63
+ else {
64
+ for (const [name, value] of Object.entries(event.headers ?? {}))
65
+ if (value !== undefined)
66
+ headers.set(name, value);
67
+ }
68
+ ip = event.requestContext?.identity?.sourceIp;
69
+ }
70
+ if (prefix && (path === prefix || path.startsWith(prefix + "/")))
71
+ path = path.slice(prefix.length) || "/";
72
+ const host = headers.get("host") ?? event.requestContext?.domainName ?? "localhost";
73
+ const proto = headers.get("x-forwarded-proto")?.split(",")[0]?.trim() || "https";
74
+ const url = new URL(`${proto}://${host}`);
75
+ url.pathname = path;
76
+ url.search = query;
77
+ const hasBody = typeof event.body === "string" && method !== "GET" && method !== "HEAD";
78
+ const body = hasBody ? (event.isBase64Encoded ? base64ToBytes(event.body) : event.body) : undefined;
79
+ const request = new Request(url, { method, headers, body });
80
+ if (ip)
81
+ clientIps.set(request, ip);
82
+ return request;
83
+ }
84
+ /** Response headers as one value per name (Set-Cookie separately: Lambda needs each cookie on its own). */
85
+ function splitHeaders(response) {
86
+ const headers = {};
87
+ for (const [name, value] of response.headers)
88
+ if (name !== "set-cookie")
89
+ headers[name] = value;
90
+ return { headers, cookies: response.headers.getSetCookie() };
91
+ }
92
+ async function toResult(response, v2) {
93
+ const { headers, cookies } = splitHeaders(response);
94
+ const bytes = new Uint8Array(await response.arrayBuffer());
95
+ const text = bytes.length === 0 || TEXT.test(response.headers.get("content-type") ?? "");
96
+ const body = text ? new TextDecoder().decode(bytes) : bytesToBase64(bytes);
97
+ if (v2) {
98
+ const result = { statusCode: response.status, headers, body, isBase64Encoded: !text };
99
+ if (cookies.length)
100
+ result.cookies = cookies;
101
+ return result;
102
+ }
103
+ const multiValueHeaders = {};
104
+ if (cookies.length)
105
+ multiValueHeaders["set-cookie"] = cookies;
106
+ return { statusCode: response.status, headers, multiValueHeaders, body, isBase64Encoded: !text };
107
+ }
108
+ async function pipe(response, stream) {
109
+ const reader = response.body?.getReader();
110
+ try {
111
+ while (reader) {
112
+ const { done, value } = await reader.read();
113
+ if (done)
114
+ break;
115
+ if (value.length && !stream.write(value) && stream.once)
116
+ await new Promise((resolve) => stream.once("drain", resolve));
117
+ }
118
+ }
119
+ finally {
120
+ stream.end();
121
+ }
122
+ }
123
+ export function toLambdaHandler(app, options = {}) {
124
+ if (!app || typeof app.fetch !== "function") {
125
+ throw new InferloError("IL5024", "toLambdaHandler() needs an Inferlo app (the value returned by createApp).", { fix });
126
+ }
127
+ if (options === null ||
128
+ typeof options !== "object" ||
129
+ (options.prefix !== undefined && (typeof options.prefix !== "string" || !options.prefix.startsWith("/"))) ||
130
+ (options.streaming !== undefined && typeof options.streaming !== "boolean")) {
131
+ throw new InferloError("IL5024", 'toLambdaHandler() options are { prefix, streaming }: prefix starts with /, such as "/prod", and streaming is true or false.', { fix });
132
+ }
133
+ const prefix = (options.prefix ?? "").replace(/\/+$/, "").replace(/\/{2,}/g, "/");
134
+ const checkEvent = (event) => {
135
+ const e = event;
136
+ const v2 = e?.version === "2.0" && typeof e.rawPath === "string" && typeof e.requestContext?.http?.method === "string";
137
+ const v1 = typeof e?.httpMethod === "string" && typeof e.path === "string";
138
+ if (!v2 && !v1) {
139
+ throw new InferloError("IL5024", "The Lambda handler from toLambdaHandler() received an event that is not from a function URL or API Gateway.", {
140
+ fix: "Invoke the function through a Lambda function URL or an API Gateway HTTP API or REST API (Lambda proxy integration). Other event sources (SQS, S3, schedules) need their own handler.",
141
+ });
142
+ }
143
+ return event;
144
+ };
145
+ if (!options.streaming) {
146
+ const buffered = async (event) => {
147
+ const checked = checkEvent(event);
148
+ const response = await app.fetch(toRequest(checked, prefix));
149
+ return toResult(response, isV2(checked));
150
+ };
151
+ return buffered;
152
+ }
153
+ const runtime = options.awslambda ?? globalThis.awslambda;
154
+ if (typeof runtime?.streamifyResponse !== "function" || typeof runtime.HttpResponseStream?.from !== "function") {
155
+ throw new InferloError("IL5024", "toLambdaHandler(app, { streaming: true }) needs the awslambda global of the Lambda Node.js runtime, which is not available here.", {
156
+ fix: "Streaming only works inside AWS Lambda on a Node.js runtime. Deploy it there, use toLambdaHandler(app) without streaming elsewhere, or pass { awslambda } in tests.",
157
+ });
158
+ }
159
+ return runtime.streamifyResponse(async (event, responseStream) => {
160
+ const checked = checkEvent(event);
161
+ const response = await app.fetch(toRequest(checked, prefix));
162
+ const { headers, cookies } = splitHeaders(response);
163
+ const metadata = { statusCode: response.status, headers };
164
+ if (cookies.length)
165
+ metadata.cookies = cookies;
166
+ await pipe(response, runtime.HttpResponseStream.from(responseStream, metadata));
167
+ });
168
+ }
169
+ //# sourceMappingURL=lambda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lambda.js","sourceRoot":"","sources":["../src/lambda.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Structured fields of a log entry, such as the request id. Values are strings, numbers or booleans. */
2
+ export type LogFields = Record<string, string | number | boolean | undefined>;
3
+ export interface LoggingConfig {
4
+ /** Output of the built-in logger: "text" (default, readable) or "json" (one JSON object per line, for log collectors). */
5
+ format?: "text" | "json";
6
+ /** Log every request with its id, method, path, status and duration in milliseconds. Default false. */
7
+ requests?: boolean;
8
+ }
9
+ /** Incoming X-Request-Id values that are kept (with trustProxy): 1 to 128 letters, digits and . _ : - characters. */
10
+ export declare const REQUEST_ID: RegExp;
11
+ export interface LoggerShape {
12
+ info(message: string, data?: unknown, fields?: LogFields): void;
13
+ error(message: string, data?: unknown, fields?: LogFields): void;
14
+ }
15
+ /** Checks createApp({ logging }) and returns it with defaults. */
16
+ export declare function loggingOptions(option: unknown, hasLogger: boolean): {
17
+ format: "text" | "json";
18
+ requests: boolean;
19
+ };
20
+ /** The built-in logger: "[inferlo] message" lines, or one JSON object per line. */
21
+ export declare function defaultLogger(format: "text" | "json", app: string): LoggerShape;
22
+ /** An error as plain JSON: name, message, code and status when present, stack, and causes. */
23
+ export declare function serializeError(error: Error, depth?: number): Record<string, unknown>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Logging: the built-in logger (text or JSON lines), request ids and request logs.
3
+ *
4
+ * createApp({ logging: { format: "json", requests: true } })
5
+ *
6
+ * prints one JSON object per line, and one line per request with its id, method, path, status and duration.
7
+ */
8
+ import { InferloError } from "./errors.js";
9
+ /** Incoming X-Request-Id values that are kept (with trustProxy): 1 to 128 letters, digits and . _ : - characters. */
10
+ export const REQUEST_ID = /^[A-Za-z0-9._:-]{1,128}$/;
11
+ /** Checks createApp({ logging }) and returns it with defaults. */
12
+ export function loggingOptions(option, hasLogger) {
13
+ if (option === undefined)
14
+ return { format: "text", requests: false };
15
+ const problems = [];
16
+ if (!option || typeof option !== "object" || Array.isArray(option))
17
+ problems.push("logging must be an object such as { format: \"json\", requests: true }");
18
+ else {
19
+ const { format, requests, ...rest } = option;
20
+ if (format !== undefined && format !== "text" && format !== "json")
21
+ problems.push(`format must be "text" or "json", got ${JSON.stringify(format)}`);
22
+ if (format !== undefined && hasLogger)
23
+ problems.push("format only applies to the built-in logger; your own logger decides how entries are written");
24
+ if (requests !== undefined && typeof requests !== "boolean")
25
+ problems.push("requests must be true or false");
26
+ for (const key of Object.keys(rest))
27
+ problems.push(`unknown option "${key}"`);
28
+ }
29
+ if (problems.length) {
30
+ throw new InferloError("IL6019", `Invalid logging options: ${problems.join("; ")}.`, {
31
+ fix: 'Use createApp({ logging: { format: "json", requests: true } }). With your own logger, leave out format and read the third argument of info and error for fields such as requestId.',
32
+ });
33
+ }
34
+ const { format = "text", requests = false } = option;
35
+ return { format, requests };
36
+ }
37
+ /** The built-in logger: "[inferlo] message" lines, or one JSON object per line. */
38
+ export function defaultLogger(format, app) {
39
+ if (format === "text") {
40
+ const line = (message, fields) => `[inferlo] ${message}${fields?.requestId ? ` (request ${fields.requestId})` : ""}`;
41
+ return {
42
+ info: (message, data, fields) => console.log(line(message, fields), data ?? ""),
43
+ error: (message, data, fields) => console.error(line(message, fields), data ?? ""),
44
+ };
45
+ }
46
+ const write = (level, message, data, fields) => {
47
+ const entry = { time: new Date().toISOString(), level, app, msg: message };
48
+ for (const [key, value] of Object.entries(fields ?? {}))
49
+ if (value !== undefined && !(key in entry))
50
+ entry[key] = value;
51
+ if (data instanceof Error)
52
+ entry.error = serializeError(data);
53
+ else if (data !== undefined && data !== "")
54
+ entry.data = data;
55
+ let text;
56
+ try {
57
+ text = JSON.stringify(entry);
58
+ }
59
+ catch {
60
+ text = JSON.stringify({ ...entry, data: String(data) });
61
+ }
62
+ if (level === "error")
63
+ console.error(text);
64
+ else
65
+ console.log(text);
66
+ };
67
+ return {
68
+ info: (message, data, fields) => write("info", message, data, fields),
69
+ error: (message, data, fields) => write("error", message, data, fields),
70
+ };
71
+ }
72
+ /** An error as plain JSON: name, message, code and status when present, stack, and causes. */
73
+ export function serializeError(error, depth = 0) {
74
+ const out = { name: error.name, message: error.message };
75
+ const extra = error;
76
+ if (typeof extra.code === "string" || typeof extra.code === "number")
77
+ out.code = extra.code;
78
+ if (typeof extra.status === "number")
79
+ out.status = extra.status;
80
+ if (error.stack)
81
+ out.stack = error.stack;
82
+ const cause = error.cause;
83
+ if (cause !== undefined && depth < 5)
84
+ out.cause = cause instanceof Error ? serializeError(cause, depth + 1) : cause;
85
+ return out;
86
+ }
87
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts CHANGED
@@ -1,9 +1,3 @@
1
- /**
2
- * Built-in MCP server (Model Context Protocol, Streamable HTTP transport, JSON responses).
3
- * Routes with `tool: true` become tools. Tool calls run through the normal router, so auth,
4
- * roles and validation apply exactly as they do for HTTP clients: the caller's Authorization
5
- * header is forwarded.
6
- */
7
1
  import type { App } from "./app.ts";
8
2
  import type { RouteDef } from "./route.ts";
9
3
  import type { JSONSchema } from "./schema.ts";
@@ -17,6 +11,6 @@ export declare function toolName(route: RouteDef): string;
17
11
  export declare function toolDefinitions(app: App<any>): ToolDefinition[];
18
12
  /** The tool definition of one route: its name, description and a JSON Schema of params, query and body together. */
19
13
  export declare function toolDefinition(route: RouteDef): ToolDefinition;
20
- export declare function handleMcp(app: App<any>, req: Request, headers: Headers, testUsers: WeakMap<Request, unknown>): Promise<Response>;
14
+ export declare function handleMcp(app: App<any>, req: Request, headers: Headers, testUsers: WeakMap<Request, unknown>, visible?: (route: RouteDef) => Promise<boolean>): Promise<Response>;
21
15
  /** Run a tool call as an HTTP request to its route, forwarding the caller's credentials, so auth, roles and validation apply. */
22
16
  export declare function callTool(app: App<any>, tool: ToolDefinition, args: Record<string, unknown>, original: Request, testUsers: WeakMap<Request, unknown>): Promise<Response>;
package/dist/mcp.js CHANGED
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Built-in MCP server (Model Context Protocol, Streamable HTTP transport, JSON responses).
3
+ * Routes with `tool: true` become tools. Tool calls run through the normal router, so auth,
4
+ * roles and validation apply exactly as they do for HTTP clients: the caller's Authorization
5
+ * header is forwarded.
6
+ */
7
+ import { describeDeprecation, resolveDeprecation } from "./deprecation.js";
1
8
  import { clientIps } from "./client-ip.js";
2
9
  import { InferloError } from "./errors.js";
3
10
  const PROTOCOL_VERSIONS = ["2025-06-18", "2025-03-26", "2024-11-05"];
@@ -46,9 +53,12 @@ export function toolDefinition(route) {
46
53
  }
47
54
  }
48
55
  const toolOpt = typeof o.tool === "object" ? o.tool : {};
56
+ const description = toolOpt.description ?? o.description ?? o.summary ?? `${route.method} ${route.path}`;
57
+ // Models should prefer other tools over deprecated ones.
58
+ const sunset = typeof o.deprecated === "object" && o.deprecated.sunset !== undefined ? describeDeprecation(resolveDeprecation(o.deprecated, `${route.method} ${route.path}`)).sunset : undefined;
49
59
  return {
50
60
  name: toolName(route),
51
- description: toolOpt.description ?? o.description ?? o.summary ?? `${route.method} ${route.path}`,
61
+ description: o.deprecated ? `${description} (Deprecated${sunset ? `, stops working on ${sunset}` : ""}.)` : description,
52
62
  inputSchema: { type: "object", properties, ...(required.size ? { required: [...required] } : {}) },
53
63
  route,
54
64
  };
@@ -56,7 +66,7 @@ export function toolDefinition(route) {
56
66
  function rpcError(id, code, message) {
57
67
  return { jsonrpc: "2.0", id: id ?? null, error: { code, message } };
58
68
  }
59
- export async function handleMcp(app, req, headers, testUsers) {
69
+ export async function handleMcp(app, req, headers, testUsers, visible = async () => true) {
60
70
  headers.set("content-type", "application/json; charset=utf-8");
61
71
  if (req.method !== "POST") {
62
72
  headers.set("allow", "POST");
@@ -92,8 +102,12 @@ export async function handleMcp(app, req, headers, testUsers) {
92
102
  }
93
103
  case "ping":
94
104
  return { jsonrpc: "2.0", id: msg.id, result: {} };
95
- case "tools/list":
96
- return { jsonrpc: "2.0", id: msg.id, result: { tools: tools.map(({ name, description, inputSchema }) => ({ name, description, inputSchema })) } };
105
+ case "tools/list": {
106
+ // Tools needing a role or permission the caller lacks are left out; tools/call still checks every call.
107
+ const shown = await Promise.all(tools.map((tool) => visible(tool.route)));
108
+ const listed = tools.filter((_, i) => shown[i]).map(({ name, description, inputSchema }) => ({ name, description, inputSchema }));
109
+ return { jsonrpc: "2.0", id: msg.id, result: { tools: listed } };
110
+ }
97
111
  case "tools/call": {
98
112
  const name = String(msg.params?.name ?? "");
99
113
  const tool = tools.find((t) => t.name === name);
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ export interface MetricsConfig {
2
+ /** Path of the metrics endpoint. Default "/metrics". */
3
+ path?: string;
4
+ /**
5
+ * Require Authorization: Bearer <token> to read metrics (set the same token in the scraper's
6
+ * bearer_token). Without it the endpoint is public, so only leave it out when the endpoint is not
7
+ * reachable from the internet.
8
+ */
9
+ token?: string;
10
+ /** Upper bounds in seconds of the duration histogram buckets. Default 0.005 to 10 seconds. */
11
+ buckets?: readonly number[];
12
+ }
13
+ export interface ResolvedMetrics {
14
+ path: string;
15
+ token: string | undefined;
16
+ buckets: number[];
17
+ }
18
+ /** Default histogram buckets in seconds, the same as the Prometheus client libraries. */
19
+ export declare const DEFAULT_BUCKETS: number[];
20
+ /** Checks createApp({ metrics }) and returns it with defaults, or undefined when metrics are off. */
21
+ export declare function resolveMetrics(option: unknown, taken: {
22
+ path: string | false;
23
+ what: string;
24
+ }[]): ResolvedMetrics | undefined;
25
+ /** True when the request carries Authorization: Bearer <token>, compared in constant time. */
26
+ export declare function hasMetricsToken(req: Request, token: string): boolean;
27
+ export interface AppMetrics {
28
+ /** A request finished: route is the route pattern ("/tickets/:id"), or "unmatched". */
29
+ request(method: string, route: string, status: number, seconds: number): void;
30
+ inFlight(delta: number): void;
31
+ job(name: string, outcome: "done" | "retried" | "failed", seconds: number): void;
32
+ ai(usage: {
33
+ requested: string;
34
+ model: string;
35
+ kind: string;
36
+ inputTokens: number;
37
+ outputTokens: number;
38
+ cost: number;
39
+ durationMs: number;
40
+ }): void;
41
+ /** The Prometheus text exposition of every metric. */
42
+ render(): string;
43
+ }
44
+ export declare function createMetrics(info: {
45
+ app: string;
46
+ version: string;
47
+ inferlo: string;
48
+ }, buckets: readonly number[]): AppMetrics;