@cdot65/prisma-airs-cli 2.12.0 → 3.0.1
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 +27 -169
- package/dist/chunk-JXHYQFEK.js +1752 -0
- package/dist/cli/index.js +6511 -4
- package/dist/dlp-5XKWITZX.js +710 -0
- package/dist/index.d.ts +1396 -26
- package/dist/index.js +40 -37
- package/package.json +22 -25
- package/dist/airs/dlp/data-filtering-profiles.d.ts +0 -10
- package/dist/airs/dlp/data-filtering-profiles.d.ts.map +0 -1
- package/dist/airs/dlp/data-filtering-profiles.js +0 -17
- package/dist/airs/dlp/data-filtering-profiles.js.map +0 -1
- package/dist/airs/dlp/data-patterns.d.ts +0 -13
- package/dist/airs/dlp/data-patterns.d.ts.map +0 -1
- package/dist/airs/dlp/data-patterns.js +0 -26
- package/dist/airs/dlp/data-patterns.js.map +0 -1
- package/dist/airs/dlp/data-profiles.d.ts +0 -12
- package/dist/airs/dlp/data-profiles.d.ts.map +0 -1
- package/dist/airs/dlp/data-profiles.js +0 -23
- package/dist/airs/dlp/data-profiles.js.map +0 -1
- package/dist/airs/dlp/dictionaries.d.ts +0 -13
- package/dist/airs/dlp/dictionaries.d.ts.map +0 -1
- package/dist/airs/dlp/dictionaries.js +0 -34
- package/dist/airs/dlp/dictionaries.js.map +0 -1
- package/dist/airs/dlp/index.d.ts +0 -6
- package/dist/airs/dlp/index.d.ts.map +0 -1
- package/dist/airs/dlp/index.js +0 -6
- package/dist/airs/dlp/index.js.map +0 -1
- package/dist/airs/dlp/types.d.ts +0 -36
- package/dist/airs/dlp/types.d.ts.map +0 -1
- package/dist/airs/dlp/types.js +0 -2
- package/dist/airs/dlp/types.js.map +0 -1
- package/dist/airs/management.d.ts +0 -69
- package/dist/airs/management.d.ts.map +0 -1
- package/dist/airs/management.js +0 -370
- package/dist/airs/management.js.map +0 -1
- package/dist/airs/modelsecurity.d.ts +0 -74
- package/dist/airs/modelsecurity.d.ts.map +0 -1
- package/dist/airs/modelsecurity.js +0 -337
- package/dist/airs/modelsecurity.js.map +0 -1
- package/dist/airs/promptsets.d.ts +0 -50
- package/dist/airs/promptsets.d.ts.map +0 -1
- package/dist/airs/promptsets.js +0 -120
- package/dist/airs/promptsets.js.map +0 -1
- package/dist/airs/redteam.d.ts +0 -75
- package/dist/airs/redteam.d.ts.map +0 -1
- package/dist/airs/redteam.js +0 -418
- package/dist/airs/redteam.js.map +0 -1
- package/dist/airs/runtime.d.ts +0 -27
- package/dist/airs/runtime.d.ts.map +0 -1
- package/dist/airs/runtime.js +0 -158
- package/dist/airs/runtime.js.map +0 -1
- package/dist/airs/scanner.d.ts +0 -36
- package/dist/airs/scanner.d.ts.map +0 -1
- package/dist/airs/scanner.js +0 -101
- package/dist/airs/scanner.js.map +0 -1
- package/dist/airs/types.d.ts +0 -838
- package/dist/airs/types.d.ts.map +0 -1
- package/dist/airs/types.js +0 -6
- package/dist/airs/types.js.map +0 -1
- package/dist/audit/evaluator.d.ts +0 -17
- package/dist/audit/evaluator.d.ts.map +0 -1
- package/dist/audit/evaluator.js +0 -82
- package/dist/audit/evaluator.js.map +0 -1
- package/dist/audit/report.d.ts +0 -38
- package/dist/audit/report.d.ts.map +0 -1
- package/dist/audit/report.js +0 -141
- package/dist/audit/report.js.map +0 -1
- package/dist/audit/runner.d.ts +0 -18
- package/dist/audit/runner.d.ts.map +0 -1
- package/dist/audit/runner.js +0 -60
- package/dist/audit/runner.js.map +0 -1
- package/dist/audit/types.d.ts +0 -53
- package/dist/audit/types.d.ts.map +0 -1
- package/dist/audit/types.js +0 -5
- package/dist/audit/types.js.map +0 -1
- package/dist/backup/index.d.ts +0 -3
- package/dist/backup/index.d.ts.map +0 -1
- package/dist/backup/index.js +0 -3
- package/dist/backup/index.js.map +0 -1
- package/dist/backup/io.d.ts +0 -15
- package/dist/backup/io.d.ts.map +0 -1
- package/dist/backup/io.js +0 -67
- package/dist/backup/io.js.map +0 -1
- package/dist/backup/types.d.ts +0 -25
- package/dist/backup/types.d.ts.map +0 -1
- package/dist/backup/types.js +0 -2
- package/dist/backup/types.js.map +0 -1
- package/dist/cli/builders/profile-builder.d.ts +0 -45
- package/dist/cli/builders/profile-builder.d.ts.map +0 -1
- package/dist/cli/builders/profile-builder.js +0 -308
- package/dist/cli/builders/profile-builder.js.map +0 -1
- package/dist/cli/bulk-scan-state.d.ts +0 -15
- package/dist/cli/bulk-scan-state.d.ts.map +0 -1
- package/dist/cli/bulk-scan-state.js +0 -20
- package/dist/cli/bulk-scan-state.js.map +0 -1
- package/dist/cli/commands/audit.d.ts +0 -4
- package/dist/cli/commands/audit.d.ts.map +0 -1
- package/dist/cli/commands/audit.js +0 -113
- package/dist/cli/commands/audit.js.map +0 -1
- package/dist/cli/commands/backup.d.ts +0 -10
- package/dist/cli/commands/backup.d.ts.map +0 -1
- package/dist/cli/commands/backup.js +0 -102
- package/dist/cli/commands/backup.js.map +0 -1
- package/dist/cli/commands/dlp/build-body.d.ts +0 -28
- package/dist/cli/commands/dlp/build-body.d.ts.map +0 -1
- package/dist/cli/commands/dlp/build-body.js +0 -174
- package/dist/cli/commands/dlp/build-body.js.map +0 -1
- package/dist/cli/commands/dlp/dictionaries.d.ts +0 -3
- package/dist/cli/commands/dlp/dictionaries.d.ts.map +0 -1
- package/dist/cli/commands/dlp/dictionaries.js +0 -167
- package/dist/cli/commands/dlp/dictionaries.js.map +0 -1
- package/dist/cli/commands/dlp/filtering-profiles.d.ts +0 -3
- package/dist/cli/commands/dlp/filtering-profiles.d.ts.map +0 -1
- package/dist/cli/commands/dlp/filtering-profiles.js +0 -82
- package/dist/cli/commands/dlp/filtering-profiles.js.map +0 -1
- package/dist/cli/commands/dlp/generate.d.ts +0 -3
- package/dist/cli/commands/dlp/generate.d.ts.map +0 -1
- package/dist/cli/commands/dlp/generate.js +0 -51
- package/dist/cli/commands/dlp/generate.js.map +0 -1
- package/dist/cli/commands/dlp/index.d.ts +0 -3
- package/dist/cli/commands/dlp/index.d.ts.map +0 -1
- package/dist/cli/commands/dlp/index.js +0 -16
- package/dist/cli/commands/dlp/index.js.map +0 -1
- package/dist/cli/commands/dlp/patch.d.ts +0 -15
- package/dist/cli/commands/dlp/patch.d.ts.map +0 -1
- package/dist/cli/commands/dlp/patch.js +0 -70
- package/dist/cli/commands/dlp/patch.js.map +0 -1
- package/dist/cli/commands/dlp/patterns.d.ts +0 -3
- package/dist/cli/commands/dlp/patterns.d.ts.map +0 -1
- package/dist/cli/commands/dlp/patterns.js +0 -127
- package/dist/cli/commands/dlp/patterns.js.map +0 -1
- package/dist/cli/commands/dlp/profiles.d.ts +0 -3
- package/dist/cli/commands/dlp/profiles.d.ts.map +0 -1
- package/dist/cli/commands/dlp/profiles.js +0 -126
- package/dist/cli/commands/dlp/profiles.js.map +0 -1
- package/dist/cli/commands/modelsecurity.d.ts +0 -4
- package/dist/cli/commands/modelsecurity.d.ts.map +0 -1
- package/dist/cli/commands/modelsecurity.js +0 -605
- package/dist/cli/commands/modelsecurity.js.map +0 -1
- package/dist/cli/commands/profiles-cleanup.d.ts +0 -26
- package/dist/cli/commands/profiles-cleanup.d.ts.map +0 -1
- package/dist/cli/commands/profiles-cleanup.js +0 -113
- package/dist/cli/commands/profiles-cleanup.js.map +0 -1
- package/dist/cli/commands/redteam.d.ts +0 -12
- package/dist/cli/commands/redteam.d.ts.map +0 -1
- package/dist/cli/commands/redteam.js +0 -1075
- package/dist/cli/commands/redteam.js.map +0 -1
- package/dist/cli/commands/restore.d.ts +0 -11
- package/dist/cli/commands/restore.d.ts.map +0 -1
- package/dist/cli/commands/restore.js +0 -109
- package/dist/cli/commands/restore.js.map +0 -1
- package/dist/cli/commands/runtime.d.ts +0 -6
- package/dist/cli/commands/runtime.d.ts.map +0 -1
- package/dist/cli/commands/runtime.js +0 -869
- package/dist/cli/commands/runtime.js.map +0 -1
- package/dist/cli/commands/topics-apply.d.ts +0 -16
- package/dist/cli/commands/topics-apply.d.ts.map +0 -1
- package/dist/cli/commands/topics-apply.js +0 -69
- package/dist/cli/commands/topics-apply.js.map +0 -1
- package/dist/cli/commands/topics-create.d.ts +0 -16
- package/dist/cli/commands/topics-create.d.ts.map +0 -1
- package/dist/cli/commands/topics-create.js +0 -71
- package/dist/cli/commands/topics-create.js.map +0 -1
- package/dist/cli/commands/topics-eval.d.ts +0 -7
- package/dist/cli/commands/topics-eval.d.ts.map +0 -1
- package/dist/cli/commands/topics-eval.js +0 -65
- package/dist/cli/commands/topics-eval.js.map +0 -1
- package/dist/cli/commands/topics-revert.d.ts +0 -9
- package/dist/cli/commands/topics-revert.d.ts.map +0 -1
- package/dist/cli/commands/topics-revert.js +0 -52
- package/dist/cli/commands/topics-revert.js.map +0 -1
- package/dist/cli/commands/topics-sample.d.ts +0 -4
- package/dist/cli/commands/topics-sample.d.ts.map +0 -1
- package/dist/cli/commands/topics-sample.js +0 -27
- package/dist/cli/commands/topics-sample.js.map +0 -1
- package/dist/cli/debug-logger.d.ts +0 -11
- package/dist/cli/debug-logger.d.ts.map +0 -1
- package/dist/cli/debug-logger.js +0 -137
- package/dist/cli/debug-logger.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/parse-input.d.ts +0 -9
- package/dist/cli/parse-input.d.ts.map +0 -1
- package/dist/cli/parse-input.js +0 -109
- package/dist/cli/parse-input.js.map +0 -1
- package/dist/cli/program.d.ts +0 -3
- package/dist/cli/program.d.ts.map +0 -1
- package/dist/cli/program.js +0 -32
- package/dist/cli/program.js.map +0 -1
- package/dist/cli/renderer/audit.d.ts +0 -11
- package/dist/cli/renderer/audit.d.ts.map +0 -1
- package/dist/cli/renderer/audit.js +0 -58
- package/dist/cli/renderer/audit.js.map +0 -1
- package/dist/cli/renderer/backup.d.ts +0 -8
- package/dist/cli/renderer/backup.d.ts.map +0 -1
- package/dist/cli/renderer/backup.js +0 -50
- package/dist/cli/renderer/backup.js.map +0 -1
- package/dist/cli/renderer/common.d.ts +0 -14
- package/dist/cli/renderer/common.d.ts.map +0 -1
- package/dist/cli/renderer/common.js +0 -50
- package/dist/cli/renderer/common.js.map +0 -1
- package/dist/cli/renderer/dlp.d.ts +0 -34
- package/dist/cli/renderer/dlp.d.ts.map +0 -1
- package/dist/cli/renderer/dlp.js +0 -348
- package/dist/cli/renderer/dlp.js.map +0 -1
- package/dist/cli/renderer/eval.d.ts +0 -30
- package/dist/cli/renderer/eval.d.ts.map +0 -1
- package/dist/cli/renderer/eval.js +0 -61
- package/dist/cli/renderer/eval.js.map +0 -1
- package/dist/cli/renderer/index.d.ts +0 -9
- package/dist/cli/renderer/index.d.ts.map +0 -1
- package/dist/cli/renderer/index.js +0 -9
- package/dist/cli/renderer/index.js.map +0 -1
- package/dist/cli/renderer/modelsecurity.d.ts +0 -35
- package/dist/cli/renderer/modelsecurity.d.ts.map +0 -1
- package/dist/cli/renderer/modelsecurity.js +0 -339
- package/dist/cli/renderer/modelsecurity.js.map +0 -1
- package/dist/cli/renderer/redteam.d.ts +0 -224
- package/dist/cli/renderer/redteam.d.ts.map +0 -1
- package/dist/cli/renderer/redteam.js +0 -500
- package/dist/cli/renderer/redteam.js.map +0 -1
- package/dist/cli/renderer/runtime.d.ts +0 -135
- package/dist/cli/renderer/runtime.d.ts.map +0 -1
- package/dist/cli/renderer/runtime.js +0 -426
- package/dist/cli/renderer/runtime.js.map +0 -1
- package/dist/config/loader.d.ts +0 -3
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -59
- package/dist/config/loader.js.map +0 -1
- package/dist/config/schema.d.ts +0 -63
- package/dist/config/schema.d.ts.map +0 -1
- package/dist/config/schema.js +0 -38
- package/dist/config/schema.js.map +0 -1
- package/dist/core/constraints.d.ts +0 -19
- package/dist/core/constraints.d.ts.map +0 -1
- package/dist/core/constraints.js +0 -82
- package/dist/core/constraints.js.map +0 -1
- package/dist/core/metrics.d.ts +0 -13
- package/dist/core/metrics.d.ts.map +0 -1
- package/dist/core/metrics.js +0 -73
- package/dist/core/metrics.js.map +0 -1
- package/dist/core/prompt-loader.d.ts +0 -14
- package/dist/core/prompt-loader.d.ts.map +0 -1
- package/dist/core/prompt-loader.js +0 -122
- package/dist/core/prompt-loader.js.map +0 -1
- package/dist/core/types.d.ts +0 -96
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -1
- package/dist/dlp/embed/docx.d.ts +0 -3
- package/dist/dlp/embed/docx.d.ts.map +0 -1
- package/dist/dlp/embed/docx.js +0 -63
- package/dist/dlp/embed/docx.js.map +0 -1
- package/dist/dlp/embed/index.d.ts +0 -6
- package/dist/dlp/embed/index.d.ts.map +0 -1
- package/dist/dlp/embed/index.js +0 -20
- package/dist/dlp/embed/index.js.map +0 -1
- package/dist/dlp/embed/jpeg.d.ts +0 -5
- package/dist/dlp/embed/jpeg.d.ts.map +0 -1
- package/dist/dlp/embed/jpeg.js +0 -67
- package/dist/dlp/embed/jpeg.js.map +0 -1
- package/dist/dlp/embed/overlay.d.ts +0 -7
- package/dist/dlp/embed/overlay.d.ts.map +0 -1
- package/dist/dlp/embed/overlay.js +0 -21
- package/dist/dlp/embed/overlay.js.map +0 -1
- package/dist/dlp/embed/pdf.d.ts +0 -7
- package/dist/dlp/embed/pdf.d.ts.map +0 -1
- package/dist/dlp/embed/pdf.js +0 -124
- package/dist/dlp/embed/pdf.js.map +0 -1
- package/dist/dlp/embed/png-chunks.d.ts +0 -12
- package/dist/dlp/embed/png-chunks.d.ts.map +0 -1
- package/dist/dlp/embed/png-chunks.js +0 -85
- package/dist/dlp/embed/png-chunks.js.map +0 -1
- package/dist/dlp/embed/png.d.ts +0 -5
- package/dist/dlp/embed/png.d.ts.map +0 -1
- package/dist/dlp/embed/png.js +0 -75
- package/dist/dlp/embed/png.js.map +0 -1
- package/dist/dlp/embed/svg.d.ts +0 -3
- package/dist/dlp/embed/svg.d.ts.map +0 -1
- package/dist/dlp/embed/svg.js +0 -43
- package/dist/dlp/embed/svg.js.map +0 -1
- package/dist/dlp/embed/zip.d.ts +0 -3
- package/dist/dlp/embed/zip.d.ts.map +0 -1
- package/dist/dlp/embed/zip.js +0 -25
- package/dist/dlp/embed/zip.js.map +0 -1
- package/dist/dlp/generate/docx.d.ts +0 -3
- package/dist/dlp/generate/docx.d.ts.map +0 -1
- package/dist/dlp/generate/docx.js +0 -24
- package/dist/dlp/generate/docx.js.map +0 -1
- package/dist/dlp/generate/index.d.ts +0 -5
- package/dist/dlp/generate/index.d.ts.map +0 -1
- package/dist/dlp/generate/index.js +0 -21
- package/dist/dlp/generate/index.js.map +0 -1
- package/dist/dlp/generate/jpeg.d.ts +0 -3
- package/dist/dlp/generate/jpeg.d.ts.map +0 -1
- package/dist/dlp/generate/jpeg.js +0 -8
- package/dist/dlp/generate/jpeg.js.map +0 -1
- package/dist/dlp/generate/pdf.d.ts +0 -3
- package/dist/dlp/generate/pdf.d.ts.map +0 -1
- package/dist/dlp/generate/pdf.js +0 -19
- package/dist/dlp/generate/pdf.js.map +0 -1
- package/dist/dlp/generate/png.d.ts +0 -3
- package/dist/dlp/generate/png.d.ts.map +0 -1
- package/dist/dlp/generate/png.js +0 -8
- package/dist/dlp/generate/png.js.map +0 -1
- package/dist/dlp/generate/raster.d.ts +0 -9
- package/dist/dlp/generate/raster.d.ts.map +0 -1
- package/dist/dlp/generate/raster.js +0 -20
- package/dist/dlp/generate/raster.js.map +0 -1
- package/dist/dlp/generate/svg.d.ts +0 -3
- package/dist/dlp/generate/svg.d.ts.map +0 -1
- package/dist/dlp/generate/svg.js +0 -17
- package/dist/dlp/generate/svg.js.map +0 -1
- package/dist/dlp/index.d.ts +0 -15
- package/dist/dlp/index.d.ts.map +0 -1
- package/dist/dlp/index.js +0 -54
- package/dist/dlp/index.js.map +0 -1
- package/dist/dlp/lorem.d.ts +0 -3
- package/dist/dlp/lorem.d.ts.map +0 -1
- package/dist/dlp/lorem.js +0 -65
- package/dist/dlp/lorem.js.map +0 -1
- package/dist/dlp/manifest.d.ts +0 -11
- package/dist/dlp/manifest.d.ts.map +0 -1
- package/dist/dlp/manifest.js +0 -14
- package/dist/dlp/manifest.js.map +0 -1
- package/dist/dlp/payload.d.ts +0 -6
- package/dist/dlp/payload.d.ts.map +0 -1
- package/dist/dlp/payload.js +0 -62
- package/dist/dlp/payload.js.map +0 -1
- package/dist/dlp/rng.d.ts +0 -9
- package/dist/dlp/rng.d.ts.map +0 -1
- package/dist/dlp/rng.js +0 -28
- package/dist/dlp/rng.js.map +0 -1
- package/dist/dlp/types.d.ts +0 -26
- package/dist/dlp/types.d.ts.map +0 -1
- package/dist/dlp/types.js +0 -2
- package/dist/dlp/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/llm/prompts/analyze-results.d.ts +0 -3
- package/dist/llm/prompts/analyze-results.d.ts.map +0 -1
- package/dist/llm/prompts/analyze-results.js +0 -52
- package/dist/llm/prompts/analyze-results.js.map +0 -1
- package/dist/llm/prompts/generate-companion.d.ts +0 -3
- package/dist/llm/prompts/generate-companion.d.ts.map +0 -1
- package/dist/llm/prompts/generate-companion.js +0 -42
- package/dist/llm/prompts/generate-companion.js.map +0 -1
- package/dist/llm/prompts/generate-tests.d.ts +0 -3
- package/dist/llm/prompts/generate-tests.d.ts.map +0 -1
- package/dist/llm/prompts/generate-tests.js +0 -46
- package/dist/llm/prompts/generate-tests.js.map +0 -1
- package/dist/llm/prompts/generate-topic.d.ts +0 -4
- package/dist/llm/prompts/generate-topic.d.ts.map +0 -1
- package/dist/llm/prompts/generate-topic.js +0 -41
- package/dist/llm/prompts/generate-topic.js.map +0 -1
- package/dist/llm/prompts/improve-topic.d.ts +0 -3
- package/dist/llm/prompts/improve-topic.d.ts.map +0 -1
- package/dist/llm/prompts/improve-topic.js +0 -77
- package/dist/llm/prompts/improve-topic.js.map +0 -1
- package/dist/llm/prompts/simplify-topic.d.ts +0 -3
- package/dist/llm/prompts/simplify-topic.d.ts.map +0 -1
- package/dist/llm/prompts/simplify-topic.js +0 -50
- package/dist/llm/prompts/simplify-topic.js.map +0 -1
- package/dist/llm/provider.d.ts +0 -21
- package/dist/llm/provider.d.ts.map +0 -1
- package/dist/llm/provider.js +0 -76
- package/dist/llm/provider.js.map +0 -1
- package/dist/llm/schemas.d.ts +0 -97
- package/dist/llm/schemas.d.ts.map +0 -1
- package/dist/llm/schemas.js +0 -24
- package/dist/llm/schemas.js.map +0 -1
- package/dist/llm/service.d.ts +0 -34
- package/dist/llm/service.d.ts.map +0 -1
- package/dist/llm/service.js +0 -268
- package/dist/llm/service.js.map +0 -1
- package/dist/llm/types.d.ts +0 -18
- package/dist/llm/types.d.ts.map +0 -1
- package/dist/llm/types.js +0 -2
- package/dist/llm/types.js.map +0 -1
- package/dist/report/html.d.ts +0 -6
- package/dist/report/html.d.ts.map +0 -1
- package/dist/report/html.js +0 -200
- package/dist/report/html.js.map +0 -1
- package/dist/report/json.d.ts +0 -11
- package/dist/report/json.d.ts.map +0 -1
- package/dist/report/json.js +0 -74
- package/dist/report/json.js.map +0 -1
- package/dist/report/types.d.ts +0 -58
- package/dist/report/types.d.ts.map +0 -1
- package/dist/report/types.js +0 -5
- package/dist/report/types.js.map +0 -1
package/dist/backup/io.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import yaml from 'js-yaml';
|
|
4
|
-
/**
|
|
5
|
-
* Sanitize a resource name into a filesystem-safe filename (no extension).
|
|
6
|
-
* Lowercases, replaces non-alphanumeric with hyphens, collapses runs, trims.
|
|
7
|
-
*/
|
|
8
|
-
export function sanitizeFilename(name) {
|
|
9
|
-
if (!name)
|
|
10
|
-
return 'unnamed';
|
|
11
|
-
const sanitized = name
|
|
12
|
-
.toLowerCase()
|
|
13
|
-
.replace(/[^a-z0-9-]/g, '-')
|
|
14
|
-
.replace(/-{2,}/g, '-')
|
|
15
|
-
.replace(/^-+|-+$/g, '');
|
|
16
|
-
return sanitized || 'unnamed';
|
|
17
|
-
}
|
|
18
|
-
/** Resolve output directory — user-specified or default `./airs-backup/<subdir>/`. */
|
|
19
|
-
export function resolveOutputDir(userDir, defaultSubdir) {
|
|
20
|
-
if (userDir)
|
|
21
|
-
return path.resolve(userDir);
|
|
22
|
-
return path.resolve('./airs-backup', defaultSubdir);
|
|
23
|
-
}
|
|
24
|
-
/** Serialize envelope and write to `dir/filename.{json|yaml}`. Creates dir if needed. */
|
|
25
|
-
export function writeBackupFile(dir, filename, envelope, format) {
|
|
26
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
27
|
-
const ext = format === 'yaml' ? 'yaml' : 'json';
|
|
28
|
-
const filePath = path.join(dir, `${filename}.${ext}`);
|
|
29
|
-
const content = format === 'yaml'
|
|
30
|
-
? yaml.dump(envelope, { lineWidth: -1, noRefs: true })
|
|
31
|
-
: `${JSON.stringify(envelope, null, 2)}\n`;
|
|
32
|
-
fs.writeFileSync(filePath, content, 'utf-8');
|
|
33
|
-
}
|
|
34
|
-
/** Read and parse a single backup file. Detects format from extension. */
|
|
35
|
-
export function readBackupFile(filePath) {
|
|
36
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
37
|
-
if (ext !== '.json' && ext !== '.yaml' && ext !== '.yml') {
|
|
38
|
-
throw new Error(`Unsupported file format: ${ext} (expected .json, .yaml, or .yml)`);
|
|
39
|
-
}
|
|
40
|
-
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
41
|
-
const parsed = ext === '.json' ? JSON.parse(raw) : yaml.load(raw);
|
|
42
|
-
if (!parsed || typeof parsed !== 'object' || !('version' in parsed) || !('data' in parsed)) {
|
|
43
|
-
throw new Error(`Invalid backup file: ${filePath} (missing version or data)`);
|
|
44
|
-
}
|
|
45
|
-
return parsed;
|
|
46
|
-
}
|
|
47
|
-
/** Read all backup files from a directory, filtering by resourceType. */
|
|
48
|
-
export function readBackupDir(dirPath, resourceType) {
|
|
49
|
-
const files = fs
|
|
50
|
-
.readdirSync(dirPath)
|
|
51
|
-
.filter((f) => /\.(json|ya?ml)$/i.test(f))
|
|
52
|
-
.map((f) => path.join(dirPath, f));
|
|
53
|
-
const envelopes = [];
|
|
54
|
-
for (const filePath of files) {
|
|
55
|
-
try {
|
|
56
|
-
const envelope = readBackupFile(filePath);
|
|
57
|
-
if (envelope.resourceType === resourceType) {
|
|
58
|
-
envelopes.push(envelope);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// Skip malformed or unrelated files
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return envelopes;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=io.js.map
|
package/dist/backup/io.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/backup/io.ts"],"names":[],"mappings":"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"}
|
package/dist/backup/types.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/** Supported backup serialization formats. */
|
|
2
|
-
export type BackupFormat = 'json' | 'yaml';
|
|
3
|
-
/** Discriminator for multi-resource backup directories. */
|
|
4
|
-
export type ResourceType = 'redteam-target';
|
|
5
|
-
/** Envelope wrapping any backed-up resource. */
|
|
6
|
-
export interface BackupEnvelope<T> {
|
|
7
|
-
version: string;
|
|
8
|
-
resourceType: ResourceType;
|
|
9
|
-
exportedAt: string;
|
|
10
|
-
data: T;
|
|
11
|
-
}
|
|
12
|
-
/** Per-target result reported after a backup run. */
|
|
13
|
-
export interface BackupResult {
|
|
14
|
-
name: string;
|
|
15
|
-
filename: string;
|
|
16
|
-
status: 'ok' | 'failed';
|
|
17
|
-
error?: string;
|
|
18
|
-
}
|
|
19
|
-
/** Per-target result reported after a restore run. */
|
|
20
|
-
export interface RestoreResult {
|
|
21
|
-
name: string;
|
|
22
|
-
action: 'created' | 'updated' | 'skipped' | 'failed';
|
|
23
|
-
error?: string;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/backup/types.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE5C,gDAAgD;AAChD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,CAAC,CAAC;CACT;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,QAAQ,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/backup/types.js
DELETED
package/dist/backup/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/backup/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { CreateSecurityProfileRequest, Policy } from '@cdot65/prisma-airs-sdk';
|
|
2
|
-
/**
|
|
3
|
-
* Parsed CLI flag values for profile create/update commands.
|
|
4
|
-
*/
|
|
5
|
-
export interface ProfileFlags {
|
|
6
|
-
name: string;
|
|
7
|
-
active?: boolean;
|
|
8
|
-
promptInjection?: string;
|
|
9
|
-
toxicContent?: string;
|
|
10
|
-
contextualGrounding?: string;
|
|
11
|
-
maliciousCode?: string;
|
|
12
|
-
urlAction?: string;
|
|
13
|
-
allowUrlCategories?: string;
|
|
14
|
-
blockUrlCategories?: string;
|
|
15
|
-
alertUrlCategories?: string;
|
|
16
|
-
agentSecurity?: string;
|
|
17
|
-
dlpAction?: string;
|
|
18
|
-
dlpProfiles?: string;
|
|
19
|
-
maskDataInline?: boolean;
|
|
20
|
-
dbSecurityCreate?: string;
|
|
21
|
-
dbSecurityRead?: string;
|
|
22
|
-
dbSecurityUpdate?: string;
|
|
23
|
-
dbSecurityDelete?: string;
|
|
24
|
-
inlineTimeoutAction?: string;
|
|
25
|
-
maxInlineLatency?: number;
|
|
26
|
-
maskDataInStorage?: boolean;
|
|
27
|
-
}
|
|
28
|
-
/** Build a full CreateSecurityProfileRequest from CLI flags (used by `create`). */
|
|
29
|
-
export declare function buildProfileRequest(flags: ProfileFlags): CreateSecurityProfileRequest;
|
|
30
|
-
/** Build a partial Policy from flags (used by `update` — merged into existing). */
|
|
31
|
-
export declare function buildProfileOverrides(flags: Partial<ProfileFlags>): Policy | undefined;
|
|
32
|
-
/**
|
|
33
|
-
* Deep-merge overrides INTO the existing policy.
|
|
34
|
-
*
|
|
35
|
-
* Merge rules:
|
|
36
|
-
* - model-protection: keyed merge by `name`, preserves unmentioned items
|
|
37
|
-
* - topic-guardrails: NEVER modified by flags — always preserved from existing
|
|
38
|
-
* - app-protection: field-level overlay, preserves unmentioned fields
|
|
39
|
-
* - agent-protection: keyed merge by `name`
|
|
40
|
-
* - data-protection: field-level overlay; database-security merged by `name`
|
|
41
|
-
* - latency: field-level overlay
|
|
42
|
-
* - dlp-data-profiles: preserved unless overridden
|
|
43
|
-
*/
|
|
44
|
-
export declare function mergeProfilePolicy(existing: Record<string, unknown> | undefined, overrides: Policy | undefined): Policy;
|
|
45
|
-
//# sourceMappingURL=profile-builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-builder.d.ts","sourceRoot":"","sources":["../../../src/cli/builders/profile-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,YAAY;IAE3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAyKD,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,4BAA4B,CAsCrF;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,GAAG,SAAS,CAYtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,CAqGR"}
|
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
/** Parse comma-separated string into trimmed array. */
|
|
2
|
-
function parseList(value) {
|
|
3
|
-
if (!value)
|
|
4
|
-
return undefined;
|
|
5
|
-
return value
|
|
6
|
-
.split(',')
|
|
7
|
-
.map((s) => s.trim())
|
|
8
|
-
.filter(Boolean);
|
|
9
|
-
}
|
|
10
|
-
/** Build model-protection items from flags. Returns undefined if none set. */
|
|
11
|
-
function buildModelProtection(flags) {
|
|
12
|
-
const items = [];
|
|
13
|
-
if (flags.promptInjection) {
|
|
14
|
-
items.push({ name: 'prompt-injection', action: flags.promptInjection });
|
|
15
|
-
}
|
|
16
|
-
if (flags.toxicContent) {
|
|
17
|
-
// AIRS UI expects "high:<action>, moderate:<action>" format — expand bare values
|
|
18
|
-
const tc = flags.toxicContent;
|
|
19
|
-
const toxicAction = tc.includes(':') ? tc : `high:${tc}, moderate:${tc}`;
|
|
20
|
-
items.push({ name: 'toxic-content', action: toxicAction });
|
|
21
|
-
}
|
|
22
|
-
if (flags.contextualGrounding) {
|
|
23
|
-
items.push({ name: 'contextual-grounding', action: flags.contextualGrounding });
|
|
24
|
-
}
|
|
25
|
-
return items.length > 0 ? items : undefined;
|
|
26
|
-
}
|
|
27
|
-
/** Build app-protection object from flags. Returns undefined if none set. */
|
|
28
|
-
function buildAppProtection(flags) {
|
|
29
|
-
const ap = {};
|
|
30
|
-
let hasAny = false;
|
|
31
|
-
if (flags.maliciousCode) {
|
|
32
|
-
ap['malicious-code-protection'] = {
|
|
33
|
-
name: 'malicious-code-detection',
|
|
34
|
-
action: flags.maliciousCode,
|
|
35
|
-
};
|
|
36
|
-
hasAny = true;
|
|
37
|
-
}
|
|
38
|
-
if (flags.urlAction) {
|
|
39
|
-
ap['url-detected-action'] = flags.urlAction;
|
|
40
|
-
hasAny = true;
|
|
41
|
-
}
|
|
42
|
-
const allowCats = parseList(flags.allowUrlCategories);
|
|
43
|
-
if (allowCats) {
|
|
44
|
-
ap['allow-url-category'] = { member: allowCats };
|
|
45
|
-
hasAny = true;
|
|
46
|
-
}
|
|
47
|
-
const blockCats = parseList(flags.blockUrlCategories);
|
|
48
|
-
if (blockCats) {
|
|
49
|
-
ap['block-url-category'] = { member: blockCats };
|
|
50
|
-
hasAny = true;
|
|
51
|
-
}
|
|
52
|
-
const alertCats = parseList(flags.alertUrlCategories);
|
|
53
|
-
if (alertCats) {
|
|
54
|
-
ap['alert-url-category'] = { member: alertCats };
|
|
55
|
-
hasAny = true;
|
|
56
|
-
}
|
|
57
|
-
return hasAny ? ap : undefined;
|
|
58
|
-
}
|
|
59
|
-
/** Build agent-protection array from flags. Returns undefined if none set. */
|
|
60
|
-
function buildAgentProtection(flags) {
|
|
61
|
-
if (!flags.agentSecurity)
|
|
62
|
-
return undefined;
|
|
63
|
-
return [{ name: 'agent-security', action: flags.agentSecurity }];
|
|
64
|
-
}
|
|
65
|
-
/** Build data-protection object from flags. Returns undefined if none set. */
|
|
66
|
-
function buildDataProtection(flags) {
|
|
67
|
-
const dp = {};
|
|
68
|
-
let hasAny = false;
|
|
69
|
-
if (flags.dlpAction) {
|
|
70
|
-
const dld = { action: flags.dlpAction };
|
|
71
|
-
const profiles = parseList(flags.dlpProfiles);
|
|
72
|
-
if (profiles) {
|
|
73
|
-
dld.member = profiles.map((text) => ({ text }));
|
|
74
|
-
}
|
|
75
|
-
if (flags.maskDataInline != null) {
|
|
76
|
-
dld['mask-data-inline'] = flags.maskDataInline;
|
|
77
|
-
}
|
|
78
|
-
dp['data-leak-detection'] = dld;
|
|
79
|
-
hasAny = true;
|
|
80
|
-
}
|
|
81
|
-
const dbItems = [];
|
|
82
|
-
if (flags.dbSecurityCreate) {
|
|
83
|
-
dbItems.push({ name: 'database-security-create', action: flags.dbSecurityCreate });
|
|
84
|
-
}
|
|
85
|
-
if (flags.dbSecurityRead) {
|
|
86
|
-
dbItems.push({ name: 'database-security-read', action: flags.dbSecurityRead });
|
|
87
|
-
}
|
|
88
|
-
if (flags.dbSecurityUpdate) {
|
|
89
|
-
dbItems.push({ name: 'database-security-update', action: flags.dbSecurityUpdate });
|
|
90
|
-
}
|
|
91
|
-
if (flags.dbSecurityDelete) {
|
|
92
|
-
dbItems.push({ name: 'database-security-delete', action: flags.dbSecurityDelete });
|
|
93
|
-
}
|
|
94
|
-
if (dbItems.length > 0) {
|
|
95
|
-
dp['database-security'] = dbItems;
|
|
96
|
-
hasAny = true;
|
|
97
|
-
}
|
|
98
|
-
return hasAny ? dp : undefined;
|
|
99
|
-
}
|
|
100
|
-
/** Build latency object from flags. Returns undefined if none set. */
|
|
101
|
-
function buildLatency(flags) {
|
|
102
|
-
if (!flags.inlineTimeoutAction && flags.maxInlineLatency == null)
|
|
103
|
-
return undefined;
|
|
104
|
-
const lat = {};
|
|
105
|
-
if (flags.inlineTimeoutAction)
|
|
106
|
-
lat['inline-timeout-action'] = flags.inlineTimeoutAction;
|
|
107
|
-
if (flags.maxInlineLatency != null)
|
|
108
|
-
lat['max-inline-latency'] = flags.maxInlineLatency;
|
|
109
|
-
return lat;
|
|
110
|
-
}
|
|
111
|
-
/** Check if any protection/config flag is set. */
|
|
112
|
-
function hasAnyProtectionFlag(flags) {
|
|
113
|
-
return !!(flags.promptInjection ||
|
|
114
|
-
flags.toxicContent ||
|
|
115
|
-
flags.contextualGrounding ||
|
|
116
|
-
flags.maliciousCode ||
|
|
117
|
-
flags.urlAction ||
|
|
118
|
-
flags.allowUrlCategories ||
|
|
119
|
-
flags.blockUrlCategories ||
|
|
120
|
-
flags.alertUrlCategories ||
|
|
121
|
-
flags.agentSecurity ||
|
|
122
|
-
flags.dlpAction ||
|
|
123
|
-
flags.dbSecurityCreate ||
|
|
124
|
-
flags.dbSecurityRead ||
|
|
125
|
-
flags.dbSecurityUpdate ||
|
|
126
|
-
flags.dbSecurityDelete ||
|
|
127
|
-
flags.inlineTimeoutAction ||
|
|
128
|
-
flags.maxInlineLatency != null ||
|
|
129
|
-
flags.maskDataInStorage != null);
|
|
130
|
-
}
|
|
131
|
-
/** Assemble model-configuration from flags, only including non-empty sections. */
|
|
132
|
-
function buildModelConfiguration(flags) {
|
|
133
|
-
const config = {};
|
|
134
|
-
const mp = buildModelProtection(flags);
|
|
135
|
-
if (mp)
|
|
136
|
-
config['model-protection'] = mp;
|
|
137
|
-
const ap = buildAppProtection(flags);
|
|
138
|
-
if (ap)
|
|
139
|
-
config['app-protection'] = ap;
|
|
140
|
-
const agp = buildAgentProtection(flags);
|
|
141
|
-
if (agp)
|
|
142
|
-
config['agent-protection'] = agp;
|
|
143
|
-
const dp = buildDataProtection(flags);
|
|
144
|
-
if (dp)
|
|
145
|
-
config['data-protection'] = dp;
|
|
146
|
-
const lat = buildLatency(flags);
|
|
147
|
-
if (lat)
|
|
148
|
-
config.latency = lat;
|
|
149
|
-
if (flags.maskDataInStorage != null) {
|
|
150
|
-
config['mask-data-in-storage'] = flags.maskDataInStorage;
|
|
151
|
-
}
|
|
152
|
-
return config;
|
|
153
|
-
}
|
|
154
|
-
/** Build a full CreateSecurityProfileRequest from CLI flags (used by `create`). */
|
|
155
|
-
export function buildProfileRequest(flags) {
|
|
156
|
-
const request = {
|
|
157
|
-
profile_name: flags.name,
|
|
158
|
-
active: flags.active ?? true,
|
|
159
|
-
};
|
|
160
|
-
if (hasAnyProtectionFlag(flags)) {
|
|
161
|
-
const modelConfig = buildModelConfiguration(flags);
|
|
162
|
-
// AIRS UI requires these sections to exist — crashes with "is not iterable" otherwise
|
|
163
|
-
if (!modelConfig['app-protection']) {
|
|
164
|
-
modelConfig['app-protection'] = {
|
|
165
|
-
'default-url-category': { member: ['malicious'] },
|
|
166
|
-
'url-detected-action': 'block',
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
if (!modelConfig['data-protection']) {
|
|
170
|
-
modelConfig['data-protection'] = {
|
|
171
|
-
'data-leak-detection': { action: '', 'mask-data-inline': false, member: null },
|
|
172
|
-
'database-security': null,
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
if (!modelConfig.latency) {
|
|
176
|
-
modelConfig.latency = { 'inline-timeout-action': 'block', 'max-inline-latency': 5 };
|
|
177
|
-
}
|
|
178
|
-
if (modelConfig['mask-data-in-storage'] == null) {
|
|
179
|
-
modelConfig['mask-data-in-storage'] = false;
|
|
180
|
-
}
|
|
181
|
-
request.policy = {
|
|
182
|
-
'ai-security-profiles': [
|
|
183
|
-
{
|
|
184
|
-
'model-type': 'default',
|
|
185
|
-
'model-configuration': modelConfig,
|
|
186
|
-
},
|
|
187
|
-
],
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
return request;
|
|
191
|
-
}
|
|
192
|
-
/** Build a partial Policy from flags (used by `update` — merged into existing). */
|
|
193
|
-
export function buildProfileOverrides(flags) {
|
|
194
|
-
if (!hasAnyProtectionFlag(flags))
|
|
195
|
-
return undefined;
|
|
196
|
-
const modelConfig = buildModelConfiguration(flags);
|
|
197
|
-
return {
|
|
198
|
-
'ai-security-profiles': [
|
|
199
|
-
{
|
|
200
|
-
'model-type': 'default',
|
|
201
|
-
'model-configuration': modelConfig,
|
|
202
|
-
},
|
|
203
|
-
],
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Deep-merge overrides INTO the existing policy.
|
|
208
|
-
*
|
|
209
|
-
* Merge rules:
|
|
210
|
-
* - model-protection: keyed merge by `name`, preserves unmentioned items
|
|
211
|
-
* - topic-guardrails: NEVER modified by flags — always preserved from existing
|
|
212
|
-
* - app-protection: field-level overlay, preserves unmentioned fields
|
|
213
|
-
* - agent-protection: keyed merge by `name`
|
|
214
|
-
* - data-protection: field-level overlay; database-security merged by `name`
|
|
215
|
-
* - latency: field-level overlay
|
|
216
|
-
* - dlp-data-profiles: preserved unless overridden
|
|
217
|
-
*/
|
|
218
|
-
export function mergeProfilePolicy(existing, overrides) {
|
|
219
|
-
const base = structuredClone(existing ?? {});
|
|
220
|
-
if (!overrides)
|
|
221
|
-
return base;
|
|
222
|
-
const overrideProfiles = overrides['ai-security-profiles'];
|
|
223
|
-
if (!overrideProfiles?.length)
|
|
224
|
-
return base;
|
|
225
|
-
// Ensure base has ai-security-profiles structure
|
|
226
|
-
if (!base['ai-security-profiles']) {
|
|
227
|
-
base['ai-security-profiles'] = [{ 'model-type': 'default', 'model-configuration': {} }];
|
|
228
|
-
}
|
|
229
|
-
const baseProfiles = base['ai-security-profiles'];
|
|
230
|
-
const baseConfig = (baseProfiles[0]['model-configuration'] ?? {});
|
|
231
|
-
const overConfig = (overrideProfiles[0]['model-configuration'] ?? {});
|
|
232
|
-
// Merge model-protection (keyed by name, topic-guardrails preserved)
|
|
233
|
-
if (overConfig['model-protection']) {
|
|
234
|
-
const baseMp = (baseConfig['model-protection'] ?? []);
|
|
235
|
-
const overMp = overConfig['model-protection'];
|
|
236
|
-
for (const overItem of overMp) {
|
|
237
|
-
const existing = baseMp.find((b) => b.name === overItem.name);
|
|
238
|
-
if (existing) {
|
|
239
|
-
Object.assign(existing, overItem);
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
baseMp.push(overItem);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
baseConfig['model-protection'] = baseMp;
|
|
246
|
-
}
|
|
247
|
-
// Merge app-protection (field-level overlay)
|
|
248
|
-
if (overConfig['app-protection']) {
|
|
249
|
-
const baseAp = (baseConfig['app-protection'] ?? {});
|
|
250
|
-
const overAp = overConfig['app-protection'];
|
|
251
|
-
Object.assign(baseAp, overAp);
|
|
252
|
-
baseConfig['app-protection'] = baseAp;
|
|
253
|
-
}
|
|
254
|
-
// Merge agent-protection (keyed by name)
|
|
255
|
-
if (overConfig['agent-protection']) {
|
|
256
|
-
const baseAgp = (baseConfig['agent-protection'] ?? []);
|
|
257
|
-
const overAgp = overConfig['agent-protection'];
|
|
258
|
-
for (const overItem of overAgp) {
|
|
259
|
-
const existing = baseAgp.find((b) => b.name === overItem.name);
|
|
260
|
-
if (existing) {
|
|
261
|
-
Object.assign(existing, overItem);
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
baseAgp.push(overItem);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
baseConfig['agent-protection'] = baseAgp;
|
|
268
|
-
}
|
|
269
|
-
// Merge data-protection (field-level overlay, database-security by name)
|
|
270
|
-
if (overConfig['data-protection']) {
|
|
271
|
-
const baseDp = (baseConfig['data-protection'] ?? {});
|
|
272
|
-
const overDp = overConfig['data-protection'];
|
|
273
|
-
// data-leak-detection: overlay
|
|
274
|
-
if (overDp['data-leak-detection']) {
|
|
275
|
-
baseDp['data-leak-detection'] = overDp['data-leak-detection'];
|
|
276
|
-
}
|
|
277
|
-
// database-security: merge by name
|
|
278
|
-
if (overDp['database-security']) {
|
|
279
|
-
const baseDb = (baseDp['database-security'] ?? []);
|
|
280
|
-
const overDb = overDp['database-security'];
|
|
281
|
-
for (const overItem of overDb) {
|
|
282
|
-
const existing = baseDb.find((b) => b.name === overItem.name);
|
|
283
|
-
if (existing) {
|
|
284
|
-
Object.assign(existing, overItem);
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
baseDb.push(overItem);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
baseDp['database-security'] = baseDb;
|
|
291
|
-
}
|
|
292
|
-
baseConfig['data-protection'] = baseDp;
|
|
293
|
-
}
|
|
294
|
-
// Merge latency (field-level overlay)
|
|
295
|
-
if (overConfig.latency) {
|
|
296
|
-
const baseLat = (baseConfig.latency ?? {});
|
|
297
|
-
const overLat = overConfig.latency;
|
|
298
|
-
Object.assign(baseLat, overLat);
|
|
299
|
-
baseConfig.latency = baseLat;
|
|
300
|
-
}
|
|
301
|
-
// Merge mask-data-in-storage
|
|
302
|
-
if (overConfig['mask-data-in-storage'] != null) {
|
|
303
|
-
baseConfig['mask-data-in-storage'] = overConfig['mask-data-in-storage'];
|
|
304
|
-
}
|
|
305
|
-
baseProfiles[0]['model-configuration'] = baseConfig;
|
|
306
|
-
return base;
|
|
307
|
-
}
|
|
308
|
-
//# sourceMappingURL=profile-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-builder.js","sourceRoot":"","sources":["../../../src/cli/builders/profile-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface BulkScanState {
|
|
2
|
-
scanIds: string[];
|
|
3
|
-
profile: string;
|
|
4
|
-
promptCount: number;
|
|
5
|
-
sessionId?: string;
|
|
6
|
-
timestamp?: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Persist bulk scan IDs to a JSON file so polling can be resumed
|
|
10
|
-
* if the process crashes or hits a rate limit.
|
|
11
|
-
*/
|
|
12
|
-
export declare function saveBulkScanState(state: BulkScanState, dir: string): Promise<string>;
|
|
13
|
-
/** Load a previously saved bulk scan state file. */
|
|
14
|
-
export declare function loadBulkScanState(filePath: string): Promise<BulkScanState>;
|
|
15
|
-
//# sourceMappingURL=bulk-scan-state.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-scan-state.d.ts","sourceRoot":"","sources":["../../src/cli/bulk-scan-state.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1F;AAED,oDAAoD;AACpD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAGhF"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs/promises';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
/**
|
|
4
|
-
* Persist bulk scan IDs to a JSON file so polling can be resumed
|
|
5
|
-
* if the process crashes or hits a rate limit.
|
|
6
|
-
*/
|
|
7
|
-
export async function saveBulkScanState(state, dir) {
|
|
8
|
-
await fs.mkdir(dir, { recursive: true });
|
|
9
|
-
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
10
|
-
const filePath = path.join(dir, `${ts}.bulk-scan.json`);
|
|
11
|
-
const payload = { ...state, timestamp: new Date().toISOString() };
|
|
12
|
-
await fs.writeFile(filePath, JSON.stringify(payload, null, 2), 'utf-8');
|
|
13
|
-
return filePath;
|
|
14
|
-
}
|
|
15
|
-
/** Load a previously saved bulk scan state file. */
|
|
16
|
-
export async function loadBulkScanState(filePath) {
|
|
17
|
-
const raw = await fs.readFile(filePath, 'utf-8');
|
|
18
|
-
return JSON.parse(raw);
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=bulk-scan-state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-scan-state.js","sourceRoot":"","sources":["../../src/cli/bulk-scan-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAUlC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAoB,EAAE,GAAW;IACvE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAClE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;AAC1C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6G1D"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { writeFile } from 'node:fs/promises';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { SdkManagementService } from '../../airs/management.js';
|
|
4
|
-
import { AirsScanService } from '../../airs/scanner.js';
|
|
5
|
-
import { buildAuditReportHtml, buildAuditReportJson } from '../../audit/report.js';
|
|
6
|
-
import { runAudit } from '../../audit/runner.js';
|
|
7
|
-
import { loadConfig } from '../../config/loader.js';
|
|
8
|
-
import { createLlmProvider } from '../../llm/provider.js';
|
|
9
|
-
import { LangChainLlmService } from '../../llm/service.js';
|
|
10
|
-
import { renderAuditComplete, renderAuditTopics, renderConflicts, renderError, renderMetrics, } from '../renderer/index.js';
|
|
11
|
-
/** Register the `audit` command — evaluate all topics in a profile. */
|
|
12
|
-
export function registerAuditCommand(parent) {
|
|
13
|
-
parent
|
|
14
|
-
.command('audit <profileName>')
|
|
15
|
-
.description('Evaluate all topics in a security profile')
|
|
16
|
-
.option('--max-tests-per-topic <n>', 'Max tests per topic', '20')
|
|
17
|
-
.option('--format <format>', 'Output format: terminal, json, html', 'terminal')
|
|
18
|
-
.option('--output <path>', 'Output file path (json/html)')
|
|
19
|
-
.option('--provider <provider>', 'LLM provider override')
|
|
20
|
-
.option('--model <model>', 'LLM model override')
|
|
21
|
-
.action(async (profileName, opts) => {
|
|
22
|
-
try {
|
|
23
|
-
const config = await loadConfig({
|
|
24
|
-
llmProvider: opts.provider,
|
|
25
|
-
llmModel: opts.model,
|
|
26
|
-
});
|
|
27
|
-
const model = await createLlmProvider({
|
|
28
|
-
provider: config.llmProvider,
|
|
29
|
-
model: config.llmModel,
|
|
30
|
-
anthropicApiKey: config.anthropicApiKey,
|
|
31
|
-
googleApiKey: config.googleApiKey,
|
|
32
|
-
googleCloudProject: config.googleCloudProject,
|
|
33
|
-
googleCloudLocation: config.googleCloudLocation,
|
|
34
|
-
awsRegion: config.awsRegion,
|
|
35
|
-
awsAccessKeyId: config.awsAccessKeyId,
|
|
36
|
-
awsSecretAccessKey: config.awsSecretAccessKey,
|
|
37
|
-
});
|
|
38
|
-
const llm = new LangChainLlmService(model);
|
|
39
|
-
const management = new SdkManagementService({
|
|
40
|
-
clientId: config.mgmtClientId,
|
|
41
|
-
clientSecret: config.mgmtClientSecret,
|
|
42
|
-
tsgId: config.mgmtTsgId,
|
|
43
|
-
tokenEndpoint: config.mgmtTokenEndpoint,
|
|
44
|
-
});
|
|
45
|
-
if (!config.airsApiKey) {
|
|
46
|
-
renderError('PANW_AI_SEC_API_KEY is required');
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
const scanner = new AirsScanService(config.airsApiKey);
|
|
50
|
-
const format = opts.format;
|
|
51
|
-
console.log(chalk.bold.cyan('\n Prisma AIRS Profile Audit'));
|
|
52
|
-
console.log(chalk.dim(` Evaluating all topics in "${profileName}"\n`));
|
|
53
|
-
for await (const event of runAudit({
|
|
54
|
-
profileName,
|
|
55
|
-
maxTestsPerTopic: Number.parseInt(opts.maxTestsPerTopic, 10),
|
|
56
|
-
scanConcurrency: config.scanConcurrency,
|
|
57
|
-
}, { llm, management, scanner })) {
|
|
58
|
-
switch (event.type) {
|
|
59
|
-
case 'topics:loaded':
|
|
60
|
-
console.log(chalk.dim(` Found ${event.topics.length} topic(s) in profile\n`));
|
|
61
|
-
renderAuditTopics(event.topics);
|
|
62
|
-
break;
|
|
63
|
-
case 'tests:generated':
|
|
64
|
-
console.log(chalk.dim(` Generated ${event.count} tests for "${event.topicName}"`));
|
|
65
|
-
break;
|
|
66
|
-
case 'scan:progress':
|
|
67
|
-
console.log(chalk.dim(`\n Scanned ${event.completed}/${event.total} prompts`));
|
|
68
|
-
break;
|
|
69
|
-
case 'evaluate:complete':
|
|
70
|
-
break;
|
|
71
|
-
case 'audit:complete': {
|
|
72
|
-
const { result } = event;
|
|
73
|
-
if (format === 'json') {
|
|
74
|
-
const report = buildAuditReportJson(result);
|
|
75
|
-
const output = JSON.stringify(report, null, 2);
|
|
76
|
-
if (opts.output) {
|
|
77
|
-
await writeFile(opts.output, output, 'utf-8');
|
|
78
|
-
console.log(chalk.green(`\n Report written to ${opts.output}`));
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.log(output);
|
|
82
|
-
}
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (format === 'html') {
|
|
86
|
-
const html = buildAuditReportHtml(result);
|
|
87
|
-
const outputPath = opts.output ?? `audit-${profileName.replace(/\s+/g, '-')}.html`;
|
|
88
|
-
await writeFile(outputPath, html, 'utf-8');
|
|
89
|
-
console.log(chalk.green(`\n Report written to ${outputPath}`));
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
// Terminal format
|
|
93
|
-
renderAuditComplete(result);
|
|
94
|
-
console.log(chalk.bold('\n Composite Metrics:'));
|
|
95
|
-
renderMetrics(result.compositeMetrics);
|
|
96
|
-
if (result.conflicts.length > 0) {
|
|
97
|
-
renderConflicts(result.conflicts);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
console.log(chalk.green('\n No cross-topic conflicts detected.\n'));
|
|
101
|
-
}
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch (err) {
|
|
108
|
-
renderError(err instanceof Error ? err.message : String(err));
|
|
109
|
-
process.exit(1);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=audit.js.map
|