@askdb/http-api 1.0.0-beta.43 → 1.0.0-beta.45

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/README.md CHANGED
@@ -28,11 +28,15 @@ Dev watch (runs with `apps/http-api` as the working directory):
28
28
  pnpm -C apps/http-api dev:watch
29
29
  ```
30
30
 
31
- Set `ASKDB_SCHEMA_PATH` in the repo-root `.env` (recommended). The binary also loads `askdb.config.*` / `.config/askdb.*` from the current working directory via [`@askdb/config`](https://www.npmjs.com/package/@askdb/config) after resolving `.env` candidates (repo root, cwd, package dir).
31
+ Point the server at a schema with `--schema-path` or `host.schemaPath` in `askdb.config.ts`. The binary loads `askdb.config.*` / `.config/askdb.*` from the current working directory via [`@askdb/config`](https://www.npmjs.com/package/@askdb/config) after resolving `.env` candidates (repo root, cwd, package dir). Shell / `.env` variables only take effect when the config maps them with `env(...)`:
32
+
33
+ ```ts
34
+ // askdb.config.ts
35
+ host: { schemaPath: env("ASKDB_SCHEMA_PATH") },
36
+ ```
32
37
 
33
38
  ```bash
34
- # in ../../.env (repo root):
35
- # ASKDB_SCHEMA_PATH=fixtures/schemas/orders-users.schema.json
39
+ node apps/http-api/dist/bin.js --schema-path fixtures/schemas/orders-users.schema
36
40
  ```
37
41
 
38
42
  Health check:
@@ -41,6 +45,17 @@ Health check:
41
45
  curl -sS http://127.0.0.1:3000/health
42
46
  ```
43
47
 
