@kozou/introspect 1.3.0 → 1.4.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/dist/enums.d.ts.map +1 -1
- package/dist/enums.js +9 -2
- package/dist/enums.js.map +1 -1
- package/dist/functions.d.ts +4 -0
- package/dist/functions.d.ts.map +1 -0
- package/dist/functions.js +321 -0
- package/dist/functions.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/enums.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAS3C,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAS3C,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA+BtF"}
|
package/dist/enums.js
CHANGED
|
@@ -2,10 +2,17 @@ import { runQuery } from './errors.js';
|
|
|
2
2
|
export async function fetchEnums(client, schemas) {
|
|
3
3
|
if (schemas.length === 0)
|
|
4
4
|
return [];
|
|
5
|
-
const rows = await runQuery(client,
|
|
5
|
+
const rows = await runQuery(client,
|
|
6
|
+
// enumlabel is the \`name\` type; array_agg would yield a name[] (oid 1003),
|
|
7
|
+
// which node-postgres does not parse into a JS array (it would arrive as the
|
|
8
|
+
// raw "{a,b}" literal). Cast each label to text so the result is a text[]
|
|
9
|
+
// (oid 1009) the driver parses — RawEnum.values is then a real string[], as
|
|
10
|
+
// its type promises and as every consumer (docs renderEnum, RPC enum args)
|
|
11
|
+
// expects.
|
|
12
|
+
`SELECT
|
|
6
13
|
n.nspname AS schema,
|
|
7
14
|
t.typname AS name,
|
|
8
|
-
array_agg(e.enumlabel ORDER BY e.enumsortorder) AS values
|
|
15
|
+
array_agg(e.enumlabel::text ORDER BY e.enumsortorder) AS values
|
|
9
16
|
FROM pg_type t
|
|
10
17
|
JOIN pg_namespace n ON n.oid = t.typnamespace
|
|
11
18
|
JOIN pg_enum e ON e.enumtypid = t.oid
|
package/dist/enums.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,OAAiB;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,OAAiB;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,MAAM;IACN,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,2EAA2E;IAC3E,WAAW;IACX;;;;;;;;;;mCAU+B,EAC/B,CAAC,OAAO,CAAC,EACT,YAAY,CACb,CAAC;IAEF,OAAO,IAAI,CAAC,GAAG,CAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACjC,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,aAAa,CAAC;AAyVrB,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyD9F"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { runQuery } from './errors.js';
|
|
2
|
+
// One query pulls every ordinary function with its arguments (resolved to type
|
|
3
|
+
// names), return classification fields, owner, PUBLIC-EXECUTE flag, and the raw
|
|
4
|
+
// proconfig. Arguments are assembled as JSON by zipping the parallel pg_proc
|
|
5
|
+
// arrays (proallargtypes / proargmodes / proargnames) by ordinality; the
|
|
6
|
+
// IN-only case falls back to proargtypes (an oidvector cast to oid[]). Return
|
|
7
|
+
// columns come from the composite type's attributes when the return is a named
|
|
8
|
+
// composite, else from the OUT / TABLE arguments.
|
|
9
|
+
const FUNCTIONS_SQL = `
|
|
10
|
+
SELECT
|
|
11
|
+
n.nspname AS schema,
|
|
12
|
+
p.proname AS name,
|
|
13
|
+
pg_get_function_arguments(p.oid) AS argument_signature,
|
|
14
|
+
p.pronargdefaults AS ndef,
|
|
15
|
+
p.provolatile AS volatility,
|
|
16
|
+
p.prosecdef AS security_definer,
|
|
17
|
+
p.proowner AS owner_oid,
|
|
18
|
+
ro.rolname AS owner_name,
|
|
19
|
+
CASE
|
|
20
|
+
WHEN p.proacl IS NULL THEN true
|
|
21
|
+
WHEN EXISTS (
|
|
22
|
+
SELECT 1 FROM aclexplode(p.proacl) ae
|
|
23
|
+
WHERE ae.grantee = 0 AND ae.privilege_type = 'EXECUTE'
|
|
24
|
+
) THEN true
|
|
25
|
+
ELSE false
|
|
26
|
+
END AS public_execute,
|
|
27
|
+
obj_description(p.oid, 'pg_proc') AS comment,
|
|
28
|
+
(p.prorettype = 'pg_catalog.void'::regtype) AS returns_void,
|
|
29
|
+
p.proretset AS returns_set,
|
|
30
|
+
format_type(p.prorettype, NULL) AS return_type,
|
|
31
|
+
-- Resolve one level of DOMAIN to its base type so a domain over a composite
|
|
32
|
+
-- is not mistaken for a scalar (and a domain over a scalar stays scalar). A
|
|
33
|
+
-- still-domain result (domain over domain) is left as 'd' and treated as
|
|
34
|
+
-- unsupported downstream (fail-closed for that exotic nesting).
|
|
35
|
+
eff.eff_typtype AS return_typtype,
|
|
36
|
+
(
|
|
37
|
+
SELECT json_agg(json_build_object(
|
|
38
|
+
'name', COALESCE(an.argname, ''),
|
|
39
|
+
'typeName', format_type(at.typeoid, NULL),
|
|
40
|
+
'udtName', t.typname,
|
|
41
|
+
'typeOid', at.typeoid::int,
|
|
42
|
+
'mode', COALESCE(am.mode, 'i'),
|
|
43
|
+
'ord', at.ord
|
|
44
|
+
) ORDER BY at.ord)
|
|
45
|
+
FROM unnest(COALESCE(p.proallargtypes, p.proargtypes::oid[]))
|
|
46
|
+
WITH ORDINALITY AS at(typeoid, ord)
|
|
47
|
+
LEFT JOIN unnest(p.proargmodes) WITH ORDINALITY AS am(mode, ord) ON am.ord = at.ord
|
|
48
|
+
LEFT JOIN unnest(p.proargnames) WITH ORDINALITY AS an(argname, ord) ON an.ord = at.ord
|
|
49
|
+
JOIN pg_type t ON t.oid = at.typeoid
|
|
50
|
+
) AS args,
|
|
51
|
+
CASE
|
|
52
|
+
WHEN eff.eff_typrelid <> 0 THEN (
|
|
53
|
+
SELECT json_agg(json_build_object(
|
|
54
|
+
'name', a.attname,
|
|
55
|
+
'typeName', format_type(a.atttypid, a.atttypmod),
|
|
56
|
+
'typeOid', a.atttypid::int
|
|
57
|
+
) ORDER BY a.attnum)
|
|
58
|
+
FROM pg_attribute a
|
|
59
|
+
WHERE a.attrelid = eff.eff_typrelid AND a.attnum > 0 AND NOT a.attisdropped
|
|
60
|
+
)
|
|
61
|
+
ELSE (
|
|
62
|
+
SELECT json_agg(json_build_object(
|
|
63
|
+
'name', COALESCE(an.argname, ''),
|
|
64
|
+
'typeName', format_type(at.typeoid, NULL),
|
|
65
|
+
'typeOid', at.typeoid::int
|
|
66
|
+
) ORDER BY at.ord)
|
|
67
|
+
FROM unnest(COALESCE(p.proallargtypes, p.proargtypes::oid[]))
|
|
68
|
+
WITH ORDINALITY AS at(typeoid, ord)
|
|
69
|
+
JOIN unnest(p.proargmodes) WITH ORDINALITY AS am(mode, ord) ON am.ord = at.ord
|
|
70
|
+
LEFT JOIN unnest(p.proargnames) WITH ORDINALITY AS an(argname, ord) ON an.ord = at.ord
|
|
71
|
+
WHERE am.mode IN ('o', 'b', 't')
|
|
72
|
+
)
|
|
73
|
+
END AS return_columns,
|
|
74
|
+
p.proconfig AS proconfig
|
|
75
|
+
FROM pg_proc p
|
|
76
|
+
JOIN pg_namespace n ON n.oid = p.pronamespace
|
|
77
|
+
JOIN pg_roles ro ON ro.oid = p.proowner
|
|
78
|
+
JOIN pg_type rt ON rt.oid = p.prorettype
|
|
79
|
+
LEFT JOIN pg_type bt ON bt.oid = rt.typbasetype
|
|
80
|
+
CROSS JOIN LATERAL (
|
|
81
|
+
SELECT
|
|
82
|
+
CASE WHEN rt.typtype = 'd' AND bt.oid IS NOT NULL THEN bt.typtype ELSE rt.typtype END
|
|
83
|
+
AS eff_typtype,
|
|
84
|
+
CASE WHEN rt.typtype = 'd' AND bt.oid IS NOT NULL THEN bt.typrelid ELSE rt.typrelid END
|
|
85
|
+
AS eff_typrelid
|
|
86
|
+
) eff
|
|
87
|
+
WHERE p.prokind = 'f'
|
|
88
|
+
AND n.nspname = ANY($1)
|
|
89
|
+
ORDER BY n.nspname, p.proname`;
|
|
90
|
+
// Who may CREATE in each named schema, framed for the owner-safe search_path
|
|
91
|
+
// predicate (§3.2). Superusers are deliberately not enumerated as creators:
|
|
92
|
+
// a superuser bypasses every ACL and can replace the definer function itself,
|
|
93
|
+
// so it is not a hijack vector — and this is what makes pg_catalog (owned by
|
|
94
|
+
// the bootstrap superuser) correctly safe. Inherited privileges are NOT lost,
|
|
95
|
+
// because `has_schema_privilege` is evaluated per non-superuser role: a
|
|
96
|
+
// non-superuser member that inherits a superuser role's CREATE grant still
|
|
97
|
+
// reports true and is captured.
|
|
98
|
+
const SCHEMA_WRITABILITY_SQL = `
|
|
99
|
+
SELECT
|
|
100
|
+
n.nspname AS schema,
|
|
101
|
+
EXISTS (
|
|
102
|
+
SELECT 1 FROM aclexplode(COALESCE(n.nspacl, acldefault('n', n.nspowner))) ae
|
|
103
|
+
WHERE ae.privilege_type = 'CREATE' AND ae.grantee = 0
|
|
104
|
+
) AS public_create,
|
|
105
|
+
COALESCE((
|
|
106
|
+
SELECT array_agg(r.oid)
|
|
107
|
+
FROM pg_roles r
|
|
108
|
+
WHERE NOT r.rolsuper
|
|
109
|
+
AND has_schema_privilege(r.oid, n.oid, 'CREATE')
|
|
110
|
+
), ARRAY[]::oid[]) AS creator_roles
|
|
111
|
+
FROM pg_namespace n
|
|
112
|
+
WHERE n.nspname = ANY($1)`;
|
|
113
|
+
function mapVolatility(c) {
|
|
114
|
+
if (c === 'i')
|
|
115
|
+
return 'immutable';
|
|
116
|
+
if (c === 's')
|
|
117
|
+
return 'stable';
|
|
118
|
+
return 'volatile';
|
|
119
|
+
}
|
|
120
|
+
function mapArgMode(c) {
|
|
121
|
+
switch (c) {
|
|
122
|
+
case 'o':
|
|
123
|
+
return 'out';
|
|
124
|
+
case 'b':
|
|
125
|
+
return 'inout';
|
|
126
|
+
case 'v':
|
|
127
|
+
return 'variadic';
|
|
128
|
+
case 't':
|
|
129
|
+
return 'table';
|
|
130
|
+
default:
|
|
131
|
+
return 'in';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function buildArgs(row) {
|
|
135
|
+
const json = row.args ?? [];
|
|
136
|
+
const args = json
|
|
137
|
+
.slice()
|
|
138
|
+
.sort((a, b) => a.ord - b.ord)
|
|
139
|
+
.map((a) => ({
|
|
140
|
+
name: a.name,
|
|
141
|
+
typeName: a.typeName,
|
|
142
|
+
udtName: a.udtName,
|
|
143
|
+
typeOid: a.typeOid,
|
|
144
|
+
mode: mapArgMode(a.mode),
|
|
145
|
+
hasDefault: false,
|
|
146
|
+
}));
|
|
147
|
+
// pronargdefaults defaults apply to the trailing input arguments (IN /
|
|
148
|
+
// INOUT / VARIADIC) in declaration order. Mark the last `ndef` of them.
|
|
149
|
+
if (row.ndef > 0) {
|
|
150
|
+
const inputIdx = args
|
|
151
|
+
.map((a, i) => ({ a, i }))
|
|
152
|
+
.filter((e) => e.a.mode === 'in' || e.a.mode === 'inout' || e.a.mode === 'variadic')
|
|
153
|
+
.map((e) => e.i);
|
|
154
|
+
for (const i of inputIdx.slice(Math.max(0, inputIdx.length - row.ndef))) {
|
|
155
|
+
args[i].hasDefault = true;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return args;
|
|
159
|
+
}
|
|
160
|
+
function classifyReturn(row) {
|
|
161
|
+
const typeName = row.return_type;
|
|
162
|
+
const columns = row.return_columns && row.return_columns.length > 0
|
|
163
|
+
? row.return_columns.map((c) => ({ name: c.name, typeName: c.typeName, typeOid: c.typeOid }))
|
|
164
|
+
: undefined;
|
|
165
|
+
// Base / enum / range / multirange are scalar element types. Domains were
|
|
166
|
+
// resolved to their base typtype by the query, so a residual 'd' means a
|
|
167
|
+
// domain over a domain — left to fall through to unsupported.
|
|
168
|
+
const isScalarType = ['b', 'e', 'r', 'm'].includes(row.return_typtype);
|
|
169
|
+
if (row.returns_void) {
|
|
170
|
+
return { kind: 'void', typeName, returnsSet: false };
|
|
171
|
+
}
|
|
172
|
+
if (row.returns_set) {
|
|
173
|
+
// Columns first: a 1-column RETURNS TABLE(c ...) collapses to the scalar
|
|
174
|
+
// element type in pg_proc (typtype 'b'), but still carries the named OUT
|
|
175
|
+
// column — it is an array of objects, not of bare scalars. Composite /
|
|
176
|
+
// multi-column TABLE sets also land here.
|
|
177
|
+
if (columns) {
|
|
178
|
+
return { kind: 'setof', typeName, returnsSet: true, columns };
|
|
179
|
+
}
|
|
180
|
+
// SETOF scalar with no named column -> array of scalars.
|
|
181
|
+
if (isScalarType) {
|
|
182
|
+
return { kind: 'setof', typeName, returnsSet: true };
|
|
183
|
+
}
|
|
184
|
+
// A pseudo / composite SETOF with no resolvable columns (SETOF record /
|
|
185
|
+
// anyelement, or a domain over a composite) is unmappable.
|
|
186
|
+
return { kind: 'unsupported', typeName, returnsSet: true };
|
|
187
|
+
}
|
|
188
|
+
if (row.return_typtype === 'c') {
|
|
189
|
+
// A composite resolves its columns (a domain over a composite too — the
|
|
190
|
+
// query resolves the base relid). A 'c' with no columns would be an unusual
|
|
191
|
+
// unresolved case; fail closed rather than emit a shapeless object.
|
|
192
|
+
return columns
|
|
193
|
+
? { kind: 'composite', typeName, returnsSet: false, columns }
|
|
194
|
+
: { kind: 'unsupported', typeName, returnsSet: false };
|
|
195
|
+
}
|
|
196
|
+
if (isScalarType) {
|
|
197
|
+
return { kind: 'scalar', typeName, returnsSet: false };
|
|
198
|
+
}
|
|
199
|
+
// Non-set pseudo types (record without column defs, anyelement, trigger) and
|
|
200
|
+
// a domain over a domain — not mappable to a v1 wire shape (loud skip in @core).
|
|
201
|
+
return { kind: 'unsupported', typeName, returnsSet: false };
|
|
202
|
+
}
|
|
203
|
+
/** Split a SET search_path GUC value on commas that are not inside double
|
|
204
|
+
* quotes, then unquote each element. Handles `"$user", public` and a quoted
|
|
205
|
+
* identifier that itself contains a comma. */
|
|
206
|
+
function splitSearchPath(value) {
|
|
207
|
+
const elements = [];
|
|
208
|
+
let current = '';
|
|
209
|
+
let inQuotes = false;
|
|
210
|
+
for (let i = 0; i < value.length; i += 1) {
|
|
211
|
+
const ch = value[i];
|
|
212
|
+
if (ch === '"') {
|
|
213
|
+
// A doubled "" inside quotes is a literal quote.
|
|
214
|
+
if (inQuotes && value[i + 1] === '"') {
|
|
215
|
+
current += '"';
|
|
216
|
+
i += 1;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
inQuotes = !inQuotes;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else if (ch === ',' && !inQuotes) {
|
|
223
|
+
elements.push(current.trim());
|
|
224
|
+
current = '';
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
current += ch;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
elements.push(current.trim());
|
|
231
|
+
return elements.filter((e) => e !== '');
|
|
232
|
+
}
|
|
233
|
+
/** Parse the proconfig `search_path` setting into elements, or null when the
|
|
234
|
+
* function declares no SET search_path. Each element records whether it is
|
|
235
|
+
* pg_temp and (for a fixed schema) is resolved to a schema name; a dynamic
|
|
236
|
+
* element (`$user`) resolves to null. Writability is filled in afterwards. */
|
|
237
|
+
function parseSearchPath(proconfig) {
|
|
238
|
+
if (proconfig === null)
|
|
239
|
+
return null;
|
|
240
|
+
const entry = proconfig.find((c) => c.toLowerCase().startsWith('search_path='));
|
|
241
|
+
if (entry === undefined)
|
|
242
|
+
return null;
|
|
243
|
+
const value = entry.slice(entry.indexOf('=') + 1);
|
|
244
|
+
return splitSearchPath(value).map((raw) => {
|
|
245
|
+
if (raw === 'pg_temp') {
|
|
246
|
+
return { raw, schema: null, writableByOthers: null, isTemp: true };
|
|
247
|
+
}
|
|
248
|
+
// A `$user` (or any $-prefixed) element is dynamic; it cannot be resolved
|
|
249
|
+
// to a fixed schema, so it stays unsafe (the predicate fails closed).
|
|
250
|
+
const schema = raw.startsWith('$') ? null : raw;
|
|
251
|
+
return { raw, schema, writableByOthers: null, isTemp: false };
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
/** Fetch CREATE-writability info for the given schema names. */
|
|
255
|
+
async function fetchSchemaWritability(client, schemaNames) {
|
|
256
|
+
const map = new Map();
|
|
257
|
+
if (schemaNames.length === 0)
|
|
258
|
+
return map;
|
|
259
|
+
const rows = await runQuery(client, SCHEMA_WRITABILITY_SQL, [schemaNames], 'fetchFunctions (schema writability)');
|
|
260
|
+
for (const row of rows) {
|
|
261
|
+
map.set(row.schema, {
|
|
262
|
+
publicCreate: row.public_create,
|
|
263
|
+
creatorRoles: row.creator_roles ?? [],
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return map;
|
|
267
|
+
}
|
|
268
|
+
export async function fetchFunctions(client, schemas) {
|
|
269
|
+
if (schemas.length === 0)
|
|
270
|
+
return [];
|
|
271
|
+
const rows = await runQuery(client, FUNCTIONS_SQL, [schemas], 'fetchFunctions (functions)');
|
|
272
|
+
if (rows.length === 0)
|
|
273
|
+
return [];
|
|
274
|
+
// Pre-parse search paths and gather the fixed schema names whose CREATE
|
|
275
|
+
// writability the safe-search_path predicate (§3.2) needs. Only definer
|
|
276
|
+
// functions are subject to the predicate, so only their paths matter; but
|
|
277
|
+
// parsing every function's path is cheap and keeps the shape uniform.
|
|
278
|
+
const parsed = rows.map((row) => ({ row, searchPath: parseSearchPath(row.proconfig) }));
|
|
279
|
+
const schemaNames = new Set();
|
|
280
|
+
for (const { row, searchPath } of parsed) {
|
|
281
|
+
if (!row.security_definer || searchPath === null)
|
|
282
|
+
continue;
|
|
283
|
+
for (const el of searchPath) {
|
|
284
|
+
if (!el.isTemp && el.schema !== null)
|
|
285
|
+
schemaNames.add(el.schema);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const writability = await fetchSchemaWritability(client, [...schemaNames]);
|
|
289
|
+
return parsed.map(({ row, searchPath }) => {
|
|
290
|
+
// Resolve owner-relative writability for each fixed, non-temp element: the
|
|
291
|
+
// schema is "writable by others" if PUBLIC can create there, or if any
|
|
292
|
+
// non-superuser role other than this function's owner can (superusers are
|
|
293
|
+
// not a hijack vector, and were excluded by the query). A schema not in the
|
|
294
|
+
// map (e.g. it does not exist) stays null = unknown = unsafe (fail-closed).
|
|
295
|
+
const resolvedSearchPath = searchPath === null
|
|
296
|
+
? null
|
|
297
|
+
: searchPath.map((el) => {
|
|
298
|
+
if (el.isTemp || el.schema === null)
|
|
299
|
+
return el;
|
|
300
|
+
const w = writability.get(el.schema);
|
|
301
|
+
if (w === undefined)
|
|
302
|
+
return { ...el, writableByOthers: null };
|
|
303
|
+
const writableByOthers = w.publicCreate || w.creatorRoles.some((r) => r !== row.owner_oid);
|
|
304
|
+
return { ...el, writableByOthers };
|
|
305
|
+
});
|
|
306
|
+
return {
|
|
307
|
+
schema: row.schema,
|
|
308
|
+
name: row.name,
|
|
309
|
+
argumentSignature: row.argument_signature,
|
|
310
|
+
arguments: buildArgs(row),
|
|
311
|
+
returns: classifyReturn(row),
|
|
312
|
+
volatility: mapVolatility(row.volatility),
|
|
313
|
+
security: row.security_definer ? 'definer' : 'invoker',
|
|
314
|
+
owner: { oid: row.owner_oid, name: row.owner_name },
|
|
315
|
+
publicExecute: row.public_execute,
|
|
316
|
+
searchPath: resolvedSearchPath,
|
|
317
|
+
comment: row.comment,
|
|
318
|
+
};
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQpD,OAAO,EAAE,oBAAoB,EAAY,MAAM,aAAa,CAAC;AAK7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;wBAMoB;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,YAAY,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAkB/D,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuFnF"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { fetchForeignKeys } from './fks.js';
|
|
|
4
4
|
import { fetchChecks } from './checks.js';
|
|
5
5
|
import { fetchViews } from './views.js';
|
|
6
6
|
import { fetchEnums } from './enums.js';
|
|
7
|
+
import { fetchFunctions } from './functions.js';
|
|
7
8
|
import { fetchAndAttachPrivileges } from './privileges.js';
|
|
8
9
|
import { KozouIntrospectError, runQuery } from './errors.js';
|
|
9
10
|
import { filterTables, filterViews, pruneDanglingForeignKeys } from './filter.js';
|
|
@@ -49,6 +50,7 @@ export async function introspect(opts) {
|
|
|
49
50
|
mergeTableMetadata(allTables, fks, checks);
|
|
50
51
|
const allViews = await fetchViews(client, validSchemas);
|
|
51
52
|
const enums = await fetchEnums(client, validSchemas);
|
|
53
|
+
const functions = await fetchFunctions(client, validSchemas);
|
|
52
54
|
if (opts.privilegeRole !== undefined) {
|
|
53
55
|
await fetchAndAttachPrivileges(client, validSchemas, opts.privilegeRole, allTables, allViews);
|
|
54
56
|
}
|
|
@@ -63,7 +65,7 @@ export async function introspect(opts) {
|
|
|
63
65
|
tables,
|
|
64
66
|
views,
|
|
65
67
|
enums,
|
|
66
|
-
functions
|
|
68
|
+
functions,
|
|
67
69
|
};
|
|
68
70
|
}
|
|
69
71
|
finally {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kozou/introspect",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "PostgreSQL DDL / COMMENT / VIEW introspection.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"pg": "^8.13.0",
|
|
34
|
-
"@kozou/core": "1.
|
|
34
|
+
"@kozou/core": "1.4.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/pg": "^8.11.0",
|