@askdb/core 1.0.0-beta.45 → 1.0.0-beta.46
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 +15 -13
- package/dist/ask.d.ts +15 -7
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +29 -5
- package/dist/ask.js.map +1 -1
- package/dist/enrichment/prompt.d.ts.map +1 -1
- package/dist/enrichment/prompt.js +6 -4
- package/dist/enrichment/prompt.js.map +1 -1
- package/dist/enrichment/types.d.ts +13 -12
- package/dist/enrichment/types.d.ts.map +1 -1
- package/dist/errors.d.ts +30 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/logging/askdb-logger.d.ts +2 -0
- package/dist/logging/askdb-logger.d.ts.map +1 -1
- package/dist/logging/create-askdb-logger.d.ts.map +1 -1
- package/dist/logging/create-askdb-logger.js +3 -0
- package/dist/logging/create-askdb-logger.js.map +1 -1
- package/dist/logging/log-events.d.ts +8 -0
- package/dist/logging/log-events.d.ts.map +1 -1
- package/dist/logging/log-events.js +8 -0
- package/dist/logging/log-events.js.map +1 -1
- package/dist/schema/normalize.d.ts +0 -2
- package/dist/schema/normalize.d.ts.map +1 -1
- package/dist/schema/normalize.js +0 -4
- package/dist/schema/normalize.js.map +1 -1
- package/dist/schema/v2/index.d.ts +3 -2
- package/dist/schema/v2/index.d.ts.map +1 -1
- package/dist/schema/v2/index.js +3 -2
- package/dist/schema/v2/index.js.map +1 -1
- package/dist/schema/v2/loader.d.ts +24 -6
- package/dist/schema/v2/loader.d.ts.map +1 -1
- package/dist/schema/v2/loader.js +164 -100
- package/dist/schema/v2/loader.js.map +1 -1
- package/dist/schema/v2/save-file.d.ts +56 -0
- package/dist/schema/v2/save-file.d.ts.map +1 -0
- package/dist/schema/v2/save-file.js +138 -0
- package/dist/schema/v2/save-file.js.map +1 -0
- package/dist/schema/v2/tenant-policy-loader.d.ts +1 -10
- package/dist/schema/v2/tenant-policy-loader.d.ts.map +1 -1
- package/dist/schema/v2/tenant-policy-loader.js +65 -51
- package/dist/schema/v2/tenant-policy-loader.js.map +1 -1
- package/dist/schema/v2/tenant-policy.d.ts +5 -0
- package/dist/schema/v2/tenant-policy.d.ts.map +1 -1
- package/dist/schema/v2/tenant-policy.js +26 -0
- package/dist/schema/v2/tenant-policy.js.map +1 -1
- package/dist/sql/bind.d.ts +11 -4
- package/dist/sql/bind.d.ts.map +1 -1
- package/dist/sql/bind.js +5 -8
- package/dist/sql/bind.js.map +1 -1
- package/dist/sql/dialect-spec.d.ts +1 -0
- package/dist/sql/dialect-spec.d.ts.map +1 -1
- package/dist/sql/dialect-spec.js +2 -1
- package/dist/sql/dialect-spec.js.map +1 -1
- package/dist/sql/guardrail-decide.d.ts +4 -2
- package/dist/sql/guardrail-decide.d.ts.map +1 -1
- package/dist/sql/guardrail-decide.js.map +1 -1
- package/dist/sql/prompt-identifiers.d.ts +9 -0
- package/dist/sql/prompt-identifiers.d.ts.map +1 -1
- package/dist/sql/prompt-identifiers.js +22 -3
- package/dist/sql/prompt-identifiers.js.map +1 -1
- package/dist/sql/prompt.d.ts.map +1 -1
- package/dist/sql/prompt.js +3 -1
- package/dist/sql/prompt.js.map +1 -1
- package/dist/sql/rebind.d.ts +34 -7
- package/dist/sql/rebind.d.ts.map +1 -1
- package/dist/sql/rebind.js +50 -10
- package/dist/sql/rebind.js.map +1 -1
- package/dist/sql/tenant-placeholders.d.ts +26 -11
- package/dist/sql/tenant-placeholders.d.ts.map +1 -1
- package/dist/sql/tenant-placeholders.js +50 -25
- package/dist/sql/tenant-placeholders.js.map +1 -1
- package/dist/sql/tenant-policy-warnings.d.ts +8 -0
- package/dist/sql/tenant-policy-warnings.d.ts.map +1 -0
- package/dist/sql/tenant-policy-warnings.js +21 -0
- package/dist/sql/tenant-policy-warnings.js.map +1 -0
- package/dist/sql/validate.d.ts +15 -3
- package/dist/sql/validate.d.ts.map +1 -1
- package/dist/sql/validate.js +107 -8
- package/dist/sql/validate.js.map +1 -1
- package/package.json +2 -2
package/dist/sql/rebind.js
CHANGED
|
@@ -3,7 +3,7 @@ import { isTenantPlaceholderName, markerStyleForDialect, renderPreparedQuery, sc
|
|
|
3
3
|
import { BUILT_IN_DIALECTS, isBuiltInDialectId } from "./dialect-spec.js";
|
|
4
4
|
import { decide, throwIfDenied } from "./guardrail-decide.js";
|
|
5
5
|
import { evaluateGuardrails, guardrailPlan } from "./guardrails.js";
|
|
6
|
-
import { findTenantPlaceholderAnyCase, resolveTenantSql, unexpandedSubtreeError } from "./tenant-placeholders.js";
|
|
6
|
+
import { assertTenantSqlMode, DEFAULT_TENANT_SQL_MODE, findTenantPlaceholderAnyCase, resolveTenantSql, unexpandedSubtreeError, } from "./tenant-placeholders.js";
|
|
7
7
|
import { validateTenantScope } from "./tenant-scope-validate.js";
|
|
8
8
|
import { validateSelectSql } from "./validate.js";
|
|
9
9
|
/**
|
|
@@ -17,16 +17,20 @@ import { validateSelectSql } from "./validate.js";
|
|
|
17
17
|
* `guardrails.acceptWarnings` includes `"tenant"`; a sensitive `warn` binds and is
|
|
18
18
|
* reported in `verdict`.
|
|
19
19
|
* - Binds the business values from `values`, then renders each `:tenant_<root>_ids`
|
|
20
|
-
* placeholder from `guardrails.tenantScope
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* placeholder from `guardrails.tenantScope`. In `sql`: driver markers numbered from the
|
|
21
|
+
* first slot with the IDs in `tenantParams` (`tenantSqlMode: "sql-params"`, the default),
|
|
22
|
+
* or escaped literals (`"sql-only"`). In `unboundSql`: driver markers after the business
|
|
23
|
+
* markers (in source order for `?` dialects), with the IDs folded into `params`.
|
|
24
|
+
* `bindings` lists the business parameters.
|
|
23
25
|
*
|
|
24
26
|
* Throws `QueryParameterError` without `guardrails` (`MISSING_GUARDRAIL_CONTEXT`), for a
|
|
25
27
|
* `:tenant_*` key in `values` (`TENANT_VALUE_SUPPLIED`), and when the tenant markers can't
|
|
26
28
|
* be aligned with the business params (`TENANT_PARAM_ALIGNMENT`). Throws `TenantScopeError`
|
|
27
|
-
* for a missing or invalid scope, an unexpanded `subtree` (`SUBTREE_NOT_RESOLVABLE`),
|
|
29
|
+
* for a missing or invalid scope, an unexpanded `subtree` (`SUBTREE_NOT_RESOLVABLE`), a
|
|
28
30
|
* placeholder the scope has no IDs for, including any placeholder under a `global` scope or
|
|
29
|
-
* a schema without a tenant policy (`UNRESOLVED_TENANT_PLACEHOLDER`)
|
|
31
|
+
* a schema without a tenant policy (`UNRESOLVED_TENANT_PLACEHOLDER`), and a tenant ID
|
|
32
|
+
* that isn't printable ASCII or that contains a backslash, which `sql` can't inline safely
|
|
33
|
+
* (`UNESCAPABLE_TENANT_ID`). Synchronous.
|
|
30
34
|
*/
|
|
31
35
|
export function bindPreparedQuery(prepared, values, guardrails) {
|
|
32
36
|
if (typeof guardrails !== "object" || guardrails === null || guardrails.schema === undefined) {
|
|
@@ -36,7 +40,9 @@ export function bindPreparedQuery(prepared, values, guardrails) {
|
|
|
36
40
|
if (!isBuiltInDialectId(prepared.dialect)) {
|
|
37
41
|
throw new QueryParameterError(`Unknown dialect '${prepared.dialect}'.`, "DIALECT_UNSUPPORTED");
|
|
38
42
|
}
|
|
39
|
-
const spec =
|
|
43
|
+
const spec = rebindSpec(prepared, guardrails.dialect);
|
|
44
|
+
const tenantMode = guardrails.tenantSqlMode ?? DEFAULT_TENANT_SQL_MODE;
|
|
45
|
+
assertTenantSqlMode(tenantMode, "bindPreparedQuery()");
|
|
40
46
|
rejectTenantValues(values);
|
|
41
47
|
const { schema } = guardrails;
|
|
42
48
|
const policy = "schemaId" in schema ? schema.tenantPolicy : undefined;
|
|
@@ -75,9 +81,15 @@ export function bindPreparedQuery(prepared, values, guardrails) {
|
|
|
75
81
|
: `The template references ${placeholder}, but the schema has no tenant policy to render it ` +
|
|
76
82
|
"from. Refusing to bind a template with an unsubstituted tenant placeholder.", "UNRESOLVED_TENANT_PLACEHOLDER");
|
|
77
83
|
}
|
|
78
|
-
let bound = renderPreparedQuery(prepared, values, { skipTenantPlaceholders: true });
|
|
84
|
+
let bound = renderPreparedQuery(prepared, values, { skipTenantPlaceholders: true, dialect: spec });
|
|
85
|
+
let tenantParams;
|
|
79
86
|
if (policy && scope) {
|
|
80
|
-
|
|
87
|
+
// `sql` carries business values as inlined literals, so its only markers are tenant
|
|
88
|
+
// markers, numbered from the first slot, as in ask() (ADR 0024).
|
|
89
|
+
const resolved = resolveTenantSql(bound.sql, policy, scope, tenantMode, 1, spec);
|
|
90
|
+
const sql = resolved.sql;
|
|
91
|
+
if (resolved.mode === "sql-params" && resolved.params.length > 0)
|
|
92
|
+
tenantParams = resolved.params;
|
|
81
93
|
const unbound = bindTenantIntoUnboundSql(bound, {
|
|
82
94
|
namedSql: prepared.namedSql,
|
|
83
95
|
tenantPolicy: policy,
|
|
@@ -95,7 +107,7 @@ export function bindPreparedQuery(prepared, values, guardrails) {
|
|
|
95
107
|
}
|
|
96
108
|
validateSelectSql(spec, bound.sql);
|
|
97
109
|
validateSelectSql(spec, bound.unboundSql);
|
|
98
|
-
return { ...bound, verdict };
|
|
110
|
+
return { ...bound, ...(tenantParams ? { tenantParams } : {}), verdict };
|
|
99
111
|
}
|
|
100
112
|
function rejectTenantValues(values) {
|
|
101
113
|
for (const key of Object.keys(values ?? {})) {
|
|
@@ -172,4 +184,32 @@ export function bindTenantIntoUnboundSql(bound, ctx) {
|
|
|
172
184
|
}));
|
|
173
185
|
return { unboundSql: unbound.sql, params: combined, bindings };
|
|
174
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* The spec a rebind checks and renders under. A `"builtin"` template uses its built-in spec
|
|
189
|
+
* unless the host passes one. A `"host"` template, or one stored without `dialectRules`, has
|
|
190
|
+
* rules AskDB can't recover, so it needs the host's spec rather than a guess (ADR 0032).
|
|
191
|
+
*/
|
|
192
|
+
function rebindSpec(prepared, dialect) {
|
|
193
|
+
if (dialect === undefined) {
|
|
194
|
+
if (prepared.dialectRules === "builtin")
|
|
195
|
+
return BUILT_IN_DIALECTS[prepared.dialect];
|
|
196
|
+
const fix = `Pass guardrails.dialect: the DialectSpec ask() ran with, or the built-in id '${prepared.dialect}' ` +
|
|
197
|
+
"if it ran with the built-in rules.";
|
|
198
|
+
const rules = prepared.dialectRules;
|
|
199
|
+
throw new QueryParameterError(rules === "host"
|
|
200
|
+
? "This template was made by ask() under a host's DialectSpec (dialectRules: 'host'), so " +
|
|
201
|
+
`bindPreparedQuery() checks and renders it only under that spec. ${fix} A constant from another ` +
|
|
202
|
+
"copy of @askdb/core counts as a host's spec."
|
|
203
|
+
: rules === undefined || rules === null
|
|
204
|
+
? "This template has no dialectRules: it was stored before AskDB recorded which dialect rules ask() " +
|
|
205
|
+
`used, so bindPreparedQuery() won't guess. ${fix}`
|
|
206
|
+
: `This template has dialectRules ${JSON.stringify(rules).replace(/"/g, "'")}, which is neither 'builtin' ` +
|
|
207
|
+
`nor 'host', so bindPreparedQuery() won't guess. ${fix}`, "DIALECT_SPEC_REQUIRED");
|
|
208
|
+
}
|
|
209
|
+
const spec = typeof dialect === "string" ? (isBuiltInDialectId(dialect) ? BUILT_IN_DIALECTS[dialect] : undefined) : dialect;
|
|
210
|
+
if (spec?.id !== prepared.dialect) {
|
|
211
|
+
throw new QueryParameterError(`guardrails.dialect must have the template's dialect id '${prepared.dialect}'.`, "DIALECT_UNSUPPORTED");
|
|
212
|
+
}
|
|
213
|
+
return spec;
|
|
214
|
+
}
|
|
175
215
|
//# sourceMappingURL=rebind.js.map
|
package/dist/sql/rebind.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebind.js","sourceRoot":"","sources":["../../src/sql/rebind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAyB,MAAM,cAAc,CAAC;AAG5F,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GAMjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"rebind.js","sourceRoot":"","sources":["../../src/sql/rebind.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,18 @@ import { TenantScopeError } from "../errors.js";
|
|
|
2
2
|
import { placeholderForRoot, placeholderForTenantRoot, type NormalizedTenantPolicy, type TenantScope } from "../schema/v2/tenant-policy.js";
|
|
3
3
|
import { type DialectSpec } from "./dialect-spec.js";
|
|
4
4
|
export type TenantSqlOutputMode = "sql-only" | "sql-params";
|
|
5
|
+
/**
|
|
6
|
+
* The `tenantSqlMode` used when a caller doesn't set one: tenant IDs leave the SQL text
|
|
7
|
+
* and bind through the dialect's driver markers. Hosts that report or forward the mode
|
|
8
|
+
* import this rather than hard-code it.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_TENANT_SQL_MODE: TenantSqlOutputMode;
|
|
11
|
+
/**
|
|
12
|
+
* Refuse a `tenantSqlMode` that is neither `"sql-only"` nor `"sql-params"`. Rendering it as
|
|
13
|
+
* either would guess at the host's intent, and a custom `AskDialect`'s `$N` markers are money
|
|
14
|
+
* constants on SQL Server, so it fails closed (ADR 0024).
|
|
15
|
+
*/
|
|
16
|
+
export declare function assertTenantSqlMode(mode: unknown, caller: string): asserts mode is TenantSqlOutputMode;
|
|
5
17
|
export type TenantBinding = {
|
|
6
18
|
placeholder: string;
|
|
7
19
|
rootLabel: string;
|
|
@@ -26,11 +38,10 @@ export type TenantPlaceholderResult = {
|
|
|
26
38
|
};
|
|
27
39
|
/**
|
|
28
40
|
* The parts of a dialect the tenant substituter reads: `id` picks the driver
|
|
29
|
-
* marker style (`$N` / `?` / `@pN`)
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* and quote-doubling only.
|
|
41
|
+
* marker style (`$N` / `?` / `@pN`), and with `backslashEscapes` it says how to lex
|
|
42
|
+
* the SQL, so only placeholders in code regions are substituted. Inlined tenant IDs
|
|
43
|
+
* are escaped the same way on every dialect (printable ASCII only, quotes doubled, no backslash).
|
|
44
|
+
* Omit the dialect entirely for Postgres-style `$N` markers and Postgres lexing.
|
|
34
45
|
*/
|
|
35
46
|
export type TenantSqlDialect = Partial<Pick<DialectSpec, "id" | "backslashEscapes">>;
|
|
36
47
|
export { placeholderForRoot, placeholderForTenantRoot };
|
|
@@ -51,9 +62,10 @@ export declare function unexpandedSubtreeError(tenantRoot: string, caller: "reso
|
|
|
51
62
|
export declare function findTenantPlaceholderAnyCase(sql: string, dialect?: TenantSqlDialect): string | undefined;
|
|
52
63
|
/**
|
|
53
64
|
* Substitute the `:tenant_<root>_ids` placeholders in `sql` with the IDs from
|
|
54
|
-
* `scope` — as
|
|
55
|
-
*
|
|
56
|
-
*
|
|
65
|
+
* `scope` — as dialect driver markers plus a `params` array (`"sql-params"`, the
|
|
66
|
+
* default), or as escaped literals (`"sql-only"`, for a tool that takes one SQL
|
|
67
|
+
* string). Only placeholders in code regions are touched; text inside string
|
|
68
|
+
* literals and quoted identifiers is left as-is.
|
|
57
69
|
*
|
|
58
70
|
* A `subtree` access must already be expanded into per-root IDs (a `multi_root`
|
|
59
71
|
* access, or `ids` when the subtree is one root table): `ask()` does this via its
|
|
@@ -61,11 +73,14 @@ export declare function findTenantPlaceholderAnyCase(sql: string, dialect?: Tena
|
|
|
61
73
|
* an unexpanded `subtree` throws (`SUBTREE_NOT_RESOLVABLE`) rather than bind the
|
|
62
74
|
* seed IDs only.
|
|
63
75
|
*
|
|
76
|
+
* Throws `TenantScopeError` (`TENANT_SQL_MODE_REQUIRED`) for a `mode` other than
|
|
77
|
+
* `"sql-only"` or `"sql-params"`.
|
|
64
78
|
* Also throws `TenantScopeError` when a placeholder cannot be resolved
|
|
65
79
|
* (`UNRESOLVED_TENANT_PLACEHOLDER`) or when a multi-ID scope meets a predicate
|
|
66
|
-
* with no list form (`UNSUPPORTED_TENANT_PREDICATE`), and in `sql-only` mode when
|
|
67
|
-
*
|
|
68
|
-
* (`UNESCAPABLE_TENANT_ID`).
|
|
80
|
+
* with no list form (`UNSUPPORTED_TENANT_PREDICATE`), and in `sql-only` mode when a
|
|
81
|
+
* tenant ID contains a backslash or a character outside printable ASCII, on every dialect
|
|
82
|
+
* (`UNESCAPABLE_TENANT_ID`).
|
|
83
|
+
* Throws `SchemaParseError` when two of the policy's roots
|
|
69
84
|
* derive the same placeholder, rather than bind one root's IDs through the other's.
|
|
70
85
|
*
|
|
71
86
|
* A `global` scope binds no IDs: SQL without a tenant placeholder is returned unchanged,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-placeholders.d.ts","sourceRoot":"","sources":["../../src/sql/tenant-placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAEL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"tenant-placeholders.d.ts","sourceRoot":"","sources":["../../src/sql/tenant-placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAEL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgBzE,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,YAAY,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAAkC,CAAC;AAEzE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,mBAAmB,CAMtG;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,GAC5D;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC;AAerF,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,CAAC;AAMxD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAM3F;AAmED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oBAAoB,GAAG,0BAA0B,GAAG,qBAAqB,GAChF,gBAAgB,CASlB;AAmGD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAQxG;AAkJD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,mBAA6C,EACnD,eAAe,GAAE,MAAU,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,uBAAuB,CA4CzB"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { TenantScopeError } from "../errors.js";
|
|
2
2
|
import { assertDistinctRootPlaceholders, placeholderForRoot, placeholderForTenantRoot, } from "../schema/v2/tenant-policy.js";
|
|
3
|
-
import {
|
|
4
|
-
import { escapeSqlLiteral,
|
|
3
|
+
import { isBuiltInDialectId } from "./dialect-spec.js";
|
|
4
|
+
import { escapeSqlLiteral, formatMarker, isTenantPlaceholderName, markerStyleForDialect, scanPlaceholders, scanTenantPlaceholders, } from "./bind.js";
|
|
5
|
+
/**
|
|
6
|
+
* The `tenantSqlMode` used when a caller doesn't set one: tenant IDs leave the SQL text
|
|
7
|
+
* and bind through the dialect's driver markers. Hosts that report or forward the mode
|
|
8
|
+
* import this rather than hard-code it.
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_TENANT_SQL_MODE = "sql-params";
|
|
11
|
+
/**
|
|
12
|
+
* Refuse a `tenantSqlMode` that is neither `"sql-only"` nor `"sql-params"`. Rendering it as
|
|
13
|
+
* either would guess at the host's intent, and a custom `AskDialect`'s `$N` markers are money
|
|
14
|
+
* constants on SQL Server, so it fails closed (ADR 0024).
|
|
15
|
+
*/
|
|
16
|
+
export function assertTenantSqlMode(mode, caller) {
|
|
17
|
+
if (mode === "sql-only" || mode === "sql-params")
|
|
18
|
+
return;
|
|
19
|
+
throw new TenantScopeError(`${caller} got tenantSqlMode ${JSON.stringify(mode)}; it must be 'sql-params' or 'sql-only'.`, "TENANT_SQL_MODE_REQUIRED");
|
|
20
|
+
}
|
|
5
21
|
/** The lexer input for a {@link TenantSqlDialect}: only meaningful when an `id` is known. */
|
|
6
22
|
function lexerDialect(dialect) {
|
|
7
23
|
return dialect?.id === undefined
|
|
@@ -89,22 +105,26 @@ export function unexpandedSubtreeError(tenantRoot, caller) {
|
|
|
89
105
|
// ---------------------------------------------------------------------------
|
|
90
106
|
// Substitution — token-aware, one edit per code-region occurrence
|
|
91
107
|
// ---------------------------------------------------------------------------
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
/** Printable ASCII without the backslash: the only characters a tenant-ID literal may hold. */
|
|
109
|
+
const INLINABLE_TENANT_ID = /^[\x20-\x5b\x5d-\x7e]*$/;
|
|
110
|
+
/**
|
|
111
|
+
* Inline one tenant ID as a string literal. A literal of printable ASCII, with no
|
|
112
|
+
* backslash and its quotes doubled, reads the same whether or not the server treats
|
|
113
|
+
* backslash as an escape, and goes out as the same bytes in every ASCII-compatible
|
|
114
|
+
* connection charset. Any other ID has no such form: a backslash breaks out on a server
|
|
115
|
+
* that reads strings differently from the dialect (Postgres with
|
|
116
|
+
* `standard_conforming_strings = off`), and a non-ASCII character's bytes depend on the
|
|
117
|
+
* connection charset (`¥` is sent as 0x5C, a backslash, under `sjis`, `cp932` or `ujis`).
|
|
118
|
+
* So it's refused on every dialect, never guessed at (ADR 0024).
|
|
119
|
+
*/
|
|
120
|
+
function escapeTenantId(value) {
|
|
121
|
+
if (!INLINABLE_TENANT_ID.test(value)) {
|
|
122
|
+
throw new TenantScopeError("A tenant ID contains a backslash or a character outside printable ASCII, which tenantSqlMode " +
|
|
123
|
+
"'sql-only' can't inline safely: a server whose string settings or connection charset differ from " +
|
|
124
|
+
"the dialect's can read it as the end of the literal. Use tenantSqlMode 'sql-params' (the default) " +
|
|
125
|
+
"to pass tenant IDs as driver parameters.", "UNESCAPABLE_TENANT_ID");
|
|
106
126
|
}
|
|
107
|
-
return escapeSqlLiteral(value,
|
|
127
|
+
return escapeSqlLiteral(value, undefined);
|
|
108
128
|
}
|
|
109
129
|
/**
|
|
110
130
|
* Replace every tenant placeholder that sits in a code region of `sql`.
|
|
@@ -244,7 +264,7 @@ function unsupportedPredicate(occ, op) {
|
|
|
244
264
|
// Replace placeholders — SQL-only mode (inline literals)
|
|
245
265
|
// ---------------------------------------------------------------------------
|
|
246
266
|
function replacePlaceholdersWithLiterals(sql, resolved, dialect) {
|
|
247
|
-
return substituteTenantPlaceholders(sql, resolved, (r) => r.ids.map(
|
|
267
|
+
return substituteTenantPlaceholders(sql, resolved, (r) => r.ids.map(escapeTenantId), dialect);
|
|
248
268
|
}
|
|
249
269
|
// ---------------------------------------------------------------------------
|
|
250
270
|
// Replace placeholders — SQL+params mode (dialect driver markers)
|
|
@@ -286,9 +306,10 @@ function replacePlaceholdersWithParams(sql, resolved, startIndex = 1, dialect) {
|
|
|
286
306
|
// ---------------------------------------------------------------------------
|
|
287
307
|
/**
|
|
288
308
|
* Substitute the `:tenant_<root>_ids` placeholders in `sql` with the IDs from
|
|
289
|
-
* `scope` — as
|
|
290
|
-
*
|
|
291
|
-
*
|
|
309
|
+
* `scope` — as dialect driver markers plus a `params` array (`"sql-params"`, the
|
|
310
|
+
* default), or as escaped literals (`"sql-only"`, for a tool that takes one SQL
|
|
311
|
+
* string). Only placeholders in code regions are touched; text inside string
|
|
312
|
+
* literals and quoted identifiers is left as-is.
|
|
292
313
|
*
|
|
293
314
|
* A `subtree` access must already be expanded into per-root IDs (a `multi_root`
|
|
294
315
|
* access, or `ids` when the subtree is one root table): `ask()` does this via its
|
|
@@ -296,11 +317,14 @@ function replacePlaceholdersWithParams(sql, resolved, startIndex = 1, dialect) {
|
|
|
296
317
|
* an unexpanded `subtree` throws (`SUBTREE_NOT_RESOLVABLE`) rather than bind the
|
|
297
318
|
* seed IDs only.
|
|
298
319
|
*
|
|
320
|
+
* Throws `TenantScopeError` (`TENANT_SQL_MODE_REQUIRED`) for a `mode` other than
|
|
321
|
+
* `"sql-only"` or `"sql-params"`.
|
|
299
322
|
* Also throws `TenantScopeError` when a placeholder cannot be resolved
|
|
300
323
|
* (`UNRESOLVED_TENANT_PLACEHOLDER`) or when a multi-ID scope meets a predicate
|
|
301
|
-
* with no list form (`UNSUPPORTED_TENANT_PREDICATE`), and in `sql-only` mode when
|
|
302
|
-
*
|
|
303
|
-
* (`UNESCAPABLE_TENANT_ID`).
|
|
324
|
+
* with no list form (`UNSUPPORTED_TENANT_PREDICATE`), and in `sql-only` mode when a
|
|
325
|
+
* tenant ID contains a backslash or a character outside printable ASCII, on every dialect
|
|
326
|
+
* (`UNESCAPABLE_TENANT_ID`).
|
|
327
|
+
* Throws `SchemaParseError` when two of the policy's roots
|
|
304
328
|
* derive the same placeholder, rather than bind one root's IDs through the other's.
|
|
305
329
|
*
|
|
306
330
|
* A `global` scope binds no IDs: SQL without a tenant placeholder is returned unchanged,
|
|
@@ -308,7 +332,8 @@ function replacePlaceholdersWithParams(sql, resolved, startIndex = 1, dialect) {
|
|
|
308
332
|
* fill it (ADR 0010). A placeholder in any casing but the exact lowercase form throws the
|
|
309
333
|
* same reason under every scope.
|
|
310
334
|
*/
|
|
311
|
-
export function resolveTenantSql(sql, policy, scope, mode =
|
|
335
|
+
export function resolveTenantSql(sql, policy, scope, mode = DEFAULT_TENANT_SQL_MODE, paramStartIndex = 1, dialect) {
|
|
336
|
+
assertTenantSqlMode(mode, "resolveTenantSql()");
|
|
312
337
|
if (scope.access.kind === "subtree") {
|
|
313
338
|
throw unexpandedSubtreeError(scope.access.tenantRoot, "resolveTenantSql()");
|
|
314
339
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-placeholders.js","sourceRoot":"","sources":["../../src/sql/tenant-placeholders.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tenant-placeholders.js","sourceRoot":"","sources":["../../src/sql/tenant-placeholders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AskDbLogger } from "../logging/askdb-logger.js";
|
|
2
|
+
import type { NormalizedTenantPolicy } from "../schema/v2/tenant-policy.js";
|
|
3
|
+
/**
|
|
4
|
+
* Log a loaded tenant policy's warnings once per loaded schema (ADR 0023).
|
|
5
|
+
* `loadSchema()` takes no logger, so the first `ask()` with a logger reports them.
|
|
6
|
+
*/
|
|
7
|
+
export declare function logTenantPolicyWarningsOnce(logger: AskDbLogger | undefined, policy: NormalizedTenantPolicy): void;
|
|
8
|
+
//# sourceMappingURL=tenant-policy-warnings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-policy-warnings.d.ts","sourceRoot":"","sources":["../../src/sql/tenant-policy-warnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAM5E;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,MAAM,EAAE,sBAAsB,GAC7B,IAAI,CAcN"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AskDbLogEvent } from "../logging/log-events.js";
|
|
2
|
+
import { formatTenantPolicyWarning } from "../schema/v2/tenant-policy.js";
|
|
3
|
+
/** Policies whose warnings were already logged. Each `loadSchema()` returns a new policy object. */
|
|
4
|
+
const logged = new WeakSet();
|
|
5
|
+
/**
|
|
6
|
+
* Log a loaded tenant policy's warnings once per loaded schema (ADR 0023).
|
|
7
|
+
* `loadSchema()` takes no logger, so the first `ask()` with a logger reports them.
|
|
8
|
+
*/
|
|
9
|
+
export function logTenantPolicyWarningsOnce(logger, policy) {
|
|
10
|
+
if (!logger || policy.warnings.length === 0 || logged.has(policy))
|
|
11
|
+
return;
|
|
12
|
+
logged.add(policy);
|
|
13
|
+
const log = logger.warn ?? logger.info;
|
|
14
|
+
log.call(logger, {
|
|
15
|
+
event: AskDbLogEvent.TenantPolicyWarnings,
|
|
16
|
+
enforcement: policy.enforcement,
|
|
17
|
+
warningCount: policy.warnings.length,
|
|
18
|
+
warnings: policy.warnings,
|
|
19
|
+
}, `tenant policy doesn't match schema.json: ${policy.warnings.map(formatTenantPolicyWarning).join("; ")}`);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=tenant-policy-warnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-policy-warnings.js","sourceRoot":"","sources":["../../src/sql/tenant-policy-warnings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,oGAAoG;AACpG,MAAM,MAAM,GAAG,IAAI,OAAO,EAA0B,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA+B,EAC/B,MAA8B;IAE9B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IAC1E,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IACvC,GAAG,CAAC,IAAI,CACN,MAAM,EACN;QACE,KAAK,EAAE,aAAa,CAAC,oBAAoB;QACzC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,EACD,4CAA4C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAC;AACJ,CAAC"}
|
package/dist/sql/validate.d.ts
CHANGED
|
@@ -17,9 +17,14 @@ import { type DialectSpec } from "./dialect-spec.js";
|
|
|
17
17
|
* 6. `SQL_MULTI_STATEMENT`, SQL Server lexer only (so also for a dialect id that is no
|
|
18
18
|
* built-in engine) — a second statement written without `;`, which T-SQL doesn't
|
|
19
19
|
* need, or code SQL Server may split differently from the lexer (see `tsql-batch.ts`).
|
|
20
|
-
* 7. `
|
|
20
|
+
* 7. `SQL_LOCKING_READ` — a locking read, at any depth: `FOR UPDATE`, `FOR NO KEY UPDATE`,
|
|
21
|
+
* `FOR SHARE`, `FOR KEY SHARE` or `LOCK IN SHARE MODE` on every lexer, and on the SQL Server
|
|
22
|
+
* lexer a lock hint such as `UPDLOCK` or `HOLDLOCK` unquoted anywhere, or quoted alone in
|
|
23
|
+
* parentheses right after a name, at any depth and with trailing spaces, and any such name
|
|
24
|
+
* that isn't printable ASCII, which SQL Server may read as a hint (#319).
|
|
25
|
+
* 8. `SQL_FORBIDDEN_KEYWORD` — an unquoted keyword from the shared denylist or the
|
|
21
26
|
* dialect's `extraForbiddenKeywords`.
|
|
22
|
-
*
|
|
27
|
+
* 9. `SQL_FORBIDDEN_FUNCTION` — a call (`name(`) to a function in the dialect's
|
|
23
28
|
* `blockedFunctions` (side-effecting or file/network/sleep functions).
|
|
24
29
|
*
|
|
25
30
|
* Then the dialect's `extraValidate` runs on the statement without its trailing `;`.
|
|
@@ -35,9 +40,16 @@ export declare function validateSelectSql(dialect: DialectSpec, sql: string): st
|
|
|
35
40
|
/**
|
|
36
41
|
* The words `validateSelectSql` rejects unquoted for a dialect, lowercase: the shared denylist
|
|
37
42
|
* and the spec's `extraForbiddenKeywords`, plus every built-in spec's for an id that is no
|
|
38
|
-
* built-in engine family
|
|
43
|
+
* built-in engine family, and T-SQL's lock hints wherever the SQL Server lexer runs. The
|
|
44
|
+
* NL→SQL prompt quotes names in this set.
|
|
39
45
|
*/
|
|
40
46
|
export declare function keywordsRejectedUnquoted(dialect: Pick<DialectSpec, "id" | "backslashEscapes" | "extraForbiddenKeywords">): Set<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Whether `validateSelectSql` runs the SQL Server lexer, and so the T-SQL hint checks, for a
|
|
49
|
+
* dialect: `sqlserver`, and an id that is no built-in engine family, which is checked every
|
|
50
|
+
* engine's way. The NL→SQL prompt follows it (#319).
|
|
51
|
+
*/
|
|
52
|
+
export declare function checkedAsTsql(dialect: Pick<DialectSpec, "id" | "backslashEscapes">): boolean;
|
|
41
53
|
/** Explanation of guardrails satisfied by a string already passing {@link validateSelectSql}. */
|
|
42
54
|
export type SelectGuardrailExplain = {
|
|
43
55
|
statementKind: "select" | "with";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/sql/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyCxE
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/sql/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyCxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAyB3E;AAsHD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,kBAAkB,GAAG,wBAAwB,CAAC,GAC/E,GAAG,CAAC,MAAM,CAAC,CAIb;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,kBAAkB,CAAC,GAAG,OAAO,CAG5F;AAqHD,iGAAiG;AACjG,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,QAAQ,GAAG,MAAM,CAAC;IACjC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,sBAAsB,CAkB5F"}
|