@browserlessapi/inferlo 0.3.0 → 0.5.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 (115) hide show
  1. package/README.md +18 -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 +51 -2
  6. package/dist/ai/index.js +186 -37
  7. package/dist/ai/index.js.map +1 -1
  8. package/dist/ai/providers.d.ts +56 -3
  9. package/dist/ai/providers.js +102 -11
  10. package/dist/ai/providers.js.map +1 -1
  11. package/dist/ai/public.d.ts +20 -0
  12. package/dist/ai/public.js +17 -0
  13. package/dist/ai/public.js.map +1 -0
  14. package/dist/ai/tool.d.ts +47 -0
  15. package/dist/ai/tool.js +85 -0
  16. package/dist/ai/tool.js.map +1 -0
  17. package/dist/ai-client.d.ts +3 -0
  18. package/dist/ai-client.js +8 -0
  19. package/dist/ai-client.js.map +1 -0
  20. package/dist/app.d.ts +102 -2
  21. package/dist/app.js +509 -111
  22. package/dist/app.js.map +1 -1
  23. package/dist/cli/main.js +76 -4
  24. package/dist/cli/main.js.map +1 -1
  25. package/dist/client-ip.d.ts +7 -0
  26. package/dist/client-ip.js +27 -0
  27. package/dist/client-ip.js.map +1 -0
  28. package/dist/config.d.ts +16 -0
  29. package/dist/config.js +101 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/cron.d.ts +17 -0
  32. package/dist/cron.js +143 -0
  33. package/dist/cron.js.map +1 -0
  34. package/dist/db/migrate.d.ts +6 -3
  35. package/dist/db/migrate.js +126 -10
  36. package/dist/db/migrate.js.map +1 -1
  37. package/dist/db/table.d.ts +83 -7
  38. package/dist/db/table.js +245 -9
  39. package/dist/db/table.js.map +1 -1
  40. package/dist/deprecation.d.ts +23 -0
  41. package/dist/deprecation.js +70 -0
  42. package/dist/deprecation.js.map +1 -0
  43. package/dist/describe.d.ts +45 -5
  44. package/dist/describe.js +19 -2
  45. package/dist/describe.js.map +1 -1
  46. package/dist/elysia.d.ts +49 -0
  47. package/dist/elysia.js +10 -0
  48. package/dist/elysia.js.map +1 -0
  49. package/dist/env.d.ts +2 -0
  50. package/dist/env.js +5 -4
  51. package/dist/env.js.map +1 -1
  52. package/dist/express.d.ts +38 -0
  53. package/dist/express.js +18 -0
  54. package/dist/express.js.map +1 -0
  55. package/dist/fastify.d.ts +44 -0
  56. package/dist/fastify.js +47 -0
  57. package/dist/fastify.js.map +1 -0
  58. package/dist/hono.d.ts +26 -0
  59. package/dist/hono.js +10 -0
  60. package/dist/hono.js.map +1 -0
  61. package/dist/index.d.ts +20 -6
  62. package/dist/index.js +7 -3
  63. package/dist/index.js.map +1 -1
  64. package/dist/jobs.d.ts +181 -0
  65. package/dist/jobs.js +391 -0
  66. package/dist/jobs.js.map +1 -0
  67. package/dist/logging.d.ts +23 -0
  68. package/dist/logging.js +87 -0
  69. package/dist/logging.js.map +1 -0
  70. package/dist/mcp.d.ts +4 -6
  71. package/dist/mcp.js +53 -38
  72. package/dist/mcp.js.map +1 -1
  73. package/dist/metrics.d.ts +48 -0
  74. package/dist/metrics.js +184 -0
  75. package/dist/metrics.js.map +1 -0
  76. package/dist/nestjs.d.ts +43 -0
  77. package/dist/nestjs.js +47 -0
  78. package/dist/nestjs.js.map +1 -0
  79. package/dist/openapi.d.ts +0 -1
  80. package/dist/openapi.js +7 -0
  81. package/dist/openapi.js.map +1 -1
  82. package/dist/rate-limit.d.ts +45 -0
  83. package/dist/rate-limit.js +93 -0
  84. package/dist/rate-limit.js.map +1 -0
  85. package/dist/redact.d.ts +19 -0
  86. package/dist/redact.js +150 -0
  87. package/dist/redact.js.map +1 -0
  88. package/dist/route.d.ts +24 -0
  89. package/dist/route.js.map +1 -1
  90. package/dist/schema.d.ts +10 -2
  91. package/dist/schema.js +13 -1
  92. package/dist/schema.js.map +1 -1
  93. package/dist/secure-headers.d.ts +8 -0
  94. package/dist/secure-headers.js +61 -0
  95. package/dist/secure-headers.js.map +1 -0
  96. package/dist/serve.d.ts +53 -1
  97. package/dist/serve.js +158 -59
  98. package/dist/serve.js.map +1 -1
  99. package/dist/trpc.d.ts +57 -0
  100. package/dist/trpc.js +142 -0
  101. package/dist/trpc.js.map +1 -0
  102. package/dist/tsed.d.ts +32 -0
  103. package/dist/tsed.js +13 -0
  104. package/dist/tsed.js.map +1 -0
  105. package/llms.txt +10 -4
  106. package/package.json +57 -3
  107. package/templates/app/AGENTS.md +14 -8
  108. package/templates/app/README.md +2 -0
  109. package/templates/app/_env.example +2 -0
  110. package/templates/app/package.json.tpl +1 -0
  111. package/templates/app/src/app.ts +15 -8
  112. package/templates/app/src/config.ts +17 -0
  113. package/templates/app/src/routes/notes.ts +1 -1
  114. package/templates/app/src/server.ts +13 -3
  115. package/templates/app/src/routes/health.ts +0 -3
