pipework 0.190.0 → 0.191.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.191.0
4
+
5
+ - **Added: `$with` on a tenant-scoped connection** (#748). `db.$with('m').materialized().as(db.select(…).from(tenantTable))` followed by `db.with(m).select().from(m)` returns only the context tenant's rows, the same as an inline subquery.
6
+ - A CTE body must be built by the same scoped connection. The callback form `(qb) => …` gets a scoped query builder.
7
+ - A raw `sql` body, or a builder from `pipe.system()` or another connection, is refused with a message saying why.
8
+ - `db.with(…)` accepts only this connection's CTEs and scopes what follows it.
9
+ - **Fixed: the tenant-scoped connection let other tenants' rows through on several paths** (#748). Postgres row-level security still applied wherever it was configured, but pipework's own tenant filter was missing on these:
10
+ - A scoped select used as a subquery, through `inArray(…)`, `.as()`, `getSQL()` or `toSQL()`, had no tenant filter. The filter used to be added only when the query was awaited. It is now in the SQL as soon as the table is named.
11
+ - A joined tenant table (inner, left, right, full or cross) wasn't filtered. Its condition now goes in the join's ON clause, so a left join keeps its unmatched rows. Right and full joins also keep the tables before them to the tenant.
12
+ - `db.with(x)` passed straight through to the unscoped connection.
13
+ - `db.transaction(cb)` handed `cb` an unscoped `tx`.
14
+ - `$count` counted every tenant's rows.
15
+ - `update().from(tenantTable)` read every tenant's rows.
16
+ - A `union` (or other set operation) accepted an operand built elsewhere.
17
+ - An `onConflictDoUpdate` upsert on a unique key that excludes the tenant column could overwrite another tenant's row. Its update is now limited to the tenant's own rows, and a conflict with another tenant's row updates nothing and returns no row. `pipe.upsert` and audited upserts are covered.
18
+ - The no-tenant guard connection refuses a tenant table on all of the same paths.
19
+ - **Changed:**
20
+ - `insert().select()` into a tenant table is refused on a scoped connection, because the tenant column can't be set from a select.
21
+ - `db.query` (relational queries) is refused on a scoped connection that has tables.
22
+
3
23
  ## 0.190.0
4
24
 
5
25
  - **Fixed: a NULL element in an array read back wrong** (#747). On every path (column selects, `db.execute`, `arrayAgg`) an unquoted NULL element now reads as `null`, for every array type:
package/dist/REFERENCE.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Pipework API Reference
2
2
 
3
3
  > Auto-generated from source JSDoc. Do not edit manually.
4
- > Generated: 2026-10-22
4
+ > Generated: 2026-10-20
5
5
 
6
6
  ## Contents
7
7
 
@@ -816,10 +816,6 @@ Acquires a transaction-scoped advisory lock. Released at commit/rollback.
816
816
 
817
817
  Runs a function in a SERIALIZABLE transaction with automatic retry on serialization failures and deadlocks.
818
818
 
819
- ### `pipe.withTimeouts`
820
-
821
- Sets statement_timeout and/or lock_timeout for the current transaction in one statement, then runs fn; a statement cancelled for them rejects with StatementTimeoutError or LockTimeoutError.
822
-
823
819
  ### `pipe.bulkSet`
824
820
 
825
821
  Bulk UPDATE ... FROM (VALUES ...) — updates multiple rows with per-row values in a single statement.
@@ -828,10 +824,6 @@ Bulk UPDATE ... FROM (VALUES ...) — updates multiple rows with per-row values
828
824
 
829
825
  Produces a typed VALUES clause for bulk operations — the base primitive for bulkSet and bulkUpsert.
830
826
 
831
- ### `pipe.fn`
832
-
833
- A set-returning SQL function as a typed source for `.from()` and joins — `pipe.fn('schema.f', { args: [field.uuid()], columns: { path: field.text() } })`. Arguments are bound and cast to their declared types.
834
-
835
827
  ### `pipe.field`
836
828
 
837
829
  Field builders for domain definitions — uuid(), text(), integer(), etc.
@@ -844,10 +836,6 @@ Registers a domain definition with table, validators, and factory projections. T
844
836
 
845
837
  Returns the global registry of all domain definitions.
846
838
 
847
- ### `pipe.external`
848
-
849
- Declares a table or view another service owns (`pipe.external(name, fields, { schema, table? })`): typed columns and every query operator, read-only, never migrated, not tenant-scoped.
850
-
851
839
  ### `pipe.update`
852
840
 
853
841
  Pipework-owned UPDATE builder — the only consumer-facing way to update pipework-managed tables (Q8).
@@ -878,54 +866,12 @@ interface WindowSpec
878
866
  interface ValueColumnDef
879
867
  ```
880
868
 
881
- **`JsonbElements`** — A jsonb array read as its elements' text. Produced by {@link jsonbElements}.
882
-
883
- ```typescript
884
- interface JsonbElements
885
- ```
886
-
887
- **`ArraySource`** — Something whose elements `arrayAny` / `arrayAll` can test.
888
-
889
- ```typescript
890
- type ArraySource =
891
- ```
892
-
893
- **`ElementOf`** — The element type of an {@link ArraySource}.
894
-
895
- ```typescript
896
- type ElementOf<S> =
897
- ```
898
-
899
- **`FunctionSpec`** — Declares a SQL function's argument and result-column shapes. See {@link fn}.
900
-
901
- ```typescript
902
- interface FunctionSpec<TArgs extends readonly AnyField[], TColumns extends Record<string, AnyField>>
903
- ```
904
-
905
- **`FunctionSourceFields`** — The selected fields of a function source: each result column as a typed SQL expression.
906
-
907
- ```typescript
908
- type FunctionSourceFields<TColumns extends Record<string, AnyField>> =
909
- ```
910
-
911
- **`FunctionSource`** — A function call usable in `.from()` and joins; its result columns are properties of it.
912
-
913
- ```typescript
914
- type FunctionSource<TAlias extends string, TColumns extends Record<string, AnyField>> =
915
- ```
916
-
917
869
  **`SerializableOptions`** — Retry policy for {@link serializable}: how many attempts on a serialization failure / deadlock, and the base backoff between them.
918
870
 
919
871
  ```typescript
920
872
  interface SerializableOptions
921
873
  ```
922
874
 
923
- **`TimeoutOptions`** — Which timeouts {@link withTimeouts} sets; each a positive integer number of milliseconds.
924
-
925
- ```typescript
926
- interface TimeoutOptions
927
- ```
928
-
929
875
  **`ManagedConnection`** — A standalone pooled connection: the raw postgres.js client, its drizzle handle, and a `close()` that ends the pool.
930
876
 
931
877
  ```typescript
@@ -946,10 +892,6 @@ JSONB query operators — typed helpers for PostgreSQL JSONB containment, key ch
946
892
 
947
893
  The @> containment operator — tests whether a JSONB column contains the given value.
948
894
 
949
- ### `jsonb.merge`
950
-
951
- Merges an object into a JSONB column in `.set()`: `coalesce(col, '{}') || value`. Top-level keys overwrite; others are kept.
952
-
953
895
  ### `jsonb.containedBy`
954
896
 
955
897
  The <@ contained-by operator — tests whether a JSONB column is contained by the given value.
@@ -1016,60 +958,6 @@ type Schema<T = unknown> = z.ZodType<T>
1016
958
  type Infer<T extends Schema> = z.infer<T>
1017
959
  ```
1018
960
 
1019
- **`StringSchema`** — A string validator — what check.string() returns, nameable without importing zod.
1020
-
1021
- ```typescript
1022
- interface StringSchema extends z.ZodString
1023
- ```
1024
-
1025
- **`NumberSchema`** — A number validator — what check.number() returns.
1026
-
1027
- ```typescript
1028
- interface NumberSchema extends z.ZodNumber
1029
- ```
1030
-
1031
- **`BooleanSchema`** — A boolean validator — what check.boolean() returns.
1032
-
1033
- ```typescript
1034
- interface BooleanSchema extends z.ZodBoolean
1035
- ```
1036
-
1037
- **`EnumSchema`** — An enum validator over string literals — what check.enum([...]) returns.
1038
-
1039
- ```typescript
1040
- interface EnumSchema<V extends string = string> extends z.ZodEnum<
1041
- ```
1042
-
1043
- **`LiteralSchema`** — A literal validator — what check.literal(v) returns.
1044
-
1045
- ```typescript
1046
- interface LiteralSchema<V extends string | number | boolean | null = string> extends z.ZodLiteral<V>
1047
- ```
1048
-
1049
- **`ArraySchema`** — An array validator — what check.array(item) returns.
1050
-
1051
- ```typescript
1052
- interface ArraySchema<Item extends z.core.SomeType = z.core.SomeType> extends z.ZodArray<Item>
1053
- ```
1054
-
1055
- **`OptionalSchema`** — An optional validator — what check.optional(inner) returns.
1056
-
1057
- ```typescript
1058
- interface OptionalSchema<Inner extends z.core.SomeType = z.core.SomeType> extends z.ZodOptional<Inner>
1059
- ```
1060
-
1061
- **`NullableSchema`** — A nullable validator — what check.nullable(inner) returns.
1062
-
1063
- ```typescript
1064
- interface NullableSchema<Inner extends z.core.SomeType = z.core.SomeType> extends z.ZodNullable<Inner>
1065
- ```
1066
-
1067
- **`ObjectSchema`** — An object validator whose .extend, .pick, .omit and .partial results stay ObjectSchema — what check.object({...}) returns.
1068
-
1069
- ```typescript
1070
- type ObjectSchema<S extends Shape = Shape> =
1071
- ```
1072
-
1073
961
  ## temporal — Bitemporal Data
1074
962
 
1075
963
  Temporal (bitemporal) data namespace — version history with effective date ranges.
@@ -1586,11 +1474,7 @@ interface RateLimitConfig
1586
1474
  interface RateLimitWindow
1587
1475
  ```
1588
1476
 
1589
- **`RateLimitClass`**
1590
-
1591
- A named limit class: any of a per-user, per-tenant, per-address and total window, each counted on its own.
1592
- Each key takes one window or an array of windows (distinct `windowSeconds`); a request is counted against
1593
- all of a key's windows and refused if any is over.
1477
+ **`RateLimitClass`** — A named limit class: any of a per-user, per-tenant and per-address window, each counted on its own.
1594
1478
 
1595
1479
  ```typescript
1596
1480
  interface RateLimitClass
@@ -1606,8 +1490,8 @@ interface RateLimitRefusal
1606
1490
 
1607
1491
  Named limit classes, checked after auth and counted in Postgres (`pipework_rate_limit_counts`, opted in
1608
1492
  with the blueprint's `rateLimits: {}`), so every server process on the same database shares one count.
1609
- Keys are counted perUser, perTenant, perAddress, total in turn, up to the first key with a window over its max, so one user's
1610
- refused requests don't spend the tenant's budget. The 429's Retry-After is the longest wait of the windows that refused. A route is in `signedIn` (auth required, or optional with
1493
+ Windows are counted perUser, perTenant, perAddress in turn, up to the first one over its max, so one user's
1494
+ refused requests don't spend the tenant's budget. A route is in `signedIn` (auth required, or optional with
1611
1495
  a user), `public` (no auth, or optional without a user) or the class its fitting names with `.rateLimit(name)`.
1612
1496
 
1613
1497
  ```typescript
@@ -1759,20 +1643,15 @@ interface TraceTree
1759
1643
 
1760
1644
  ## data
1761
1645
 
1762
- ### `StatementTimeoutError`
1763
-
1764
- A statement was cancelled by Postgres for running past the statement timeout a {@link withTimeouts} call set. `cause` is the driver error.
1765
-
1766
- ```typescript
1767
- class StatementTimeoutError extends Error constructor(readonly statementTimeoutMs: number, cause: unknown)
1768
- ```
1769
-
1770
- ### `LockTimeoutError`
1646
+ ### `tap`
1771
1647
 
1772
- A statement gave up waiting for a lock past the lock timeout a {@link withTimeouts} call set. `cause` is the driver error.
1648
+ Opens a standalone managed connection outside the manifold's pools — the
1649
+ sanctioned door for contexts where `pipe()` structurally cannot resolve:
1650
+ `worker_threads`, detached monitors, one-off scripts. Callers own the
1651
+ lifecycle: always `await conn.close()`.
1773
1652
 
1774
1653
  ```typescript
1775
- class LockTimeoutError extends Error constructor(readonly lockTimeoutMs: number, cause: unknown)
1654
+ function tap(url: string, options?: ConnectOptions): ManagedConnection
1776
1655
  ```
1777
1656
 
1778
1657
  ## request
@@ -1 +1 @@
1
- {"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../../src/auth/tenant/scoped-db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAiKhD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAsB9C;AAmBD,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,EAAE,CAgE3D"}
1
+ {"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../../src/auth/tenant/scoped-db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAichD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAE9C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,EAAE,CAE3D"}
@@ -1,236 +1,399 @@
1
- import { eq, and, getTableColumns, getTableName } from '../../data/query/index.js';
1
+ import { eq, and, or, isNull, is, SQL as SQLClass, getTableColumns, getTableName } from '../../data/query/index.js';
2
2
  import { getScopeConfig } from './scope.js';
3
- function buildTenantCondition(table, columnKey, tenantId) {
4
- const columns = getTableColumns(table);
5
- const col = columns[columnKey];
6
- return eq(col, tenantId);
7
- }
8
- function bindMethod(obj, prop) {
9
- const val = Reflect.get(obj, prop, obj);
10
- return typeof val === 'function' ? val.bind(obj) : val;
11
- }
12
- function wrapFinalBuilder(builder, condition) {
13
- let whereApplied = false;
14
- const wrap = (target) => new Proxy(target, {
15
- get(t, prop) {
16
- if (prop === 'where') {
17
- return (userCondition) => {
18
- whereApplied = true;
19
- const combined = userCondition != null ? and(userCondition, condition) : condition;
20
- const result = t['where'].call(t, combined);
21
- return passthrough(result);
22
- };
23
- }
24
- if (prop === 'then') {
25
- if (!whereApplied) {
26
- const scoped = t['where'].call(t, condition);
27
- return bindMethod(scoped, 'then');
28
- }
29
- return bindMethod(t, 'then');
30
- }
31
- if (prop === 'catch' || prop === 'finally') {
32
- if (!whereApplied) {
33
- const scoped = t['where'].call(t, condition);
34
- return bindMethod(scoped, prop);
35
- }
36
- return bindMethod(t, prop);
37
- }
38
- const value = Reflect.get(t, prop, t);
39
- if (typeof value !== 'function')
40
- return value;
41
- return (...args) => {
42
- const result = value.apply(t, args);
43
- if (result != null && typeof result === 'object' && 'where' in result) {
44
- return wrap(result);
45
- }
46
- if (result != null && typeof result === 'object' && 'then' in result) {
47
- return passthrough(result);
48
- }
49
- return result;
50
- };
3
+ const GUARD = Symbol('tenant-guard');
4
+ const made = new WeakMap();
5
+ const JOINS = {
6
+ leftJoin: 'left', leftJoinLateral: 'left', rightJoin: 'right', innerJoin: 'inner',
7
+ innerJoinLateral: 'inner', fullJoin: 'full', crossJoin: 'cross', crossJoinLateral: 'cross',
8
+ };
9
+ const SET_OPERATORS = ['union', 'unionAll', 'intersect', 'intersectAll', 'except', 'exceptAll'];
10
+ const SELECTS = ['select', 'selectDistinct', 'selectDistinctOn'];
11
+ function throwTenantRequired(tableName, operation) {
12
+ throw new Error(`[pipework] Cannot ${operation} tenant-scoped table "${tableName}" without a tenant in context.\n\n` +
13
+ ' This table has a .tenant() field, which means all operations require\n' +
14
+ ' an active tenant in the request/job context.\n\n' +
15
+ ' If this is a system-level operation that legitimately needs cross-tenant\n' +
16
+ ' access — pre-tenant auth (e.g. resolving org membership during login),\n' +
17
+ ' public webhook ingress, admin tooling — use pipe.system() instead. It is\n' +
18
+ ' the explicit unscoped channel: owner-role connection, outside the request\n' +
19
+ ' transaction, never tenant-filtered. Every query through it must be\n' +
20
+ ' deliberately cross-tenant-safe.\n');
21
+ }
22
+ function scopedPolicy(tenantId) {
23
+ return {
24
+ owner: tenantId,
25
+ tenantId,
26
+ refuseExecute: true,
27
+ scope(table) {
28
+ const config = getScopeConfig(table);
29
+ if (!config)
30
+ return null;
31
+ const column = getTableColumns(table)[config.columnKey];
32
+ return { cond: eq(column, tenantId), column, columnKey: config.columnKey };
51
33
  },
52
- });
53
- const passthrough = (target) => new Proxy(target, {
34
+ };
35
+ }
36
+ const guardPolicy = {
37
+ owner: GUARD,
38
+ tenantId: null,
39
+ refuseExecute: false,
40
+ scope(table, operation) {
41
+ if (getScopeConfig(table))
42
+ throwTenantRequired(getTableName(table), operation);
43
+ return null;
44
+ },
45
+ };
46
+ function refuse(what, why) {
47
+ throw new Error(`[pipework] ${what} is not allowed on this database connection: ${why}\n\n` +
48
+ ' A tenant-scoped connection filters every tenant table its own builders read.\n' +
49
+ ' Build the statement with this connection (select, insert, update or delete, or\n' +
50
+ ' the callback form of $with) so the filter is part of its SQL. A raw sql fragment\n' +
51
+ ' or a builder from another connection (pipe.system(), an unscoped db) cannot be\n' +
52
+ ' filtered, so it is refused.\n');
53
+ }
54
+ function checkBuilder(policy, what, builder) {
55
+ if (builder != null && typeof builder === 'object' && made.get(builder) === policy.owner)
56
+ return;
57
+ if (is(builder, SQLClass))
58
+ refuse(what, 'a raw sql fragment cannot be scoped to the tenant.');
59
+ refuse(what, 'it was not built by this connection.');
60
+ }
61
+ function withCond(on, cond) {
62
+ if (typeof on === 'function')
63
+ return (...args) => and(on(...args), cond);
64
+ return on === undefined ? cond : and(on, cond);
65
+ }
66
+ /**
67
+ * The where clause of one statement: the user's condition plus the tenant
68
+ * condition of every tenant table the statement reads. It is rewritten onto the
69
+ * builder after every call that changes it, so the filter is in the SQL as soon
70
+ * as the table is named. A table a right or full join can null-extend accepts
71
+ * its null rows (the tenant column is NOT NULL, so null means no row there).
72
+ */
73
+ class WhereScope {
74
+ target;
75
+ policy;
76
+ user;
77
+ entries = [];
78
+ position = 0;
79
+ widest = -1;
80
+ constructor(target, policy) {
81
+ this.target = target;
82
+ this.policy = policy;
83
+ }
84
+ table(table, operation, strict) {
85
+ this.position++;
86
+ const scope = this.policy.scope(table, operation);
87
+ if (scope)
88
+ this.entries.push({ cond: scope.cond, column: scope.column, position: this.position, strict, tolerant: false });
89
+ this.refresh();
90
+ }
91
+ join(table, type, on) {
92
+ this.position++;
93
+ const wide = type === 'right' || type === 'full';
94
+ const scope = this.policy.scope(table, 'join');
95
+ const conds = [];
96
+ if (scope && type !== 'cross')
97
+ conds.push(scope.cond);
98
+ // A right or full join keeps unmatched rows of the tables before it: a row of
99
+ // another tenant must not match, so those tables' conditions go in its ON too.
100
+ if (wide)
101
+ conds.push(...this.entries.map(e => or(e.cond, isNull(e.column))));
102
+ if (scope && (wide || type === 'cross')) {
103
+ this.entries.push({ cond: scope.cond, column: scope.column, position: this.position, strict: false, tolerant: wide });
104
+ }
105
+ if (wide)
106
+ this.widest = this.position;
107
+ return conds.length > 0 ? withCond(on, and(...conds)) : on;
108
+ }
109
+ where(user) {
110
+ this.user = user;
111
+ this.refresh();
112
+ }
113
+ refresh() {
114
+ if (this.user === undefined && this.entries.length === 0)
115
+ return;
116
+ const conds = this.entries.map(e => e.tolerant || (!e.strict && this.widest > e.position) ? or(e.cond, isNull(e.column)) : e.cond);
117
+ this.target['where'](and(this.user, ...conds));
118
+ }
119
+ }
120
+ /** Wraps a builder so the calls that return it return the wrapper, and `hooks` replace named methods. */
121
+ function wrap(target, policy, hooksFor) {
122
+ let hooks;
123
+ const self = new Proxy(target, {
54
124
  get(t, prop) {
55
- if (prop === 'then' || prop === 'catch' || prop === 'finally') {
56
- return bindMethod(t, prop);
125
+ if (typeof prop === 'string') {
126
+ hooks ??= hooksFor(self, t);
127
+ if (Object.hasOwn(hooks, prop))
128
+ return hooks[prop];
57
129
  }
58
130
  const value = Reflect.get(t, prop, t);
59
131
  if (typeof value !== 'function')
60
132
  return value;
61
133
  return (...args) => {
62
134
  const result = value.apply(t, args);
63
- if (result != null && typeof result === 'object' && 'then' in result) {
64
- return passthrough(result);
65
- }
66
- return result;
135
+ return result === t ? self : result;
67
136
  };
68
137
  },
69
138
  });
70
- return wrap(builder);
139
+ made.set(self, policy.owner);
140
+ return self;
141
+ }
142
+ function whereHook(scope, self) {
143
+ return (user) => {
144
+ scope.where(user);
145
+ return self;
146
+ };
147
+ }
148
+ function joinHooks(scope, self, t) {
149
+ const hooks = {};
150
+ for (const [name, type] of Object.entries(JOINS)) {
151
+ hooks[name] = (table, on) => {
152
+ const scopedOn = scope.join(table, type, on);
153
+ t[name](...(scopedOn === undefined ? [table] : [table, scopedOn]));
154
+ scope.refresh();
155
+ return self;
156
+ };
157
+ }
158
+ return hooks;
71
159
  }
72
- function wrapUpdateBuilder(builder, condition) {
160
+ function selectBuilder(builder, table, policy) {
161
+ const t = builder;
162
+ const scope = new WhereScope(t, policy);
163
+ scope.table(table, 'select from', false);
164
+ return wrap(builder, policy, (self) => ({
165
+ where: whereHook(scope, self),
166
+ ...joinHooks(scope, self, t),
167
+ ...Object.fromEntries(SET_OPERATORS.map(name => [name, (right) => {
168
+ const checked = typeof right === 'function'
169
+ ? (...ops) => {
170
+ const resolved = right(...ops);
171
+ checkBuilder(policy, `${name}()`, resolved);
172
+ return resolved;
173
+ }
174
+ : right;
175
+ if (typeof right !== 'function')
176
+ checkBuilder(policy, `${name}()`, right);
177
+ t[name](checked);
178
+ return self;
179
+ }])),
180
+ }));
181
+ }
182
+ function selectStart(builder, policy) {
73
183
  return new Proxy(builder, {
74
184
  get(t, prop) {
75
- if (prop === 'set') {
76
- return (...args) => {
77
- const result = t['set'].apply(t, args);
78
- return wrapFinalBuilder(result, condition);
79
- };
185
+ if (prop === 'from') {
186
+ return (table, ...rest) => selectBuilder(t['from'](table, ...rest), table, policy);
80
187
  }
81
188
  const value = Reflect.get(t, prop, t);
82
189
  return typeof value === 'function' ? value.bind(t) : value;
83
190
  },
84
191
  });
85
192
  }
86
- function wrapInsertBuilder(builder, columnKey, tenantId) {
87
- return new Proxy(builder, {
88
- get(t, prop) {
89
- if (prop === 'values') {
90
- return (values) => {
91
- const inject = (row) => {
92
- const existing = row[columnKey];
93
- if (existing !== undefined && existing !== tenantId) {
94
- throw new Error(`[pipework] Tenant-scoped insert: value has ${columnKey} "${String(existing)}" ` +
95
- `but the current context tenant is "${tenantId}".\n\n` +
96
- ` Remove the explicit ${columnKey} from your insert values — it's set automatically.\n` +
97
- ' If you need cross-tenant writes, file an issue on the pipework repo.\n');
98
- }
99
- return { ...row, [columnKey]: tenantId };
100
- };
101
- const scoped = Array.isArray(values)
102
- ? values.map(inject)
103
- : inject(values);
104
- return t['values'].call(t, scoped);
105
- };
106
- }
107
- const value = Reflect.get(t, prop, t);
108
- return typeof value === 'function' ? value.bind(t) : value;
193
+ function updateBuilder(builder, table, policy) {
194
+ const t = builder;
195
+ const scope = new WhereScope(t, policy);
196
+ scope.table(table, 'update', true);
197
+ return wrap(builder, policy, (self) => ({
198
+ where: whereHook(scope, self),
199
+ ...joinHooks(scope, self, t),
200
+ from: (source) => {
201
+ t['from'](source);
202
+ scope.table(source, 'update from', false);
203
+ return self;
109
204
  },
110
- });
205
+ }));
111
206
  }
112
- function wrapSelectBuilder(builder, tenantId) {
207
+ function updateStart(builder, table, policy) {
113
208
  return new Proxy(builder, {
114
209
  get(t, prop) {
115
- if (prop === 'from') {
116
- return (table, ...rest) => {
117
- const result = t['from'].call(t, table, ...rest);
118
- const config = getScopeConfig(table);
119
- if (!config)
120
- return result;
121
- const cond = buildTenantCondition(table, config.columnKey, tenantId);
122
- return wrapFinalBuilder(result, cond);
123
- };
210
+ if (prop === 'set') {
211
+ return (...args) => updateBuilder(t['set'](...args), table, policy);
124
212
  }
125
213
  const value = Reflect.get(t, prop, t);
126
214
  return typeof value === 'function' ? value.bind(t) : value;
127
215
  },
128
216
  });
129
217
  }
130
- function throwTenantRequired(tableName, operation) {
131
- throw new Error(`[pipework] Cannot ${operation} tenant-scoped table "${tableName}" without a tenant in context.\n\n` +
132
- ' This table has a .tenant() field, which means all operations require\n' +
133
- ' an active tenant in the request/job context.\n\n' +
134
- ' If this is a system-level operation that legitimately needs cross-tenant\n' +
135
- ' access — pre-tenant auth (e.g. resolving org membership during login),\n' +
136
- ' public webhook ingress, admin tooling — use pipe.system() instead. It is\n' +
137
- ' the explicit unscoped channel: owner-role connection, outside the request\n' +
138
- ' transaction, never tenant-filtered. Every query through it must be\n' +
139
- ' deliberately cross-tenant-safe.\n');
218
+ function deleteBuilder(builder, table, policy) {
219
+ const scope = new WhereScope(builder, policy);
220
+ scope.table(table, 'delete', true);
221
+ return wrap(builder, policy, (self) => ({ where: whereHook(scope, self) }));
140
222
  }
141
- export function createTenantGuardDb(db) {
142
- return new Proxy(db, {
143
- get(target, prop, receiver) {
144
- if (prop === 'insert' || prop === 'update' || prop === 'delete') {
145
- return (table) => {
146
- if (getScopeConfig(table)) {
147
- throwTenantRequired(getTableName(table), prop);
148
- }
149
- return target[prop].call(target, table);
150
- };
223
+ function insertBuilder(builder, table, policy) {
224
+ const t = builder;
225
+ const scope = policy.scope(table, 'insert');
226
+ // A conflict with another tenant's row must update nothing: the existing row has to be ours.
227
+ const finish = (result) => wrap(result, policy, (self, base) => ({
228
+ ...(scope && {
229
+ onConflictDoUpdate: (config) => {
230
+ const { where, setWhere, ...rest } = config;
231
+ base['onConflictDoUpdate']({ ...rest, setWhere: and(where, setWhere, scope.cond) });
232
+ return self;
233
+ },
234
+ }),
235
+ }));
236
+ return wrap(builder, policy, (self) => ({
237
+ values: (values) => {
238
+ if (!scope)
239
+ return finish(t['values'](values));
240
+ const { columnKey } = scope;
241
+ const tenantId = policy.tenantId;
242
+ const inject = (row) => {
243
+ const existing = row[columnKey];
244
+ if (existing !== undefined && existing !== tenantId) {
245
+ throw new Error(`[pipework] Tenant-scoped insert: value has ${columnKey} "${String(existing)}" ` +
246
+ `but the current context tenant is "${tenantId}".\n\n` +
247
+ ` Remove the explicit ${columnKey} from your insert values — it's set automatically.\n` +
248
+ ' If you need cross-tenant writes, file an issue on the pipework repo.\n');
249
+ }
250
+ return { ...row, [columnKey]: tenantId };
251
+ };
252
+ const scoped = Array.isArray(values)
253
+ ? values.map(inject)
254
+ : inject(values);
255
+ return finish(t['values'](scoped));
256
+ },
257
+ select: (source) => {
258
+ if (scope) {
259
+ refuse(`insert().select() into tenant-scoped table "${getTableName(table)}"`, `the tenant column ${scope.columnKey} cannot be set from a select.`);
151
260
  }
152
- if (prop === 'select' || prop === 'selectDistinct' || prop === 'selectDistinctOn') {
153
- return (...args) => {
154
- const selectBuilder = target[prop](...args);
155
- return wrapGuardSelectBuilder(selectBuilder);
156
- };
261
+ if (typeof source === 'function') {
262
+ return finish(t['select']((qb) => {
263
+ const body = source(scopedQueryBuilder(qb, policy));
264
+ checkBuilder(policy, 'insert().select()', body);
265
+ return body;
266
+ }));
157
267
  }
158
- return Reflect.get(target, prop, receiver);
268
+ checkBuilder(policy, 'insert().select()', source);
269
+ return finish(t['select'](source));
159
270
  },
160
- });
271
+ overridingSystemValue: () => {
272
+ t['overridingSystemValue']();
273
+ return self;
274
+ },
275
+ }));
161
276
  }
162
- function wrapGuardSelectBuilder(builder) {
163
- return new Proxy(builder, {
164
- get(t, prop) {
165
- if (prop === 'from') {
166
- return (table, ...rest) => {
167
- if (getScopeConfig(table)) {
168
- throwTenantRequired(getTableName(table), 'select from');
169
- }
170
- return t['from'].call(t, table, ...rest);
171
- };
277
+ function scopedWith(source, policy) {
278
+ return (alias, selection) => {
279
+ const raw = source['$with'](alias, selection);
280
+ const build = (as) => (body) => {
281
+ const cte = typeof body === 'function'
282
+ ? as((qb) => {
283
+ const result = body(scopedQueryBuilder(qb, policy));
284
+ checkBuilder(policy, '$with() body', result);
285
+ return result;
286
+ })
287
+ : (checkBuilder(policy, '$with() body', body), as(body));
288
+ made.set(cte, policy.owner);
289
+ return cte;
290
+ };
291
+ return {
292
+ as: build(raw.as),
293
+ materialized: () => ({ as: build(raw.materialized().as) }),
294
+ notMaterialized: () => ({ as: build(raw.notMaterialized().as) }),
295
+ };
296
+ };
297
+ }
298
+ /** The statement starters of a connection, a `with(...)` result or a query builder. */
299
+ function starters(source, policy) {
300
+ const hooks = {};
301
+ for (const name of SELECTS) {
302
+ if (typeof source[name] !== 'function')
303
+ continue;
304
+ hooks[name] = (...args) => selectStart(source[name](...args), policy);
305
+ }
306
+ if (typeof source['insert'] === 'function') {
307
+ hooks['insert'] = (table) => {
308
+ policy.scope(table, 'insert');
309
+ return insertBuilder(source['insert'](table), table, policy);
310
+ };
311
+ }
312
+ if (typeof source['update'] === 'function') {
313
+ hooks['update'] = (table) => {
314
+ policy.scope(table, 'update');
315
+ return updateStart(source['update'](table), table, policy);
316
+ };
317
+ }
318
+ if (typeof source['delete'] === 'function') {
319
+ hooks['delete'] = (table) => {
320
+ policy.scope(table, 'delete');
321
+ return deleteBuilder(source['delete'](table), table, policy);
322
+ };
323
+ }
324
+ return hooks;
325
+ }
326
+ function withHooks(source, policy) {
327
+ return {
328
+ $with: scopedWith(source, policy),
329
+ with: (...ctes) => {
330
+ for (const cte of ctes) {
331
+ if (cte == null || typeof cte !== 'object' || made.get(cte) !== policy.owner) {
332
+ refuse('with()', 'every CTE must come from $with() on this connection.');
333
+ }
172
334
  }
335
+ return starters(source['with'](...ctes), policy);
336
+ },
337
+ };
338
+ }
339
+ function scopedQueryBuilder(qb, policy) {
340
+ const source = qb;
341
+ const hooks = { ...starters(source, policy), ...withHooks(source, policy) };
342
+ return new Proxy(qb, {
343
+ get(t, prop) {
344
+ if (typeof prop === 'string' && Object.hasOwn(hooks, prop))
345
+ return hooks[prop];
173
346
  const value = Reflect.get(t, prop, t);
174
347
  return typeof value === 'function' ? value.bind(t) : value;
175
348
  },
176
349
  });
177
350
  }
178
- export function createScopedDb(db, tenantId) {
351
+ function createDb(db, policy) {
352
+ const source = db;
353
+ const hooks = {
354
+ ...starters(source, policy),
355
+ ...withHooks(source, policy),
356
+ $count: (table, filters) => {
357
+ const scope = policy.scope(table, 'count');
358
+ const combined = scope ? (filters !== undefined ? and(filters, scope.cond) : scope.cond) : filters;
359
+ return source['$count'](table, combined);
360
+ },
361
+ transaction: (callback, config) => source['transaction']((tx) => callback(createDb(tx, policy)), config),
362
+ };
363
+ if (policy.refuseExecute) {
364
+ hooks['execute'] = () => {
365
+ throw new Error('[pipework] execute() is not available on a tenant-scoped database connection.\n\n' +
366
+ ' Tenant-scoped connections only support select, insert, update, and delete\n' +
367
+ ' operations, which are automatically filtered by tenant.\n\n' +
368
+ ' If you need to run a query that the builder cannot express, file an issue\n' +
369
+ ' on the pipework repo describing your use case.\n');
370
+ };
371
+ }
179
372
  return new Proxy(db, {
180
373
  get(target, prop, receiver) {
181
- if (prop === 'insert') {
182
- return (table) => {
183
- const builder = target.insert(table);
184
- const config = getScopeConfig(table);
185
- if (!config)
186
- return builder;
187
- return wrapInsertBuilder(builder, config.columnKey, tenantId);
188
- };
189
- }
190
- if (prop === 'update') {
191
- return (table) => {
192
- const builder = target.update(table);
193
- const config = getScopeConfig(table);
194
- if (!config)
195
- return builder;
196
- const cond = buildTenantCondition(table, config.columnKey, tenantId);
197
- return wrapUpdateBuilder(builder, cond);
198
- };
199
- }
200
- if (prop === 'delete') {
201
- return (table) => {
202
- const builder = target.delete(table);
203
- const config = getScopeConfig(table);
204
- if (!config)
205
- return builder;
206
- const cond = buildTenantCondition(table, config.columnKey, tenantId);
207
- return wrapFinalBuilder(builder, cond);
208
- };
209
- }
210
- if (prop === 'select' || prop === 'selectDistinct' || prop === 'selectDistinctOn') {
211
- return (...args) => {
212
- const selectBuilder = target[prop](...args);
213
- return wrapSelectBuilder(selectBuilder, tenantId);
214
- };
215
- }
216
- if (prop === 'execute') {
217
- return () => {
218
- throw new Error('[pipework] execute() is not available on a tenant-scoped database connection.\n\n' +
219
- ' Tenant-scoped connections only support select, insert, update, and delete\n' +
220
- ' operations, which are automatically filtered by tenant.\n\n' +
221
- ' If you need to run a query that the builder cannot express, file an issue\n' +
222
- ' on the pipework repo describing your use case.\n');
223
- };
224
- }
225
- if (prop === '$with') {
226
- return () => {
227
- throw new Error('[pipework] $with() (common table expressions) is not available on a tenant-scoped database connection.\n\n' +
228
- ' CTEs bypass tenant scoping. If you need CTE support, file an issue\n' +
229
- ' on the pipework repo describing your use case.\n');
230
- };
374
+ if (typeof prop === 'string') {
375
+ if (Object.hasOwn(hooks, prop))
376
+ return hooks[prop];
377
+ if (prop === 'query') {
378
+ const query = Reflect.get(target, prop, receiver);
379
+ if (query && Object.keys(query).length > 0) {
380
+ return new Proxy({}, {
381
+ get() {
382
+ refuse('A relational query (db.query)', 'it reads tables without the tenant filter.');
383
+ },
384
+ });
385
+ }
386
+ return query;
387
+ }
231
388
  }
232
389
  return Reflect.get(target, prop, receiver);
233
390
  },
234
391
  });
235
392
  }
393
+ export function createTenantGuardDb(db) {
394
+ return createDb(db, guardPolicy);
395
+ }
396
+ export function createScopedDb(db, tenantId) {
397
+ return createDb(db, scopedPolicy(tenantId));
398
+ }
236
399
  //# sourceMappingURL=scoped-db.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scoped-db.js","sourceRoot":"","sources":["../../../src/auth/tenant/scoped-db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scoped-db.js","sourceRoot":"","sources":["../../../src/auth/tenant/scoped-db.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,9 @@ export declare namespace pipe {
4
4
  var transaction: <T>(nameOrFn: string | ((tx: DB) => Promise<T>), maybeFnOrConfig?: ((tx: DB) => Promise<T>) | TransactionConfig, maybeConfig?: TransactionConfig) => Promise<T>;
5
5
  }
6
6
  /**
7
- * The unwrapped database handle — bypasses the scoped/guard proxies that
8
- * normally wrap `pipe()`. The audit-write CTE path uses this to run the
9
- * compiled statement via `.execute()`, which the scoped proxy refuses (CTEs
10
- * bypass per-table tenant filtering by design). The compiled SQL is already
11
- * tenant-scoped at compile time when `ctx.tenant !== null` — the audit CTE
12
- * is built against the scoped `pipe()` DB, so the user write inside the CTE
13
- * picks up the tenant filter naturally; this raw handle is only the carrier.
7
+ * The unwrapped database handle: no tenant filter on anything it builds. Only a
8
+ * carrier for statements already compiled against the scoped `pipe()` db, such
9
+ * as the audit-write CTE, which the scoped connection cannot `.execute()`.
14
10
  */
15
11
  export declare function pipeRaw(name?: string): DB;
16
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/data/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAqBvD,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAQtC;yBARe,IAAI;sBA6D0B,CAAC,YACnC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,oBACzB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,gBAChD,iBAAiB,KAC9B,OAAO,CAAC,CAAC,CAAC;;AAvDb;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAEzC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAY5C"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/data/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAqBvD,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAQtC;yBARe,IAAI;sBAyD0B,CAAC,YACnC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,oBACzB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,gBAChD,iBAAiB,KAC9B,OAAO,CAAC,CAAC,CAAC;;AAnDb;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAEzC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAY5C"}
@@ -23,13 +23,9 @@ export function pipe(name) {
23
23
  return createTenantGuardDb(db);
24
24
  }
25
25
  /**
26
- * The unwrapped database handle — bypasses the scoped/guard proxies that
27
- * normally wrap `pipe()`. The audit-write CTE path uses this to run the
28
- * compiled statement via `.execute()`, which the scoped proxy refuses (CTEs
29
- * bypass per-table tenant filtering by design). The compiled SQL is already
30
- * tenant-scoped at compile time when `ctx.tenant !== null` — the audit CTE
31
- * is built against the scoped `pipe()` DB, so the user write inside the CTE
32
- * picks up the tenant filter naturally; this raw handle is only the carrier.
26
+ * The unwrapped database handle: no tenant filter on anything it builds. Only a
27
+ * carrier for statements already compiled against the scoped `pipe()` db, such
28
+ * as the audit-write CTE, which the scoped connection cannot `.execute()`.
33
29
  */
34
30
  export function pipeRaw(name) {
35
31
  return resolveDb(name);
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/data/db/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/data/db/db.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.190.0",
3
+ "version": "0.191.0",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",