@metaobjectsdev/runtime-ts 0.24.4 → 0.24.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constraint-errors.d.ts +67 -0
- package/dist/constraint-errors.d.ts.map +1 -0
- package/dist/constraint-errors.js +133 -0
- package/dist/constraint-errors.js.map +1 -0
- package/dist/drizzle-fastify/index.d.ts.map +1 -1
- package/dist/drizzle-fastify/index.js +46 -9
- package/dist/drizzle-fastify/index.js.map +1 -1
- package/dist/fastify/index.d.ts.map +1 -1
- package/dist/fastify/index.js +17 -8
- package/dist/fastify/index.js.map +1 -1
- package/dist/hono/index.d.ts.map +1 -1
- package/dist/hono/index.js +45 -9
- package/dist/hono/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/constraint-errors.ts +149 -0
- package/src/drizzle-fastify/index.ts +34 -9
- package/src/fastify/index.ts +26 -8
- package/src/hono/index.ts +33 -9
- package/src/index.ts +9 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map a database constraint violation to a wire response — WITHOUT echoing the query.
|
|
3
|
+
*
|
|
4
|
+
* A generated CRUD route had no try/catch around its write, so a driver error reached
|
|
5
|
+
* Fastify's default handler and came back to the caller as:
|
|
6
|
+
*
|
|
7
|
+
* HTTP/1.1 500 Internal Server Error
|
|
8
|
+
* {"statusCode":500,"error":"Internal Server Error","message":"Failed query: insert into
|
|
9
|
+
* \"tickets\" (\"id\",\"customer_id\",…) values (null, ?, ?, ?, ?, null, ?) returning …
|
|
10
|
+
* \nparams: 999,x,y,OPEN,2026-08-29T02:40:44.804Z"}
|
|
11
|
+
*
|
|
12
|
+
* Two problems, and the second is the serious one:
|
|
13
|
+
*
|
|
14
|
+
* 1. **Wrong status.** A client-supplied foreign key that does not exist is a client
|
|
15
|
+
* error. The `identity.reference` that declares the constraint is the same metadata
|
|
16
|
+
* the route already uses to reject bad enum members and missing required fields — it
|
|
17
|
+
* just never translated the one constraint the database enforces.
|
|
18
|
+
* 2. **The response body carried the SQL and the BOUND PARAMETER VALUES.** Here that is
|
|
19
|
+
* harmless; on a POST whose columns hold PII, a token, or an address, it is that data
|
|
20
|
+
* reflected back to an unauthenticated caller, out of generated code the adopter never
|
|
21
|
+
* wrote and is not prompted to review.
|
|
22
|
+
*
|
|
23
|
+
* Scope kept deliberately narrow: `docs/features/api-contract.md` states the `error` code
|
|
24
|
+
* vocabulary is not a hard cross-port invariant beyond `not_found` and the filter-parser
|
|
25
|
+
* codes, so this introduces ONE code (`constraint_violation`) with the offending
|
|
26
|
+
* constraint KIND, rather than inventing a taxonomy the other four ports would then have
|
|
27
|
+
* to match. An unrecognised error is still a 500 — but a 500 whose body says nothing about
|
|
28
|
+
* the query, with the real error left to the server log where it belongs.
|
|
29
|
+
*/
|
|
30
|
+
/** The constraint kinds worth telling a client apart. */
|
|
31
|
+
export type ConstraintKind = "foreign_key" | "unique" | "check" | "not_null";
|
|
32
|
+
export interface ConstraintFailure {
|
|
33
|
+
/** HTTP status for this failure. */
|
|
34
|
+
status: number;
|
|
35
|
+
/** Response body — never contains SQL, parameters, or driver text. */
|
|
36
|
+
body: {
|
|
37
|
+
error: string;
|
|
38
|
+
constraint?: ConstraintKind;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Recognise a constraint violation across the drivers this package supports.
|
|
43
|
+
*
|
|
44
|
+
* Matching is on driver error CODES first (SQLite's extended result codes, Postgres's
|
|
45
|
+
* SQLSTATE class 23), falling back to message text only where a driver gives no code.
|
|
46
|
+
* Message text is checked case-insensitively against the constraint NAME vocabulary the
|
|
47
|
+
* engines use, never against user data.
|
|
48
|
+
*/
|
|
49
|
+
export declare function classifyConstraintError(err: unknown): ConstraintFailure | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Run a write and convert any database failure into a safe response.
|
|
52
|
+
*
|
|
53
|
+
* `onFailure` receives the status + body to send. An UNRECOGNISED error is rethrown as a
|
|
54
|
+
* redacted `Error` after being handed to `logError`, so the operator keeps the full
|
|
55
|
+
* diagnostic and the client gets none of it.
|
|
56
|
+
*/
|
|
57
|
+
export declare function withConstraintMapping<T>(write: () => Promise<T>, onFailure: (f: ConstraintFailure) => T, logError?: (err: unknown) => void): Promise<T>;
|
|
58
|
+
/** Log the operator-facing detail before the caller raises the redacted error. */
|
|
59
|
+
export declare function logAndRedact(err: unknown): void;
|
|
60
|
+
/**
|
|
61
|
+
* Thrown in place of a driver error so the framework's default 500 handler has nothing
|
|
62
|
+
* to leak. The original is logged before this is raised.
|
|
63
|
+
*/
|
|
64
|
+
export declare class RedactedDatabaseError extends Error {
|
|
65
|
+
constructor();
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=constraint-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint-errors.d.ts","sourceRoot":"","sources":["../src/constraint-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,yDAAyD;AACzD,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7E,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,cAAc,CAAA;KAAE,CAAC;CACtD;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAwCnF;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACvB,SAAS,EAAE,CAAC,CAAC,EAAE,iBAAiB,KAAK,CAAC,EACtC,QAAQ,GAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAA8B,GACzD,OAAO,CAAC,CAAC,CAAC,CAUZ;AAuBD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAE/C;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;;CAK/C"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map a database constraint violation to a wire response — WITHOUT echoing the query.
|
|
3
|
+
*
|
|
4
|
+
* A generated CRUD route had no try/catch around its write, so a driver error reached
|
|
5
|
+
* Fastify's default handler and came back to the caller as:
|
|
6
|
+
*
|
|
7
|
+
* HTTP/1.1 500 Internal Server Error
|
|
8
|
+
* {"statusCode":500,"error":"Internal Server Error","message":"Failed query: insert into
|
|
9
|
+
* \"tickets\" (\"id\",\"customer_id\",…) values (null, ?, ?, ?, ?, null, ?) returning …
|
|
10
|
+
* \nparams: 999,x,y,OPEN,2026-08-29T02:40:44.804Z"}
|
|
11
|
+
*
|
|
12
|
+
* Two problems, and the second is the serious one:
|
|
13
|
+
*
|
|
14
|
+
* 1. **Wrong status.** A client-supplied foreign key that does not exist is a client
|
|
15
|
+
* error. The `identity.reference` that declares the constraint is the same metadata
|
|
16
|
+
* the route already uses to reject bad enum members and missing required fields — it
|
|
17
|
+
* just never translated the one constraint the database enforces.
|
|
18
|
+
* 2. **The response body carried the SQL and the BOUND PARAMETER VALUES.** Here that is
|
|
19
|
+
* harmless; on a POST whose columns hold PII, a token, or an address, it is that data
|
|
20
|
+
* reflected back to an unauthenticated caller, out of generated code the adopter never
|
|
21
|
+
* wrote and is not prompted to review.
|
|
22
|
+
*
|
|
23
|
+
* Scope kept deliberately narrow: `docs/features/api-contract.md` states the `error` code
|
|
24
|
+
* vocabulary is not a hard cross-port invariant beyond `not_found` and the filter-parser
|
|
25
|
+
* codes, so this introduces ONE code (`constraint_violation`) with the offending
|
|
26
|
+
* constraint KIND, rather than inventing a taxonomy the other four ports would then have
|
|
27
|
+
* to match. An unrecognised error is still a 500 — but a 500 whose body says nothing about
|
|
28
|
+
* the query, with the real error left to the server log where it belongs.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Recognise a constraint violation across the drivers this package supports.
|
|
32
|
+
*
|
|
33
|
+
* Matching is on driver error CODES first (SQLite's extended result codes, Postgres's
|
|
34
|
+
* SQLSTATE class 23), falling back to message text only where a driver gives no code.
|
|
35
|
+
* Message text is checked case-insensitively against the constraint NAME vocabulary the
|
|
36
|
+
* engines use, never against user data.
|
|
37
|
+
*/
|
|
38
|
+
export function classifyConstraintError(err) {
|
|
39
|
+
// Walk the `cause` chain. Drizzle wraps every driver failure in a `DrizzleQueryError`
|
|
40
|
+
// whose own message is "Failed query: <sql>\nparams: <values>" — the constraint detail
|
|
41
|
+
// is one level down:
|
|
42
|
+
//
|
|
43
|
+
// DrizzleQueryError: Failed query: insert into "tickets" …
|
|
44
|
+
// cause: LibsqlError: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed
|
|
45
|
+
//
|
|
46
|
+
// Reading only the top level therefore classified NOTHING and every violation fell to
|
|
47
|
+
// the redacted 500 — which is how the first cut of this function behaved against a real
|
|
48
|
+
// libsql server. Note the code there is the generic `SQLITE_CONSTRAINT`, not the extended
|
|
49
|
+
// `SQLITE_CONSTRAINT_FOREIGNKEY`, so the message text carries the discriminating word.
|
|
50
|
+
const haystack = errorChainText(err);
|
|
51
|
+
// Postgres SQLSTATE 23xxx — integrity constraint violation.
|
|
52
|
+
const kind = haystack.includes("23503") ||
|
|
53
|
+
haystack.includes("FOREIGN KEY") ||
|
|
54
|
+
haystack.includes("SQLITE_CONSTRAINT_FOREIGNKEY") // extended code: no space
|
|
55
|
+
? "foreign_key"
|
|
56
|
+
: haystack.includes("23505") ||
|
|
57
|
+
haystack.includes("SQLITE_CONSTRAINT_UNIQUE") ||
|
|
58
|
+
haystack.includes("UNIQUE CONSTRAINT")
|
|
59
|
+
? "unique"
|
|
60
|
+
: haystack.includes("23514") ||
|
|
61
|
+
haystack.includes("SQLITE_CONSTRAINT_CHECK") ||
|
|
62
|
+
haystack.includes("CHECK CONSTRAINT")
|
|
63
|
+
? "check"
|
|
64
|
+
: haystack.includes("23502") ||
|
|
65
|
+
haystack.includes("SQLITE_CONSTRAINT_NOTNULL") ||
|
|
66
|
+
haystack.includes("NOT NULL")
|
|
67
|
+
? "not_null"
|
|
68
|
+
: undefined;
|
|
69
|
+
if (kind === undefined)
|
|
70
|
+
return undefined;
|
|
71
|
+
// 409 for referential/uniqueness conflicts with existing state; 400 for a value the
|
|
72
|
+
// request itself got wrong. Both are client errors — neither is a 500.
|
|
73
|
+
const status = kind === "foreign_key" || kind === "unique" ? 409 : 400;
|
|
74
|
+
return { status, body: { error: "constraint_violation", constraint: kind } };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Run a write and convert any database failure into a safe response.
|
|
78
|
+
*
|
|
79
|
+
* `onFailure` receives the status + body to send. An UNRECOGNISED error is rethrown as a
|
|
80
|
+
* redacted `Error` after being handed to `logError`, so the operator keeps the full
|
|
81
|
+
* diagnostic and the client gets none of it.
|
|
82
|
+
*/
|
|
83
|
+
export async function withConstraintMapping(write, onFailure, logError = (e) => console.error(e)) {
|
|
84
|
+
try {
|
|
85
|
+
return await write();
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
const failure = classifyConstraintError(err);
|
|
89
|
+
if (failure !== undefined)
|
|
90
|
+
return onFailure(failure);
|
|
91
|
+
// Not a constraint problem — the operator needs the detail, the caller must not have it.
|
|
92
|
+
logError(err);
|
|
93
|
+
throw new RedactedDatabaseError();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* `code` + `message` for an error and everything in its `cause` chain, upper-cased.
|
|
98
|
+
*
|
|
99
|
+
* Depth-bounded (a malformed `cause` can be self-referential) and read defensively: a
|
|
100
|
+
* driver error is whatever the driver decided to throw, not necessarily an `Error`.
|
|
101
|
+
* Only the code and message are read — never a `query` or `params` property, so the
|
|
102
|
+
* matched text can never contain user data.
|
|
103
|
+
*/
|
|
104
|
+
function errorChainText(err) {
|
|
105
|
+
const parts = [];
|
|
106
|
+
let cur = err;
|
|
107
|
+
for (let depth = 0; depth < 8 && typeof cur === "object" && cur !== null; depth++) {
|
|
108
|
+
const o = cur;
|
|
109
|
+
if (o.code !== undefined)
|
|
110
|
+
parts.push(String(o.code));
|
|
111
|
+
if (o.message !== undefined)
|
|
112
|
+
parts.push(String(o.message));
|
|
113
|
+
if (o.cause === cur)
|
|
114
|
+
break;
|
|
115
|
+
cur = o.cause;
|
|
116
|
+
}
|
|
117
|
+
return parts.join(" ").toUpperCase();
|
|
118
|
+
}
|
|
119
|
+
/** Log the operator-facing detail before the caller raises the redacted error. */
|
|
120
|
+
export function logAndRedact(err) {
|
|
121
|
+
console.error(err);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Thrown in place of a driver error so the framework's default 500 handler has nothing
|
|
125
|
+
* to leak. The original is logged before this is raised.
|
|
126
|
+
*/
|
|
127
|
+
export class RedactedDatabaseError extends Error {
|
|
128
|
+
constructor() {
|
|
129
|
+
super("database error");
|
|
130
|
+
this.name = "RedactedDatabaseError";
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=constraint-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint-errors.js","sourceRoot":"","sources":["../src/constraint-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drizzle-fastify/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drizzle-fastify/index.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGtC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAQxF,KAAK,UAAU,GAAG,GAAG,CAAC;AAEtB,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,4EAA4E;IAC5E,KAAK,EAAE,QAAQ,CAAC;IAChB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAI,aAAa,CAAC;IAChC,oKAAoK;IACpK,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAsCD,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAO7D;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAMrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAyEtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAwBrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CA0BxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CA2DxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CA6BxD;AAgBD,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
// POST {path} create, 400 on Zod validation error
|
|
14
14
|
// PATCH {path}/:id update, 400 on validation, 404 if missing
|
|
15
15
|
// DELETE {path}/:id delete, 204 on success, 404 if missing
|
|
16
|
+
import { classifyConstraintError, RedactedDatabaseError, logAndRedact } from "../constraint-errors.js";
|
|
16
17
|
import { eq, count, and, asc } from "drizzle-orm";
|
|
17
18
|
import qs from "qs";
|
|
18
19
|
import { parseFilterParams, FilterParseError } from "./filter-parser.js";
|
|
@@ -186,7 +187,20 @@ export function mountCreateRoute(opts) {
|
|
|
186
187
|
const values = opts.discriminator
|
|
187
188
|
? { ...parsed.data, [opts.discriminator.column]: opts.discriminator.value }
|
|
188
189
|
: parsed.data;
|
|
189
|
-
|
|
190
|
+
// A constraint the DB enforces (a foreign key from identity.reference, a unique
|
|
191
|
+
// index) must not surface as a 500 echoing the SQL and its bound parameters.
|
|
192
|
+
let result;
|
|
193
|
+
try {
|
|
194
|
+
result = await opts.db.insert(opts.table).values(values).returning();
|
|
195
|
+
}
|
|
196
|
+
catch (e) {
|
|
197
|
+
const f = classifyConstraintError(e);
|
|
198
|
+
if (f === undefined) {
|
|
199
|
+
logAndRedact(e);
|
|
200
|
+
throw new RedactedDatabaseError();
|
|
201
|
+
}
|
|
202
|
+
return reply.code(f.status).send(f.body);
|
|
203
|
+
}
|
|
190
204
|
const row = result[0];
|
|
191
205
|
// #214 — read-your-writes: re-read through the replica view so the response
|
|
192
206
|
// carries derived (origin.passthrough) columns the base table excludes.
|
|
@@ -215,11 +229,22 @@ export function mountUpdateRoute(opts) {
|
|
|
215
229
|
return reply.code(400).send({ error: "invalid_id" });
|
|
216
230
|
}
|
|
217
231
|
const idCond = eq(opts.table.id, idValue);
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
.
|
|
221
|
-
|
|
222
|
-
|
|
232
|
+
let result;
|
|
233
|
+
try {
|
|
234
|
+
result = await opts.db
|
|
235
|
+
.update(opts.table)
|
|
236
|
+
.set(data)
|
|
237
|
+
.where(discCond ? and(idCond, discCond) : idCond)
|
|
238
|
+
.returning();
|
|
239
|
+
}
|
|
240
|
+
catch (e) {
|
|
241
|
+
const f = classifyConstraintError(e);
|
|
242
|
+
if (f === undefined) {
|
|
243
|
+
logAndRedact(e);
|
|
244
|
+
throw new RedactedDatabaseError();
|
|
245
|
+
}
|
|
246
|
+
return reply.code(f.status).send(f.body);
|
|
247
|
+
}
|
|
223
248
|
const row = result[0];
|
|
224
249
|
if (row == null)
|
|
225
250
|
return reply.code(404).send({ error: "not_found" });
|
|
@@ -257,9 +282,21 @@ export function mountDeleteRoute(opts) {
|
|
|
257
282
|
return reply.code(400).send({ error: "invalid_id" });
|
|
258
283
|
}
|
|
259
284
|
const idCond = eq(opts.table.id, idValue);
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
285
|
+
// A child row still referencing this one makes DELETE a 409, not a 500.
|
|
286
|
+
let result;
|
|
287
|
+
try {
|
|
288
|
+
result = await opts.db
|
|
289
|
+
.delete(opts.table)
|
|
290
|
+
.where(discCond ? and(idCond, discCond) : idCond);
|
|
291
|
+
}
|
|
292
|
+
catch (e) {
|
|
293
|
+
const f = classifyConstraintError(e);
|
|
294
|
+
if (f === undefined) {
|
|
295
|
+
logAndRedact(e);
|
|
296
|
+
throw new RedactedDatabaseError();
|
|
297
|
+
}
|
|
298
|
+
return reply.code(f.status).send(f.body);
|
|
299
|
+
}
|
|
263
300
|
// Both libsql and pg drivers expose a rows-affected counter, in different
|
|
264
301
|
// shapes. Treat anything > 0 as "found and deleted."
|
|
265
302
|
const affected = extractRowCount(result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drizzle-fastify/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drizzle-fastify/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAO5E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB;;;OAGG;IACH,EAAE,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAID;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAO7D;AAOD,KAAK,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAW3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAgC5D;AAmBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAS3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAmB9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAkC9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAa9D;AASD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/fastify/index.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
// Type-only Fastify imports keep the optional-peer story clean: the .d.ts
|
|
11
11
|
// reference is needed for the public API, but at runtime there's no
|
|
12
12
|
// `require("fastify")`.
|
|
13
|
+
import { withConstraintMapping } from "../constraint-errors.js";
|
|
13
14
|
import qs from "qs";
|
|
14
15
|
import { isTruthyFlag, contractErrorCode } from "../drizzle-fastify/util.js";
|
|
15
16
|
const ALL_VERBS = ["list", "get", "create", "update", "delete"];
|
|
@@ -111,8 +112,12 @@ export function mountCreateRoute(opts) {
|
|
|
111
112
|
// Zod returns `unknown` for parsed.data; the schema is authored from the
|
|
112
113
|
// same metadata that drives ObjectManager, so the shape is guaranteed
|
|
113
114
|
// compatible — cast at the trust boundary.
|
|
114
|
-
|
|
115
|
-
|
|
115
|
+
// A declared constraint the DB enforces (a foreign key from identity.reference,
|
|
116
|
+
// a unique index) must not surface as a 500 echoing the SQL and its bound params.
|
|
117
|
+
return withConstraintMapping(async () => {
|
|
118
|
+
const row = await (await opts.om()).create(opts.entity, parsed.data);
|
|
119
|
+
return reply.code(201).send(row);
|
|
120
|
+
}, (f) => reply.code(f.status).send(f.body));
|
|
116
121
|
});
|
|
117
122
|
}
|
|
118
123
|
export function mountUpdateRoute(opts) {
|
|
@@ -126,10 +131,12 @@ export function mountUpdateRoute(opts) {
|
|
|
126
131
|
// (consistent with mountDeleteRoute). ObjectManager's default behavior
|
|
127
132
|
// throws NotFoundError, which Fastify would surface as 500.
|
|
128
133
|
// Raw id — ObjectManager coerces per PK metadata (see mountGetRoute).
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
134
|
+
return withConstraintMapping(async () => {
|
|
135
|
+
const row = await (await opts.om()).update(opts.entity, id, parsed.data, {
|
|
136
|
+
ifMissing: "ignore",
|
|
137
|
+
});
|
|
138
|
+
return row ?? reply.code(404).send({ error: "not_found" });
|
|
139
|
+
}, (f) => reply.code(f.status).send(f.body));
|
|
133
140
|
};
|
|
134
141
|
const path = `${opts.path}/:id`;
|
|
135
142
|
const ro = routeOpts(opts);
|
|
@@ -146,8 +153,10 @@ export function mountDeleteRoute(opts) {
|
|
|
146
153
|
const { id } = req.params;
|
|
147
154
|
// Raw id — ObjectManager coerces per PK metadata (see mountGetRoute).
|
|
148
155
|
// Pre-coercing conflated '0123' with 123 on a string pk: wrong-row DELETE.
|
|
149
|
-
|
|
150
|
-
|
|
156
|
+
return withConstraintMapping(async () => {
|
|
157
|
+
const deleted = await (await opts.om()).delete(opts.entity, id);
|
|
158
|
+
return deleted ? reply.code(204).send() : reply.code(404).send({ error: "not_found" });
|
|
159
|
+
}, (f) => reply.code(f.status).send(f.body));
|
|
151
160
|
});
|
|
152
161
|
}
|
|
153
162
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,4DAA4D;AAC5D,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,EAAE;AACF,0EAA0E;AAC1E,oEAAoE;AACpE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fastify/index.ts"],"names":[],"mappings":"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"}
|
package/dist/hono/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAQtC,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACd,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,eAAe,EACf,aAAa,GACd,MAAM,wCAAwC,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAQrD,KAAK,UAAU,GAAG,GAAG,CAAC;AAEtB,KAAK,QAAQ,GAAG,GAAG,CAAC;AAEpB,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,GAAG,EAAE,OAAO,CAAC;IACb,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,kFAAkF;IAClF,KAAK,EAAE,QAAQ,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,yEAAyE;IACzE,YAAY,EAAE,UAAU,CAAC;IACzB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAI,aAAa,CAAC;IAChC,oKAAoK;IACpK,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACjC;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAO7D;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAWrD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzE;AA2BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAqDtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAkBrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAsBxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAiCxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAuBxD;AAgBD,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/hono/index.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
// parseFilterParams and parseHonoFilterParams (qs.parse on the raw URL),
|
|
16
16
|
// so the two flavors emit byte-identical wire responses for the cross-port
|
|
17
17
|
// API-contract corpus.
|
|
18
|
+
import { classifyConstraintError, RedactedDatabaseError, logAndRedact } from "../constraint-errors.js";
|
|
18
19
|
import { eq, count, and } from "drizzle-orm";
|
|
19
20
|
import qs from "qs";
|
|
20
21
|
import { parseFilterParams, FilterParseError, } from "../drizzle-fastify/filter-parser.js";
|
|
@@ -161,7 +162,21 @@ export function mountCreateRoute(opts) {
|
|
|
161
162
|
if (!parsed.success) {
|
|
162
163
|
return c.json({ error: "validation", issues: parsed.error.issues }, 400);
|
|
163
164
|
}
|
|
164
|
-
|
|
165
|
+
// Same redaction contract as the Fastify mount: a constraint the DB enforces must not
|
|
166
|
+
// come back as a 500 carrying the SQL and its bound parameters. Both mounts are
|
|
167
|
+
// required to emit byte-identical responses (docs/features/api-contract.md).
|
|
168
|
+
let result;
|
|
169
|
+
try {
|
|
170
|
+
result = await opts.db.insert(opts.table).values(parsed.data).returning();
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
const f = classifyConstraintError(err);
|
|
174
|
+
if (f === undefined) {
|
|
175
|
+
logAndRedact(err);
|
|
176
|
+
throw new RedactedDatabaseError();
|
|
177
|
+
}
|
|
178
|
+
return c.json(f.body, f.status);
|
|
179
|
+
}
|
|
165
180
|
const row = result[0];
|
|
166
181
|
// Echo the row through the replica view so derived columns are present (#214).
|
|
167
182
|
return c.json(await reReadThroughView(opts, row), 201);
|
|
@@ -180,11 +195,22 @@ export function mountUpdateRoute(opts) {
|
|
|
180
195
|
const idValue = coerceIdForColumn(opts.table.id, id);
|
|
181
196
|
if (idValue === undefined)
|
|
182
197
|
return c.json({ error: "invalid_id" }, 400);
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
.
|
|
186
|
-
|
|
187
|
-
|
|
198
|
+
let result;
|
|
199
|
+
try {
|
|
200
|
+
result = await opts.db
|
|
201
|
+
.update(opts.table)
|
|
202
|
+
.set(parsed.data)
|
|
203
|
+
.where(eq(opts.table.id, idValue))
|
|
204
|
+
.returning();
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
const f = classifyConstraintError(err);
|
|
208
|
+
if (f === undefined) {
|
|
209
|
+
logAndRedact(err);
|
|
210
|
+
throw new RedactedDatabaseError();
|
|
211
|
+
}
|
|
212
|
+
return c.json(f.body, f.status);
|
|
213
|
+
}
|
|
188
214
|
const row = result[0];
|
|
189
215
|
return row ? c.json(await reReadThroughView(opts, row)) : c.json({ error: "not_found" }, 404);
|
|
190
216
|
};
|
|
@@ -204,9 +230,19 @@ export function mountDeleteRoute(opts) {
|
|
|
204
230
|
const idValue = coerceIdForColumn(opts.table.id, id);
|
|
205
231
|
if (idValue === undefined)
|
|
206
232
|
return c.json({ error: "invalid_id" }, 400);
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
233
|
+
// A child row still referencing this one makes DELETE a 409, not a 500.
|
|
234
|
+
let result;
|
|
235
|
+
try {
|
|
236
|
+
result = await opts.db.delete(opts.table).where(eq(opts.table.id, idValue));
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
const f = classifyConstraintError(err);
|
|
240
|
+
if (f === undefined) {
|
|
241
|
+
logAndRedact(err);
|
|
242
|
+
throw new RedactedDatabaseError();
|
|
243
|
+
}
|
|
244
|
+
return c.json(f.body, f.status);
|
|
245
|
+
}
|
|
210
246
|
const affected = extractRowCount(result);
|
|
211
247
|
if (affected > 0) {
|
|
212
248
|
// 204 No Content — body must be empty.
|
package/dist/hono/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hono/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ export { extractObject, extractSchemaFor, assemble, MAX_NEST_DEPTH, } from "./ex
|
|
|
10
10
|
export { Format } from "@metaobjectsdev/render";
|
|
11
11
|
export { LlmCallDbRecorder, NullRecorder, recordLlmCall, buildLlmCallRow, persistLlmCallRow, truncateRow } from "./llm-recorder.js";
|
|
12
12
|
export type { LlmRecorder, LlmCallRow, LlmCallInput, RecordLlmCallOptions, RecordLlmCallResult, LlmCallDbRecorderOpts } from "./llm-recorder.js";
|
|
13
|
+
export { classifyConstraintError, withConstraintMapping, RedactedDatabaseError, type ConstraintKind, type ConstraintFailure, } from "./constraint-errors.js";
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErF,YAAY,EACV,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAC/C,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EACjD,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,GACvD,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEzE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAKrB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,cAAc,GACf,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpI,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErF,YAAY,EACV,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAC/C,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EACjD,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,GACvD,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEzE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAKrB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,cAAc,GACf,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpI,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAGjJ,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,4 +9,6 @@ export { extractObject, extractSchemaFor, assemble, MAX_NEST_DEPTH, } from "./ex
|
|
|
9
9
|
// single location rather than reaching into @metaobjectsdev/render directly.
|
|
10
10
|
export { Format } from "@metaobjectsdev/render";
|
|
11
11
|
export { LlmCallDbRecorder, NullRecorder, recordLlmCall, buildLlmCallRow, persistLlmCallRow, truncateRow } from "./llm-recorder.js";
|
|
12
|
+
// Constraint-violation mapping for generated write routes — never echoes the query.
|
|
13
|
+
export { classifyConstraintError, withConstraintMapping, RedactedDatabaseError, } from "./constraint-errors.js";
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBpD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,kGAAkG;AAClG,gGAAgG;AAChG,8FAA8F;AAC9F,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,sDAAsD;AACtD,8EAA8E;AAC9E,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBpD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,kGAAkG;AAClG,gGAAgG;AAChG,8FAA8F;AAC9F,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,sDAAsD;AACtD,8EAA8E;AAC9E,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGpI,oFAAoF;AACpF,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,wBAAwB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/runtime-ts",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.5",
|
|
4
4
|
"description": "Node-side runtime helpers for MetaObjects: Fastify route builders, Drizzle filter/sort integration, Kysely drivers.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"access": "public"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@metaobjectsdev/metadata": "0.24.
|
|
68
|
-
"@metaobjectsdev/render": "0.24.
|
|
67
|
+
"@metaobjectsdev/metadata": "0.24.5",
|
|
68
|
+
"@metaobjectsdev/render": "0.24.5",
|
|
69
69
|
"qs": "^6.13.0"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map a database constraint violation to a wire response — WITHOUT echoing the query.
|
|
3
|
+
*
|
|
4
|
+
* A generated CRUD route had no try/catch around its write, so a driver error reached
|
|
5
|
+
* Fastify's default handler and came back to the caller as:
|
|
6
|
+
*
|
|
7
|
+
* HTTP/1.1 500 Internal Server Error
|
|
8
|
+
* {"statusCode":500,"error":"Internal Server Error","message":"Failed query: insert into
|
|
9
|
+
* \"tickets\" (\"id\",\"customer_id\",…) values (null, ?, ?, ?, ?, null, ?) returning …
|
|
10
|
+
* \nparams: 999,x,y,OPEN,2026-08-29T02:40:44.804Z"}
|
|
11
|
+
*
|
|
12
|
+
* Two problems, and the second is the serious one:
|
|
13
|
+
*
|
|
14
|
+
* 1. **Wrong status.** A client-supplied foreign key that does not exist is a client
|
|
15
|
+
* error. The `identity.reference` that declares the constraint is the same metadata
|
|
16
|
+
* the route already uses to reject bad enum members and missing required fields — it
|
|
17
|
+
* just never translated the one constraint the database enforces.
|
|
18
|
+
* 2. **The response body carried the SQL and the BOUND PARAMETER VALUES.** Here that is
|
|
19
|
+
* harmless; on a POST whose columns hold PII, a token, or an address, it is that data
|
|
20
|
+
* reflected back to an unauthenticated caller, out of generated code the adopter never
|
|
21
|
+
* wrote and is not prompted to review.
|
|
22
|
+
*
|
|
23
|
+
* Scope kept deliberately narrow: `docs/features/api-contract.md` states the `error` code
|
|
24
|
+
* vocabulary is not a hard cross-port invariant beyond `not_found` and the filter-parser
|
|
25
|
+
* codes, so this introduces ONE code (`constraint_violation`) with the offending
|
|
26
|
+
* constraint KIND, rather than inventing a taxonomy the other four ports would then have
|
|
27
|
+
* to match. An unrecognised error is still a 500 — but a 500 whose body says nothing about
|
|
28
|
+
* the query, with the real error left to the server log where it belongs.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/** The constraint kinds worth telling a client apart. */
|
|
32
|
+
export type ConstraintKind = "foreign_key" | "unique" | "check" | "not_null";
|
|
33
|
+
|
|
34
|
+
export interface ConstraintFailure {
|
|
35
|
+
/** HTTP status for this failure. */
|
|
36
|
+
status: number;
|
|
37
|
+
/** Response body — never contains SQL, parameters, or driver text. */
|
|
38
|
+
body: { error: string; constraint?: ConstraintKind };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Recognise a constraint violation across the drivers this package supports.
|
|
43
|
+
*
|
|
44
|
+
* Matching is on driver error CODES first (SQLite's extended result codes, Postgres's
|
|
45
|
+
* SQLSTATE class 23), falling back to message text only where a driver gives no code.
|
|
46
|
+
* Message text is checked case-insensitively against the constraint NAME vocabulary the
|
|
47
|
+
* engines use, never against user data.
|
|
48
|
+
*/
|
|
49
|
+
export function classifyConstraintError(err: unknown): ConstraintFailure | undefined {
|
|
50
|
+
// Walk the `cause` chain. Drizzle wraps every driver failure in a `DrizzleQueryError`
|
|
51
|
+
// whose own message is "Failed query: <sql>\nparams: <values>" — the constraint detail
|
|
52
|
+
// is one level down:
|
|
53
|
+
//
|
|
54
|
+
// DrizzleQueryError: Failed query: insert into "tickets" …
|
|
55
|
+
// cause: LibsqlError: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed
|
|
56
|
+
//
|
|
57
|
+
// Reading only the top level therefore classified NOTHING and every violation fell to
|
|
58
|
+
// the redacted 500 — which is how the first cut of this function behaved against a real
|
|
59
|
+
// libsql server. Note the code there is the generic `SQLITE_CONSTRAINT`, not the extended
|
|
60
|
+
// `SQLITE_CONSTRAINT_FOREIGNKEY`, so the message text carries the discriminating word.
|
|
61
|
+
const haystack = errorChainText(err);
|
|
62
|
+
|
|
63
|
+
// Postgres SQLSTATE 23xxx — integrity constraint violation.
|
|
64
|
+
const kind: ConstraintKind | undefined =
|
|
65
|
+
haystack.includes("23503") ||
|
|
66
|
+
haystack.includes("FOREIGN KEY") ||
|
|
67
|
+
haystack.includes("SQLITE_CONSTRAINT_FOREIGNKEY") // extended code: no space
|
|
68
|
+
? "foreign_key"
|
|
69
|
+
: haystack.includes("23505") ||
|
|
70
|
+
haystack.includes("SQLITE_CONSTRAINT_UNIQUE") ||
|
|
71
|
+
haystack.includes("UNIQUE CONSTRAINT")
|
|
72
|
+
? "unique"
|
|
73
|
+
: haystack.includes("23514") ||
|
|
74
|
+
haystack.includes("SQLITE_CONSTRAINT_CHECK") ||
|
|
75
|
+
haystack.includes("CHECK CONSTRAINT")
|
|
76
|
+
? "check"
|
|
77
|
+
: haystack.includes("23502") ||
|
|
78
|
+
haystack.includes("SQLITE_CONSTRAINT_NOTNULL") ||
|
|
79
|
+
haystack.includes("NOT NULL")
|
|
80
|
+
? "not_null"
|
|
81
|
+
: undefined;
|
|
82
|
+
|
|
83
|
+
if (kind === undefined) return undefined;
|
|
84
|
+
|
|
85
|
+
// 409 for referential/uniqueness conflicts with existing state; 400 for a value the
|
|
86
|
+
// request itself got wrong. Both are client errors — neither is a 500.
|
|
87
|
+
const status = kind === "foreign_key" || kind === "unique" ? 409 : 400;
|
|
88
|
+
return { status, body: { error: "constraint_violation", constraint: kind } };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Run a write and convert any database failure into a safe response.
|
|
93
|
+
*
|
|
94
|
+
* `onFailure` receives the status + body to send. An UNRECOGNISED error is rethrown as a
|
|
95
|
+
* redacted `Error` after being handed to `logError`, so the operator keeps the full
|
|
96
|
+
* diagnostic and the client gets none of it.
|
|
97
|
+
*/
|
|
98
|
+
export async function withConstraintMapping<T>(
|
|
99
|
+
write: () => Promise<T>,
|
|
100
|
+
onFailure: (f: ConstraintFailure) => T,
|
|
101
|
+
logError: (err: unknown) => void = (e) => console.error(e),
|
|
102
|
+
): Promise<T> {
|
|
103
|
+
try {
|
|
104
|
+
return await write();
|
|
105
|
+
} catch (err) {
|
|
106
|
+
const failure = classifyConstraintError(err);
|
|
107
|
+
if (failure !== undefined) return onFailure(failure);
|
|
108
|
+
// Not a constraint problem — the operator needs the detail, the caller must not have it.
|
|
109
|
+
logError(err);
|
|
110
|
+
throw new RedactedDatabaseError();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* `code` + `message` for an error and everything in its `cause` chain, upper-cased.
|
|
116
|
+
*
|
|
117
|
+
* Depth-bounded (a malformed `cause` can be self-referential) and read defensively: a
|
|
118
|
+
* driver error is whatever the driver decided to throw, not necessarily an `Error`.
|
|
119
|
+
* Only the code and message are read — never a `query` or `params` property, so the
|
|
120
|
+
* matched text can never contain user data.
|
|
121
|
+
*/
|
|
122
|
+
function errorChainText(err: unknown): string {
|
|
123
|
+
const parts: string[] = [];
|
|
124
|
+
let cur: unknown = err;
|
|
125
|
+
for (let depth = 0; depth < 8 && typeof cur === "object" && cur !== null; depth++) {
|
|
126
|
+
const o = cur as { code?: unknown; message?: unknown; cause?: unknown };
|
|
127
|
+
if (o.code !== undefined) parts.push(String(o.code));
|
|
128
|
+
if (o.message !== undefined) parts.push(String(o.message));
|
|
129
|
+
if (o.cause === cur) break;
|
|
130
|
+
cur = o.cause;
|
|
131
|
+
}
|
|
132
|
+
return parts.join(" ").toUpperCase();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Log the operator-facing detail before the caller raises the redacted error. */
|
|
136
|
+
export function logAndRedact(err: unknown): void {
|
|
137
|
+
console.error(err);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Thrown in place of a driver error so the framework's default 500 handler has nothing
|
|
142
|
+
* to leak. The original is logged before this is raised.
|
|
143
|
+
*/
|
|
144
|
+
export class RedactedDatabaseError extends Error {
|
|
145
|
+
constructor() {
|
|
146
|
+
super("database error");
|
|
147
|
+
this.name = "RedactedDatabaseError";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
// DELETE {path}/:id delete, 204 on success, 404 if missing
|
|
16
16
|
|
|
17
17
|
import type { FastifyInstance, RouteShorthandOptions } from "fastify";
|
|
18
|
+
import { classifyConstraintError, RedactedDatabaseError, logAndRedact } from "../constraint-errors.js";
|
|
18
19
|
import type { ZodTypeAny } from "zod";
|
|
19
20
|
import { eq, count, and, asc } from "drizzle-orm";
|
|
20
21
|
import qs from "qs";
|
|
@@ -250,7 +251,16 @@ export function mountCreateRoute(opts: VerbOptions): void {
|
|
|
250
251
|
const values = opts.discriminator
|
|
251
252
|
? { ...(parsed.data as Record<string, unknown>), [opts.discriminator.column]: opts.discriminator.value }
|
|
252
253
|
: parsed.data;
|
|
253
|
-
|
|
254
|
+
// A constraint the DB enforces (a foreign key from identity.reference, a unique
|
|
255
|
+
// index) must not surface as a 500 echoing the SQL and its bound parameters.
|
|
256
|
+
let result: unknown;
|
|
257
|
+
try {
|
|
258
|
+
result = await opts.db.insert(opts.table).values(values).returning();
|
|
259
|
+
} catch (e) {
|
|
260
|
+
const f = classifyConstraintError(e);
|
|
261
|
+
if (f === undefined) { logAndRedact(e); throw new RedactedDatabaseError(); }
|
|
262
|
+
return reply.code(f.status).send(f.body);
|
|
263
|
+
}
|
|
254
264
|
const row = (result as unknown[])[0];
|
|
255
265
|
// #214 — read-your-writes: re-read through the replica view so the response
|
|
256
266
|
// carries derived (origin.passthrough) columns the base table excludes.
|
|
@@ -283,11 +293,18 @@ export function mountUpdateRoute(opts: VerbOptions): void {
|
|
|
283
293
|
return reply.code(400).send({ error: "invalid_id" });
|
|
284
294
|
}
|
|
285
295
|
const idCond = eq(opts.table.id, idValue);
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
.
|
|
289
|
-
|
|
290
|
-
|
|
296
|
+
let result: unknown;
|
|
297
|
+
try {
|
|
298
|
+
result = await opts.db
|
|
299
|
+
.update(opts.table)
|
|
300
|
+
.set(data)
|
|
301
|
+
.where(discCond ? and(idCond, discCond) : idCond)
|
|
302
|
+
.returning();
|
|
303
|
+
} catch (e) {
|
|
304
|
+
const f = classifyConstraintError(e);
|
|
305
|
+
if (f === undefined) { logAndRedact(e); throw new RedactedDatabaseError(); }
|
|
306
|
+
return reply.code(f.status).send(f.body);
|
|
307
|
+
}
|
|
291
308
|
const row = (result as unknown[])[0];
|
|
292
309
|
if (row == null) return reply.code(404).send({ error: "not_found" });
|
|
293
310
|
// #214 — re-read through the replica view so the response carries derived columns.
|
|
@@ -323,9 +340,17 @@ export function mountDeleteRoute(opts: VerbOptions): void {
|
|
|
323
340
|
return reply.code(400).send({ error: "invalid_id" });
|
|
324
341
|
}
|
|
325
342
|
const idCond = eq(opts.table.id, idValue);
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
343
|
+
// A child row still referencing this one makes DELETE a 409, not a 500.
|
|
344
|
+
let result: unknown;
|
|
345
|
+
try {
|
|
346
|
+
result = await opts.db
|
|
347
|
+
.delete(opts.table)
|
|
348
|
+
.where(discCond ? and(idCond, discCond) : idCond);
|
|
349
|
+
} catch (e) {
|
|
350
|
+
const f = classifyConstraintError(e);
|
|
351
|
+
if (f === undefined) { logAndRedact(e); throw new RedactedDatabaseError(); }
|
|
352
|
+
return reply.code(f.status).send(f.body);
|
|
353
|
+
}
|
|
329
354
|
// Both libsql and pg drivers expose a rows-affected counter, in different
|
|
330
355
|
// shapes. Treat anything > 0 as "found and deleted."
|
|
331
356
|
const affected = extractRowCount(result);
|
package/src/fastify/index.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
// `require("fastify")`.
|
|
13
13
|
|
|
14
14
|
import type { FastifyInstance } from "fastify";
|
|
15
|
+
import { withConstraintMapping } from "../constraint-errors.js";
|
|
15
16
|
import type { ZodTypeAny } from "zod";
|
|
16
17
|
import qs from "qs";
|
|
17
18
|
import type { ObjectManager } from "../object-manager.js";
|
|
@@ -179,8 +180,15 @@ export function mountCreateRoute(opts: SingleVerbOptions): void {
|
|
|
179
180
|
// Zod returns `unknown` for parsed.data; the schema is authored from the
|
|
180
181
|
// same metadata that drives ObjectManager, so the shape is guaranteed
|
|
181
182
|
// compatible — cast at the trust boundary.
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
// A declared constraint the DB enforces (a foreign key from identity.reference,
|
|
184
|
+
// a unique index) must not surface as a 500 echoing the SQL and its bound params.
|
|
185
|
+
return withConstraintMapping(
|
|
186
|
+
async () => {
|
|
187
|
+
const row = await (await opts.om()).create(opts.entity, parsed.data as Row);
|
|
188
|
+
return reply.code(201).send(row);
|
|
189
|
+
},
|
|
190
|
+
(f) => reply.code(f.status).send(f.body),
|
|
191
|
+
);
|
|
184
192
|
});
|
|
185
193
|
}
|
|
186
194
|
|
|
@@ -200,10 +208,15 @@ export function mountUpdateRoute(opts: SingleVerbOptions): void {
|
|
|
200
208
|
// (consistent with mountDeleteRoute). ObjectManager's default behavior
|
|
201
209
|
// throws NotFoundError, which Fastify would surface as 500.
|
|
202
210
|
// Raw id — ObjectManager coerces per PK metadata (see mountGetRoute).
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
211
|
+
return withConstraintMapping(
|
|
212
|
+
async () => {
|
|
213
|
+
const row = await (await opts.om()).update(opts.entity, id, parsed.data as Row, {
|
|
214
|
+
ifMissing: "ignore",
|
|
215
|
+
});
|
|
216
|
+
return row ?? reply.code(404).send({ error: "not_found" });
|
|
217
|
+
},
|
|
218
|
+
(f) => reply.code(f.status).send(f.body),
|
|
219
|
+
);
|
|
207
220
|
};
|
|
208
221
|
const path = `${opts.path}/:id`;
|
|
209
222
|
const ro = routeOpts(opts);
|
|
@@ -220,8 +233,13 @@ export function mountDeleteRoute(opts: SingleVerbOptions): void {
|
|
|
220
233
|
const { id } = req.params as { id: string };
|
|
221
234
|
// Raw id — ObjectManager coerces per PK metadata (see mountGetRoute).
|
|
222
235
|
// Pre-coercing conflated '0123' with 123 on a string pk: wrong-row DELETE.
|
|
223
|
-
|
|
224
|
-
|
|
236
|
+
return withConstraintMapping(
|
|
237
|
+
async () => {
|
|
238
|
+
const deleted = await (await opts.om()).delete(opts.entity, id);
|
|
239
|
+
return deleted ? reply.code(204).send() : reply.code(404).send({ error: "not_found" });
|
|
240
|
+
},
|
|
241
|
+
(f) => reply.code(f.status).send(f.body),
|
|
242
|
+
);
|
|
225
243
|
});
|
|
226
244
|
}
|
|
227
245
|
|
package/src/hono/index.ts
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
// API-contract corpus.
|
|
18
18
|
|
|
19
19
|
import type { Hono, Context } from "hono";
|
|
20
|
+
import { classifyConstraintError, RedactedDatabaseError, logAndRedact } from "../constraint-errors.js";
|
|
20
21
|
import type { ZodTypeAny } from "zod";
|
|
21
22
|
import { eq, count, and } from "drizzle-orm";
|
|
22
23
|
import qs from "qs";
|
|
@@ -227,7 +228,17 @@ export function mountCreateRoute(opts: VerbOptions): void {
|
|
|
227
228
|
if (!parsed.success) {
|
|
228
229
|
return c.json({ error: "validation", issues: parsed.error.issues }, 400);
|
|
229
230
|
}
|
|
230
|
-
|
|
231
|
+
// Same redaction contract as the Fastify mount: a constraint the DB enforces must not
|
|
232
|
+
// come back as a 500 carrying the SQL and its bound parameters. Both mounts are
|
|
233
|
+
// required to emit byte-identical responses (docs/features/api-contract.md).
|
|
234
|
+
let result: unknown;
|
|
235
|
+
try {
|
|
236
|
+
result = await opts.db.insert(opts.table).values(parsed.data).returning();
|
|
237
|
+
} catch (err) {
|
|
238
|
+
const f = classifyConstraintError(err);
|
|
239
|
+
if (f === undefined) { logAndRedact(err); throw new RedactedDatabaseError(); }
|
|
240
|
+
return c.json(f.body, f.status as 400 | 409);
|
|
241
|
+
}
|
|
231
242
|
const row = (result as unknown[])[0];
|
|
232
243
|
// Echo the row through the replica view so derived columns are present (#214).
|
|
233
244
|
return c.json(await reReadThroughView(opts, row), 201);
|
|
@@ -246,11 +257,18 @@ export function mountUpdateRoute(opts: VerbOptions): void {
|
|
|
246
257
|
// LOOKING id on a TEXT pk would otherwise UPDATE the wrong row.
|
|
247
258
|
const idValue = coerceIdForColumn(opts.table.id, id);
|
|
248
259
|
if (idValue === undefined) return c.json({ error: "invalid_id" }, 400);
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
.
|
|
252
|
-
|
|
253
|
-
|
|
260
|
+
let result: unknown;
|
|
261
|
+
try {
|
|
262
|
+
result = await opts.db
|
|
263
|
+
.update(opts.table)
|
|
264
|
+
.set(parsed.data)
|
|
265
|
+
.where(eq(opts.table.id, idValue))
|
|
266
|
+
.returning();
|
|
267
|
+
} catch (err) {
|
|
268
|
+
const f = classifyConstraintError(err);
|
|
269
|
+
if (f === undefined) { logAndRedact(err); throw new RedactedDatabaseError(); }
|
|
270
|
+
return c.json(f.body, f.status as 400 | 409);
|
|
271
|
+
}
|
|
254
272
|
const row = (result as unknown[])[0];
|
|
255
273
|
return row ? c.json(await reReadThroughView(opts, row)) : c.json({ error: "not_found" }, 404);
|
|
256
274
|
};
|
|
@@ -269,9 +287,15 @@ export function mountDeleteRoute(opts: VerbOptions): void {
|
|
|
269
287
|
// LOOKING id on a TEXT pk would otherwise DELETE the wrong row (data loss).
|
|
270
288
|
const idValue = coerceIdForColumn(opts.table.id, id);
|
|
271
289
|
if (idValue === undefined) return c.json({ error: "invalid_id" }, 400);
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
290
|
+
// A child row still referencing this one makes DELETE a 409, not a 500.
|
|
291
|
+
let result: unknown;
|
|
292
|
+
try {
|
|
293
|
+
result = await opts.db.delete(opts.table).where(eq(opts.table.id, idValue));
|
|
294
|
+
} catch (err) {
|
|
295
|
+
const f = classifyConstraintError(err);
|
|
296
|
+
if (f === undefined) { logAndRedact(err); throw new RedactedDatabaseError(); }
|
|
297
|
+
return c.json(f.body, f.status as 400 | 409);
|
|
298
|
+
}
|
|
275
299
|
const affected = extractRowCount(result);
|
|
276
300
|
if (affected > 0) {
|
|
277
301
|
// 204 No Content — body must be empty.
|
package/src/index.ts
CHANGED
|
@@ -39,3 +39,12 @@ export {
|
|
|
39
39
|
export { Format } from "@metaobjectsdev/render";
|
|
40
40
|
export { LlmCallDbRecorder, NullRecorder, recordLlmCall, buildLlmCallRow, persistLlmCallRow, truncateRow } from "./llm-recorder.js";
|
|
41
41
|
export type { LlmRecorder, LlmCallRow, LlmCallInput, RecordLlmCallOptions, RecordLlmCallResult, LlmCallDbRecorderOpts } from "./llm-recorder.js";
|
|
42
|
+
|
|
43
|
+
// Constraint-violation mapping for generated write routes — never echoes the query.
|
|
44
|
+
export {
|
|
45
|
+
classifyConstraintError,
|
|
46
|
+
withConstraintMapping,
|
|
47
|
+
RedactedDatabaseError,
|
|
48
|
+
type ConstraintKind,
|
|
49
|
+
type ConstraintFailure,
|
|
50
|
+
} from "./constraint-errors.js";
|