@@ -0,0 +1,93 @@
1
+ import { InferloError } from "./errors.js";
2
+ const WINDOWS = { second: 1000, minute: 60_000, hour: 3_600_000, day: 86_400_000 };
3
+ export function windowMs(limit) {
4
+ return WINDOWS[limit.per];
5
+ }
6
+ /** Check a route's rateLimit option at startup. Raises IL6007. */
7
+ export function checkRateLimit(limit, where) {
8
+ const l = limit;
9
+ const problems = [];
10
+ if (typeof l !== "object" || l === null)
11
+ problems.push("it must be an object");
12
+ else {
13
+ if (!Number.isInteger(l.max) || l.max < 1)
14
+ problems.push("max must be a whole number of at least 1");
15
+ if (!Object.hasOwn(WINDOWS, l.per))
16
+ problems.push(`per must be one of ${Object.keys(WINDOWS).map((k) => `"${k}"`).join(", ")}`);
17
+ if (l.by !== undefined && l.by !== "user" && l.by !== "ip")
18
+ problems.push('by must be "user" or "ip"');
19
+ }
20
+ if (problems.length) {
21
+ throw new InferloError("IL6007", `Invalid rateLimit on ${where}: ${problems.join(", ")}.`, {
22
+ fix: 'Use rateLimit: { max: 10, per: "minute", by: "user" } (per: "second" | "minute" | "hour" | "day", by: "user" | "ip").',
23
+ });
24
+ }
25
+ }
26
+ export function memoryRateLimitStore(now = Date.now) {
27
+ const counts = new Map();
28
+ return {
29
+ async hit(key, ms) {
30
+ const time = now();
31
+ if (counts.size > 10_000)
32
+ for (const [k, v] of counts)
33
+ if (v.resetAt <= time)
34
+ counts.delete(k);
35
+ let entry = counts.get(key);
36
+ if (!entry || entry.resetAt <= time) {
37
+ entry = { count: 0, resetAt: time + ms };
38
+ counts.set(key, entry);
39
+ }
40
+ entry.count++;
41
+ return { count: entry.count, resetMs: entry.resetAt - time };
42
+ },
43
+ };
44
+ }
45
+ /** Counts in the inferlo_rate_limits table (created on first use), one row per key, updated atomically. */
46
+ export function databaseRateLimitStore(adapter) {
47
+ const sql = adapter.sql?.bind(adapter);
48
+ if (!sql) {
49
+ throw new InferloError("IL6008", `rateLimit store "database" needs a Postgres database, but the app uses the ${adapter.dialect} adapter.`, {
50
+ fix: 'Use postgres() from "@browserlessapi/inferlo/postgres" for createApp({ db }), or rateLimit: { store: "memory" }.',
51
+ });
52
+ }
53
+ let ready;
54
+ const create = () => sql('CREATE TABLE IF NOT EXISTS "inferlo_rate_limits" ("key" text PRIMARY KEY, "count" integer NOT NULL, "reset_at" timestamptz NOT NULL)').catch(
55
+ // Two instances creating the table at the same moment: the other one won.
56
+ () => sql('SELECT 1 FROM "inferlo_rate_limits" LIMIT 1'));
57
+ return {
58
+ async hit(key, ms) {
59
+ ready ??= create().catch((error) => {
60
+ ready = undefined;
61
+ throw error;
62
+ });
63
+ await ready;
64
+ const rows = await sql(`INSERT INTO "inferlo_rate_limits" AS r ("key", "count", "reset_at") VALUES ($1, 1, now() + $2 * interval '1 millisecond')
65
+ ON CONFLICT ("key") DO UPDATE SET
66
+ "count" = CASE WHEN r."reset_at" <= now() THEN 1 ELSE r."count" + 1 END,
67
+ "reset_at" = CASE WHEN r."reset_at" <= now() THEN EXCLUDED."reset_at" ELSE r."reset_at" END
68
+ RETURNING "count", ceil(extract(epoch from ("reset_at" - now())) * 1000)::bigint AS "reset_ms"`, [key, ms]);
69
+ const row = rows[0];
70
+ return { count: Number(row.count), resetMs: Math.max(0, Number(row.reset_ms ?? row.resetMs ?? 0)) };
71
+ },
72
+ };
73
+ }
74
+ /** Headers for a limited route, and the IL2005 error once the limit is passed. */
75
+ export function rateLimitResult(limit, hit) {
76
+ const reset = Math.max(1, Math.ceil(hit.resetMs / 1000));
77
+ const headers = {
78
+ "ratelimit-limit": String(limit.max),
79
+ "ratelimit-remaining": String(Math.max(0, limit.max - hit.count)),
80
+ "ratelimit-reset": String(reset),
81
+ };
82
+ if (hit.count <= limit.max)
83
+ return { headers };
84
+ headers["retry-after"] = String(reset);
85
+ return {
86
+ headers,
87
+ error: new InferloError("IL2005", `Too many requests. Try again in ${reset} second${reset === 1 ? "" : "s"}.`, {
88
+ status: 429,
89
+ fix: `This route allows ${limit.max} request${limit.max === 1 ? "" : "s"} per ${limit.per}. Wait for the Retry-After header's seconds before retrying.`,
90
+ }),
91
+ };
92
+ }
93
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare const REDACTED = "[redacted]";
2
+ /** Internal: remember the secret values an object holds (a config() result or an AI provider). */
3
+ export declare function holdSecrets<T extends object>(owner: T, values: readonly (string | undefined | null)[]): T;
4
+ export declare function secretsOf(owner: unknown): readonly string[];
5
+ export interface Redactor {
6
+ text(value: string): string;
7
+ value(value: unknown): unknown;
8
+ }
9
+ export declare function createRedactor(secretValues: readonly string[]): Redactor;
10
+ export interface LoggerLike {
11
+ info(message: string, data?: unknown, fields?: Record<string, string | number | boolean | undefined>): void;
12
+ error(message: string, data?: unknown, fields?: Record<string, string | number | boolean | undefined>): void;
13
+ }
14
+ /** A logger that redacts every message, data value and field before passing them on. */
15
+ export declare function redactingLogger(logger: LoggerLike, redactor: Redactor): LoggerLike;
16
+ /** The values of createApp({ redact }): strings, or objects that hold secrets (config() results). */
17
+ export declare function redactValues(option: unknown): string[];
18
+ /** Internal: remember a config() result and its secret values, for createApp({ redact: [settings] }). */
19
+ export declare function holdConfigSecrets<T extends object>(settings: T, values: readonly unknown[]): T;
package/dist/redact.js ADDED
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Secret redaction for everything createApp logs (and the error messages exposeErrors shows): credentials in
3
+ * headers, tokens, API keys, passwords in URLs, the app's AI provider keys and the values passed to
4
+ * createApp({ redact }). Internal: createApp wraps its logger with redactingLogger().
5
+ */
6
+ import { InferloError } from "./errors.js";
7
+ export const REDACTED = "[redacted]";
8
+ /** Secret values of objects that hold them (config() results, AI providers), looked up by createApp. */
9
+ const heldSecrets = new WeakMap();
10
+ /** Internal: remember the secret values an object holds (a config() result or an AI provider). */
11
+ export function holdSecrets(owner, values) {
12
+ const list = values.filter((v) => typeof v === "string" && v.length > 0);
13
+ if (list.length)
14
+ heldSecrets.set(owner, [...(heldSecrets.get(owner) ?? []), ...list]);
15
+ return owner;
16
+ }
17
+ export function secretsOf(owner) {
18
+ return owner && typeof owner === "object" ? (heldSecrets.get(owner) ?? []) : [];
19
+ }
20
+ const SENSITIVE_KEY = /^(authorization|proxy-authorization|cookie|set-cookie|x-api-key|api[-_]?key|apikey|password|passwd|secret|client[-_]?secret|token|access[-_]?token|refresh[-_]?token|id[-_]?token|private[-_]?key|session)$/i;
21
+ const PATTERNS = [
22
+ // Header-like "name: value" or "name=value" pairs, also inside JSON text. Cookies run to the end of the value.
23
+ [/\b(cookie|set-cookie)(["']?\s*[:=]\s*["']?)(?!\[redacted\])[^"'\r\n]+/gi, `$1$2${REDACTED}`],
24
+ [
25
+ /\b(authorization|proxy-authorization|x-api-key|api-key)(["']?\s*[:=]\s*["']?)(?:(Bearer|Basic|Token)\s+)?(?!\[redacted\]|(?:Bearer|Basic|Token)\s)[^\s"',;]+/gi,
26
+ (_match, name, separator, scheme) => `${name}${separator}${scheme ? `${scheme} ` : ""}${REDACTED}`,
27
+ ],
28
+ // Bearer <token> and Basic <credentials> anywhere else
29
+ [/\b(Bearer|Basic)\s+[A-Za-z0-9._~+/=-]{4,}/g, `$1 ${REDACTED}`],
30
+ // Passwords in connection strings and URLs: postgres://user:password@host
31
+ [/\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]*:)[^\s@/]+@/gi, `$1${REDACTED}@`],
32
+ // Secrets in query strings: ?key=..., &access_token=...
33
+ [/([?&](?:key|api_key|apikey|access_token|token|secret|password|signature|sig)=)[^&\s"'#]+/gi, `$1${REDACTED}`],
34
+ // Well-known API key formats: OpenAI and Anthropic (sk-...), Google (AIza...), GitHub tokens.
35
+ [/\bsk-[A-Za-z0-9_-]{16,}/g, REDACTED],
36
+ [/\bAIza[0-9A-Za-z_-]{30,}/g, REDACTED],
37
+ [/\bgh[pousr]_[A-Za-z0-9]{30,}/g, REDACTED],
38
+ ];
39
+ export function createRedactor(secretValues) {
40
+ // Longest first, so a secret that contains another is replaced whole. Very short values would hide normal text.
41
+ const known = [...new Set(secretValues.filter((v) => v.length >= 6))].sort((a, b) => b.length - a.length);
42
+ const text = (input) => {
43
+ let out = input;
44
+ for (const secret of known)
45
+ if (out.includes(secret))
46
+ out = out.split(secret).join(REDACTED);
47
+ for (const [pattern, replacement] of PATTERNS)
48
+ out = out.replace(pattern, replacement);
49
+ return out;
50
+ };
51
+ const value = (input, depth = 0, seen = new WeakMap()) => {
52
+ if (typeof input === "string")
53
+ return text(input);
54
+ if (!input || typeof input !== "object")
55
+ return input;
56
+ if (seen.has(input))
57
+ return seen.get(input);
58
+ if (depth > 8)
59
+ return input;
60
+ if (input instanceof Error) {
61
+ const copy = Object.create(Object.getPrototypeOf(input));
62
+ seen.set(input, copy);
63
+ Object.defineProperty(copy, "message", { value: text(input.message), writable: true, configurable: true });
64
+ if (input.stack !== undefined)
65
+ Object.defineProperty(copy, "stack", { value: text(input.stack), writable: true, configurable: true });
66
+ if (input.name !== Object.getPrototypeOf(input)?.name)
67
+ Object.defineProperty(copy, "name", { value: input.name, writable: true, configurable: true });
68
+ for (const key of Object.keys(input))
69
+ copy[key] = redactEntry(key, input[key], depth, seen);
70
+ if ("cause" in input)
71
+ Object.defineProperty(copy, "cause", { value: value(input.cause, depth + 1, seen), writable: true, configurable: true });
72
+ return copy;
73
+ }
74
+ if (typeof Headers !== "undefined" && input instanceof Headers) {
75
+ const out = {};
76
+ seen.set(input, out);
77
+ input.forEach((v, k) => (out[k] = redactEntry(k, v, depth, seen)));
78
+ return out;
79
+ }
80
+ if (Array.isArray(input)) {
81
+ const out = [];
82
+ seen.set(input, out);
83
+ for (const item of input)
84
+ out.push(value(item, depth + 1, seen));
85
+ return out;
86
+ }
87
+ const proto = Object.getPrototypeOf(input);
88
+ if (proto !== Object.prototype && proto !== null)
89
+ return input;
90
+ const out = {};
91
+ seen.set(input, out);
92
+ for (const [k, v] of Object.entries(input))
93
+ out[k] = redactEntry(k, v, depth, seen);
94
+ return out;
95
+ };
96
+ const redactEntry = (key, entry, depth, seen) => {
97
+ if (SENSITIVE_KEY.test(key) && entry !== undefined && entry !== null && entry !== "")
98
+ return REDACTED;
99
+ return value(entry, depth + 1, seen);
100
+ };
101
+ return { text, value: (input) => value(input) };
102
+ }
103
+ /** A logger that redacts every message, data value and field before passing them on. */
104
+ export function redactingLogger(logger, redactor) {
105
+ const pass = (level, message, data, fields) => {
106
+ const text = redactor.text(String(message));
107
+ if (fields !== undefined) {
108
+ const clean = {};
109
+ for (const [key, value] of Object.entries(fields))
110
+ clean[key] = typeof value === "string" ? redactor.text(value) : value;
111
+ return logger[level](text, data === undefined ? undefined : redactor.value(data), clean);
112
+ }
113
+ return data === undefined ? logger[level](text) : logger[level](text, redactor.value(data));
114
+ };
115
+ return {
116
+ info: (message, data, fields) => pass("info", message, data, fields),
117
+ error: (message, data, fields) => pass("error", message, data, fields),
118
+ };
119
+ }
120
+ /** The values of createApp({ redact }): strings, or objects that hold secrets (config() results). */
121
+ export function redactValues(option) {
122
+ if (option === undefined)
123
+ return [];
124
+ if (!Array.isArray(option))
125
+ throw invalidRedact(`createApp({ redact }) must be an array, got ${typeof option}.`);
126
+ const out = [];
127
+ option.forEach((item, i) => {
128
+ if (item === undefined || item === null || item === "")
129
+ return; // an unset optional variable
130
+ if (typeof item === "string")
131
+ out.push(item);
132
+ else if (typeof item === "object" && configs.has(item))
133
+ out.push(...secretsOf(item));
134
+ else
135
+ throw invalidRedact(`createApp({ redact }) item ${i} is ${typeof item === "object" ? "an object that is not a config() result" : `a ${typeof item}`}.`);
136
+ });
137
+ return out;
138
+ }
139
+ const configs = new WeakSet();
140
+ /** Internal: remember a config() result and its secret values, for createApp({ redact: [settings] }). */
141
+ export function holdConfigSecrets(settings, values) {
142
+ configs.add(settings);
143
+ return holdSecrets(settings, values.map((v) => (v === undefined || v === null ? undefined : String(v))));
144
+ }
145
+ function invalidRedact(message) {
146
+ return new InferloError("IL6018", message, {
147
+ fix: "Pass the values to hide from logs, or your config() result: createApp({ redact: [settings, process.env.WEBHOOK_SECRET] }).",
148
+ });
149
+ }
150
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"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"}
package/dist/route.d.ts CHANGED
@@ -8,9 +8,12 @@
8
8
  *
9
9
  * Secure by default: routes require a signed-in user unless you set auth: "public".
10
10
  */
11
+ import type { Deprecation } from "./deprecation.ts";
11
12
  import type { AI } from "./ai/index.ts";
12
13
  import type { Db } from "./db/table.ts";
14
+ import type { Jobs } from "./jobs.ts";
13
15
  import type { AnyModel } from "./model.ts";
16
+ import type { RateLimit } from "./rate-limit.ts";
14
17
  import type { AnySchema, Infer, ObjectSchema } from "./schema.ts";
15
18
  /**
16
19
  * Register your app's models and user type once, so every handler is fully typed:
@@ -56,6 +59,18 @@ export interface RouteOptions<B extends AnySchema | undefined, Q extends ObjectS
56
59
  tags?: string[];
57
60
  /** Expose this route as an MCP tool for AI agents. Same auth rules apply. */
58
61
  tool?: boolean | ToolOptions;
62
+ /** Limit requests per user or IP: { max: 10, per: "minute", by: "user" }. More raise IL2005 (HTTP 429). */
63
+ rateLimit?: RateLimit;
64
+ /**
65
+ * Longest time in milliseconds this route may take (reading the body and running the handler) before it
66
+ * answers 503 IL2007 and ctx.signal is aborted. Overrides createApp({ requestTimeoutMs }); false turns it off.
67
+ */
68
+ timeoutMs?: number | false;
69
+ /**
70
+ * Mark the route deprecated: true, or { since, sunset, link } to also send the Deprecation, Sunset and
71
+ * Link rel="deprecation" headers on every response. Shown in OpenAPI, describe and MCP tool descriptions.
72
+ */
73
+ deprecated?: boolean | Deprecation;
59
74
  }