48
+ ## Embed in your own process
49
+
50
+ ```ts
51
+ import { createAskDbHttpServer } from "@askdb/http-api";
52
+
53
+ const server = createAskDbHttpServer({ port: 3000 });
54
+ await server.listen();
55
+ ```
56
+
57
+ `createAskDbHttpServer()` uses the config your process already loaded with `bootstrapAskDbEnv()` from `@askdb/config`. If there is none, it loads `.env` and `askdb.config.*` from the working directory, and throws when it finds no config. Omitted `port` and `host` options fall back to `httpApi.listen.*`. See the [HTTP API reference](https://askdb.tools/reference/http-api/).
58
+
44
59
  ## Ask (curl)
45
60
 
46
61
  ```bash
@@ -58,10 +73,12 @@ JSON
58
73
  Notes:
59
74
 
60
75
  - **Correlation**: if you omit `x-correlation-id`, the server generates one and returns it.
61
- - **Mode**: optional `x-askdb-mode` header (body `mode` wins if present).
76
+ - **Mode**: optional `x-askdb-mode` header (body `mode` wins if present). A request mode can only tighten config `modes.askdbMode` (default `schema_only`), never loosen it.
62
77
  - **Execution**: not supported. Retired execution controls return `400`; review generated SQL and run any approved query outside AskDB under your own database roles, read-only controls, tenant policy, and audit logging.
63
- - **Generation config**: set `OPENAI_API_KEY` (or for tests/dev, set `ASKDB_MOCK_SQL` to bypass live model calls).
64
- - **Schema config (recommended)**: set `ASKDB_SCHEMA_PATH` to an AskDB Schema v2 directory, bundled JSON file, or `schema.json`. You *can* also send `schemaJson` per request as an override, but it doesn’t scale.
78
+ - **Generation config**: set `ai.provider` / `ai.providerConfig` in `askdb.config.ts` (for tests/dev, set `dev.mockSql` to bypass live model calls). The server does not read `ASKDB_MOCK_SQL` from the shell; map it in the config with `dev: { mockSql: env("ASKDB_MOCK_SQL") }` if you want that.
79
+ - **Schema config (recommended)**: set `host.schemaPath` in `askdb.config.ts` (or pass `--schema-path`) to an AskDB Schema v2 directory, bundled JSON file, or `schema.json`. Per-request `schemaJson` overrides are rejected with `403 schema_override_disabled` unless you set `httpApi.allowSchemaOverride: true`.
80
+ - **Timeouts**: the model call is aborted after `httpApi.requestTimeoutMs` (default `60000`, at most `2147483647`) and the request returns `502 sql_generation_error`.
81
+ - **Errors**: status codes come from the error type. Model-provider failures return a generic `502`, and unexpected failures return a generic `500`. Every non-`2xx` `POST /ask` response is logged as `askdb.run.error` under the response's `correlationId`, with the full error for failures inside `ask()`, except last-resort `500`s (an error that escapes the handler), which are written to stderr.
65
82
 
66
83
  ## Ask (Node)
67
84
 
package/dist/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { bootstrapAskDbEnv, getAskDbRuntimeConfig, } from "@askdb/config";
2
+ import { bootstrapAskDbEnv } from "@askdb/config";
3
3
  import { existsSync } from "node:fs";
4
4
  import { dirname, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
@@ -25,19 +25,53 @@ if (cliOptions.help) {
25
25
  const pkgEnv = resolve(here, "../.env");
26
26
  // Prefer repo root `.env`, but be resilient to different working directories.
27
27
  const candidates = [repoRootEnv, cwdEnv, pkgEnv].filter((p) => existsSync(p));
28
- bootstrapAskDbEnv({
29
- cwd: process.cwd(),
30
- dotenvCandidatePaths: candidates.length > 0 ? candidates : undefined,
28
+ try {
29
+ bootstrapAskDbEnv({
30
+ cwd: process.cwd(),
31
+ dotenvCandidatePaths: candidates.length > 0 ? candidates : undefined,
32
+ });
33
+ }
34
+ catch (error) {
35
+ process.stderr.write(`askdb-http: ${formatError(error)}\n`);
36
+ process.exit(1);
37
+ }
38
+ }
39
+ // The server reuses the runtime installed above and falls back to `httpApi.listen.*` for
40
+ // an omitted flag. Defensive: bootstrap installs only flattened, already-validated values (an
41
+ // invalid `httpApi.requestTimeoutMs` fails above), so building the server is not expected to throw.
42
+ let app;
43
+ try {
44
+ app = createAskDbHttpServer({
45
+ port: cliOptions.port,
46
+ host: cliOptions.host,
47
+ schemaPath: cliOptions.schemaPath,
31
48
  });
32
49
  }
33
- const { httpApi } = getAskDbRuntimeConfig();
34
- const app = createAskDbHttpServer({
35
- port: cliOptions.port ?? httpApi.listen.port,
36
- host: cliOptions.host ?? httpApi.listen.host,
37
- schemaPath: cliOptions.schemaPath,
38
- });
39
- await app.listen();
50
+ catch (error) {
51
+ process.stderr.write(`askdb-http: ${formatError(error)}\n`);
52
+ process.exit(1);
53
+ }
54
+ try {
55
+ await app.listen();
56
+ }
57
+ catch (error) {
58
+ process.stderr.write(`askdb-http: ${formatListenError(error, app.host, app.port)}\n`);
59
+ process.exit(1);
60
+ }
40
61
  console.log(`AskDB HTTP API listening on http://${app.host}:${app.port}`);
62
+ function formatListenError(error, host, port) {
63
+ const code = error?.code;
64
+ if (code === "EADDRINUSE") {
65
+ return `cannot listen on ${host}:${port} — address already in use. Pick another port with --port or httpApi.listen.port.`;
66
+ }
67
+ if (code === "EACCES") {
68
+ return `cannot listen on ${host}:${port} — permission denied. Use a port above 1023 or run with the required privileges.`;
69
+ }
70
+ if (code === "EADDRNOTAVAIL") {
71
+ return `cannot listen on ${host}:${port} — address not available on this machine. Check --host or httpApi.listen.host.`;
72
+ }
73
+ return `cannot listen on ${host}:${port} — ${formatError(error)}`;
74
+ }
41
75
  function parseOptions(argv) {
42
76
  const opts = {};
43
77
  for (let i = 0; i < argv.length; i += 1) {
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,14 +1,29 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { AskHttpErrorResponse } from "./types.js";
2
3
  export type AskDbHttpServerOptions = {
3
- /** Default: 3000 */
4
+ /** Port to listen on. Precedence: this option → `httpApi.listen.port` config → 3000. */
4
5
  port?: number;
5
- /** Default: 127.0.0.1 */
6
+ /** Bind address. Precedence: this option → `httpApi.listen.host` config → 127.0.0.1. */
6
7
  host?: string;
7
8
  /** Server-default schema artifact path. Precedence: this option → `host.schemaPath` config → `ASKDB_SCHEMA_PATH` env. */
8
9
  schemaPath?: string;
9
10
  /** Default: 1 MiB */
10
11
  maxBodyBytes?: number;
11
12
  };
13
+ type MappedError = {
14
+ status: number;
15
+ error: AskHttpErrorResponse["error"];
16
+ };
17
+ /**
18
+ * Map an error from `askdb.ask()` to an HTTP status + client-safe body. Classification is by
19
+ * error type only. Messages from the model provider are never returned to the client (they
20
+ * can echo request details or credential fragments); unknown errors get a generic message.
21
+ */
22
+ /** @internal Exported for unit tests; not re-exported from the package entry point. */
23
+ export declare function mapAskError(e: unknown, ctx: {
24
+ timedOut: boolean;
25
+ timeoutMs: number;
26
+ }): MappedError;
12
27
  export declare function createAskDbHttpServer(options?: AskDbHttpServerOptions): {
13
28
  host: string;
14
29
  port: number;
@@ -16,4 +31,5 @@ export declare function createAskDbHttpServer(options?: AskDbHttpServerOptions):
16
31
  listen: () => Promise<void>;
17
32
  close: () => Promise<void>;
18
33
  };
34
+ export {};
19
35
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAgCjE,MAAM,MAAM,sBAAsB,GAAG;IACnC,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yHAAyH;IACzH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAiFF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B;;;;;;EAiMzE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAyBjE,OAAO,KAAK,EAAE,oBAAoB,EAA0C,MAAM,YAAY,CAAC;AAO/F,MAAM,MAAM,sBAAsB,GAAG;IACnC,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yHAAyH;IACzH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA+FF,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAa5E;;;;GAIG;AACH,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAgElG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B;;;;;;EAqNzE"}
package/dist/server.js CHANGED
@@ -1,14 +1,13 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { createServer as createNodeServer } from "node:http";
3
- import { getAskDbRuntimeConfig } from "@askdb/config";
3
+ import { bootstrapAskDbEnv, getAskDbRuntimeConfig, isAskDbRuntimeInitialized } from "@askdb/config";
4
4
  import { createAiRegistry, } from "@askdb/ai";
5
- import { anthropicProvider } from "@askdb/ai-anthropic";
6
- import { azureProvider } from "@askdb/ai-azure";
7
- import { googleProvider } from "@askdb/ai-google";
8
- import { openaiProvider } from "@askdb/ai-openai";
9
5
  import { createAskDb, DialectNotSupportedError, ModelNotConfiguredError, SchemaLoadError, SchemaNotConfiguredError, } from "@askdb/client";
10
- import { AskDbError, AskDbLogEvent, DEFAULT_ASKDB_MODE, SqlGenerationError, SqlValidationError, createAskDbLogger, parseAskDbModeV1, } from "@askdb/core";
11
- const ai = createAiRegistry([openaiProvider, azureProvider, googleProvider, anthropicProvider]);
6
+ import { ASKDB_MODES_V1, AskDbLogEvent, SensitiveReferenceError, SqlGenerationError, SqlValidationError, TenantGuardrailError, createAskDbLogger, parseAskDbModeV1, } from "@askdb/core";
7
+ // Batteries-included surface: every built-in provider is registered, and each
8
+ // loads its @ai-sdk/* package only when first used, so env config alone
9
+ // selects the provider.
10
+ const ai = createAiRegistry();
12
11
  const DEFAULT_MAX_BODY_BYTES = 1024 * 1024;
13
12
  class RequestBodyTooLargeError extends Error {
14
13
  limitBytes;
@@ -69,17 +68,116 @@ function getHeader(req, name) {
69
68
  return v[0];
70
69
  return undefined;
71
70
  }
72
- function badRequest(correlationId, message) {
73
- return { ok: false, correlationId, error: { code: "bad_request", message } };
71
+ function badRequest(message) {
72
+ return { code: "bad_request", message };
74
73
  }
75
- function modeFromHeader(v) {
76
- if (!v)
74
+ /**
75
+ * Resolve the caller-requested mode. Precedence: body `mode` → `x-askdb-mode` header.
76
+ * Returns `undefined` when the caller did not ask for one. The facade applies config
77
+ * `modes.askdbMode` (ADR 0025): a request mode can tighten it, never loosen it.
78
+ * Throws on an invalid value (→ `400`).
79
+ */
80
+ function resolveRequestMode(bodyMode, headerMode) {
81
+ if (bodyMode !== undefined && bodyMode !== null) {
82
+ if (typeof bodyMode !== "string" || bodyMode.trim() === "") {
83
+ throw new Error(`Invalid mode: ${JSON.stringify(bodyMode)}. Expected one of: ${ASKDB_MODES_V1.join(", ")}.`);
84
+ }
85
+ return parseAskDbModeV1(bodyMode);
86
+ }
87
+ if (headerMode !== undefined && headerMode.trim() !== "") {
88
+ return parseAskDbModeV1(headerMode);
89
+ }
90
+ return undefined;
91
+ }
92
+ /** `instanceof` with a `name` fallback, so duplicated package copies still classify correctly. */
93
+ function isErrorOf(e, ctor) {
94
+ return e instanceof ctor || (e instanceof Error && e.name === ctor.name);
95
+ }
96
+ function causeMessage(e) {
97
+ const cause = e instanceof Error ? e.cause : undefined;
98
+ if (cause === undefined)
77
99
  return undefined;
78
- return parseAskDbModeV1(v);
100
+ return cause instanceof Error ? cause.message : String(cause);
101
+ }
102
+ /**
103
+ * Map an error from `askdb.ask()` to an HTTP status + client-safe body. Classification is by
104
+ * error type only. Messages from the model provider are never returned to the client (they
105
+ * can echo request details or credential fragments); unknown errors get a generic message.
106
+ */
107
+ /** @internal Exported for unit tests; not re-exported from the package entry point. */
108
+ export function mapAskError(e, ctx) {
109
+ if (isErrorOf(e, SqlGenerationError)) {
110
+ return {
111
+ status: 502,
112
+ error: {
113
+ code: "sql_generation_error",
114
+ message: ctx.timedOut
115
+ ? `Model provider request timed out after ${ctx.timeoutMs} ms.`
116
+ : "Model provider request failed. See server logs for this correlationId.",
117
+ },
118
+ };
119
+ }
120
+ if (isErrorOf(e, SqlValidationError)) {
121
+ return { status: 400, error: { code: "sql_validation_error", message: e.message, rule: e.rule } };
122
+ }
123
+ if (isErrorOf(e, SensitiveReferenceError)) {
124
+ return { status: 422, error: { code: "guardrail_violation", message: e.message, rule: e.rule } };
125
+ }
126
+ if (isErrorOf(e, TenantGuardrailError)) {
127
+ return {
128
+ status: 422,
129
+ error: {
130
+ code: "guardrail_violation",
131
+ message: e.message,
132
+ ...(e.warnings[0] ? { rule: e.warnings[0].rule } : {}),
133
+ },
134
+ };
135
+ }
136
+ if (isErrorOf(e, SchemaNotConfiguredError)) {
137
+ return {
138
+ status: 400,
139
+ error: {
140
+ code: "bad_request",
141
+ message: "No schema configured. Set host.schemaPath / host.schemaJson in askdb.config.* (or start askdb-http with --schema-path).",
142
+ },
143
+ };
144
+ }
145
+ if (isErrorOf(e, SchemaLoadError)) {
146
+ return {
147
+ status: 400,
148
+ error: {
149
+ code: "schema_parse_error",
150
+ message: `schema parse error (${e.source}): ${e.cause instanceof Error ? e.cause.message : String(e.cause)}`,
151
+ },
152
+ };
153
+ }
154
+ if (isErrorOf(e, ModelNotConfiguredError)) {
155
+ return {
156
+ status: 500,
157
+ error: {
158
+ code: "generation_not_configured",
159
+ message: "No AI model is configured on the server. Set ai.provider / ai.providerConfig in askdb.config.* (or dev.mockSql for tests).",
160
+ },
161
+ };
162
+ }
163
+ if (isErrorOf(e, DialectNotSupportedError)) {
164
+ return { status: 400, error: { code: "bad_request", message: e.message } };
165
+ }
166
+ return {
167
+ status: 500,
168
+ error: { code: "internal_error", message: "Internal server error. See server logs for this correlationId." },
169
+ };
79
170
  }
80
171
  export function createAskDbHttpServer(options = {}) {
81
- const host = options.host ?? "127.0.0.1";
82
- const port = options.port ?? 3000;
172
+ // A host that bootstrapped keeps its runtime. Otherwise load `.env` and askdb.config.* from
173
+ // the working directory, as the askdb-http binary does. A broken `.env` throws here rather
174
+ // than setting the host's `process.exitCode`.
175
+ if (!isAskDbRuntimeInitialized()) {
176
+ bootstrapAskDbEnv({ cwd: process.cwd(), dotenvNonFatal: false });
177
+ }
178
+ const { listen } = getAskDbRuntimeConfig().httpApi;
179
+ const host = options.host ?? listen.host;
180
+ const port = options.port ?? listen.port;
83
181
  const optionSchemaPath = options.schemaPath;
84
182
  const maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
85
183
  // The facade is constructed lazily on the first request so it captures the
@@ -87,10 +185,26 @@ export function createAskDbHttpServer(options = {}) {
87
185
  // process lifetime after bootstrap; the facade's internal cache handles
88
186
  // subsequent requests.
89
187
  let askdb;
90
- const server = createNodeServer(async (req, res) => {
188
+ const server = createNodeServer((req, res) => {
189
+ const correlationId = getCorrelationId(req);
190
+ handleRequest(req, res, correlationId).catch((e) => {
191
+ // Last-resort guard: anything that escapes the handler becomes a generic 500
192
+ // instead of an unhandled rejection that would take the process down.
193
+ process.stderr.write(`askdb-http: unhandled error (correlationId=${correlationId}): ${e instanceof Error ? (e.stack ?? e.message) : String(e)}\n`);
194
+ if (!res.headersSent) {
195
+ writeError(res, 500, correlationId, {
196
+ code: "internal_error",
197
+ message: "Internal server error. See server logs for this correlationId.",
198
+ });
199
+ }
200
+ else {
201
+ res.end();
202
+ }
203
+ });
204
+ });
205
+ async function handleRequest(req, res, correlationId) {
91
206
  const method = req.method ?? "GET";
92
207
  const url = req.url ?? "/";
93
- const correlationId = getCorrelationId(req);
94
208
  if (method === "GET" && url === "/health") {
95
209
  writeJson(res, 200, { ok: true });
96
210
  return;
@@ -106,62 +220,98 @@ export function createAskDbHttpServer(options = {}) {
106
220
  logFile: rt.logging.logFile,
107
221
  logStdout: rt.logging.logStdout,
108
222
  });
223
+ // Every non-2xx response from `POST /ask` is logged as `askdb.run.error` with its
224
+ // status and code. Requests rejected before the pipeline runs log the client message.
225
+ const reject = (status, error, errMessage = error.message) => {
226
+ logger.error({ event: AskDbLogEvent.RunError, status, code: error.code, errMessage }, "askdb http request rejected");
227
+ writeError(res, status, correlationId, error);
228
+ };
109
229
  let body;
110
230
  try {
111
231
  body = await readJsonBody(req, maxBodyBytes);
112
232
  }
113
233
  catch (e) {
114
- logger.error({ event: AskDbLogEvent.RunError, errMessage: e instanceof Error ? e.message : String(e) }, "invalid JSON body");
234
+ const errMessage = e instanceof Error ? e.message : String(e);
115
235
  if (e instanceof RequestBodyTooLargeError) {
116
- writeError(res, 413, correlationId, {
117
- code: "payload_too_large",
118
- message: `request body exceeds ${e.limitBytes} bytes`,
119
- });
236
+ reject(413, { code: "payload_too_large", message: `request body exceeds ${e.limitBytes} bytes` }, errMessage);
120
237
  return;
121
238
  }
122
- writeError(res, 400, correlationId, badRequest(correlationId, "invalid JSON body").error);
239
+ reject(400, badRequest("invalid JSON body"), errMessage);
123
240
  return;
124
241
  }
125
242
  if (!body || typeof body !== "object") {
126
- writeError(res, 400, correlationId, badRequest(correlationId, "request body must be an object").error);
243
+ reject(400, badRequest("request body must be an object"));
127
244
  return;
128
245
  }
129
246
  if (typeof body.question !== "string" || body.question.trim() === "") {
130
- writeError(res, 400, correlationId, badRequest(correlationId, "`question` is required").error);
247
+ reject(400, badRequest("`question` is required"));
248
+ return;
249
+ }
250
+ if ("execute" in body || getHeader(req, "x-askdb-execute") !== undefined) {
251
+ reject(400, badRequest("Execution is not supported. This endpoint returns generated SQL only."));
131
252
  return;
132
253
  }
254
+ // Validate caller-controlled inputs up front so parser failures are the only
255
+ // thing that can become a 400 here — never a substring match on a downstream error.
256
+ let requestedMode;
133
257
  try {
134
- // Mode may be supplied by request JSON or header; JSON wins.
135
- const headerMode = getHeader(req, "x-askdb-mode");
136
- const effectiveMode = body.mode ?? (headerMode ? modeFromHeader(headerMode) : undefined);
137
- const mode = effectiveMode ?? parseAskDbModeV1(rt.modes.askdbMode);
138
- if ("execute" in body || getHeader(req, "x-askdb-execute") !== undefined) {
139
- writeError(res, 400, correlationId, {
140
- code: "bad_request",
141
- message: "Execution is not supported. This endpoint returns generated SQL only.",
142
- });
258
+ requestedMode = resolveRequestMode(body.mode, getHeader(req, "x-askdb-mode"));
259
+ }
260
+ catch (e) {
261
+ reject(400, badRequest(e instanceof Error ? e.message : String(e)));
262
+ return;
263
+ }
264
+ // Strictly boolean (`null` counts as absent): `Boolean(...)` used to read a string or
265
+ // number as `true`, and ignoring one would silently send sensitive identifiers to the model.
266
+ for (const field of ["omitSensitiveFromPrompt", "explain"]) {
267
+ const value = body[field];
268
+ if (value !== undefined && value !== null && typeof value !== "boolean") {
269
+ reject(400, badRequest(`\`${field}\` must be a boolean (got ${typeof value}).`));
143
270
  return;
144
271
  }
145
- // Build the facade once per server instance (lazily on first request so
146
- // it captures the stable runtime config).
147
- if (!askdb) {
148
- askdb = createAskDb({
149
- config: rt,
150
- registry: ai,
151
- // When the caller supplied a schemaPath option, it takes precedence
152
- // over host.schemaPath / ASKDB_SCHEMA_PATH in config.
153
- schema: optionSchemaPath ? { path: optionSchemaPath } : undefined,
154
- unknownDialect: "fallback-postgres",
155
- });
272
+ }
273
+ let requestOverride;
274
+ if (body.schemaJson !== undefined && body.schemaJson !== null) {
275
+ if (typeof body.schemaJson !== "string") {
276
+ reject(400, badRequest("`schemaJson` must be a string containing a bundled AskDB schema artifact."));
277
+ return;
156
278
  }
157
- logger.info({ event: AskDbLogEvent.RunStart, mode }, "askdb http run start");
158
- const requestOverride = typeof body.schemaJson === "string" && body.schemaJson.trim() !== "" ? body.schemaJson : undefined;
279
+ if (body.schemaJson.trim() !== "") {
280
+ if (!rt.httpApi.allowSchemaOverride) {
281
+ reject(403, {
282
+ code: "schema_override_disabled",
283
+ message: "Per-request `schemaJson` overrides are disabled on this server. Omit `schemaJson` to use the server-configured schema.",
284
+ });
285
+ return;
286
+ }
287
+ requestOverride = body.schemaJson;
288
+ }
289
+ }
290
+ // Build the facade once per server instance (lazily on first request so
291
+ // it captures the stable runtime config).
292
+ if (!askdb) {
293
+ askdb = createAskDb({
294
+ config: rt,
295
+ registry: ai,
296
+ // When the caller supplied a schemaPath option, it takes precedence
297
+ // over host.schemaPath / ASKDB_SCHEMA_PATH in config.
298
+ schema: optionSchemaPath ? { path: optionSchemaPath } : undefined,
299
+ unknownDialect: "fallback-postgres",
300
+ });
301
+ }
302
+ logger.info({ event: AskDbLogEvent.RunStart }, "askdb http run start");
303
+ const timeoutMs = rt.httpApi.requestTimeoutMs;
304
+ const abortSignal = AbortSignal.timeout(timeoutMs);
305
+ try {
159
306
  const out = await askdb.ask(body.question, {
160
307
  schema: requestOverride ? { json: requestOverride } : undefined,
161
308
  logger,
162
- mode: mode ?? DEFAULT_ASKDB_MODE,
163
- explain: Boolean(body.explain),
164
- omitSensitiveIdentifiersFromNlToSqlPrompt: Boolean(body.omitSensitiveFromPrompt),
309
+ ...(requestedMode ? { mode: requestedMode } : {}),
310
+ explain: body.explain === true,
311
+ // The facade treats config `modes.omitSensitiveFromPrompt` as a floor:
312
+ // a request can tighten it but never loosen it.
313
+ omitSensitiveIdentifiersFromNlToSqlPrompt: body.omitSensitiveFromPrompt === true,
314
+ abortSignal,
165
315
  });
166
316
  const payload = {
167
317
  ok: true,
@@ -169,65 +319,28 @@ export function createAskDbHttpServer(options = {}) {
169
319
  sql: out.sql,
170
320
  explain: out.explain,
171
321
  usage: out.usage ?? null,
322
+ ...(out.sensitiveGuardrail ? { sensitiveGuardrail: out.sensitiveGuardrail } : {}),
172
323
  };
173
324
  logger.info({ event: AskDbLogEvent.RunEnd, ok: true }, "askdb http run end");
174
325
  writeJson(res, 200, payload);
175
326
  return;
176
327
  }
177
328
  catch (e) {
178
- // parseAskDbModeV1 throws on invalid ids; treat as caller error if it looks like a mode issue.
179
- const msg = e instanceof Error ? e.message : String(e);
180
- if (msg.toLowerCase().includes("mode")) {
181
- writeError(res, 400, correlationId, badRequest(correlationId, msg).error);
182
- return;
183
- }
184
- if (e instanceof SchemaNotConfiguredError) {
185
- writeError(res, 400, correlationId, {
186
- code: "bad_request",
187
- message: "No schema configured. Provide `schemaJson` in the request body or set ASKDB_SCHEMA_PATH / ASKDB_SCHEMA_JSON on the server.",
188
- });
189
- return;
190
- }
191
- if (e instanceof SchemaLoadError) {
192
- writeError(res, 400, correlationId, {
193
- code: "schema_parse_error",
194
- message: `schema parse error (${e.source}): ${e.cause instanceof Error ? e.cause.message : String(e.cause)}`,
195
- });
196
- return;
197
- }
198
- if (e instanceof ModelNotConfiguredError) {
199
- writeError(res, 500, correlationId, {
200
- code: "generation_not_configured",
201
- message: `${msg} (or set ASKDB_MOCK_SQL).`,
202
- });
203
- return;
204
- }
205
- logger.error({ event: AskDbLogEvent.RunError, errMessage: msg }, "askdb http run error");
206
- if (e instanceof SqlValidationError) {
207
- writeError(res, 400, correlationId, {
208
- code: "sql_validation_error",
209
- message: e.message,
210
- rule: e.rule,
211
- });
212
- return;
213
- }
214
- if (e instanceof SqlGenerationError) {
215
- writeError(res, 502, correlationId, { code: "sql_generation_error", message: e.message });
216
- return;
217
- }
218
- if (e instanceof DialectNotSupportedError) {
219
- writeError(res, 400, correlationId, { code: "bad_request", message: msg });
220
- return;
221
- }
222
- if (e instanceof AskDbError) {
223
- // Default mapping for other core errors.
224
- writeError(res, 500, correlationId, { code: "internal_error", message: e.message });
225
- return;
226
- }
227
- writeError(res, 500, correlationId, { code: "internal_error", message: msg });
329
+ const mapped = mapAskError(e, { timedOut: abortSignal.aborted, timeoutMs });
330
+ // Always log the full error server-side; the client only sees `mapped.error`.
331
+ logger.error({
332
+ event: AskDbLogEvent.RunError,
333
+ status: mapped.status,
334
+ code: mapped.error.code,
335
+ errName: e instanceof Error ? e.name : typeof e,
336
+ errMessage: e instanceof Error ? e.message : String(e),
337
+ ...(causeMessage(e) !== undefined ? { causeMessage: causeMessage(e) } : {}),
338
+ ...(mapped.status >= 500 && e instanceof Error && e.stack ? { errStack: e.stack } : {}),
339
+ }, "askdb http run error");
340
+ writeError(res, mapped.status, correlationId, mapped.error);
228
341
  return;
229
342
  }
230
- });
343
+ }
231
344
  return {
232
345
  host,
233
346
  port,
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,15 +1,21 @@
1
- import type { AskDbModeV1, AskUsage } from "@askdb/core";
1
+ import type { AskDbModeV1, AskUsage, SensitiveGuardrailResult } from "@askdb/core";
2
2
  export type AskHttpRequest = {
3
3
  question: string;
4
4
  /**
5
5
  * Optional override: AskDB Schema v2 bundled JSON as a string.
6
6
  *
7
- * Preferred: configure a server-default schema via env (e.g. ASKDB_SCHEMA_PATH)
8
- * and omit this field in requests.
7
+ * Rejected with `403 schema_override_disabled` unless the server sets
8
+ * `httpApi.allowSchemaOverride: true`. Preferred: configure a server-default
9
+ * schema (`host.schemaPath`) and omit this field in requests.
9
10
  */
10
11
  schemaJson?: string;
11
12
  explain?: boolean;
12
13
  mode?: AskDbModeV1;
14
+ /**
15
+ * Omit sensitive identifiers from the NL→SQL prompt for this request. Can only
16
+ * tighten the server's `modes.omitSensitiveFromPrompt` — `false` never loosens it.
17
+ * Any value other than a boolean (or `null`) is rejected with `400 bad_request`.
18
+ */
13
19
  omitSensitiveFromPrompt?: boolean;
14
20
  };
15
21
  export type AskHttpSuccessResponse = {
@@ -18,12 +24,17 @@ export type AskHttpSuccessResponse = {
18
24
  sql: string;
19
25
  explain?: unknown;
20
26
  usage: AskUsage | null;
27
+ /**
28
+ * Sensitive-identifier check over `sql`. Present when the schema marks at least one
29
+ * table/column `sensitive`; `passed: false` means the SQL references one of them.
30
+ */
31
+ sensitiveGuardrail?: SensitiveGuardrailResult;
21
32
  };
22
33
  export type AskHttpErrorResponse = {
23
34
  ok: false;
24
35
  correlationId: string;
25
36
  error: {
26
- code: "not_found" | "bad_request" | "payload_too_large" | "schema_parse_error" | "generation_not_configured" | "sql_validation_error" | "sql_generation_error" | "internal_error";
37
+ code: "not_found" | "bad_request" | "payload_too_large" | "schema_parse_error" | "schema_override_disabled" | "generation_not_configured" | "sql_validation_error" | "guardrail_violation" | "sql_generation_error" | "internal_error";
27
38
  message: string;
28
39
  rule?: string;
29
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,KAAK,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QACL,IAAI,EACA,WAAW,GACX,aAAa,GACb,mBAAmB,GACnB,oBAAoB,GACpB,2BAA2B,GAC3B,sBAAsB,GACtB,sBAAsB,GACtB,gBAAgB,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,KAAK,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QACL,IAAI,EACA,WAAW,GACX,aAAa,GACb,mBAAmB,GACnB,oBAAoB,GACpB,0BAA0B,GAC1B,2BAA2B,GAC3B,sBAAsB,GACtB,qBAAqB,GACrB,sBAAsB,GACtB,gBAAgB,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askdb/http-api",
3
- "version": "1.0.0-beta.43",
3
+ "version": "1.0.0-beta.45",
4
4
  "description": "AskDB HTTP API: minimal HTTP wrapper around @askdb/core. POST /ask returns checked SQL only.",
5
5
  "keywords": [
6
6
  "askdb",
@@ -48,24 +48,23 @@
48
48
  "NOTICE"
49
49
  ],
50
50
  "engines": {
51
- "node": ">=22.12"
51
+ "node": ">=22.23.4"
52
52
  },
53
53
  "dependencies": {
54
- "ai": "^7.0.113",
55
- "@askdb/ai": "0.1.0-beta.7",
56
- "@askdb/ai-azure": "1.0.0-beta.7",
57
- "@askdb/ai-anthropic": "1.0.0-beta.5",
58
- "@askdb/ai-openai": "1.0.0-beta.7",
59
- "@askdb/ai-google": "1.0.0-beta.7",
60
- "@askdb/core": "1.0.0-beta.43",
61
- "@askdb/client": "1.0.0-beta.6",
62
- "@askdb/postgres": "0.2.0-beta.19",
63
- "@askdb/config": "1.0.0-beta.12"
54
+ "@ai-sdk/anthropic": "^4.0.94",
55
+ "@ai-sdk/azure": "^4.0.114",
56
+ "@ai-sdk/google": "^4.0.109",
57
+ "@ai-sdk/openai": "^4.0.106",
58
+ "@askdb/ai": "0.1.0-beta.9",
59
+ "@askdb/client": "1.0.0-beta.8",
60
+ "@askdb/config": "1.0.0-beta.14",
61
+ "@askdb/core": "1.0.0-beta.45",
62
+ "ai": "^7.0.51"
64
63
  },
65
64
  "devDependencies": {
66
65
  "tsx": "^4.23.15",
67
66
  "typescript": "^6.0.3",
68
- "vitest": "^5.0.1"
67
+ "vitest": "^5.0.5"
69
68
  },
70
69
  "scripts": {
71
70
  "build": "tsc -p tsconfig.build.json",