@cdot65/prisma-airs-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/dist/airs/management.d.ts +58 -0
- package/dist/airs/management.d.ts.map +1 -0
- package/dist/airs/management.js +287 -0
- package/dist/airs/management.js.map +1 -0
- package/dist/airs/modelsecurity.d.ts +74 -0
- package/dist/airs/modelsecurity.d.ts.map +1 -0
- package/dist/airs/modelsecurity.js +337 -0
- package/dist/airs/modelsecurity.js.map +1 -0
- package/dist/airs/promptsets.d.ts +50 -0
- package/dist/airs/promptsets.d.ts.map +1 -0
- package/dist/airs/promptsets.js +133 -0
- package/dist/airs/promptsets.js.map +1 -0
- package/dist/airs/redteam.d.ts +45 -0
- package/dist/airs/redteam.d.ts.map +1 -0
- package/dist/airs/redteam.js +219 -0
- package/dist/airs/redteam.js.map +1 -0
- package/dist/airs/runtime.d.ts +27 -0
- package/dist/airs/runtime.d.ts.map +1 -0
- package/dist/airs/runtime.js +158 -0
- package/dist/airs/runtime.js.map +1 -0
- package/dist/airs/scanner.d.ts +22 -0
- package/dist/airs/scanner.d.ts.map +1 -0
- package/dist/airs/scanner.js +62 -0
- package/dist/airs/scanner.js.map +1 -0
- package/dist/airs/types.d.ts +683 -0
- package/dist/airs/types.d.ts.map +1 -0
- package/dist/airs/types.js +6 -0
- package/dist/airs/types.js.map +1 -0
- package/dist/audit/evaluator.d.ts +17 -0
- package/dist/audit/evaluator.d.ts.map +1 -0
- package/dist/audit/evaluator.js +82 -0
- package/dist/audit/evaluator.js.map +1 -0
- package/dist/audit/report.d.ts +38 -0
- package/dist/audit/report.d.ts.map +1 -0
- package/dist/audit/report.js +141 -0
- package/dist/audit/report.js.map +1 -0
- package/dist/audit/runner.d.ts +18 -0
- package/dist/audit/runner.d.ts.map +1 -0
- package/dist/audit/runner.js +60 -0
- package/dist/audit/runner.js.map +1 -0
- package/dist/audit/types.d.ts +53 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +5 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/cli/bulk-scan-state.d.ts +15 -0
- package/dist/cli/bulk-scan-state.d.ts.map +1 -0
- package/dist/cli/bulk-scan-state.js +20 -0
- package/dist/cli/bulk-scan-state.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +4 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +113 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +4 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +231 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/list.d.ts +4 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +23 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/modelsecurity.d.ts +4 -0
- package/dist/cli/commands/modelsecurity.d.ts.map +1 -0
- package/dist/cli/commands/modelsecurity.js +499 -0
- package/dist/cli/commands/modelsecurity.js.map +1 -0
- package/dist/cli/commands/redteam.d.ts +4 -0
- package/dist/cli/commands/redteam.d.ts.map +1 -0
- package/dist/cli/commands/redteam.js +630 -0
- package/dist/cli/commands/redteam.js.map +1 -0
- package/dist/cli/commands/report.d.ts +4 -0
- package/dist/cli/commands/report.d.ts.map +1 -0
- package/dist/cli/commands/report.js +116 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +4 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +138 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/runtime.d.ts +3 -0
- package/dist/cli/commands/runtime.d.ts.map +1 -0
- package/dist/cli/commands/runtime.js +582 -0
- package/dist/cli/commands/runtime.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +46 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parse-input.d.ts +9 -0
- package/dist/cli/parse-input.d.ts.map +1 -0
- package/dist/cli/parse-input.js +109 -0
- package/dist/cli/parse-input.js.map +1 -0
- package/dist/cli/prompts.d.ts +9 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +90 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/renderer/audit.d.ts +8 -0
- package/dist/cli/renderer/audit.d.ts.map +1 -0
- package/dist/cli/renderer/audit.js +44 -0
- package/dist/cli/renderer/audit.js.map +1 -0
- package/dist/cli/renderer/common.d.ts +3 -0
- package/dist/cli/renderer/common.d.ts.map +1 -0
- package/dist/cli/renderer/common.js +6 -0
- package/dist/cli/renderer/common.js.map +1 -0
- package/dist/cli/renderer/generate.d.ts +29 -0
- package/dist/cli/renderer/generate.d.ts.map +1 -0
- package/dist/cli/renderer/generate.js +132 -0
- package/dist/cli/renderer/generate.js.map +1 -0
- package/dist/cli/renderer/index.d.ts +7 -0
- package/dist/cli/renderer/index.d.ts.map +1 -0
- package/dist/cli/renderer/index.js +7 -0
- package/dist/cli/renderer/index.js.map +1 -0
- package/dist/cli/renderer/modelsecurity.d.ts +34 -0
- package/dist/cli/renderer/modelsecurity.d.ts.map +1 -0
- package/dist/cli/renderer/modelsecurity.js +285 -0
- package/dist/cli/renderer/modelsecurity.js.map +1 -0
- package/dist/cli/renderer/redteam.d.ts +152 -0
- package/dist/cli/renderer/redteam.d.ts.map +1 -0
- package/dist/cli/renderer/redteam.js +294 -0
- package/dist/cli/renderer/redteam.js.map +1 -0
- package/dist/cli/renderer/runtime.d.ts +87 -0
- package/dist/cli/renderer/runtime.d.ts.map +1 -0
- package/dist/cli/renderer/runtime.js +230 -0
- package/dist/cli/renderer/runtime.js.map +1 -0
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +65 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +78 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +44 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/constraints.d.ts +18 -0
- package/dist/core/constraints.d.ts.map +1 -0
- package/dist/core/constraints.js +75 -0
- package/dist/core/constraints.js.map +1 -0
- package/dist/core/loop.d.ts +54 -0
- package/dist/core/loop.d.ts.map +1 -0
- package/dist/core/loop.js +462 -0
- package/dist/core/loop.js.map +1 -0
- package/dist/core/metrics.d.ts +13 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +73 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/types.d.ts +175 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/prompts/analyze-results.d.ts +3 -0
- package/dist/llm/prompts/analyze-results.d.ts.map +1 -0
- package/dist/llm/prompts/analyze-results.js +52 -0
- package/dist/llm/prompts/analyze-results.js.map +1 -0
- package/dist/llm/prompts/generate-companion.d.ts +3 -0
- package/dist/llm/prompts/generate-companion.d.ts.map +1 -0
- package/dist/llm/prompts/generate-companion.js +42 -0
- package/dist/llm/prompts/generate-companion.js.map +1 -0
- package/dist/llm/prompts/generate-tests.d.ts +3 -0
- package/dist/llm/prompts/generate-tests.d.ts.map +1 -0
- package/dist/llm/prompts/generate-tests.js +46 -0
- package/dist/llm/prompts/generate-tests.js.map +1 -0
- package/dist/llm/prompts/generate-topic.d.ts +4 -0
- package/dist/llm/prompts/generate-topic.d.ts.map +1 -0
- package/dist/llm/prompts/generate-topic.js +41 -0
- package/dist/llm/prompts/generate-topic.js.map +1 -0
- package/dist/llm/prompts/improve-topic.d.ts +3 -0
- package/dist/llm/prompts/improve-topic.d.ts.map +1 -0
- package/dist/llm/prompts/improve-topic.js +77 -0
- package/dist/llm/prompts/improve-topic.js.map +1 -0
- package/dist/llm/prompts/simplify-topic.d.ts +3 -0
- package/dist/llm/prompts/simplify-topic.d.ts.map +1 -0
- package/dist/llm/prompts/simplify-topic.js +50 -0
- package/dist/llm/prompts/simplify-topic.js.map +1 -0
- package/dist/llm/provider.d.ts +21 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +76 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/llm/schemas.d.ts +97 -0
- package/dist/llm/schemas.d.ts.map +1 -0
- package/dist/llm/schemas.js +24 -0
- package/dist/llm/schemas.js.map +1 -0
- package/dist/llm/service.d.ts +30 -0
- package/dist/llm/service.d.ts.map +1 -0
- package/dist/llm/service.js +273 -0
- package/dist/llm/service.js.map +1 -0
- package/dist/memory/diff.d.ts +4 -0
- package/dist/memory/diff.d.ts.map +1 -0
- package/dist/memory/diff.js +24 -0
- package/dist/memory/diff.js.map +1 -0
- package/dist/memory/extractor.d.ts +15 -0
- package/dist/memory/extractor.d.ts.map +1 -0
- package/dist/memory/extractor.js +133 -0
- package/dist/memory/extractor.js.map +1 -0
- package/dist/memory/injector.d.ts +22 -0
- package/dist/memory/injector.d.ts.map +1 -0
- package/dist/memory/injector.js +90 -0
- package/dist/memory/injector.js.map +1 -0
- package/dist/memory/prompts/extract-learnings.d.ts +3 -0
- package/dist/memory/prompts/extract-learnings.d.ts.map +1 -0
- package/dist/memory/prompts/extract-learnings.js +40 -0
- package/dist/memory/prompts/extract-learnings.js.map +1 -0
- package/dist/memory/schemas.d.ts +63 -0
- package/dist/memory/schemas.d.ts.map +1 -0
- package/dist/memory/schemas.js +13 -0
- package/dist/memory/schemas.js.map +1 -0
- package/dist/memory/store.d.ts +28 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +103 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/types.d.ts +55 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +6 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/persistence/store.d.ts +21 -0
- package/dist/persistence/store.d.ts.map +1 -0
- package/dist/persistence/store.js +77 -0
- package/dist/persistence/store.js.map +1 -0
- package/dist/persistence/types.d.ts +23 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +2 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/report/html.d.ts +6 -0
- package/dist/report/html.d.ts.map +1 -0
- package/dist/report/html.js +200 -0
- package/dist/report/html.js.map +1 -0
- package/dist/report/json.d.ts +11 -0
- package/dist/report/json.d.ts.map +1 -0
- package/dist/report/json.js +74 -0
- package/dist/report/json.js.map +1 -0
- package/dist/report/types.d.ts +58 -0
- package/dist/report/types.d.ts.map +1 -0
- package/dist/report/types.js +5 -0
- package/dist/report/types.js.map +1 -0
- package/package.json +67 -0
package/README.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Prisma AIRS CLI
|
|
2
|
+
|
|
3
|
+
[](https://github.com/cdot65/prisma-airs-cli/actions/workflows/ci.yml)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
|
|
7
|
+
**Full operational coverage over Palo Alto Prisma AIRS AI security — guardrail refinement, runtime scanning, AI red teaming, model security, and profile audits.**
|
|
8
|
+
|
|
9
|
+
> **[Read the full documentation](https://cdot65.github.io/prisma-airs-cli/)** — installation, configuration, architecture, CLI reference, and examples.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g @cdot65/prisma-airs-cli
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Requires **Node.js >= 20**.
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
cp .env.example .env # add your API keys
|
|
23
|
+
airs runtime topics generate # interactive guardrail generation
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
| Command | Description |
|
|
29
|
+
|---------|-------------|
|
|
30
|
+
| `runtime scan` | Single prompt scanning against AIRS profiles |
|
|
31
|
+
| `runtime bulk-scan` | Batch prompt scanning with CSV output |
|
|
32
|
+
| `runtime topics` | Custom topic CRUD + guardrail generation (`generate`, `resume`, `report`, `runs`) |
|
|
33
|
+
| `runtime profiles` | Security profile CRUD + multi-topic `audit` |
|
|
34
|
+
| `runtime api-keys` | API key management |
|
|
35
|
+
| `runtime customer-apps` | Customer app CRUD |
|
|
36
|
+
| `runtime scan-logs` | Scan log querying |
|
|
37
|
+
| `redteam` | Adversarial scanning — targets, prompt sets, scans, reports |
|
|
38
|
+
| `model-security` | ML model supply chain security — groups, rules, scans, labels |
|
|
39
|
+
|
|
40
|
+
## License
|
|
41
|
+
|
|
42
|
+
MIT
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type CreateCustomTopicRequest, type ManagementClientOptions, type CustomTopic as SdkCustomTopic } from '@cdot65/prisma-airs-sdk';
|
|
2
|
+
import type { ProfileTopic } from '../audit/types.js';
|
|
3
|
+
import type { ApiKeyInfo, ApiKeyListResult, CustomerAppInfo, CustomerAppListResult, DeleteResponse, DeploymentProfileInfo, DlpProfileInfo, ManagementService, PaginationOptions, ScanLogQueryOptions, ScanLogQueryResult, SecurityProfileInfo, SecurityProfileListResult } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the SDK's ManagementClient to implement our ManagementService interface.
|
|
6
|
+
* OAuth2 token management, caching, and retry are handled by the SDK.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SdkManagementService implements ManagementService {
|
|
9
|
+
private client;
|
|
10
|
+
constructor(opts?: ManagementClientOptions);
|
|
11
|
+
createTopic(request: CreateCustomTopicRequest): Promise<SdkCustomTopic>;
|
|
12
|
+
updateTopic(topicId: string, request: CreateCustomTopicRequest): Promise<SdkCustomTopic>;
|
|
13
|
+
deleteTopic(topicId: string): Promise<void>;
|
|
14
|
+
forceDeleteTopic(topicId: string, updatedBy?: string): Promise<DeleteResponse>;
|
|
15
|
+
listTopics(): Promise<SdkCustomTopic[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Sets a single custom topic on a profile's topic-guardrails config.
|
|
18
|
+
* Delegates to {@link assignTopicsToProfile} for backward compatibility.
|
|
19
|
+
*/
|
|
20
|
+
assignTopicToProfile(profileName: string, topicId: string, topicName: string, action: 'allow' | 'block'): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Sets one or more custom topics on a profile's topic-guardrails config.
|
|
23
|
+
* Replaces any existing topics — previous runs' stale topics are cleared.
|
|
24
|
+
* Groups topics by action; skips empty action groups (AIRS rejects them).
|
|
25
|
+
*
|
|
26
|
+
* CRITICAL: Each topic entry MUST include the current `revision` number.
|
|
27
|
+
* AIRS pins topic content to the revision specified in the profile — omitting
|
|
28
|
+
* it defaults to revision 0 (original content), not the latest.
|
|
29
|
+
*/
|
|
30
|
+
assignTopicsToProfile(profileName: string, topics: Array<{
|
|
31
|
+
topicId: string;
|
|
32
|
+
topicName: string;
|
|
33
|
+
action: 'allow' | 'block';
|
|
34
|
+
}>, guardrailAction?: 'allow' | 'block'): Promise<void>;
|
|
35
|
+
getProfileTopics(profileName: string): Promise<ProfileTopic[]>;
|
|
36
|
+
private normalizeProfile;
|
|
37
|
+
listProfiles(opts?: PaginationOptions): Promise<SecurityProfileListResult>;
|
|
38
|
+
createProfile(request: Record<string, unknown>): Promise<SecurityProfileInfo>;
|
|
39
|
+
updateProfile(profileId: string, request: Record<string, unknown>): Promise<SecurityProfileInfo>;
|
|
40
|
+
deleteProfile(profileId: string): Promise<DeleteResponse>;
|
|
41
|
+
forceDeleteProfile(profileId: string, updatedBy: string): Promise<DeleteResponse>;
|
|
42
|
+
private normalizeApiKey;
|
|
43
|
+
listApiKeys(opts?: PaginationOptions): Promise<ApiKeyListResult>;
|
|
44
|
+
createApiKey(request: Record<string, unknown>): Promise<ApiKeyInfo>;
|
|
45
|
+
regenerateApiKey(apiKeyId: string, request: Record<string, unknown>): Promise<ApiKeyInfo>;
|
|
46
|
+
deleteApiKey(apiKeyName: string, updatedBy: string): Promise<DeleteResponse>;
|
|
47
|
+
private normalizeCustomerApp;
|
|
48
|
+
listCustomerApps(opts?: PaginationOptions): Promise<CustomerAppListResult>;
|
|
49
|
+
getCustomerApp(appName: string): Promise<CustomerAppInfo>;
|
|
50
|
+
updateCustomerApp(appId: string, request: Record<string, unknown>): Promise<CustomerAppInfo>;
|
|
51
|
+
deleteCustomerApp(appName: string, updatedBy: string): Promise<CustomerAppInfo>;
|
|
52
|
+
listDeploymentProfiles(opts?: {
|
|
53
|
+
unactivated?: boolean;
|
|
54
|
+
}): Promise<DeploymentProfileInfo[]>;
|
|
55
|
+
listDlpProfiles(): Promise<DlpProfileInfo[]>;
|
|
56
|
+
queryScanLogs(opts: ScanLogQueryOptions): Promise<ScanLogQueryResult>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=management.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"management.d.ts","sourceRoot":"","sources":["../../src/airs/management.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { ManagementClient, } from '@cdot65/prisma-airs-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Wraps the SDK's ManagementClient to implement our ManagementService interface.
|
|
4
|
+
* OAuth2 token management, caching, and retry are handled by the SDK.
|
|
5
|
+
*/
|
|
6
|
+
export class SdkManagementService {
|
|
7
|
+
client;
|
|
8
|
+
constructor(opts) {
|
|
9
|
+
this.client = new ManagementClient(opts);
|
|
10
|
+
}
|
|
11
|
+
async createTopic(request) {
|
|
12
|
+
return this.client.topics.create(request);
|
|
13
|
+
}
|
|
14
|
+
async updateTopic(topicId, request) {
|
|
15
|
+
return this.client.topics.update(topicId, request);
|
|
16
|
+
}
|
|
17
|
+
async deleteTopic(topicId) {
|
|
18
|
+
await this.client.topics.delete(topicId);
|
|
19
|
+
}
|
|
20
|
+
async forceDeleteTopic(topicId, updatedBy) {
|
|
21
|
+
const response = await this.client.topics.forceDelete(topicId, updatedBy);
|
|
22
|
+
return { message: response.message };
|
|
23
|
+
}
|
|
24
|
+
async listTopics() {
|
|
25
|
+
const response = await this.client.topics.list();
|
|
26
|
+
return response.custom_topics;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sets a single custom topic on a profile's topic-guardrails config.
|
|
30
|
+
* Delegates to {@link assignTopicsToProfile} for backward compatibility.
|
|
31
|
+
*/
|
|
32
|
+
async assignTopicToProfile(profileName, topicId, topicName, action) {
|
|
33
|
+
return this.assignTopicsToProfile(profileName, [{ topicId, topicName, action }]);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Sets one or more custom topics on a profile's topic-guardrails config.
|
|
37
|
+
* Replaces any existing topics — previous runs' stale topics are cleared.
|
|
38
|
+
* Groups topics by action; skips empty action groups (AIRS rejects them).
|
|
39
|
+
*
|
|
40
|
+
* CRITICAL: Each topic entry MUST include the current `revision` number.
|
|
41
|
+
* AIRS pins topic content to the revision specified in the profile — omitting
|
|
42
|
+
* it defaults to revision 0 (original content), not the latest.
|
|
43
|
+
*/
|
|
44
|
+
async assignTopicsToProfile(profileName, topics, guardrailAction) {
|
|
45
|
+
// Find profile by name
|
|
46
|
+
const { ai_profiles } = await this.client.profiles.list();
|
|
47
|
+
const profile = ai_profiles.find((p) => p.profile_name === profileName);
|
|
48
|
+
if (!profile?.profile_id) {
|
|
49
|
+
throw new Error(`Profile "${profileName}" not found`);
|
|
50
|
+
}
|
|
51
|
+
// Fetch current topic revisions — AIRS requires the revision field to
|
|
52
|
+
// reference the correct topic content snapshot.
|
|
53
|
+
const allTopics = await this.listTopics();
|
|
54
|
+
const revisionMap = new Map(allTopics.map((t) => [t.topic_id, t.revision ?? 0]));
|
|
55
|
+
// Deep clone the policy to mutate
|
|
56
|
+
const policy = JSON.parse(JSON.stringify(profile.policy ?? {}));
|
|
57
|
+
const aiProfiles = policy['ai-security-profiles'] ?? [
|
|
58
|
+
{ 'model-type': 'default', 'model-configuration': {} },
|
|
59
|
+
];
|
|
60
|
+
const modelConfig = aiProfiles[0]?.['model-configuration'] ?? {};
|
|
61
|
+
// Find or create model-protection with topic-guardrails
|
|
62
|
+
const modelProtection = modelConfig['model-protection'] ?? [];
|
|
63
|
+
let topicGuardrails = modelProtection.find((mp) => mp.name === 'topic-guardrails');
|
|
64
|
+
if (!topicGuardrails) {
|
|
65
|
+
topicGuardrails = {
|
|
66
|
+
action: 'block',
|
|
67
|
+
name: 'topic-guardrails',
|
|
68
|
+
options: [],
|
|
69
|
+
'topic-list': [],
|
|
70
|
+
};
|
|
71
|
+
modelProtection.push(topicGuardrails);
|
|
72
|
+
}
|
|
73
|
+
// Guardrail-level action controls default behavior for topic-guardrails layer.
|
|
74
|
+
// 'block' = block all unless explicitly allowed (requires allow topics).
|
|
75
|
+
// 'allow' = allow all unless explicitly blocked (only block topics needed).
|
|
76
|
+
topicGuardrails.action = guardrailAction ?? 'block';
|
|
77
|
+
// Group topics by action, build topic-list entries with revision (skip empty groups).
|
|
78
|
+
const byAction = new Map();
|
|
79
|
+
for (const t of topics) {
|
|
80
|
+
const group = byAction.get(t.action) ?? [];
|
|
81
|
+
group.push({
|
|
82
|
+
topic_id: t.topicId,
|
|
83
|
+
topic_name: t.topicName,
|
|
84
|
+
revision: revisionMap.get(t.topicId) ?? 0,
|
|
85
|
+
});
|
|
86
|
+
byAction.set(t.action, group);
|
|
87
|
+
}
|
|
88
|
+
const topicList = [];
|
|
89
|
+
for (const [action, group] of byAction) {
|
|
90
|
+
topicList.push({ action, topic: group });
|
|
91
|
+
}
|
|
92
|
+
topicGuardrails['topic-list'] = topicList;
|
|
93
|
+
// Write back
|
|
94
|
+
modelConfig['model-protection'] = modelProtection;
|
|
95
|
+
aiProfiles[0]['model-configuration'] = modelConfig;
|
|
96
|
+
policy['ai-security-profiles'] = aiProfiles;
|
|
97
|
+
await this.client.profiles.update(profile.profile_id, {
|
|
98
|
+
profile_name: profile.profile_name,
|
|
99
|
+
active: profile.active,
|
|
100
|
+
policy,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
async getProfileTopics(profileName) {
|
|
104
|
+
const { ai_profiles } = await this.client.profiles.list();
|
|
105
|
+
const profile = ai_profiles.find((p) => p.profile_name === profileName);
|
|
106
|
+
if (!profile?.profile_id) {
|
|
107
|
+
throw new Error(`Profile "${profileName}" not found`);
|
|
108
|
+
}
|
|
109
|
+
// Extract topic entries from profile policy
|
|
110
|
+
const policy = profile.policy ?? {};
|
|
111
|
+
const aiProfiles = policy['ai-security-profiles'] ?? [];
|
|
112
|
+
const modelConfig = aiProfiles[0]?.['model-configuration'] ?? {};
|
|
113
|
+
const modelProtection = modelConfig['model-protection'] ?? [];
|
|
114
|
+
const topicGuardrails = modelProtection.find((mp) => mp.name === 'topic-guardrails');
|
|
115
|
+
if (!topicGuardrails)
|
|
116
|
+
return [];
|
|
117
|
+
const topicList = topicGuardrails['topic-list'] ?? [];
|
|
118
|
+
// Flatten entries into topic refs with action
|
|
119
|
+
const topicRefs = [];
|
|
120
|
+
for (const entry of topicList) {
|
|
121
|
+
for (const t of entry.topic ?? []) {
|
|
122
|
+
topicRefs.push({
|
|
123
|
+
topicId: t.topic_id,
|
|
124
|
+
topicName: t.topic_name,
|
|
125
|
+
action: entry.action,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (topicRefs.length === 0)
|
|
130
|
+
return [];
|
|
131
|
+
// Fetch full topic details
|
|
132
|
+
const allTopics = await this.listTopics();
|
|
133
|
+
const topicMap = new Map(allTopics.map((t) => [t.topic_id, t]));
|
|
134
|
+
return topicRefs.map((ref) => {
|
|
135
|
+
const full = topicMap.get(ref.topicId);
|
|
136
|
+
return {
|
|
137
|
+
topicId: ref.topicId,
|
|
138
|
+
topicName: ref.topicName,
|
|
139
|
+
action: ref.action,
|
|
140
|
+
description: full?.description ?? '',
|
|
141
|
+
examples: full?.examples ?? [],
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// -------------------------------------------------------------------------
|
|
146
|
+
// Profile CRUD
|
|
147
|
+
// -------------------------------------------------------------------------
|
|
148
|
+
normalizeProfile(p) {
|
|
149
|
+
return {
|
|
150
|
+
profileId: p.profile_id,
|
|
151
|
+
profileName: p.profile_name,
|
|
152
|
+
revision: p.revision,
|
|
153
|
+
active: p.active,
|
|
154
|
+
createdBy: p.created_by,
|
|
155
|
+
updatedBy: p.updated_by,
|
|
156
|
+
lastModifiedTs: p.last_modified_ts,
|
|
157
|
+
policy: p.policy,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
async listProfiles(opts) {
|
|
161
|
+
const response = await this.client.profiles.list(opts);
|
|
162
|
+
return {
|
|
163
|
+
profiles: (response.ai_profiles ?? []).map((p) => this.normalizeProfile(p)),
|
|
164
|
+
nextOffset: response.next_offset,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
async createProfile(request) {
|
|
168
|
+
const response = await this.client.profiles.create(request);
|
|
169
|
+
return this.normalizeProfile(response);
|
|
170
|
+
}
|
|
171
|
+
async updateProfile(profileId, request) {
|
|
172
|
+
const response = await this.client.profiles.update(profileId, request);
|
|
173
|
+
return this.normalizeProfile(response);
|
|
174
|
+
}
|
|
175
|
+
async deleteProfile(profileId) {
|
|
176
|
+
const response = await this.client.profiles.delete(profileId);
|
|
177
|
+
return { message: response.message };
|
|
178
|
+
}
|
|
179
|
+
async forceDeleteProfile(profileId, updatedBy) {
|
|
180
|
+
const response = await this.client.profiles.forceDelete(profileId, updatedBy);
|
|
181
|
+
return { message: response.message };
|
|
182
|
+
}
|
|
183
|
+
// -------------------------------------------------------------------------
|
|
184
|
+
// API Keys
|
|
185
|
+
// -------------------------------------------------------------------------
|
|
186
|
+
normalizeApiKey(k) {
|
|
187
|
+
return {
|
|
188
|
+
id: (k.id ?? k.api_key_id ?? ''),
|
|
189
|
+
name: (k.name ?? k.api_key_name ?? ''),
|
|
190
|
+
createdAt: k.created_at,
|
|
191
|
+
expiresAt: k.expires_at,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
async listApiKeys(opts) {
|
|
195
|
+
const response = await this.client.apiKeys.list(opts);
|
|
196
|
+
const raw = response;
|
|
197
|
+
const keys = (raw.api_keys ?? []);
|
|
198
|
+
return {
|
|
199
|
+
apiKeys: keys.map((k) => this.normalizeApiKey(k)),
|
|
200
|
+
nextOffset: raw.next_offset,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
async createApiKey(request) {
|
|
204
|
+
const response = await this.client.apiKeys.create(request);
|
|
205
|
+
return this.normalizeApiKey(response);
|
|
206
|
+
}
|
|
207
|
+
async regenerateApiKey(apiKeyId, request) {
|
|
208
|
+
const response = await this.client.apiKeys.regenerate(apiKeyId, request);
|
|
209
|
+
return this.normalizeApiKey(response);
|
|
210
|
+
}
|
|
211
|
+
async deleteApiKey(apiKeyName, updatedBy) {
|
|
212
|
+
const response = await this.client.apiKeys.delete(apiKeyName, updatedBy);
|
|
213
|
+
return { message: response.message };
|
|
214
|
+
}
|
|
215
|
+
// -------------------------------------------------------------------------
|
|
216
|
+
// Customer Apps
|
|
217
|
+
// -------------------------------------------------------------------------
|
|
218
|
+
normalizeCustomerApp(a) {
|
|
219
|
+
return {
|
|
220
|
+
id: (a.customer_app_id ?? a.id),
|
|
221
|
+
name: (a.app_name ?? a.name ?? ''),
|
|
222
|
+
description: a.description,
|
|
223
|
+
raw: a,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
async listCustomerApps(opts) {
|
|
227
|
+
const response = await this.client.customerApps.list(opts);
|
|
228
|
+
const raw = response;
|
|
229
|
+
const apps = (raw.customer_apps ?? []);
|
|
230
|
+
return {
|
|
231
|
+
apps: apps.map((a) => this.normalizeCustomerApp(a)),
|
|
232
|
+
nextOffset: raw.next_offset,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async getCustomerApp(appName) {
|
|
236
|
+
const response = await this.client.customerApps.get(appName);
|
|
237
|
+
return this.normalizeCustomerApp(response);
|
|
238
|
+
}
|
|
239
|
+
async updateCustomerApp(appId, request) {
|
|
240
|
+
const response = await this.client.customerApps.update(appId, request);
|
|
241
|
+
return this.normalizeCustomerApp(response);
|
|
242
|
+
}
|
|
243
|
+
async deleteCustomerApp(appName, updatedBy) {
|
|
244
|
+
const response = await this.client.customerApps.delete(appName, updatedBy);
|
|
245
|
+
return this.normalizeCustomerApp(response);
|
|
246
|
+
}
|
|
247
|
+
// -------------------------------------------------------------------------
|
|
248
|
+
// Deployment Profiles (read-only)
|
|
249
|
+
// -------------------------------------------------------------------------
|
|
250
|
+
async listDeploymentProfiles(opts) {
|
|
251
|
+
const response = await this.client.deploymentProfiles.list(opts);
|
|
252
|
+
const raw = response;
|
|
253
|
+
const profiles = (raw.deployment_profiles ?? []);
|
|
254
|
+
return profiles.map((p) => ({ raw: p }));
|
|
255
|
+
}
|
|
256
|
+
// -------------------------------------------------------------------------
|
|
257
|
+
// DLP Profiles (read-only)
|
|
258
|
+
// -------------------------------------------------------------------------
|
|
259
|
+
async listDlpProfiles() {
|
|
260
|
+
const response = await this.client.dlpProfiles.list();
|
|
261
|
+
const raw = response;
|
|
262
|
+
const profiles = (raw.dlp_profiles ?? []);
|
|
263
|
+
return profiles.map((p) => ({ raw: p }));
|
|
264
|
+
}
|
|
265
|
+
// -------------------------------------------------------------------------
|
|
266
|
+
// Scan Logs
|
|
267
|
+
// -------------------------------------------------------------------------
|
|
268
|
+
async queryScanLogs(opts) {
|
|
269
|
+
const response = await this.client.scanLogs.query({
|
|
270
|
+
time_interval: opts.timeInterval,
|
|
271
|
+
time_unit: opts.timeUnit,
|
|
272
|
+
pageNumber: opts.pageNumber,
|
|
273
|
+
pageSize: opts.pageSize,
|
|
274
|
+
filter: opts.filter,
|
|
275
|
+
page_token: opts.pageToken,
|
|
276
|
+
});
|
|
277
|
+
const raw = response;
|
|
278
|
+
const dashboard = (raw.scan_result_for_dashboard ?? {});
|
|
279
|
+
const entries = (dashboard.scan_result_entries ?? raw.results ?? []);
|
|
280
|
+
return {
|
|
281
|
+
results: entries,
|
|
282
|
+
pageToken: raw.page_token,
|
|
283
|
+
raw,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=management.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"management.js","sourceRoot":"","sources":["../../src/airs/management.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type ModelSecurityClientOptions } from '@cdot65/prisma-airs-sdk';
|
|
2
|
+
import type { ModelSecurityEvaluation, ModelSecurityFile, ModelSecurityFileListOptions, ModelSecurityGroup, ModelSecurityGroupCreateRequest, ModelSecurityGroupListOptions, ModelSecurityGroupUpdateRequest, ModelSecurityLabel, ModelSecurityPyPIAuth, ModelSecurityRule, ModelSecurityRuleInstance, ModelSecurityRuleInstanceListOptions, ModelSecurityRuleInstanceUpdateRequest, ModelSecurityRuleListOptions, ModelSecurityScan, ModelSecurityScanListOptions, ModelSecurityService, ModelSecurityViolation } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Wraps the SDK's ModelSecurityClient to implement ModelSecurityService.
|
|
5
|
+
* Provides security group CRUD, rule browsing, scan operations, and label management.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SdkModelSecurityService implements ModelSecurityService {
|
|
8
|
+
private client;
|
|
9
|
+
constructor(opts?: ModelSecurityClientOptions);
|
|
10
|
+
listGroups(opts?: ModelSecurityGroupListOptions): Promise<{
|
|
11
|
+
totalItems: number;
|
|
12
|
+
groups: ModelSecurityGroup[];
|
|
13
|
+
}>;
|
|
14
|
+
getGroup(uuid: string): Promise<ModelSecurityGroup>;
|
|
15
|
+
createGroup(request: ModelSecurityGroupCreateRequest): Promise<ModelSecurityGroup>;
|
|
16
|
+
updateGroup(uuid: string, request: ModelSecurityGroupUpdateRequest): Promise<ModelSecurityGroup>;
|
|
17
|
+
deleteGroup(uuid: string): Promise<void>;
|
|
18
|
+
listRuleInstances(groupUuid: string, opts?: ModelSecurityRuleInstanceListOptions): Promise<{
|
|
19
|
+
totalItems: number;
|
|
20
|
+
ruleInstances: ModelSecurityRuleInstance[];
|
|
21
|
+
}>;
|
|
22
|
+
getRuleInstance(groupUuid: string, instanceUuid: string): Promise<ModelSecurityRuleInstance>;
|
|
23
|
+
updateRuleInstance(groupUuid: string, instanceUuid: string, request: ModelSecurityRuleInstanceUpdateRequest): Promise<ModelSecurityRuleInstance>;
|
|
24
|
+
listRules(opts?: ModelSecurityRuleListOptions): Promise<{
|
|
25
|
+
totalItems: number;
|
|
26
|
+
rules: ModelSecurityRule[];
|
|
27
|
+
}>;
|
|
28
|
+
getRule(uuid: string): Promise<ModelSecurityRule>;
|
|
29
|
+
createScan(request: Record<string, unknown>): Promise<ModelSecurityScan>;
|
|
30
|
+
listScans(opts?: ModelSecurityScanListOptions): Promise<{
|
|
31
|
+
totalItems: number;
|
|
32
|
+
scans: ModelSecurityScan[];
|
|
33
|
+
}>;
|
|
34
|
+
getScan(uuid: string): Promise<ModelSecurityScan>;
|
|
35
|
+
getEvaluations(scanUuid: string, opts?: {
|
|
36
|
+
skip?: number;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
totalItems: number;
|
|
40
|
+
evaluations: ModelSecurityEvaluation[];
|
|
41
|
+
}>;
|
|
42
|
+
getEvaluation(uuid: string): Promise<ModelSecurityEvaluation>;
|
|
43
|
+
getViolations(scanUuid: string, opts?: {
|
|
44
|
+
skip?: number;
|
|
45
|
+
limit?: number;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
totalItems: number;
|
|
48
|
+
violations: ModelSecurityViolation[];
|
|
49
|
+
}>;
|
|
50
|
+
getViolation(uuid: string): Promise<ModelSecurityViolation>;
|
|
51
|
+
getFiles(scanUuid: string, opts?: ModelSecurityFileListOptions): Promise<{
|
|
52
|
+
totalItems: number;
|
|
53
|
+
files: ModelSecurityFile[];
|
|
54
|
+
}>;
|
|
55
|
+
addLabels(scanUuid: string, labels: ModelSecurityLabel[]): Promise<void>;
|
|
56
|
+
setLabels(scanUuid: string, labels: ModelSecurityLabel[]): Promise<void>;
|
|
57
|
+
deleteLabels(scanUuid: string, keys: string[]): Promise<void>;
|
|
58
|
+
getLabelKeys(opts?: {
|
|
59
|
+
skip?: number;
|
|
60
|
+
limit?: number;
|
|
61
|
+
}): Promise<{
|
|
62
|
+
totalItems: number;
|
|
63
|
+
keys: string[];
|
|
64
|
+
}>;
|
|
65
|
+
getLabelValues(key: string, opts?: {
|
|
66
|
+
skip?: number;
|
|
67
|
+
limit?: number;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
totalItems: number;
|
|
70
|
+
values: string[];
|
|
71
|
+
}>;
|
|
72
|
+
getPyPIAuth(): Promise<ModelSecurityPyPIAuth>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=modelsecurity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelsecurity.d.ts","sourceRoot":"","sources":["../../src/airs/modelsecurity.ts"],"names":[],"mappings":"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"}
|