@safegres/test 0.0.2 → 1.30.7
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 +825 -412
- package/adapters.d.ts +8 -0
- package/adapters.js +18 -0
- package/ast/helpers.d.ts +16 -0
- package/ast/helpers.js +40 -0
- package/ast/parse.d.ts +31 -0
- package/ast/parse.js +87 -0
- package/ast/walk.d.ts +27 -0
- package/ast/walk.js +79 -0
- package/callgraph/baseline.d.ts +28 -0
- package/callgraph/baseline.js +55 -0
- package/callgraph/extract.d.ts +93 -0
- package/callgraph/extract.js +340 -0
- package/callgraph/graph.d.ts +82 -0
- package/callgraph/graph.js +276 -0
- package/checks/anti-patterns.d.ts +53 -0
- package/checks/anti-patterns.js +247 -0
- package/checks/column-grants.d.ts +20 -0
- package/checks/column-grants.js +74 -0
- package/checks/coverage.d.ts +43 -0
- package/checks/coverage.js +110 -0
- package/checks/definer-function.d.ts +91 -0
- package/checks/definer-function.js +458 -0
- package/checks/definer-view.d.ts +167 -0
- package/checks/definer-view.js +392 -0
- package/checks/indexes.d.ts +82 -0
- package/checks/indexes.js +263 -0
- package/checks/lattice.d.ts +179 -0
- package/checks/lattice.js +487 -0
- package/checks/object-acls.d.ts +32 -0
- package/checks/object-acls.js +129 -0
- package/checks/policy-index.d.ts +78 -0
- package/checks/policy-index.js +349 -0
- package/checks/revocable-grants.d.ts +140 -0
- package/checks/revocable-grants.js +377 -0
- package/checks/rls-flags.d.ts +25 -0
- package/checks/rls-flags.js +82 -0
- package/checks/role-reach.d.ts +329 -0
- package/checks/role-reach.js +277 -0
- package/checks/role-trust.d.ts +45 -0
- package/checks/role-trust.js +91 -0
- package/checks/set-role.d.ts +21 -0
- package/checks/set-role.js +66 -0
- package/checks/stats.d.ts +52 -0
- package/checks/stats.js +192 -0
- package/checks/view-exposure.d.ts +68 -0
- package/checks/view-exposure.js +236 -0
- package/checks/view-writes.d.ts +88 -0
- package/checks/view-writes.js +350 -0
- package/ci/baseline.d.ts +104 -0
- package/ci/baseline.js +111 -0
- package/ci/github.d.ts +47 -0
- package/ci/github.js +197 -0
- package/cli/audit.d.ts +3 -0
- package/cli/audit.js +560 -0
- package/cli/baseline.d.ts +3 -0
- package/cli/baseline.js +104 -0
- package/cli/commands.d.ts +2 -0
- package/cli/commands.js +60 -0
- package/cli/doctor.d.ts +3 -0
- package/cli/doctor.js +72 -0
- package/cli/eval.d.ts +3 -0
- package/cli/eval.js +153 -0
- package/cli/print-config.d.ts +3 -0
- package/cli/print-config.js +54 -0
- package/cli/shared.d.ts +43 -0
- package/cli/shared.js +153 -0
- package/cli.d.ts +2 -0
- package/cli.js +69 -0
- package/commands/audit.d.ts +65 -0
- package/commands/audit.js +779 -0
- package/commands/doctor.d.ts +19 -0
- package/commands/doctor.js +181 -0
- package/commands/eval.d.ts +67 -0
- package/commands/eval.js +93 -0
- package/config/fingerprint.d.ts +40 -0
- package/config/fingerprint.js +71 -0
- package/config/loader.d.ts +44 -0
- package/config/loader.js +210 -0
- package/config/presets.d.ts +95 -0
- package/config/presets.js +327 -0
- package/config/resolve.d.ts +47 -0
- package/config/resolve.js +192 -0
- package/config/schema.d.ts +54 -0
- package/config/schema.js +269 -0
- package/config/types.d.ts +562 -0
- package/config/validate.d.ts +14 -0
- package/config/validate.js +125 -0
- package/corpus/README.md +83 -0
- package/corpus/bootstrap.sql +14 -0
- package/corpus/cases/01-anon-write-grant/case.json +26 -0
- package/corpus/cases/01-anon-write-grant/schema.sql +19 -0
- package/corpus/cases/02-grant-to-public/case.json +25 -0
- package/corpus/cases/02-grant-to-public/schema.sql +18 -0
- package/corpus/cases/03-rls-off-reachable-by-anon/case.json +30 -0
- package/corpus/cases/03-rls-off-reachable-by-anon/schema.sql +13 -0
- package/corpus/cases/04-permissive-write-policy/case.json +30 -0
- package/corpus/cases/04-permissive-write-policy/schema.sql +21 -0
- package/corpus/cases/05-public-read-policy/case.json +25 -0
- package/corpus/cases/05-public-read-policy/schema.sql +16 -0
- package/corpus/cases/06-update-without-with-check/case.json +25 -0
- package/corpus/cases/06-update-without-with-check/schema.sql +19 -0
- package/corpus/cases/07-rls-enabled-no-policies/case.json +29 -0
- package/corpus/cases/07-rls-enabled-no-policies/schema.sql +14 -0
- package/corpus/cases/08-select-grant-no-policy/case.json +25 -0
- package/corpus/cases/08-select-grant-no-policy/schema.sql +20 -0
- package/corpus/cases/09-write-grant-no-policy/case.json +24 -0
- package/corpus/cases/09-write-grant-no-policy/schema.sql +18 -0
- package/corpus/cases/10-rls-not-forced/case.json +24 -0
- package/corpus/cases/10-rls-not-forced/schema.sql +18 -0
- package/corpus/cases/11-session-user-in-policy/case.json +24 -0
- package/corpus/cases/11-session-user-in-policy/schema.sql +18 -0
- package/corpus/cases/12-volatile-function-in-policy/case.json +24 -0
- package/corpus/cases/12-volatile-function-in-policy/schema.sql +21 -0
- package/corpus/cases/13-security-definer-policy-wrapper/case.json +24 -0
- package/corpus/cases/13-security-definer-policy-wrapper/schema.sql +21 -0
- package/corpus/cases/14-dead-policy/case.json +24 -0
- package/corpus/cases/14-dead-policy/schema.sql +18 -0
- package/corpus/cases/15-unreachable-grant/case.json +24 -0
- package/corpus/cases/15-unreachable-grant/schema.sql +18 -0
- package/corpus/cases/16-anon-permissive-write-policy/case.json +34 -0
- package/corpus/cases/16-anon-permissive-write-policy/schema.sql +17 -0
- package/corpus/cases/17-foreign-key-without-index/case.json +24 -0
- package/corpus/cases/17-foreign-key-without-index/schema.sql +18 -0
- package/corpus/cases/18-policy-column-unindexed/case.json +24 -0
- package/corpus/cases/18-policy-column-unindexed/schema.sql +23 -0
- package/corpus/cases/19-policy-column-cast/case.json +24 -0
- package/corpus/cases/19-policy-column-cast/schema.sql +19 -0
- package/corpus/cases/20-stable-function-per-row/case.json +24 -0
- package/corpus/cases/20-stable-function-per-row/schema.sql +25 -0
- package/corpus/cases/21-table-without-primary-key/case.json +24 -0
- package/corpus/cases/21-table-without-primary-key/schema.sql +14 -0
- package/corpus/cases/22-redundant-index/case.json +24 -0
- package/corpus/cases/22-redundant-index/schema.sql +16 -0
- package/corpus/cases/23-tsvector-without-index/case.json +24 -0
- package/corpus/cases/23-tsvector-without-index/schema.sql +13 -0
- package/corpus/cases/24-anon-set-role-escalation/case.json +29 -0
- package/corpus/cases/24-anon-set-role-escalation/schema.sql +30 -0
- package/corpus/cases/25-definer-view-bypass/case.json +31 -0
- package/corpus/cases/25-definer-view-bypass/schema.sql +36 -0
- package/corpus/cases/26-invoker-view-no-bypass/case.json +31 -0
- package/corpus/cases/26-invoker-view-no-bypass/schema.sql +44 -0
- package/corpus/cases/27-definer-view-write/case.json +36 -0
- package/corpus/cases/27-definer-view-write/schema.sql +40 -0
- package/corpus/cases/28-invoker-view-no-write/case.json +31 -0
- package/corpus/cases/28-invoker-view-no-write/schema.sql +37 -0
- package/corpus/cases/29-rewrite-rule-bypass/case.json +36 -0
- package/corpus/cases/29-rewrite-rule-bypass/schema.sql +52 -0
- package/corpus/cases/30-instead-nothing-rule/case.json +31 -0
- package/corpus/cases/30-instead-nothing-rule/schema.sql +44 -0
- package/corpus/cases/31-matview-snapshot/case.json +32 -0
- package/corpus/cases/31-matview-snapshot/schema.sql +36 -0
- package/corpus/cases/32-matview-no-rls-no-bypass/case.json +30 -0
- package/corpus/cases/32-matview-no-rls-no-bypass/schema.sql +18 -0
- package/corpus/cases/33-leaky-filter-view/case.json +36 -0
- package/corpus/cases/33-leaky-filter-view/schema.sql +29 -0
- package/corpus/cases/34-barrier-view-no-leak/case.json +32 -0
- package/corpus/cases/34-barrier-view-no-leak/schema.sql +29 -0
- package/corpus/cases/35-column-grant-projection/case.json +27 -0
- package/corpus/cases/35-column-grant-projection/schema.sql +21 -0
- package/corpus/cases/35-policy-function-not-leakproof/case.json +24 -0
- package/corpus/cases/35-policy-function-not-leakproof/schema.sql +27 -0
- package/corpus/cases/36-column-grant-rls-mediated/case.json +27 -0
- package/corpus/cases/36-column-grant-rls-mediated/schema.sql +32 -0
- package/corpus/cases/36-policy-function-leakproof/case.json +24 -0
- package/corpus/cases/36-policy-function-leakproof/schema.sql +22 -0
- package/corpus/cases/37-sort-column-unindexed/case.json +24 -0
- package/corpus/cases/37-sort-column-unindexed/schema.sql +14 -0
- package/corpus/cases/37-unaudited-base-relation/case.json +30 -0
- package/corpus/cases/37-unaudited-base-relation/schema.sql +45 -0
- package/corpus/cases/38-foreign-key-with-index/case.json +22 -0
- package/corpus/cases/38-foreign-key-with-index/schema.sql +17 -0
- package/corpus/cases/38-invoker-view-unaudited-base/case.json +30 -0
- package/corpus/cases/38-invoker-view-unaudited-base/schema.sql +39 -0
- package/corpus/cases/39-definer-view-column-subset/case.json +30 -0
- package/corpus/cases/39-definer-view-column-subset/schema.sql +29 -0
- package/corpus/cases/39-policy-cast-with-expression-index/case.json +23 -0
- package/corpus/cases/39-policy-cast-with-expression-index/schema.sql +19 -0
- package/corpus/cases/40-definer-view-column-overreach/case.json +27 -0
- package/corpus/cases/40-definer-view-column-overreach/schema.sql +29 -0
- package/corpus/cases/40-stable-function-hoisted/case.json +23 -0
- package/corpus/cases/40-stable-function-hoisted/schema.sql +25 -0
- package/corpus/cases/41-index-prefix-not-redundant/case.json +21 -0
- package/corpus/cases/41-index-prefix-not-redundant/schema.sql +15 -0
- package/corpus/cases/41-unreadable-view-body/case.json +33 -0
- package/corpus/cases/41-unreadable-view-body/schema.sql +28 -0
- package/corpus/cases/42-invoker-view-unreadable-body/case.json +30 -0
- package/corpus/cases/42-invoker-view-unreadable-body/schema.sql +27 -0
- package/corpus/cases/42-search-column-indexed/case.json +21 -0
- package/corpus/cases/42-search-column-indexed/schema.sql +12 -0
- package/corpus/cases/43-anon-sequence-grant/case.json +27 -0
- package/corpus/cases/43-anon-sequence-grant/schema.sql +23 -0
- package/corpus/cases/44-serial-sequence-usage/case.json +27 -0
- package/corpus/cases/44-serial-sequence-usage/schema.sql +25 -0
- package/corpus/cases/45-anon-foreign-table/case.json +27 -0
- package/corpus/cases/45-anon-foreign-table/schema.sql +23 -0
- package/corpus/cases/46-unchecked-writable-view/case.json +41 -0
- package/corpus/cases/46-unchecked-writable-view/schema.sql +37 -0
- package/corpus/cases/47-checked-writable-view/case.json +37 -0
- package/corpus/cases/47-checked-writable-view/schema.sql +38 -0
- package/corpus/cases/48-definer-function-reach/case.json +38 -0
- package/corpus/cases/48-definer-function-reach/schema.sql +41 -0
- package/corpus/cases/49-invoker-function-no-reach/case.json +32 -0
- package/corpus/cases/49-invoker-function-no-reach/schema.sql +38 -0
- package/corpus/cases/50-instead-of-trigger-write/case.json +38 -0
- package/corpus/cases/50-instead-of-trigger-write/schema.sql +58 -0
- package/corpus/cases/51-invoker-trigger-no-write/case.json +33 -0
- package/corpus/cases/51-invoker-trigger-no-write/schema.sql +54 -0
- package/corpus/cases/52-revocable-execute-grant/case.json +30 -0
- package/corpus/cases/52-revocable-execute-grant/schema.sql +45 -0
- package/corpus/cases/53-policy-predicate-retains-execute/case.json +23 -0
- package/corpus/cases/53-policy-predicate-retains-execute/schema.sql +49 -0
- package/corpus/index.d.ts +79 -0
- package/corpus/index.js +125 -0
- package/esm/adapters.d.ts +8 -0
- package/esm/adapters.js +6 -0
- package/esm/ast/helpers.d.ts +16 -0
- package/esm/ast/helpers.js +36 -0
- package/esm/ast/parse.d.ts +31 -0
- package/esm/ast/parse.js +82 -0
- package/esm/ast/walk.d.ts +27 -0
- package/esm/ast/walk.js +72 -0
- package/esm/callgraph/baseline.d.ts +28 -0
- package/esm/callgraph/baseline.js +48 -0
- package/esm/callgraph/extract.d.ts +93 -0
- package/esm/callgraph/extract.js +333 -0
- package/esm/callgraph/graph.d.ts +82 -0
- package/esm/callgraph/graph.js +273 -0
- package/esm/checks/anti-patterns.d.ts +53 -0
- package/esm/checks/anti-patterns.js +240 -0
- package/esm/checks/column-grants.d.ts +20 -0
- package/esm/checks/column-grants.js +71 -0
- package/esm/checks/coverage.d.ts +43 -0
- package/esm/checks/coverage.js +104 -0
- package/esm/checks/definer-function.d.ts +91 -0
- package/esm/checks/definer-function.js +452 -0
- package/esm/checks/definer-view.d.ts +167 -0
- package/esm/checks/definer-view.js +382 -0
- package/esm/checks/indexes.d.ts +82 -0
- package/esm/checks/indexes.js +256 -0
- package/esm/checks/lattice.d.ts +179 -0
- package/esm/checks/lattice.js +475 -0
- package/esm/checks/object-acls.d.ts +32 -0
- package/esm/checks/object-acls.js +125 -0
- package/esm/checks/policy-index.d.ts +78 -0
- package/esm/checks/policy-index.js +342 -0
- package/esm/checks/revocable-grants.d.ts +140 -0
- package/esm/checks/revocable-grants.js +373 -0
- package/esm/checks/rls-flags.d.ts +25 -0
- package/esm/checks/rls-flags.js +77 -0
- package/esm/checks/role-reach.d.ts +329 -0
- package/esm/checks/role-reach.js +270 -0
- package/esm/checks/role-trust.d.ts +45 -0
- package/esm/checks/role-trust.js +86 -0
- package/esm/checks/set-role.d.ts +21 -0
- package/esm/checks/set-role.js +63 -0
- package/esm/checks/stats.d.ts +52 -0
- package/esm/checks/stats.js +184 -0
- package/esm/checks/view-exposure.d.ts +68 -0
- package/esm/checks/view-exposure.js +231 -0
- package/esm/checks/view-writes.d.ts +88 -0
- package/esm/checks/view-writes.js +344 -0
- package/esm/ci/baseline.d.ts +104 -0
- package/esm/ci/baseline.js +107 -0
- package/esm/ci/github.d.ts +47 -0
- package/esm/ci/github.js +161 -0
- package/esm/cli/audit.d.ts +3 -0
- package/esm/cli/audit.js +525 -0
- package/esm/cli/baseline.d.ts +3 -0
- package/esm/cli/baseline.js +102 -0
- package/esm/cli/commands.d.ts +2 -0
- package/esm/cli/commands.js +53 -0
- package/esm/cli/doctor.d.ts +3 -0
- package/esm/cli/doctor.js +67 -0
- package/esm/cli/eval.d.ts +3 -0
- package/esm/cli/eval.js +115 -0
- package/esm/cli/print-config.d.ts +3 -0
- package/esm/cli/print-config.js +52 -0
- package/esm/cli/shared.d.ts +43 -0
- package/esm/cli/shared.js +112 -0
- package/esm/cli.d.ts +2 -0
- package/esm/cli.js +67 -0
- package/esm/commands/audit.d.ts +65 -0
- package/esm/commands/audit.js +776 -0
- package/esm/commands/doctor.d.ts +19 -0
- package/esm/commands/doctor.js +178 -0
- package/esm/commands/eval.d.ts +67 -0
- package/esm/commands/eval.js +90 -0
- package/esm/config/fingerprint.d.ts +40 -0
- package/esm/config/fingerprint.js +68 -0
- package/esm/config/loader.d.ts +44 -0
- package/esm/config/loader.js +172 -0
- package/esm/config/presets.d.ts +95 -0
- package/esm/config/presets.js +324 -0
- package/esm/config/resolve.d.ts +47 -0
- package/esm/config/resolve.js +180 -0
- package/esm/config/schema.d.ts +54 -0
- package/esm/config/schema.js +265 -0
- package/esm/config/types.d.ts +562 -0
- package/esm/config/validate.d.ts +14 -0
- package/esm/config/validate.js +122 -0
- package/esm/corpus/index.d.ts +79 -0
- package/esm/corpus/index.js +85 -0
- package/esm/exposure/adapters.d.ts +152 -0
- package/esm/exposure/adapters.js +463 -0
- package/esm/exposure/planes.d.ts +59 -0
- package/esm/exposure/planes.js +144 -0
- package/esm/exposure/reach.d.ts +78 -0
- package/esm/exposure/reach.js +105 -0
- package/esm/exposure/routines.d.ts +36 -0
- package/esm/exposure/routines.js +54 -0
- package/esm/index.d.ts +96 -0
- package/esm/index.js +57 -6
- package/esm/lint/index.d.ts +11 -0
- package/esm/lint/index.js +10 -0
- package/esm/perf/baseline.d.ts +40 -0
- package/esm/perf/baseline.js +83 -0
- package/esm/perf/explain.d.ts +46 -0
- package/esm/perf/explain.js +201 -0
- package/esm/pg/acl.d.ts +72 -0
- package/esm/pg/acl.js +186 -0
- package/esm/pg/behaviors.d.ts +114 -0
- package/esm/pg/behaviors.js +206 -0
- package/esm/pg/exposure.d.ts +74 -0
- package/esm/pg/exposure.js +198 -0
- package/esm/pg/functions.d.ts +52 -0
- package/esm/pg/functions.js +128 -0
- package/esm/pg/indexes.d.ts +192 -0
- package/esm/pg/indexes.js +395 -0
- package/esm/pg/introspect.d.ts +134 -0
- package/esm/pg/introspect.js +274 -0
- package/esm/pg/objects.d.ts +37 -0
- package/esm/pg/objects.js +108 -0
- package/esm/pg/paths.d.ts +114 -0
- package/esm/pg/paths.js +159 -0
- package/esm/pg/proc.d.ts +23 -0
- package/esm/pg/proc.js +55 -0
- package/esm/pg/reach-inputs.d.ts +47 -0
- package/esm/pg/reach-inputs.js +133 -0
- package/esm/pg/roles.d.ts +28 -0
- package/esm/pg/roles.js +50 -0
- package/esm/pg/stats.d.ts +65 -0
- package/esm/pg/stats.js +129 -0
- package/esm/pgpm-test.d.ts +22 -0
- package/esm/pgpm-test.js +39 -0
- package/esm/report/callgraph.d.ts +9 -0
- package/esm/report/callgraph.js +74 -0
- package/esm/report/compare.d.ts +143 -0
- package/esm/report/compare.js +195 -0
- package/esm/report/github.d.ts +74 -0
- package/esm/report/github.js +290 -0
- package/esm/report/json.d.ts +4 -0
- package/esm/report/json.js +3 -0
- package/esm/report/markdown.d.ts +25 -0
- package/esm/report/markdown.js +352 -0
- package/esm/report/pretty.d.ts +14 -0
- package/esm/report/pretty.js +318 -0
- package/esm/report/sarif.d.ts +40 -0
- package/esm/report/sarif.js +189 -0
- package/esm/report/view.d.ts +82 -0
- package/esm/report/view.js +126 -0
- package/esm/rules/registry.d.ts +66 -0
- package/esm/rules/registry.js +562 -0
- package/esm/score/score.d.ts +84 -0
- package/esm/score/score.js +233 -0
- package/esm/score/scorecards.d.ts +68 -0
- package/esm/score/scorecards.js +157 -0
- package/esm/types.d.ts +292 -0
- package/esm/types.js +26 -0
- package/esm/version.d.ts +8 -0
- package/esm/version.js +9 -0
- package/exposure/adapters.d.ts +152 -0
- package/exposure/adapters.js +468 -0
- package/exposure/planes.d.ts +59 -0
- package/exposure/planes.js +151 -0
- package/exposure/reach.d.ts +78 -0
- package/exposure/reach.js +109 -0
- package/exposure/routines.d.ts +36 -0
- package/exposure/routines.js +57 -0
- package/index.d.ts +96 -6
- package/index.js +229 -6
- package/lint/index.d.ts +11 -0
- package/lint/index.js +19 -0
- package/package.json +54 -48
- package/perf/baseline.d.ts +40 -0
- package/perf/baseline.js +92 -0
- package/perf/explain.d.ts +46 -0
- package/perf/explain.js +204 -0
- package/pg/acl.d.ts +72 -0
- package/pg/acl.js +191 -0
- package/pg/behaviors.d.ts +114 -0
- package/pg/behaviors.js +217 -0
- package/pg/exposure.d.ts +74 -0
- package/pg/exposure.js +205 -0
- package/pg/functions.d.ts +52 -0
- package/pg/functions.js +131 -0
- package/pg/indexes.d.ts +192 -0
- package/pg/indexes.js +400 -0
- package/pg/introspect.d.ts +134 -0
- package/pg/introspect.js +280 -0
- package/pg/objects.d.ts +37 -0
- package/pg/objects.js +111 -0
- package/pg/paths.d.ts +114 -0
- package/pg/paths.js +166 -0
- package/pg/proc.d.ts +23 -0
- package/pg/proc.js +58 -0
- package/pg/reach-inputs.d.ts +47 -0
- package/pg/reach-inputs.js +136 -0
- package/pg/roles.d.ts +28 -0
- package/pg/roles.js +54 -0
- package/pg/stats.d.ts +65 -0
- package/pg/stats.js +133 -0
- package/pgpm-test.d.ts +22 -0
- package/pgpm-test.js +42 -0
- package/report/callgraph.d.ts +9 -0
- package/report/callgraph.js +81 -0
- package/report/compare.d.ts +143 -0
- package/report/compare.js +205 -0
- package/report/github.d.ts +74 -0
- package/report/github.js +333 -0
- package/report/json.d.ts +4 -0
- package/report/json.js +6 -0
- package/report/markdown.d.ts +25 -0
- package/report/markdown.js +355 -0
- package/report/pretty.d.ts +14 -0
- package/report/pretty.js +324 -0
- package/report/sarif.d.ts +40 -0
- package/report/sarif.js +193 -0
- package/report/view.d.ts +82 -0
- package/report/view.js +132 -0
- package/rules/registry.d.ts +66 -0
- package/rules/registry.js +569 -0
- package/schema/safegres.schema.json +1119 -0
- package/score/score.d.ts +84 -0
- package/score/score.js +238 -0
- package/score/scorecards.d.ts +68 -0
- package/score/scorecards.js +162 -0
- package/types.d.ts +292 -0
- package/types.js +32 -0
- package/version.d.ts +8 -0
- package/version.js +12 -0
- package/LICENSE +0 -23
- package/admin.d.ts +0 -26
- package/admin.js +0 -182
- package/connect.d.ts +0 -19
- package/connect.js +0 -83
- package/dist/README.md +0 -557
- package/dist/package.json +0 -72
- package/esm/admin.js +0 -178
- package/esm/connect.js +0 -78
- package/esm/manager.js +0 -136
- package/esm/roles.js +0 -32
- package/esm/seed/adapters.js +0 -23
- package/esm/seed/csv.js +0 -44
- package/esm/seed/index.js +0 -16
- package/esm/seed/json.js +0 -18
- package/esm/seed/launchql.js +0 -19
- package/esm/seed/sqitch.js +0 -17
- package/esm/stream.js +0 -43
- package/esm/test-client.js +0 -150
- package/manager.d.ts +0 -25
- package/manager.js +0 -140
- package/roles.d.ts +0 -17
- package/roles.js +0 -38
- package/seed/adapters.d.ts +0 -4
- package/seed/adapters.js +0 -28
- package/seed/csv.d.ts +0 -9
- package/seed/csv.js +0 -49
- package/seed/index.d.ts +0 -16
- package/seed/index.js +0 -33
- package/seed/json.d.ts +0 -6
- package/seed/json.js +0 -21
- package/seed/launchql.d.ts +0 -2
- package/seed/launchql.js +0 -22
- package/seed/sqitch.d.ts +0 -2
- package/seed/sqitch.js +0 -20
- package/seed/types.d.ts +0 -13
- package/stream.d.ts +0 -2
- package/stream.js +0 -46
- package/test-client.d.ts +0 -49
- package/test-client.js +0 -154
- /package/{seed → config}/types.js +0 -0
- /package/esm/{seed → config}/types.js +0 -0
|
@@ -0,0 +1,1119 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/constructive-io/constructive/main/packages/safegres/schema/safegres.schema.json",
|
|
4
|
+
"title": "safegres configuration",
|
|
5
|
+
"description": "Configuration for safegres, the PostgreSQL security and performance auditor. Discovered as safegres.config.{ts,js,mjs,cjs}, .safegresrc{,.json,.yaml,.yml,.js}, safegres.json, or the \"safegres\" key in package.json.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "JSON Schema reference, for editor completion."
|
|
12
|
+
},
|
|
13
|
+
"extends": {
|
|
14
|
+
"anyOf": [
|
|
15
|
+
{
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Preset name, path, or package"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Preset name, path, or package"
|
|
24
|
+
},
|
|
25
|
+
"description": "Several, lowest precedence first"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"description": "Presets (safegres:recommended, …), relative file paths, or npm packages"
|
|
29
|
+
},
|
|
30
|
+
"exposure": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"additionalProperties": false,
|
|
33
|
+
"properties": {
|
|
34
|
+
"resolver": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": [
|
|
37
|
+
"static",
|
|
38
|
+
"constructive",
|
|
39
|
+
"postgraphile"
|
|
40
|
+
],
|
|
41
|
+
"description": "How to resolve the exposed surface"
|
|
42
|
+
},
|
|
43
|
+
"adapters": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": {
|
|
46
|
+
"description": "Built-in name or adapter object"
|
|
47
|
+
},
|
|
48
|
+
"description": "Exposure adapters: built-in names, or ExposureAdapter objects in a JS/TS config"
|
|
49
|
+
},
|
|
50
|
+
"schemas": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"items": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "Schema name"
|
|
55
|
+
},
|
|
56
|
+
"description": "Schemas reachable from the exposed APIs"
|
|
57
|
+
},
|
|
58
|
+
"roles": {
|
|
59
|
+
"type": "array",
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "Role name"
|
|
63
|
+
},
|
|
64
|
+
"description": "Roles reachable at the API edge"
|
|
65
|
+
},
|
|
66
|
+
"anonRoles": {
|
|
67
|
+
"type": "array",
|
|
68
|
+
"items": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "Role name"
|
|
71
|
+
},
|
|
72
|
+
"description": "The subset of roles an unauthenticated caller arrives as"
|
|
73
|
+
},
|
|
74
|
+
"name": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"description": "Name of the primary plane. Default api."
|
|
77
|
+
},
|
|
78
|
+
"reach": {
|
|
79
|
+
"type": "boolean",
|
|
80
|
+
"description": "Let adapters narrow a plane to the relations the API can address. Default true."
|
|
81
|
+
},
|
|
82
|
+
"planes": {
|
|
83
|
+
"type": "array",
|
|
84
|
+
"items": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"additionalProperties": false,
|
|
87
|
+
"properties": {
|
|
88
|
+
"name": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "Plane identifier, e.g. api, direct:app, internal"
|
|
91
|
+
},
|
|
92
|
+
"kind": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"enum": [
|
|
95
|
+
"api",
|
|
96
|
+
"role",
|
|
97
|
+
"schema"
|
|
98
|
+
],
|
|
99
|
+
"description": "What kind of access path this plane describes"
|
|
100
|
+
},
|
|
101
|
+
"primary": {
|
|
102
|
+
"type": "boolean",
|
|
103
|
+
"description": "Make this plane the headline score. At most one plane may claim it."
|
|
104
|
+
},
|
|
105
|
+
"schemas": {
|
|
106
|
+
"type": "array",
|
|
107
|
+
"items": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"description": "Schema name"
|
|
110
|
+
},
|
|
111
|
+
"description": "Schemas this plane reaches"
|
|
112
|
+
},
|
|
113
|
+
"roles": {
|
|
114
|
+
"type": "array",
|
|
115
|
+
"items": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"description": "Role name"
|
|
118
|
+
},
|
|
119
|
+
"description": "Roles this plane grants access as"
|
|
120
|
+
},
|
|
121
|
+
"anonRoles": {
|
|
122
|
+
"type": "array",
|
|
123
|
+
"items": {
|
|
124
|
+
"type": "string",
|
|
125
|
+
"description": "Role name"
|
|
126
|
+
},
|
|
127
|
+
"description": "The subset of roles reachable without authenticating"
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"description": "One graded access plane"
|
|
131
|
+
},
|
|
132
|
+
"description": "Additional access planes to grade"
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"description": "The exposed API surface — what the score is computed against"
|
|
136
|
+
},
|
|
137
|
+
"public": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": false,
|
|
140
|
+
"properties": {
|
|
141
|
+
"read": {
|
|
142
|
+
"type": "array",
|
|
143
|
+
"items": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"description": "schema.table glob"
|
|
146
|
+
},
|
|
147
|
+
"description": "Table globs whose open SELECT policies are by design"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"description": "Declared-public surface: open reads that are deliberate"
|
|
151
|
+
},
|
|
152
|
+
"extensions": {
|
|
153
|
+
"type": "object",
|
|
154
|
+
"additionalProperties": false,
|
|
155
|
+
"properties": {
|
|
156
|
+
"skipOwned": {
|
|
157
|
+
"type": "boolean",
|
|
158
|
+
"description": "Skip relations an extension owns. Default true."
|
|
159
|
+
},
|
|
160
|
+
"ignore": {
|
|
161
|
+
"type": "array",
|
|
162
|
+
"items": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"description": "Extension name"
|
|
165
|
+
},
|
|
166
|
+
"description": "Extension names whose schemas are skipped wholesale"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
"description": "How to treat objects belonging to installed extensions"
|
|
170
|
+
},
|
|
171
|
+
"perf": {
|
|
172
|
+
"type": "object",
|
|
173
|
+
"additionalProperties": false,
|
|
174
|
+
"properties": {
|
|
175
|
+
"enabled": {
|
|
176
|
+
"type": "boolean",
|
|
177
|
+
"description": "Collect and score perf findings without passing --perf"
|
|
178
|
+
},
|
|
179
|
+
"rules": {
|
|
180
|
+
"type": "object",
|
|
181
|
+
"additionalProperties": {
|
|
182
|
+
"anyOf": [
|
|
183
|
+
{
|
|
184
|
+
"type": "string",
|
|
185
|
+
"enum": [
|
|
186
|
+
"off",
|
|
187
|
+
"critical",
|
|
188
|
+
"high",
|
|
189
|
+
"medium",
|
|
190
|
+
"low",
|
|
191
|
+
"info"
|
|
192
|
+
],
|
|
193
|
+
"description": "Rule setting"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"type": "array",
|
|
197
|
+
"items": {
|
|
198
|
+
"description": "Severity or options object"
|
|
199
|
+
},
|
|
200
|
+
"description": "Severity plus rule options"
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
"description": "off, a severity, or [severity, options]"
|
|
204
|
+
},
|
|
205
|
+
"description": "Rule settings by code or prefix wildcard (A*, P*, *). Exact codes win."
|
|
206
|
+
},
|
|
207
|
+
"ignore": {
|
|
208
|
+
"type": "array",
|
|
209
|
+
"items": {
|
|
210
|
+
"type": "string",
|
|
211
|
+
"description": "schema.table glob"
|
|
212
|
+
},
|
|
213
|
+
"description": "Table globs whose perf findings are intentional"
|
|
214
|
+
},
|
|
215
|
+
"scoring": {
|
|
216
|
+
"type": "object",
|
|
217
|
+
"additionalProperties": false,
|
|
218
|
+
"properties": {
|
|
219
|
+
"model": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"enum": [
|
|
222
|
+
"density",
|
|
223
|
+
"weighted"
|
|
224
|
+
],
|
|
225
|
+
"description": "Scoring model. Default density."
|
|
226
|
+
},
|
|
227
|
+
"weights": {
|
|
228
|
+
"type": "object",
|
|
229
|
+
"additionalProperties": {
|
|
230
|
+
"type": "number",
|
|
231
|
+
"description": "Points"
|
|
232
|
+
},
|
|
233
|
+
"description": "Points deducted per finding severity"
|
|
234
|
+
},
|
|
235
|
+
"perRuleWeights": {
|
|
236
|
+
"type": "object",
|
|
237
|
+
"additionalProperties": {
|
|
238
|
+
"type": "number",
|
|
239
|
+
"description": "Points"
|
|
240
|
+
},
|
|
241
|
+
"description": "Per-rule weight, beating the severity weight"
|
|
242
|
+
},
|
|
243
|
+
"maxDeductionPerRule": {
|
|
244
|
+
"type": "number",
|
|
245
|
+
"description": "Cap on one rule’s total deduction (weighted model)"
|
|
246
|
+
},
|
|
247
|
+
"maxRuleDensity": {
|
|
248
|
+
"anyOf": [
|
|
249
|
+
{
|
|
250
|
+
"type": "number",
|
|
251
|
+
"description": "Fraction"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"type": "boolean",
|
|
255
|
+
"description": "false to disable"
|
|
256
|
+
}
|
|
257
|
+
],
|
|
258
|
+
"description": "Cap on one rule’s contribution, as a fraction of the points that fail an audit alone. Default 0.5; false disables the cap."
|
|
259
|
+
},
|
|
260
|
+
"failClosedWeight": {
|
|
261
|
+
"type": "number",
|
|
262
|
+
"description": "Multiplier for fail-closed findings. Default 0."
|
|
263
|
+
},
|
|
264
|
+
"densityK": {
|
|
265
|
+
"type": "number",
|
|
266
|
+
"description": "Density falloff constant. Default 0.17."
|
|
267
|
+
},
|
|
268
|
+
"unknownExposureCap": {
|
|
269
|
+
"anyOf": [
|
|
270
|
+
{
|
|
271
|
+
"type": "number",
|
|
272
|
+
"description": "Cap"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"type": "boolean",
|
|
276
|
+
"description": "false to disable"
|
|
277
|
+
}
|
|
278
|
+
],
|
|
279
|
+
"description": "Maximum score when no exposure surface resolves. Default 80; false disables the cap."
|
|
280
|
+
},
|
|
281
|
+
"floorOnCritical": {
|
|
282
|
+
"anyOf": [
|
|
283
|
+
{
|
|
284
|
+
"type": "string",
|
|
285
|
+
"enum": [
|
|
286
|
+
"A+",
|
|
287
|
+
"A",
|
|
288
|
+
"B",
|
|
289
|
+
"C",
|
|
290
|
+
"D",
|
|
291
|
+
"F"
|
|
292
|
+
],
|
|
293
|
+
"description": "Grade"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"type": "boolean",
|
|
297
|
+
"description": "false to disable"
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
"description": "Grade any critical finding floors the score at. Default C; false disables."
|
|
301
|
+
},
|
|
302
|
+
"gradeBands": {
|
|
303
|
+
"type": "object",
|
|
304
|
+
"additionalProperties": {
|
|
305
|
+
"type": "number",
|
|
306
|
+
"description": "Score"
|
|
307
|
+
},
|
|
308
|
+
"description": "Minimum score for each grade"
|
|
309
|
+
},
|
|
310
|
+
"includeStats": {
|
|
311
|
+
"type": "boolean",
|
|
312
|
+
"description": "Whether S* runtime-statistics findings count toward the perf score. Default true."
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
"description": "Scoring for the perf axis"
|
|
316
|
+
},
|
|
317
|
+
"stats": {
|
|
318
|
+
"type": "object",
|
|
319
|
+
"additionalProperties": false,
|
|
320
|
+
"properties": {
|
|
321
|
+
"enabled": {
|
|
322
|
+
"type": "boolean",
|
|
323
|
+
"description": "Collect runtime statistics without passing --stats"
|
|
324
|
+
},
|
|
325
|
+
"minRows": {
|
|
326
|
+
"type": "number",
|
|
327
|
+
"description": "Ignore tables with fewer live rows than this. Default 1000."
|
|
328
|
+
},
|
|
329
|
+
"seqScanRatio": {
|
|
330
|
+
"type": "number",
|
|
331
|
+
"description": "S1 fires above this seq-scan/index-scan ratio. Default 10."
|
|
332
|
+
},
|
|
333
|
+
"minIndexBytes": {
|
|
334
|
+
"type": "number",
|
|
335
|
+
"description": "S2 ignores indexes smaller than this. Default 1048576."
|
|
336
|
+
},
|
|
337
|
+
"deadTupleRatio": {
|
|
338
|
+
"type": "number",
|
|
339
|
+
"description": "S3 fires above this dead/live tuple ratio. Default 0.2."
|
|
340
|
+
},
|
|
341
|
+
"minTimeShare": {
|
|
342
|
+
"type": "number",
|
|
343
|
+
"description": "S4 reports statements at or above this share of total time. Default 0.05."
|
|
344
|
+
},
|
|
345
|
+
"topStatements": {
|
|
346
|
+
"type": "number",
|
|
347
|
+
"description": "S4 reports at most this many statements. Default 5."
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
"description": "Runtime statistics (S*)"
|
|
351
|
+
},
|
|
352
|
+
"explain": {
|
|
353
|
+
"type": "object",
|
|
354
|
+
"additionalProperties": false,
|
|
355
|
+
"properties": {
|
|
356
|
+
"enabled": {
|
|
357
|
+
"type": "boolean",
|
|
358
|
+
"description": "Probe findings with EXPLAIN without passing --explain"
|
|
359
|
+
},
|
|
360
|
+
"minRows": {
|
|
361
|
+
"type": "number",
|
|
362
|
+
"description": "Below this planner row estimate a seq scan is right. Default 1000."
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
"description": "Planner proof (--explain)"
|
|
366
|
+
},
|
|
367
|
+
"baseline": {
|
|
368
|
+
"type": "string",
|
|
369
|
+
"description": "Baseline of accepted perf debt; its presence enables the diff"
|
|
370
|
+
},
|
|
371
|
+
"failOnNew": {
|
|
372
|
+
"type": "boolean",
|
|
373
|
+
"description": "Exit non-zero on a perf finding absent from the baseline"
|
|
374
|
+
},
|
|
375
|
+
"paths": {
|
|
376
|
+
"type": "object",
|
|
377
|
+
"additionalProperties": false,
|
|
378
|
+
"properties": {
|
|
379
|
+
"infer": {
|
|
380
|
+
"type": "boolean",
|
|
381
|
+
"description": "Collect access-path signals for every foreign key. Default true."
|
|
382
|
+
},
|
|
383
|
+
"minPointers": {
|
|
384
|
+
"type": "number",
|
|
385
|
+
"description": "Write-once pointers before the config-record signal fires. Default 2."
|
|
386
|
+
},
|
|
387
|
+
"onWriteOncePointer": {
|
|
388
|
+
"type": "string",
|
|
389
|
+
"enum": [
|
|
390
|
+
"report",
|
|
391
|
+
"demote",
|
|
392
|
+
"suppress"
|
|
393
|
+
],
|
|
394
|
+
"description": "What X1 does with a shape-only write-once pointer"
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
"description": "Access-path classification, which decides whether X1 applies"
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
"description": "The optional performance dimension"
|
|
401
|
+
},
|
|
402
|
+
"schemas": {
|
|
403
|
+
"type": "array",
|
|
404
|
+
"items": {
|
|
405
|
+
"type": "string",
|
|
406
|
+
"description": "Schema name"
|
|
407
|
+
},
|
|
408
|
+
"description": "Only audit these schemas"
|
|
409
|
+
},
|
|
410
|
+
"excludeSchemas": {
|
|
411
|
+
"type": "array",
|
|
412
|
+
"items": {
|
|
413
|
+
"type": "string",
|
|
414
|
+
"description": "Schema name"
|
|
415
|
+
},
|
|
416
|
+
"description": "Never audit these schemas"
|
|
417
|
+
},
|
|
418
|
+
"roles": {
|
|
419
|
+
"type": "array",
|
|
420
|
+
"items": {
|
|
421
|
+
"type": "string",
|
|
422
|
+
"description": "Role name"
|
|
423
|
+
},
|
|
424
|
+
"description": "Only audit these roles"
|
|
425
|
+
},
|
|
426
|
+
"excludeRoles": {
|
|
427
|
+
"type": "array",
|
|
428
|
+
"items": {
|
|
429
|
+
"type": "string",
|
|
430
|
+
"description": "Role name"
|
|
431
|
+
},
|
|
432
|
+
"description": "Never audit these roles"
|
|
433
|
+
},
|
|
434
|
+
"rules": {
|
|
435
|
+
"type": "object",
|
|
436
|
+
"additionalProperties": {
|
|
437
|
+
"anyOf": [
|
|
438
|
+
{
|
|
439
|
+
"type": "string",
|
|
440
|
+
"enum": [
|
|
441
|
+
"off",
|
|
442
|
+
"critical",
|
|
443
|
+
"high",
|
|
444
|
+
"medium",
|
|
445
|
+
"low",
|
|
446
|
+
"info"
|
|
447
|
+
],
|
|
448
|
+
"description": "Rule setting"
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"type": "array",
|
|
452
|
+
"items": {
|
|
453
|
+
"description": "Severity or options object"
|
|
454
|
+
},
|
|
455
|
+
"description": "Severity plus rule options"
|
|
456
|
+
}
|
|
457
|
+
],
|
|
458
|
+
"description": "off, a severity, or [severity, options]"
|
|
459
|
+
},
|
|
460
|
+
"description": "Rule settings by code or prefix wildcard (A*, P*, *). Exact codes win."
|
|
461
|
+
},
|
|
462
|
+
"overrides": {
|
|
463
|
+
"type": "array",
|
|
464
|
+
"items": {
|
|
465
|
+
"type": "object",
|
|
466
|
+
"additionalProperties": false,
|
|
467
|
+
"properties": {
|
|
468
|
+
"tables": {
|
|
469
|
+
"type": "array",
|
|
470
|
+
"items": {
|
|
471
|
+
"type": "string",
|
|
472
|
+
"description": "schema.table glob"
|
|
473
|
+
},
|
|
474
|
+
"description": "schema.table globs this entry applies to"
|
|
475
|
+
},
|
|
476
|
+
"rules": {
|
|
477
|
+
"type": "object",
|
|
478
|
+
"additionalProperties": {
|
|
479
|
+
"anyOf": [
|
|
480
|
+
{
|
|
481
|
+
"type": "string",
|
|
482
|
+
"enum": [
|
|
483
|
+
"off",
|
|
484
|
+
"critical",
|
|
485
|
+
"high",
|
|
486
|
+
"medium",
|
|
487
|
+
"low",
|
|
488
|
+
"info"
|
|
489
|
+
],
|
|
490
|
+
"description": "Rule setting"
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"type": "array",
|
|
494
|
+
"items": {
|
|
495
|
+
"description": "Severity or options object"
|
|
496
|
+
},
|
|
497
|
+
"description": "Severity plus rule options"
|
|
498
|
+
}
|
|
499
|
+
],
|
|
500
|
+
"description": "off, a severity, or [severity, options]"
|
|
501
|
+
},
|
|
502
|
+
"description": "Rule settings by code or prefix wildcard (A*, P*, *). Exact codes win."
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
"description": "One override"
|
|
506
|
+
},
|
|
507
|
+
"description": "Per-scope retuning, ESLint overrides-style"
|
|
508
|
+
},
|
|
509
|
+
"scoring": {
|
|
510
|
+
"type": "object",
|
|
511
|
+
"additionalProperties": false,
|
|
512
|
+
"properties": {
|
|
513
|
+
"model": {
|
|
514
|
+
"type": "string",
|
|
515
|
+
"enum": [
|
|
516
|
+
"density",
|
|
517
|
+
"weighted"
|
|
518
|
+
],
|
|
519
|
+
"description": "Scoring model. Default density."
|
|
520
|
+
},
|
|
521
|
+
"weights": {
|
|
522
|
+
"type": "object",
|
|
523
|
+
"additionalProperties": {
|
|
524
|
+
"type": "number",
|
|
525
|
+
"description": "Points"
|
|
526
|
+
},
|
|
527
|
+
"description": "Points deducted per finding severity"
|
|
528
|
+
},
|
|
529
|
+
"perRuleWeights": {
|
|
530
|
+
"type": "object",
|
|
531
|
+
"additionalProperties": {
|
|
532
|
+
"type": "number",
|
|
533
|
+
"description": "Points"
|
|
534
|
+
},
|
|
535
|
+
"description": "Per-rule weight, beating the severity weight"
|
|
536
|
+
},
|
|
537
|
+
"maxDeductionPerRule": {
|
|
538
|
+
"type": "number",
|
|
539
|
+
"description": "Cap on one rule’s total deduction (weighted model)"
|
|
540
|
+
},
|
|
541
|
+
"maxRuleDensity": {
|
|
542
|
+
"anyOf": [
|
|
543
|
+
{
|
|
544
|
+
"type": "number",
|
|
545
|
+
"description": "Fraction"
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
"type": "boolean",
|
|
549
|
+
"description": "false to disable"
|
|
550
|
+
}
|
|
551
|
+
],
|
|
552
|
+
"description": "Cap on one rule’s contribution, as a fraction of the points that fail an audit alone. Default 0.5; false disables the cap."
|
|
553
|
+
},
|
|
554
|
+
"failClosedWeight": {
|
|
555
|
+
"type": "number",
|
|
556
|
+
"description": "Multiplier for fail-closed findings. Default 0."
|
|
557
|
+
},
|
|
558
|
+
"densityK": {
|
|
559
|
+
"type": "number",
|
|
560
|
+
"description": "Density falloff constant. Default 0.17."
|
|
561
|
+
},
|
|
562
|
+
"unknownExposureCap": {
|
|
563
|
+
"anyOf": [
|
|
564
|
+
{
|
|
565
|
+
"type": "number",
|
|
566
|
+
"description": "Cap"
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
"type": "boolean",
|
|
570
|
+
"description": "false to disable"
|
|
571
|
+
}
|
|
572
|
+
],
|
|
573
|
+
"description": "Maximum score when no exposure surface resolves. Default 80; false disables the cap."
|
|
574
|
+
},
|
|
575
|
+
"floorOnCritical": {
|
|
576
|
+
"anyOf": [
|
|
577
|
+
{
|
|
578
|
+
"type": "string",
|
|
579
|
+
"enum": [
|
|
580
|
+
"A+",
|
|
581
|
+
"A",
|
|
582
|
+
"B",
|
|
583
|
+
"C",
|
|
584
|
+
"D",
|
|
585
|
+
"F"
|
|
586
|
+
],
|
|
587
|
+
"description": "Grade"
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"type": "boolean",
|
|
591
|
+
"description": "false to disable"
|
|
592
|
+
}
|
|
593
|
+
],
|
|
594
|
+
"description": "Grade any critical finding floors the score at. Default C; false disables."
|
|
595
|
+
},
|
|
596
|
+
"gradeBands": {
|
|
597
|
+
"type": "object",
|
|
598
|
+
"additionalProperties": {
|
|
599
|
+
"type": "number",
|
|
600
|
+
"description": "Score"
|
|
601
|
+
},
|
|
602
|
+
"description": "Minimum score for each grade"
|
|
603
|
+
}
|
|
604
|
+
},
|
|
605
|
+
"description": "The security scoring model"
|
|
606
|
+
},
|
|
607
|
+
"scorecards": {
|
|
608
|
+
"type": "object",
|
|
609
|
+
"additionalProperties": {
|
|
610
|
+
"type": "object",
|
|
611
|
+
"additionalProperties": false,
|
|
612
|
+
"properties": {
|
|
613
|
+
"model": {
|
|
614
|
+
"type": "string",
|
|
615
|
+
"enum": [
|
|
616
|
+
"density",
|
|
617
|
+
"weighted"
|
|
618
|
+
],
|
|
619
|
+
"description": "Scoring model. Default density."
|
|
620
|
+
},
|
|
621
|
+
"weights": {
|
|
622
|
+
"type": "object",
|
|
623
|
+
"additionalProperties": {
|
|
624
|
+
"type": "number",
|
|
625
|
+
"description": "Points"
|
|
626
|
+
},
|
|
627
|
+
"description": "Points deducted per finding severity"
|
|
628
|
+
},
|
|
629
|
+
"perRuleWeights": {
|
|
630
|
+
"type": "object",
|
|
631
|
+
"additionalProperties": {
|
|
632
|
+
"type": "number",
|
|
633
|
+
"description": "Points"
|
|
634
|
+
},
|
|
635
|
+
"description": "Per-rule weight, beating the severity weight"
|
|
636
|
+
},
|
|
637
|
+
"maxDeductionPerRule": {
|
|
638
|
+
"type": "number",
|
|
639
|
+
"description": "Cap on one rule’s total deduction (weighted model)"
|
|
640
|
+
},
|
|
641
|
+
"maxRuleDensity": {
|
|
642
|
+
"anyOf": [
|
|
643
|
+
{
|
|
644
|
+
"type": "number",
|
|
645
|
+
"description": "Fraction"
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
"type": "boolean",
|
|
649
|
+
"description": "false to disable"
|
|
650
|
+
}
|
|
651
|
+
],
|
|
652
|
+
"description": "Cap on one rule’s contribution, as a fraction of the points that fail an audit alone. Default 0.5; false disables the cap."
|
|
653
|
+
},
|
|
654
|
+
"failClosedWeight": {
|
|
655
|
+
"type": "number",
|
|
656
|
+
"description": "Multiplier for fail-closed findings. Default 0."
|
|
657
|
+
},
|
|
658
|
+
"densityK": {
|
|
659
|
+
"type": "number",
|
|
660
|
+
"description": "Density falloff constant. Default 0.17."
|
|
661
|
+
},
|
|
662
|
+
"unknownExposureCap": {
|
|
663
|
+
"anyOf": [
|
|
664
|
+
{
|
|
665
|
+
"type": "number",
|
|
666
|
+
"description": "Cap"
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
"type": "boolean",
|
|
670
|
+
"description": "false to disable"
|
|
671
|
+
}
|
|
672
|
+
],
|
|
673
|
+
"description": "Maximum score when no exposure surface resolves. Default 80; false disables the cap."
|
|
674
|
+
},
|
|
675
|
+
"floorOnCritical": {
|
|
676
|
+
"anyOf": [
|
|
677
|
+
{
|
|
678
|
+
"type": "string",
|
|
679
|
+
"enum": [
|
|
680
|
+
"A+",
|
|
681
|
+
"A",
|
|
682
|
+
"B",
|
|
683
|
+
"C",
|
|
684
|
+
"D",
|
|
685
|
+
"F"
|
|
686
|
+
],
|
|
687
|
+
"description": "Grade"
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
"type": "boolean",
|
|
691
|
+
"description": "false to disable"
|
|
692
|
+
}
|
|
693
|
+
],
|
|
694
|
+
"description": "Grade any critical finding floors the score at. Default C; false disables."
|
|
695
|
+
},
|
|
696
|
+
"gradeBands": {
|
|
697
|
+
"type": "object",
|
|
698
|
+
"additionalProperties": {
|
|
699
|
+
"type": "number",
|
|
700
|
+
"description": "Score"
|
|
701
|
+
},
|
|
702
|
+
"description": "Minimum score for each grade"
|
|
703
|
+
},
|
|
704
|
+
"title": {
|
|
705
|
+
"type": "string",
|
|
706
|
+
"description": "Heading for reports. Defaults to the config key."
|
|
707
|
+
},
|
|
708
|
+
"description": {
|
|
709
|
+
"type": "string",
|
|
710
|
+
"description": "What decision this score informs. Rendered with it."
|
|
711
|
+
},
|
|
712
|
+
"select": {
|
|
713
|
+
"type": "object",
|
|
714
|
+
"additionalProperties": false,
|
|
715
|
+
"properties": {
|
|
716
|
+
"rules": {
|
|
717
|
+
"type": "array",
|
|
718
|
+
"items": {
|
|
719
|
+
"type": "string",
|
|
720
|
+
"description": "Rule code or wildcard"
|
|
721
|
+
},
|
|
722
|
+
"description": "Rule codes or C* prefix wildcards to grade"
|
|
723
|
+
},
|
|
724
|
+
"exclude": {
|
|
725
|
+
"type": "array",
|
|
726
|
+
"items": {
|
|
727
|
+
"type": "string",
|
|
728
|
+
"description": "Rule code or wildcard"
|
|
729
|
+
},
|
|
730
|
+
"description": "Rule codes or wildcards to drop after rules selected"
|
|
731
|
+
},
|
|
732
|
+
"dimension": {
|
|
733
|
+
"type": "string",
|
|
734
|
+
"enum": [
|
|
735
|
+
"security",
|
|
736
|
+
"perf",
|
|
737
|
+
"all"
|
|
738
|
+
],
|
|
739
|
+
"description": "Which axis: security (default), perf, or all"
|
|
740
|
+
},
|
|
741
|
+
"roles": {
|
|
742
|
+
"type": "array",
|
|
743
|
+
"items": {
|
|
744
|
+
"type": "string",
|
|
745
|
+
"description": "Role name"
|
|
746
|
+
},
|
|
747
|
+
"description": "Only findings about these roles"
|
|
748
|
+
},
|
|
749
|
+
"planes": {
|
|
750
|
+
"type": "array",
|
|
751
|
+
"items": {
|
|
752
|
+
"type": "string",
|
|
753
|
+
"description": "Plane name"
|
|
754
|
+
},
|
|
755
|
+
"description": "Only findings reachable on these access planes"
|
|
756
|
+
},
|
|
757
|
+
"schemas": {
|
|
758
|
+
"type": "array",
|
|
759
|
+
"items": {
|
|
760
|
+
"type": "string",
|
|
761
|
+
"description": "Schema name"
|
|
762
|
+
},
|
|
763
|
+
"description": "Only findings in these schemas"
|
|
764
|
+
},
|
|
765
|
+
"direction": {
|
|
766
|
+
"type": "string",
|
|
767
|
+
"enum": [
|
|
768
|
+
"fail-open",
|
|
769
|
+
"fail-closed",
|
|
770
|
+
"none",
|
|
771
|
+
"any"
|
|
772
|
+
],
|
|
773
|
+
"description": "fail-open leaks, fail-closed denials, or any"
|
|
774
|
+
},
|
|
775
|
+
"minSeverity": {
|
|
776
|
+
"type": "string",
|
|
777
|
+
"enum": [
|
|
778
|
+
"critical",
|
|
779
|
+
"high",
|
|
780
|
+
"medium",
|
|
781
|
+
"low",
|
|
782
|
+
"info"
|
|
783
|
+
],
|
|
784
|
+
"description": "Drop findings below this severity before scoring"
|
|
785
|
+
},
|
|
786
|
+
"exposure": {
|
|
787
|
+
"type": "string",
|
|
788
|
+
"enum": [
|
|
789
|
+
"exposed",
|
|
790
|
+
"all"
|
|
791
|
+
],
|
|
792
|
+
"description": "exposed (default) grades the API surface; all ignores exposure"
|
|
793
|
+
},
|
|
794
|
+
"acknowledged": {
|
|
795
|
+
"type": "string",
|
|
796
|
+
"enum": [
|
|
797
|
+
"skip",
|
|
798
|
+
"include"
|
|
799
|
+
],
|
|
800
|
+
"description": "include grades acknowledged findings too. Default skip."
|
|
801
|
+
},
|
|
802
|
+
"severities": {
|
|
803
|
+
"type": "string",
|
|
804
|
+
"enum": [
|
|
805
|
+
"configured",
|
|
806
|
+
"declared"
|
|
807
|
+
],
|
|
808
|
+
"description": "configured (default) uses this config’s severities; declared uses each rule’s registry default"
|
|
809
|
+
},
|
|
810
|
+
"denominator": {
|
|
811
|
+
"type": "string",
|
|
812
|
+
"enum": [
|
|
813
|
+
"exposed",
|
|
814
|
+
"all"
|
|
815
|
+
],
|
|
816
|
+
"description": "Density denominator: exposed relations (default) or all"
|
|
817
|
+
}
|
|
818
|
+
},
|
|
819
|
+
"description": "Which findings it grades"
|
|
820
|
+
}
|
|
821
|
+
},
|
|
822
|
+
"description": "One scorecard"
|
|
823
|
+
},
|
|
824
|
+
"description": "Named scores over slices of the same findings, keyed by name"
|
|
825
|
+
},
|
|
826
|
+
"failOn": {
|
|
827
|
+
"type": "object",
|
|
828
|
+
"additionalProperties": false,
|
|
829
|
+
"properties": {
|
|
830
|
+
"severity": {
|
|
831
|
+
"type": "string",
|
|
832
|
+
"enum": [
|
|
833
|
+
"critical",
|
|
834
|
+
"high",
|
|
835
|
+
"medium",
|
|
836
|
+
"low",
|
|
837
|
+
"info"
|
|
838
|
+
],
|
|
839
|
+
"description": "Exit non-zero on any finding at or above this severity"
|
|
840
|
+
},
|
|
841
|
+
"score": {
|
|
842
|
+
"type": "number",
|
|
843
|
+
"description": "Exit non-zero below this security score"
|
|
844
|
+
},
|
|
845
|
+
"grade": {
|
|
846
|
+
"type": "string",
|
|
847
|
+
"enum": [
|
|
848
|
+
"A+",
|
|
849
|
+
"A",
|
|
850
|
+
"B",
|
|
851
|
+
"C",
|
|
852
|
+
"D",
|
|
853
|
+
"F"
|
|
854
|
+
],
|
|
855
|
+
"description": "Exit non-zero below this security grade"
|
|
856
|
+
},
|
|
857
|
+
"perfScore": {
|
|
858
|
+
"type": "number",
|
|
859
|
+
"description": "Exit non-zero below this perf score"
|
|
860
|
+
},
|
|
861
|
+
"perfGrade": {
|
|
862
|
+
"type": "string",
|
|
863
|
+
"enum": [
|
|
864
|
+
"A+",
|
|
865
|
+
"A",
|
|
866
|
+
"B",
|
|
867
|
+
"C",
|
|
868
|
+
"D",
|
|
869
|
+
"F"
|
|
870
|
+
],
|
|
871
|
+
"description": "Exit non-zero below this perf grade"
|
|
872
|
+
},
|
|
873
|
+
"planes": {
|
|
874
|
+
"type": "object",
|
|
875
|
+
"additionalProperties": {
|
|
876
|
+
"type": "object",
|
|
877
|
+
"additionalProperties": false,
|
|
878
|
+
"properties": {
|
|
879
|
+
"score": {
|
|
880
|
+
"type": "number",
|
|
881
|
+
"description": "Exit non-zero below this plane score"
|
|
882
|
+
},
|
|
883
|
+
"grade": {
|
|
884
|
+
"type": "string",
|
|
885
|
+
"enum": [
|
|
886
|
+
"A+",
|
|
887
|
+
"A",
|
|
888
|
+
"B",
|
|
889
|
+
"C",
|
|
890
|
+
"D",
|
|
891
|
+
"F"
|
|
892
|
+
],
|
|
893
|
+
"description": "Exit non-zero below this plane grade"
|
|
894
|
+
}
|
|
895
|
+
},
|
|
896
|
+
"description": "One plane gate"
|
|
897
|
+
},
|
|
898
|
+
"description": "Per-plane gates, keyed by plane name. A floor is the useful shape."
|
|
899
|
+
},
|
|
900
|
+
"scorecards": {
|
|
901
|
+
"type": "object",
|
|
902
|
+
"additionalProperties": {
|
|
903
|
+
"type": "object",
|
|
904
|
+
"additionalProperties": false,
|
|
905
|
+
"properties": {
|
|
906
|
+
"score": {
|
|
907
|
+
"type": "number",
|
|
908
|
+
"description": "Exit non-zero below this plane score"
|
|
909
|
+
},
|
|
910
|
+
"grade": {
|
|
911
|
+
"type": "string",
|
|
912
|
+
"enum": [
|
|
913
|
+
"A+",
|
|
914
|
+
"A",
|
|
915
|
+
"B",
|
|
916
|
+
"C",
|
|
917
|
+
"D",
|
|
918
|
+
"F"
|
|
919
|
+
],
|
|
920
|
+
"description": "Exit non-zero below this plane grade"
|
|
921
|
+
}
|
|
922
|
+
},
|
|
923
|
+
"description": "One scorecard gate"
|
|
924
|
+
},
|
|
925
|
+
"description": "Per-scorecard gates, keyed by scorecard name."
|
|
926
|
+
}
|
|
927
|
+
},
|
|
928
|
+
"description": "Gates — what makes the run exit non-zero"
|
|
929
|
+
},
|
|
930
|
+
"source": {
|
|
931
|
+
"type": "object",
|
|
932
|
+
"additionalProperties": false,
|
|
933
|
+
"properties": {
|
|
934
|
+
"pgpm": {
|
|
935
|
+
"type": "string",
|
|
936
|
+
"description": "Deploy the pgpm workspace at this path into an ephemeral database and audit it"
|
|
937
|
+
}
|
|
938
|
+
},
|
|
939
|
+
"description": "Where the database to audit comes from"
|
|
940
|
+
},
|
|
941
|
+
"outputs": {
|
|
942
|
+
"type": "object",
|
|
943
|
+
"additionalProperties": false,
|
|
944
|
+
"properties": {
|
|
945
|
+
"dir": {
|
|
946
|
+
"type": "string",
|
|
947
|
+
"description": "Write safegres.{json,md,sarif} into this directory"
|
|
948
|
+
},
|
|
949
|
+
"json": {
|
|
950
|
+
"type": "string",
|
|
951
|
+
"description": "Path for the JSON report"
|
|
952
|
+
},
|
|
953
|
+
"markdown": {
|
|
954
|
+
"type": "string",
|
|
955
|
+
"description": "Path for the Markdown report"
|
|
956
|
+
},
|
|
957
|
+
"sarif": {
|
|
958
|
+
"type": "string",
|
|
959
|
+
"description": "Path for the SARIF report"
|
|
960
|
+
},
|
|
961
|
+
"sarifSources": {
|
|
962
|
+
"type": "string",
|
|
963
|
+
"description": "Root scanned to resolve SARIF findings to SQL source lines"
|
|
964
|
+
},
|
|
965
|
+
"snapshot": {
|
|
966
|
+
"type": "string",
|
|
967
|
+
"description": "Path for the aggregate-only snapshot, for a later compare"
|
|
968
|
+
},
|
|
969
|
+
"githubComment": {
|
|
970
|
+
"type": "string",
|
|
971
|
+
"description": "Path for the rendered sticky PR comment"
|
|
972
|
+
}
|
|
973
|
+
},
|
|
974
|
+
"description": "Files a single run writes"
|
|
975
|
+
},
|
|
976
|
+
"callGraph": {
|
|
977
|
+
"type": "object",
|
|
978
|
+
"additionalProperties": false,
|
|
979
|
+
"properties": {
|
|
980
|
+
"enabled": {
|
|
981
|
+
"type": "boolean",
|
|
982
|
+
"description": "Build the call-graph audit without passing --call-graph"
|
|
983
|
+
},
|
|
984
|
+
"baseline": {
|
|
985
|
+
"type": "string",
|
|
986
|
+
"description": "Baseline of accepted trust boundaries; enables the diff"
|
|
987
|
+
},
|
|
988
|
+
"failOnNew": {
|
|
989
|
+
"type": "boolean",
|
|
990
|
+
"description": "Exit non-zero on a boundary absent from the baseline"
|
|
991
|
+
}
|
|
992
|
+
},
|
|
993
|
+
"description": "The unscored call-graph audit and its baseline"
|
|
994
|
+
},
|
|
995
|
+
"report": {
|
|
996
|
+
"type": "object",
|
|
997
|
+
"additionalProperties": false,
|
|
998
|
+
"properties": {
|
|
999
|
+
"planes": {
|
|
1000
|
+
"type": "array",
|
|
1001
|
+
"items": {
|
|
1002
|
+
"type": "string",
|
|
1003
|
+
"description": "Plane name or glob"
|
|
1004
|
+
},
|
|
1005
|
+
"description": "Planes to render, by name or glob"
|
|
1006
|
+
},
|
|
1007
|
+
"dimensions": {
|
|
1008
|
+
"type": "array",
|
|
1009
|
+
"items": {
|
|
1010
|
+
"type": "string",
|
|
1011
|
+
"enum": [
|
|
1012
|
+
"security",
|
|
1013
|
+
"perf"
|
|
1014
|
+
],
|
|
1015
|
+
"description": "Dimension"
|
|
1016
|
+
},
|
|
1017
|
+
"description": "Dimensions to render. Default both."
|
|
1018
|
+
},
|
|
1019
|
+
"github": {
|
|
1020
|
+
"type": "object",
|
|
1021
|
+
"additionalProperties": false,
|
|
1022
|
+
"properties": {
|
|
1023
|
+
"summary": {
|
|
1024
|
+
"type": "array",
|
|
1025
|
+
"items": {
|
|
1026
|
+
"type": "string",
|
|
1027
|
+
"description": "Score"
|
|
1028
|
+
},
|
|
1029
|
+
"description": "Scores in the job summary, in order (security, perf, planes:<glob>)"
|
|
1030
|
+
},
|
|
1031
|
+
"comment": {
|
|
1032
|
+
"type": "object",
|
|
1033
|
+
"additionalProperties": false,
|
|
1034
|
+
"properties": {
|
|
1035
|
+
"sticky": {
|
|
1036
|
+
"type": "boolean",
|
|
1037
|
+
"description": "Reuse one comment per PR instead of appending. Default true."
|
|
1038
|
+
},
|
|
1039
|
+
"sections": {
|
|
1040
|
+
"type": "array",
|
|
1041
|
+
"items": {
|
|
1042
|
+
"type": "string",
|
|
1043
|
+
"enum": [
|
|
1044
|
+
"scores",
|
|
1045
|
+
"delta",
|
|
1046
|
+
"new-findings",
|
|
1047
|
+
"report",
|
|
1048
|
+
"findings",
|
|
1049
|
+
"planes"
|
|
1050
|
+
],
|
|
1051
|
+
"description": "Section"
|
|
1052
|
+
},
|
|
1053
|
+
"description": "Sections to include. Default scores, delta, new-findings. `report` adds the markdown report (`findings` is its old name)."
|
|
1054
|
+
},
|
|
1055
|
+
"detail": {
|
|
1056
|
+
"type": "string",
|
|
1057
|
+
"enum": [
|
|
1058
|
+
"summary",
|
|
1059
|
+
"normal",
|
|
1060
|
+
"verbose"
|
|
1061
|
+
],
|
|
1062
|
+
"description": "How much of the report the report section carries. Default summary."
|
|
1063
|
+
}
|
|
1064
|
+
},
|
|
1065
|
+
"description": "Sticky PR comment"
|
|
1066
|
+
},
|
|
1067
|
+
"annotations": {
|
|
1068
|
+
"type": "string",
|
|
1069
|
+
"enum": [
|
|
1070
|
+
"all",
|
|
1071
|
+
"gate-failures",
|
|
1072
|
+
"none"
|
|
1073
|
+
],
|
|
1074
|
+
"description": "Which findings become annotations. Default gate-failures."
|
|
1075
|
+
},
|
|
1076
|
+
"detail": {
|
|
1077
|
+
"type": "string",
|
|
1078
|
+
"enum": [
|
|
1079
|
+
"summary",
|
|
1080
|
+
"normal",
|
|
1081
|
+
"verbose"
|
|
1082
|
+
],
|
|
1083
|
+
"description": "How much of the report goes in the job summary. Default normal."
|
|
1084
|
+
},
|
|
1085
|
+
"badges": {
|
|
1086
|
+
"type": "boolean",
|
|
1087
|
+
"description": "Render scores as colored shields.io badges. Default true."
|
|
1088
|
+
}
|
|
1089
|
+
},
|
|
1090
|
+
"description": "GitHub Actions output"
|
|
1091
|
+
}
|
|
1092
|
+
},
|
|
1093
|
+
"description": "What a rendered report shows — selection, not analysis"
|
|
1094
|
+
},
|
|
1095
|
+
"eval": {
|
|
1096
|
+
"type": "object",
|
|
1097
|
+
"additionalProperties": false,
|
|
1098
|
+
"properties": {
|
|
1099
|
+
"corpus": {
|
|
1100
|
+
"type": "string",
|
|
1101
|
+
"description": "Corpus directory of <id>/{case.json,schema.sql}"
|
|
1102
|
+
},
|
|
1103
|
+
"preset": {
|
|
1104
|
+
"type": "string",
|
|
1105
|
+
"description": "Preset every case is graded under. Default recommended."
|
|
1106
|
+
},
|
|
1107
|
+
"cases": {
|
|
1108
|
+
"type": "array",
|
|
1109
|
+
"items": {
|
|
1110
|
+
"type": "string",
|
|
1111
|
+
"description": "Case id"
|
|
1112
|
+
},
|
|
1113
|
+
"description": "Case ids (or id prefixes) to run"
|
|
1114
|
+
}
|
|
1115
|
+
},
|
|
1116
|
+
"description": "Defaults for safegres eval"
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
}
|