60
75
  type PathParams<P extends string> = P extends `${string}:${infer Param}/${infer Rest}` ? {
61
76
  [K in Param | keyof PathParams<`/${Rest}`>]: string;
@@ -71,6 +86,8 @@ export interface Context<Body, Query, Params, User> {
71
86
  user: User;
72
87
  db: AppDb;
73
88
  ai: AI;
89
+ /** Queue background jobs: await jobs.enqueue(sendEmail, { to }). */
90
+ jobs: Jobs;
74
91
  req: Request;
75
92
  url: URL;
76
93
  headers: Headers;
@@ -80,6 +97,13 @@ export interface Context<Body, Query, Params, User> {
80
97
  header(name: string, value: string): void;
81
98
  /** Values shared by middleware for this request. */
82
99
  state: Record<string, unknown>;
100
+ /**
101
+ * Aborted when the request times out (requestTimeoutMs or the route's timeoutMs) or the client disconnects.
102
+ * ctx.ai calls use it automatically; pass it to fetch and other slow work: fetch(url, { signal }).
103
+ */
104
+ signal: AbortSignal;
105
+ /** This request's id: sent back in the X-Request-Id header and added to the request's log entries. */
106
+ requestId: string;
83
107
  /** Run work after the response is sent (logging, webhooks). Errors are logged, not thrown. */
84
108
  waitUntil(promise: Promise<unknown>): void;
85
109
  }
package/dist/route.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAuGA,MAAM,OAAO,YAAY;IACd,MAAM,CAAS;IACf,IAAI,CAAO;IACX,OAAO,CAAwB;IAExC,YAAY,MAAc,EAAE,IAAU,EAAE,OAA8B;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,qFAAqF;IACrF,MAAM,CACJ,OAQC;QAED,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAuC,EAE5I,CAAC;IACJ,CAAC;CACF;AAED,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,CAOL,IAAU,EACV,UAAgD,EAAE,EAClD,EAAE,CAAC,IAAI,YAAY,CAAmB,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;CAC1B,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAAkB,CAAC,IAAI,KAAK,eAAe,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AA+HA,MAAM,OAAO,YAAY;IACd,MAAM,CAAS;IACf,IAAI,CAAO;IACX,OAAO,CAAwB;IAExC,YAAY,MAAc,EAAE,IAAU,EAAE,OAA8B;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,qFAAqF;IACrF,MAAM,CACJ,OAQC;QAED,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAuC,EAE5I,CAAC;IACJ,CAAC;CACF;AAED,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,CAOL,IAAU,EACV,UAAgD,EAAE,EAClD,EAAE,CAAC,IAAI,YAAY,CAAmB,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;CAC1B,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAAkB,CAAC,IAAI,KAAK,eAAe,CAAC;AACrG,CAAC"}
package/dist/schema.d.ts CHANGED
@@ -125,6 +125,14 @@ export declare class ObjectSchema<S extends Shape> extends Schema<ShapeOutput<S>
125
125
  export declare class ArraySchema<I extends AnySchema> extends Schema<Infer<I>[], InferInput<I>[]> {
126
126
  get item(): I;
127
127
  }
128
+ /** t.ref("users"): the id of a row in another table. The table name is kept in the type for include. */
129
+ export declare class RefSchema<Table extends string, Out = string, In = Out> extends Schema<Out, In> {
130
+ /** Type-only marker: the referenced table. */
131
+ readonly _ref: Table;
132
+ optional(): RefSchema<Table, Out | undefined, In | undefined>;
133
+ nullable(): RefSchema<Table, Out | null, In | null>;
134
+ default(value: Exclude<Out, undefined> | (() => Exclude<Out, undefined>)): RefSchema<Table, Exclude<Out, undefined>, In | undefined>;
135
+ }
128
136
  export declare const t: {
129
137
  /** Short text. Stored as text (or varchar(max) when .max() is set). */
130
138
  string: () => Schema<string, string>;
@@ -147,9 +155,9 @@ export declare const t: {
147
155
  array: <I extends AnySchema>(item: I) => ArraySchema<I>;
148
156
  object: <S extends Shape>(shape: S) => ObjectSchema<S>;
149
157
  /** Id of a row in another model's table: t.ref("users"). */
150
- ref: (table: string, options?: {
158
+ ref: <const Table extends string>(table: Table, options?: {
151
159
  onDelete?: "restrict" | "cascade" | "set null";
152
- }) => Schema<string, string>;
160
+ }) => RefSchema<Table, string, string>;
153
161
  any: () => Schema<unknown, unknown>;
154
162
  };
155
163
  export declare function toJSONSchema(schema: AnySchema): JSONSchema;
package/dist/schema.js CHANGED
@@ -137,6 +137,18 @@ export class ArraySchema extends Schema {
137
137
  return this.def.item;
138
138
  }
139
139
  }
140
+ /** t.ref("users"): the id of a row in another table. The table name is kept in the type for include. */
141
+ export class RefSchema extends Schema {
142
+ optional() {
143
+ return this.with({ optional: true });
144
+ }
145
+ nullable() {
146
+ return this.with({ nullable: true });
147
+ }
148
+ default(value) {
149
+ return this.with({ hasDefault: true, defaultValue: value, optional: false });
150
+ }
151
+ }
140
152
  // ---------------------------------------------------------------------------------------------
141
153
  // Builders
142
154
  // ---------------------------------------------------------------------------------------------
@@ -165,7 +177,7 @@ export const t = {
165
177
  array: (item) => new ArraySchema(base("array", { item })),
166
178
  object: (shape) => new ObjectSchema(base("object", { shape, unknownKeys: "strict" })),
167
179
  /** Id of a row in another model's table: t.ref("users"). */
168
- ref: (table, options = {}) => new Schema(base("ref", { refTable: table, onDelete: options.onDelete ?? "restrict" })),
180
+ ref: (table, options = {}) => new RefSchema(base("ref", { refTable: table, onDelete: options.onDelete ?? "restrict" })),
169
181
  any: () => new Schema(base("any", { optional: true })),
170
182
  };
171
183
  // ---------------------------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** Header name to value; false leaves the header out. Names are case-insensitive. */
2
+ export type SecureHeadersConfig = Record<string, string | false>;
3
+ /** Sent on every response by default. Strict-Transport-Security is sent only over HTTPS. */
4
+ export declare const DEFAULT_SECURE_HEADERS: Readonly<Record<string, string>>;
5
+ /** The headers to send (lowercase names), from createApp({ secureHeaders }). */
6
+ export declare function resolveSecureHeaders(option: boolean | SecureHeadersConfig | undefined): [string, string][];
7
+ /** Add the headers the response does not set itself. Strict-Transport-Security only when the request came over HTTPS. */
8
+ export declare function applySecureHeaders(response: Response, headers: [string, string][], https: boolean): Response;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Secure response headers, sent on every response unless the response already has the header:
3
+ *
4
+ * createApp({ secureHeaders: { "X-Frame-Options": "SAMEORIGIN", "Content-Security-Policy": false } })
5
+ * createApp({ secureHeaders: false }) // none of them
6
+ */
7
+ import { InferloError } from "./errors.js";
8
+ /** Sent on every response by default. Strict-Transport-Security is sent only over HTTPS. */
9
+ export const DEFAULT_SECURE_HEADERS = Object.freeze({
10
+ "content-security-policy": "default-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; object-src 'none'",
11
+ "cross-origin-opener-policy": "same-origin",
12
+ "cross-origin-resource-policy": "same-origin",
13
+ "referrer-policy": "no-referrer",
14
+ "strict-transport-security": "max-age=31536000; includeSubDomains",
15
+ "x-content-type-options": "nosniff",
16
+ "x-frame-options": "DENY",
17
+ });
18
+ const HSTS = "strict-transport-security";
19
+ const TOKEN = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
20
+ /** The headers to send (lowercase names), from createApp({ secureHeaders }). */
21
+ export function resolveSecureHeaders(option) {
22
+ if (option === false)
23
+ return [];
24
+ const fix = 'Use createApp({ secureHeaders: { "X-Frame-Options": "SAMEORIGIN", "Content-Security-Policy": false } }), or secureHeaders: false to send none.';
25
+ if (option !== undefined && option !== true && (typeof option !== "object" || option === null || Array.isArray(option))) {
26
+ throw new InferloError("IL6016", `secureHeaders must be true, false or an object of header names, got ${JSON.stringify(option)}.`, { fix });
27
+ }
28
+ const headers = new Map(Object.entries(DEFAULT_SECURE_HEADERS));
29
+ for (const [name, value] of Object.entries(typeof option === "object" ? option : {})) {
30
+ if (!TOKEN.test(name))
31
+ throw new InferloError("IL6016", `secureHeaders: "${name}" is not a valid header name.`, { fix });
32
+ if (value === false) {
33
+ headers.delete(name.toLowerCase());
34
+ continue;
35
+ }
36
+ if (typeof value !== "string" || /[\r\n\0]/.test(value)) {
37
+ throw new InferloError("IL6016", `secureHeaders["${name}"] must be a string (without line breaks) or false, got ${JSON.stringify(value)}.`, { fix });
38
+ }
39
+ headers.set(name.toLowerCase(), value);
40
+ }
41
+ return [...headers];
42
+ }
43
+ /** Add the headers the response does not set itself. Strict-Transport-Security only when the request came over HTTPS. */
44
+ export function applySecureHeaders(response, headers, https) {
45
+ const missing = headers.filter(([name]) => (name !== HSTS || https) && !response.headers.has(name));
46
+ if (!missing.length)
47
+ return response;
48
+ try {
49
+ for (const [name, value] of missing)
50
+ response.headers.set(name, value);
51
+ return response;
52
+ }
53
+ catch {
54
+ // Immutable headers (Response.redirect, a fetch() response passed through): copy the response.
55
+ const copy = new Response(response.body, response);
56
+ for (const [name, value] of missing)
57
+ copy.headers.set(name, value);
58
+ return copy;
59
+ }
60
+ }
61
+ //# sourceMappingURL=secure-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-headers.js","sourceRoot":"","sources":["../src/secure-headers.ts"],"names":[],"mappings":"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"}
package/dist/serve.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /** Start an HTTP server on Bun, Deno or Node using the app's fetch handler. */
2
1
  import type { App } from "./app.ts";
3
2
  export interface ServeOptions {
4
3
  port?: number;
@@ -8,4 +7,57 @@ export interface Server {
8
7
  port: number;
9
8
  close(): Promise<void>;
10
9
  }
10
+ /**
11
+ * The parts of a Node.js http.IncomingMessage that Inferlo reads. Express, Fastify (request.raw),
12
+ * NestJS, Koa (ctx.req) and plain node:http requests all have this shape.
13
+ */
14
+ export interface NodeRequest {
15
+ method?: string;
16
+ url?: string;
17
+ headers: Record<string, string | string[] | undefined>;
18
+ socket?: {
19
+ remoteAddress?: string;
20
+ encrypted?: boolean;
21
+ } | null;
22
+ /** A body the host framework already read (express.json(), body-parser). Used instead of the stream. */
23
+ body?: unknown;
24
+ [Symbol.asyncIterator](): AsyncIterator<unknown>;
25
+ }
26
+ /** The parts of a Node.js http.ServerResponse that Inferlo writes to. */
27
+ export interface NodeResponse {
28
+ readonly headersSent: boolean;
29
+ readonly writableFinished?: boolean;
30
+ writeHead(status: number, headers: Record<string, string | string[]>): unknown;
31
+ write(chunk: Uint8Array): boolean;
32
+ end(chunk?: string): unknown;
33
+ once(event: "drain", listener: () => void): unknown;
34
+ on(event: "close", listener: () => void): unknown;
35
+ }
36
+ export interface NodeHandlerOptions {
37
+ /**
38
+ * Path the app is mounted under, for example "/ai". It is removed from the URL before routing, so
39
+ * GET /ai/tickets matches route.get("/tickets"). Requests outside it go to next() (or get a 404).
40
+ * Leave it out when the host framework already strips the mount path (Express app.use("/ai", ...)).
41
+ */
42
+ prefix?: string;
43
+ }
44
+ export interface FromNodeRequestOptions extends NodeHandlerOptions {
45
+ /** Aborts the request (for example when the client disconnects). */
46
+ signal?: AbortSignal;
47
+ }
48
+ export type NodeHandler = (req: NodeRequest, res: NodeResponse, next?: (error?: unknown) => void) => Promise<void>;
49
+ /**
50
+ * Convert a Node.js request (node:http, Express, Fastify's request.raw, NestJS) to a Web Request.
51
+ * With prefix, the prefix is removed from the path; a request outside it keeps its path.
52
+ */
53
+ export declare function fromNodeRequest(req: NodeRequest, options?: FromNodeRequestOptions): Request;
54
+ /** Write a Web Response (status, headers with every Set-Cookie, streamed body) to a Node response. */
55
+ export declare function writeResponse(res: NodeResponse, response: Response, method: string): Promise<void>;
56
+ /**
57
+ * A (req, res, next) handler that runs a whole Inferlo app (routes, OpenAPI, MCP) inside node:http,
58
+ * Express, Fastify, NestJS or any framework that hands out Node requests and responses.
59
+ */
60
+ export declare function toNodeHandler(app: Pick<App<any>, "fetch">, options?: NodeHandlerOptions): NodeHandler;
11
61
  export declare function serve(app: Pick<App<any>, "fetch">, options?: ServeOptions): Promise<Server>;
62
+ /** Closes every open connection of a Node server from serve(), for app.close() after its timeout. */
63
+ export declare const forceClosers: WeakMap<Server, () => void>;