pipework 0.190.0 → 0.192.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 +29 -0
- package/dist/REFERENCE.md +13 -322
- package/dist/auth/tenant/scoped-db.d.ts.map +1 -1
- package/dist/auth/tenant/scoped-db.js +349 -186
- package/dist/auth/tenant/scoped-db.js.map +1 -1
- package/dist/data/db/db.d.ts +3 -7
- package/dist/data/db/db.d.ts.map +1 -1
- package/dist/data/db/db.js +3 -7
- package/dist/data/db/db.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/email/inbound.d.ts.map +1 -1
- package/dist/infra/email/inbound.js +11 -3
- package/dist/infra/email/inbound.js.map +1 -1
- package/dist/infra/email/sigv4.d.ts +24 -0
- package/dist/infra/email/sigv4.d.ts.map +1 -0
- package/dist/infra/email/sigv4.js +55 -0
- package/dist/infra/email/sigv4.js.map +1 -0
- package/dist/request/http/namespace.d.ts +5 -1
- package/dist/request/http/namespace.d.ts.map +1 -1
- package/dist/request/http/namespace.js +3 -2
- package/dist/request/http/namespace.js.map +1 -1
- package/dist/request/http/sniff.d.ts +11 -4
- package/dist/request/http/sniff.d.ts.map +1 -1
- package/dist/request/http/sniff.js +119 -4
- package/dist/request/http/sniff.js.map +1 -1
- package/dist/request/http/upload.d.ts.map +1 -1
- package/dist/request/http/upload.js +1 -8
- package/dist/request/http/upload.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
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 (
|
|
56
|
-
|
|
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
|
-
|
|
64
|
-
return passthrough(result);
|
|
65
|
-
}
|
|
66
|
-
return result;
|
|
135
|
+
return result === t ? self : result;
|
|
67
136
|
};
|
|
68
137
|
},
|
|
69
138
|
});
|
|
70
|
-
|
|
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
|
|
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 === '
|
|
76
|
-
return (...
|
|
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
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
|
207
|
+
function updateStart(builder, table, policy) {
|
|
113
208
|
return new Proxy(builder, {
|
|
114
209
|
get(t, prop) {
|
|
115
|
-
if (prop === '
|
|
116
|
-
return (
|
|
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
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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 (
|
|
153
|
-
return (
|
|
154
|
-
const
|
|
155
|
-
|
|
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
|
-
|
|
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
|
|
163
|
-
return
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return
|
|
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
|
-
|
|
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 === '
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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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"}
|