@cdot65/prisma-airs-sdk 0.5.1 → 0.5.2
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 +9 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/errors.ts","../src/configuration.ts","../src/http-retry.ts","../src/utils.ts","../src/http-client.ts","../src/scan/scanner.ts","../src/scan/content.ts","../src/models/enums.ts","../src/models/ai-profile.ts","../src/models/metadata.ts","../src/models/tool-event.ts","../src/models/scan-request.ts","../src/models/scan-response.ts","../src/models/prompt-detected.ts","../src/models/response-detected.ts","../src/models/async-scan.ts","../src/models/scan-id-result.ts","../src/models/threat-report.ts","../src/models/detection.ts","../src/models/dlp-report.ts","../src/models/urlf-report.ts","../src/models/error-response.ts","../src/models/mgmt-security-profile.ts","../src/models/mgmt-custom-topic.ts","../src/models/model-security-enums.ts","../src/models/model-security.ts","../src/models/red-team-enums.ts","../src/models/red-team.ts","../src/models/oauth-token.ts","../src/management/oauth-client.ts","../src/management/management-http-client.ts","../src/management/profiles.ts","../src/management/topics.ts","../src/management/client.ts","../src/model-security/scans-client.ts","../src/model-security/security-groups-client.ts","../src/model-security/security-rules-client.ts","../src/model-security/client.ts","../src/red-team/scans-client.ts","../src/red-team/reports-client.ts","../src/red-team/custom-attack-reports-client.ts","../src/red-team/targets-client.ts","../src/red-team/custom-attacks-client.ts","../src/red-team/client.ts"],"sourcesContent":["// src/constants.ts — mirrors Python SDK constants/base.py\n\nexport const HEADER_API_KEY = 'x-pan-token';\nexport const HEADER_AUTH_TOKEN = 'Authorization';\nexport const PAYLOAD_HASH = 'x-payload-hash';\nexport const BEARER = 'Bearer ';\n\nexport const DEFAULT_ENDPOINT = 'https://service.api.aisecurity.paloaltonetworks.com';\n\n// Environment variable names\nexport const AI_SEC_API_KEY = 'PANW_AI_SEC_API_KEY';\nexport const AI_SEC_API_TOKEN = 'PANW_AI_SEC_API_TOKEN';\nexport const AI_SEC_API_ENDPOINT = 'PANW_AI_SEC_API_ENDPOINT';\n\n// Content length limits (bytes)\nexport const MAX_CONTENT_PROMPT_LENGTH = 2 * 1024 * 1024; // 2 MB\nexport const MAX_CONTENT_RESPONSE_LENGTH = 2 * 1024 * 1024; // 2 MB\nexport const MAX_CONTENT_CONTEXT_LENGTH = 100 * 1024 * 1024; // 100 MB\n\n// Auth limits\nexport const MAX_API_KEY_LENGTH = 2048;\nexport const MAX_TOKEN_LENGTH = 2048;\n\n// String length limits\nexport const MAX_TRANSACTION_ID_STR_LENGTH = 100;\nexport const MAX_SESSION_ID_STR_LENGTH = 100;\nexport const MAX_SCAN_ID_STR_LENGTH = 36;\nexport const MAX_REPORT_ID_STR_LENGTH = 40;\nexport const MAX_AI_PROFILE_NAME_LENGTH = 100;\n\n// Batch / query limits\nexport const MAX_NUMBER_OF_SCAN_IDS = 5;\nexport const MAX_NUMBER_OF_REPORT_IDS = 5;\nexport const MAX_NUMBER_OF_BATCH_SCAN_OBJECTS = 5;\n\n// HTTP / retry\nexport const MAX_CONNECTION_POOL_SIZE = 100;\nexport const MAX_NUMBER_OF_RETRIES = 5;\nexport const HTTP_FORCE_RETRY_STATUS_CODES = [500, 502, 503, 504];\n\n// User-Agent (version injected at build time or read from package.json)\nexport const SDK_VERSION = '0.5.1';\nexport const USER_AGENT = `PAN-AIRS/${SDK_VERSION}-typescript-sdk`;\n\n// Management API defaults\nexport const DEFAULT_MGMT_ENDPOINT = 'https://api.sase.paloaltonetworks.com/aisec';\nexport const DEFAULT_TOKEN_ENDPOINT = 'https://auth.apps.paloaltonetworks.com/oauth2/access_token';\n\n// Management env vars\nexport const MGMT_CLIENT_ID = 'PANW_MGMT_CLIENT_ID';\nexport const MGMT_CLIENT_SECRET = 'PANW_MGMT_CLIENT_SECRET';\nexport const MGMT_TSG_ID = 'PANW_MGMT_TSG_ID';\nexport const MGMT_ENDPOINT = 'PANW_MGMT_ENDPOINT';\nexport const MGMT_TOKEN_ENDPOINT = 'PANW_MGMT_TOKEN_ENDPOINT';\n\n// API paths — scan\nexport const SYNC_SCAN_PATH = '/v1/scan/sync/request';\nexport const ASYNC_SCAN_PATH = '/v1/scan/async/request';\nexport const SCAN_RESULTS_PATH = '/v1/scan/results';\nexport const SCAN_REPORTS_PATH = '/v1/scan/reports';\n\n// API paths — management\nexport const MGMT_PROFILE_PATH = '/v1/mgmt/profile';\nexport const MGMT_PROFILES_TSG_PATH = '/v1/mgmt/profiles/tsg';\nexport const MGMT_TOPIC_PATH = '/v1/mgmt/topic';\nexport const MGMT_TOPICS_TSG_PATH = '/v1/mgmt/topics/tsg';\nexport const MGMT_TOPIC_FORCE_PATH = '/v1/mgmt/topic/force';\n\n// Model Security API defaults\nexport const DEFAULT_MODEL_SEC_DATA_ENDPOINT = 'https://api.sase.paloaltonetworks.com/aims/data';\nexport const DEFAULT_MODEL_SEC_MGMT_ENDPOINT = 'https://api.sase.paloaltonetworks.com/aims/mgmt';\n\n// Model Security env vars\nexport const MODEL_SEC_CLIENT_ID = 'PANW_MODEL_SEC_CLIENT_ID';\nexport const MODEL_SEC_CLIENT_SECRET = 'PANW_MODEL_SEC_CLIENT_SECRET';\nexport const MODEL_SEC_TSG_ID = 'PANW_MODEL_SEC_TSG_ID';\nexport const MODEL_SEC_DATA_ENDPOINT = 'PANW_MODEL_SEC_DATA_ENDPOINT';\nexport const MODEL_SEC_MGMT_ENDPOINT = 'PANW_MODEL_SEC_MGMT_ENDPOINT';\nexport const MODEL_SEC_TOKEN_ENDPOINT = 'PANW_MODEL_SEC_TOKEN_ENDPOINT';\n\n// API paths — model security data plane\nexport const MODEL_SEC_SCANS_PATH = '/v1/scans';\nexport const MODEL_SEC_EVALUATIONS_PATH = '/v1/evaluations';\nexport const MODEL_SEC_VIOLATIONS_PATH = '/v1/violations';\n\n// API paths — model security management\nexport const MODEL_SEC_SECURITY_GROUPS_PATH = '/v1/security-groups';\nexport const MODEL_SEC_SECURITY_RULES_PATH = '/v1/security-rules';\nexport const MODEL_SEC_PYPI_AUTH_PATH = '/v1/pypi/authenticate';\n\n// Red Team API defaults\nexport const DEFAULT_RED_TEAM_DATA_ENDPOINT =\n 'https://api.sase.paloaltonetworks.com/ai-red-teaming/data-plane';\nexport const DEFAULT_RED_TEAM_MGMT_ENDPOINT =\n 'https://api.sase.paloaltonetworks.com/ai-red-teaming/mgmt-plane';\n\n// Red Team env vars\nexport const RED_TEAM_CLIENT_ID = 'PANW_RED_TEAM_CLIENT_ID';\nexport const RED_TEAM_CLIENT_SECRET = 'PANW_RED_TEAM_CLIENT_SECRET';\nexport const RED_TEAM_TSG_ID = 'PANW_RED_TEAM_TSG_ID';\nexport const RED_TEAM_DATA_ENDPOINT = 'PANW_RED_TEAM_DATA_ENDPOINT';\nexport const RED_TEAM_MGMT_ENDPOINT = 'PANW_RED_TEAM_MGMT_ENDPOINT';\nexport const RED_TEAM_TOKEN_ENDPOINT = 'PANW_RED_TEAM_TOKEN_ENDPOINT';\n\n// API paths — red team data plane\nexport const RED_TEAM_SCAN_PATH = '/v1/scan';\nexport const RED_TEAM_CATEGORIES_PATH = '/v1/categories';\nexport const RED_TEAM_REPORT_STATIC_PATH = '/v1/report/static';\nexport const RED_TEAM_REPORT_DYNAMIC_PATH = '/v1/report/dynamic';\nexport const RED_TEAM_REPORT_PATH = '/v1/report';\nexport const RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH = '/v1/custom-attacks';\nexport const RED_TEAM_DASHBOARD_PATH = '/v1/dashboard';\nexport const RED_TEAM_QUOTA_PATH = '/v1/metering/quota';\nexport const RED_TEAM_ERROR_LOG_PATH = '/v1/error-log/job';\nexport const RED_TEAM_SENTIMENT_PATH = '/v1/sentiment';\n\n// API paths — red team management plane\nexport const RED_TEAM_TARGET_PATH = '/v1/target';\nexport const RED_TEAM_CUSTOM_ATTACK_PATH = '/v1/custom-attack';\nexport const RED_TEAM_MGMT_DASHBOARD_PATH = '/v1/dashboard/overview';\n","// src/errors.ts — mirrors Python SDK exceptions.py\n\n/** Classification of SDK errors by origin. */\nexport enum ErrorType {\n /** 5xx response from the AIRS API. */\n SERVER_SIDE_ERROR = 'AISEC_SERVER_SIDE_ERROR',\n /** 4xx response or network failure. */\n CLIENT_SIDE_ERROR = 'AISEC_CLIENT_SIDE_ERROR',\n /** Invalid user-supplied input (bad UUID, oversized content, etc.). */\n USER_REQUEST_PAYLOAD_ERROR = 'AISEC_USER_REQUEST_PAYLOAD_ERROR',\n /** Required configuration value is missing. */\n MISSING_VARIABLE = 'AISEC_MISSING_VARIABLE',\n /** Internal SDK error. */\n AISEC_SDK_ERROR = 'AISEC_SDK_ERROR',\n /** OAuth2 token fetch failure. */\n OAUTH_ERROR = 'AISEC_OAUTH_ERROR',\n}\n\n/**\n * Base exception for all AIRS SDK errors.\n * The `errorType` field classifies the error origin.\n */\nexport class AISecSDKException extends Error {\n public readonly errorType?: ErrorType;\n\n /**\n * @param message - Human-readable error description.\n * @param errorType - Classification of the error.\n */\n constructor(message: string, errorType?: ErrorType) {\n super(errorType ? `${errorType}:${message}` : message);\n this.name = 'AISecSDKException';\n this.errorType = errorType;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AISecSDKException);\n }\n }\n}\n","// src/configuration.ts — mirrors Python SDK configuration.py\n\nimport {\n DEFAULT_ENDPOINT,\n AI_SEC_API_KEY,\n AI_SEC_API_TOKEN,\n AI_SEC_API_ENDPOINT,\n MAX_API_KEY_LENGTH,\n MAX_TOKEN_LENGTH,\n MAX_NUMBER_OF_RETRIES,\n} from './constants.js';\nimport { AISecSDKException, ErrorType } from './errors.js';\n\n/** Options for initializing the global scan API configuration. */\nexport interface InitOptions {\n /** AIRS API key. Falls back to `PANW_AI_SEC_API_KEY` env var. */\n apiKey?: string;\n /** Pre-obtained bearer token. Falls back to `PANW_AI_SEC_API_TOKEN` env var. */\n apiToken?: string;\n /** AIRS API endpoint URL. Falls back to `PANW_AI_SEC_API_ENDPOINT` env var. */\n apiEndpoint?: string;\n /** Max retry attempts (0–5). Defaults to 5. */\n numRetries?: number;\n}\n\nclass Configuration {\n private _apiKey?: string;\n private _apiToken?: string;\n private _apiEndpoint: string = DEFAULT_ENDPOINT;\n private _numRetries: number = MAX_NUMBER_OF_RETRIES;\n private _initialized = false;\n\n get apiKey(): string | undefined {\n return this._apiKey;\n }\n get apiToken(): string | undefined {\n return this._apiToken;\n }\n get apiEndpoint(): string {\n return this._apiEndpoint;\n }\n get numRetries(): number {\n return this._numRetries;\n }\n get initialized(): boolean {\n return this._initialized;\n }\n\n init(opts: InitOptions = {}): void {\n // Resolve api key\n const apiKey = (opts.apiKey ?? process.env[AI_SEC_API_KEY] ?? '').trim() || undefined;\n const apiToken = (opts.apiToken ?? process.env[AI_SEC_API_TOKEN] ?? '').trim() || undefined;\n\n if (!apiKey && !apiToken) {\n throw new AISecSDKException(\n 'Either apiKey or apiToken must be provided (or set via environment variables)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n if (apiKey && apiKey.length > MAX_API_KEY_LENGTH) {\n throw new AISecSDKException(\n `apiKey exceeds max length of ${MAX_API_KEY_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n if (apiToken && apiToken.length > MAX_TOKEN_LENGTH) {\n throw new AISecSDKException(\n `apiToken exceeds max length of ${MAX_TOKEN_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n this._apiKey = apiKey;\n this._apiToken = apiToken;\n\n // Resolve endpoint\n const endpoint = opts.apiEndpoint ?? process.env[AI_SEC_API_ENDPOINT] ?? DEFAULT_ENDPOINT;\n this._apiEndpoint = endpoint.replace(/\\/+$/, ''); // strip trailing slashes\n\n // Resolve retries\n if (opts.numRetries !== undefined) {\n if (opts.numRetries < 0 || opts.numRetries > MAX_NUMBER_OF_RETRIES) {\n throw new AISecSDKException(\n `numRetries must be between 0 and ${MAX_NUMBER_OF_RETRIES}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._numRetries = opts.numRetries;\n }\n\n this._initialized = true;\n }\n\n reset(): void {\n this._apiKey = undefined;\n this._apiToken = undefined;\n this._apiEndpoint = DEFAULT_ENDPOINT;\n this._numRetries = MAX_NUMBER_OF_RETRIES;\n this._initialized = false;\n }\n}\n\n/** Global singleton holding scan API configuration. */\nexport const globalConfiguration = new Configuration();\n\n/**\n * Initialize the global scan API configuration. Must be called before using {@link Scanner}.\n * @param opts - Configuration options. Reads env vars as fallbacks.\n * @throws {AISecSDKException} If neither apiKey nor apiToken is provided.\n */\nexport function init(opts: InitOptions = {}): void {\n globalConfiguration.init(opts);\n}\n","// src/http-retry.ts — shared retry logic for HTTP clients\n\nimport { HTTP_FORCE_RETRY_STATUS_CODES } from './constants.js';\nimport { AISecSDKException, ErrorType } from './errors.js';\n\n/**\n * Sleep for the given number of milliseconds.\n * @param ms - Milliseconds to wait.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Calculate exponential backoff delay for the given attempt.\n * @param attempt - Zero-based attempt number.\n * @returns Delay in milliseconds.\n */\nexport function backoffDelay(attempt: number): number {\n return Math.pow(2, attempt) * 1000;\n}\n\n/**\n * Check if an HTTP status code should trigger a retry.\n * @param status - HTTP status code.\n */\nexport function isRetryableStatus(status: number): boolean {\n return HTTP_FORCE_RETRY_STATUS_CODES.includes(status);\n}\n\n/**\n * Classify an HTTP status code as server-side or client-side error.\n * @param status - HTTP status code.\n */\nexport function classifyErrorType(status: number): ErrorType {\n return status >= 500 ? ErrorType.SERVER_SIDE_ERROR : ErrorType.CLIENT_SIDE_ERROR;\n}\n\n/**\n * Extract a human-readable error message from an API error response body.\n * Tries `error_message`, `message`, and `error.message` fields in order.\n * @param body - Raw response body string.\n * @param status - HTTP status code for fallback message.\n */\nexport function extractErrorMessage(body: string, status: number): string {\n try {\n const parsed = JSON.parse(body) as Record<string, unknown>;\n return (\n (parsed.error_message as string) ??\n (parsed.message as string) ??\n ((parsed.error as Record<string, unknown> | undefined)?.message as string) ??\n `API error ${status}`\n );\n } catch {\n return body ? `API error ${status}: ${body}` : `API error ${status}`;\n }\n}\n\n/** Options for {@link executeWithRetry}. */\nexport interface RetryOptions {\n /** Maximum number of retry attempts. */\n maxRetries: number;\n /** Function that performs the HTTP request for each attempt. */\n execute: (attempt: number) => Promise<Response>;\n /** Optional callback for handling special failure cases (e.g. 401 token refresh). Return true to retry without consuming the retry budget. */\n onRetryableFailure?: (response: Response, attempt: number) => Promise<boolean>;\n}\n\n/**\n * Execute an HTTP request with exponential backoff retry.\n * @param opts - Retry configuration and request function.\n * @returns Successful HTTP Response.\n * @throws {AISecSDKException} After exhausting retries or on non-retryable errors.\n */\nexport async function executeWithRetry(opts: RetryOptions): Promise<Response> {\n const { maxRetries, execute, onRetryableFailure } = opts;\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n let response: Response;\n try {\n response = await execute(attempt);\n } catch (err) {\n if (err instanceof AISecSDKException) throw err;\n lastError = err as Error;\n if (attempt < maxRetries) {\n await sleep(backoffDelay(attempt));\n continue;\n }\n throw new AISecSDKException(\n lastError.message ?? 'Network error',\n ErrorType.CLIENT_SIDE_ERROR,\n );\n }\n\n if (response.ok) return response;\n\n // Let caller handle special status codes (e.g. 401 token refresh)\n // When handled, decrement attempt so it doesn't count against retry budget\n if (onRetryableFailure) {\n const handled = await onRetryableFailure(response, attempt);\n if (handled) {\n attempt--;\n continue;\n }\n }\n\n if (isRetryableStatus(response.status) && attempt < maxRetries) {\n await sleep(backoffDelay(attempt));\n continue;\n }\n\n // Non-retryable error\n const errorText = await response.text();\n const errorMessage = extractErrorMessage(errorText, response.status);\n throw new AISecSDKException(errorMessage, classifyErrorType(response.status));\n }\n\n throw new AISecSDKException(\n lastError?.message ?? 'Max retries exceeded',\n ErrorType.CLIENT_SIDE_ERROR,\n );\n}\n","// src/utils.ts — UUID validation + HMAC payload hash\n\nimport { createHmac } from 'node:crypto';\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function isValidUuid(value: string): boolean {\n return UUID_RE.test(value);\n}\n\nexport function generatePayloadHash(payload: string, secret: string): string {\n return createHmac('sha256', secret).update(payload).digest('hex');\n}\n","// src/http-client.ts — internal fetch wrapper with retry\n\nimport { globalConfiguration } from './configuration.js';\nimport {\n HEADER_API_KEY,\n HEADER_AUTH_TOKEN,\n BEARER,\n PAYLOAD_HASH,\n USER_AGENT,\n} from './constants.js';\nimport { AISecSDKException, ErrorType } from './errors.js';\nimport { executeWithRetry } from './http-retry.js';\nimport { generatePayloadHash } from './utils.js';\n\n/** Options for a scan API HTTP request. */\nexport interface HttpRequestOptions {\n /** HTTP method. */\n method: 'GET' | 'POST';\n /** API path (appended to the configured endpoint). */\n path: string;\n /** Request body (JSON-serialized). */\n body?: unknown;\n /** URL query parameters. */\n params?: Record<string, string>;\n}\n\n/** Typed HTTP response wrapper. */\nexport interface HttpResponse<T = unknown> {\n /** HTTP status code. */\n status: number;\n /** Parsed response body. */\n data: T;\n}\n\nfunction buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': USER_AGENT,\n };\n\n const cfg = globalConfiguration;\n if (cfg.apiToken) {\n headers[HEADER_AUTH_TOKEN] = `${BEARER}${cfg.apiToken}`;\n }\n if (cfg.apiKey) {\n headers[HEADER_API_KEY] = cfg.apiKey;\n }\n\n return headers;\n}\n\nexport async function httpRequest<T>(opts: HttpRequestOptions): Promise<HttpResponse<T>> {\n if (!globalConfiguration.initialized) {\n throw new AISecSDKException(\n 'SDK not initialized. Call init() before making requests.',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n const baseUrl = globalConfiguration.apiEndpoint;\n const url = new URL(opts.path, baseUrl);\n\n if (opts.params) {\n for (const [key, value] of Object.entries(opts.params)) {\n url.searchParams.set(key, value);\n }\n }\n\n const headers = buildHeaders();\n let bodyStr: string | undefined;\n if (opts.body !== undefined) {\n bodyStr = JSON.stringify(opts.body);\n if (globalConfiguration.apiKey) {\n headers[PAYLOAD_HASH] = generatePayloadHash(bodyStr, globalConfiguration.apiKey);\n }\n }\n\n const response = await executeWithRetry({\n maxRetries: globalConfiguration.numRetries,\n execute: () =>\n fetch(url.toString(), {\n method: opts.method,\n headers,\n body: bodyStr,\n }),\n });\n\n const data = (await response.json()) as T;\n return { status: response.status, data };\n}\n","// src/scan/scanner.ts — mirrors Python SDK scanner classes\n\nimport { httpRequest } from '../http-client.js';\nimport {\n SYNC_SCAN_PATH,\n ASYNC_SCAN_PATH,\n SCAN_RESULTS_PATH,\n SCAN_REPORTS_PATH,\n MAX_NUMBER_OF_SCAN_IDS,\n MAX_NUMBER_OF_REPORT_IDS,\n MAX_NUMBER_OF_BATCH_SCAN_OBJECTS,\n MAX_TRANSACTION_ID_STR_LENGTH,\n MAX_SESSION_ID_STR_LENGTH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\n\nimport type { AiProfile } from '../models/ai-profile.js';\nimport type { Metadata } from '../models/metadata.js';\nimport type { ScanResponse } from '../models/scan-response.js';\nimport type { AsyncScanObject, AsyncScanResponse } from '../models/async-scan.js';\nimport type { ScanIdResult } from '../models/scan-id-result.js';\nimport type { ThreatScanReport } from '../models/threat-report.js';\nimport { Content } from './content.js';\n\n/** Optional parameters for {@link Scanner.syncScan}. */\nexport interface SyncScanOptions {\n /** Transaction ID for tracing. Max 100 characters. */\n trId?: string;\n /** Session ID for grouping related scans. Max 100 characters. */\n sessionId?: string;\n /** Application metadata attached to the scan request. */\n metadata?: Metadata;\n}\n\n/** Client for AIRS scan operations (sync, async, and query). */\nexport class Scanner {\n /**\n * Perform a synchronous content scan.\n * @param aiProfile - AI security profile to scan against.\n * @param content - Content to scan.\n * @param opts - Optional transaction/session IDs and metadata.\n * @returns Scan response with verdict, action, and detection details.\n */\n async syncScan(\n aiProfile: AiProfile,\n content: Content,\n opts: SyncScanOptions = {},\n ): Promise<ScanResponse> {\n if (opts.trId && opts.trId.length > MAX_TRANSACTION_ID_STR_LENGTH) {\n throw new AISecSDKException(\n `trId exceeds max length of ${MAX_TRANSACTION_ID_STR_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (opts.sessionId && opts.sessionId.length > MAX_SESSION_ID_STR_LENGTH) {\n throw new AISecSDKException(\n `sessionId exceeds max length of ${MAX_SESSION_ID_STR_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const body: Record<string, unknown> = {\n ai_profile: aiProfile,\n contents: [content.toJSON()],\n };\n if (opts.trId) body.tr_id = opts.trId;\n if (opts.sessionId) body.session_id = opts.sessionId;\n if (opts.metadata) body.metadata = opts.metadata;\n\n const res = await httpRequest<ScanResponse>({\n method: 'POST',\n path: SYNC_SCAN_PATH,\n body,\n });\n return res.data;\n }\n\n /**\n * Submit content for asynchronous scanning.\n * @param scanObjects - Array of scan objects (1–5 items).\n * @returns Response containing scan IDs for later querying.\n */\n async asyncScan(scanObjects: AsyncScanObject[]): Promise<AsyncScanResponse> {\n if (scanObjects.length < 1) {\n throw new AISecSDKException(\n 'At least 1 scan object is required',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (scanObjects.length > MAX_NUMBER_OF_BATCH_SCAN_OBJECTS) {\n throw new AISecSDKException(\n `Max of ${MAX_NUMBER_OF_BATCH_SCAN_OBJECTS} scan objects allowed`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await httpRequest<AsyncScanResponse>({\n method: 'POST',\n path: ASYNC_SCAN_PATH,\n body: scanObjects,\n });\n return res.data;\n }\n\n /**\n * Query scan results by scan IDs.\n * @param scanIds - Array of scan UUIDs (1–5 items).\n * @returns Array of scan results with status and response data.\n */\n async queryByScanIds(scanIds: string[]): Promise<ScanIdResult[]> {\n if (scanIds.length < 1) {\n throw new AISecSDKException(\n 'At least 1 scan_id is required',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (scanIds.length > MAX_NUMBER_OF_SCAN_IDS) {\n throw new AISecSDKException(\n `Max of ${MAX_NUMBER_OF_SCAN_IDS} scan_ids allowed`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n for (const id of scanIds) {\n if (!isValidUuid(id)) {\n throw new AISecSDKException(`Invalid scan_id: ${id}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n }\n\n const res = await httpRequest<ScanIdResult[]>({\n method: 'GET',\n path: SCAN_RESULTS_PATH,\n params: { scan_ids: scanIds.join(',') },\n });\n return res.data;\n }\n\n /**\n * Query detailed threat reports by report IDs.\n * @param reportIds - Array of report IDs (1–5 items).\n * @returns Array of threat scan reports with detection details.\n */\n async queryByReportIds(reportIds: string[]): Promise<ThreatScanReport[]> {\n if (reportIds.length < 1) {\n throw new AISecSDKException(\n 'At least 1 report_id is required',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (reportIds.length > MAX_NUMBER_OF_REPORT_IDS) {\n throw new AISecSDKException(\n `Max of ${MAX_NUMBER_OF_REPORT_IDS} report_ids allowed`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await httpRequest<ThreatScanReport[]>({\n method: 'GET',\n path: SCAN_REPORTS_PATH,\n params: { report_ids: reportIds.join(',') },\n });\n return res.data;\n }\n}\n","// src/scan/content.ts — mirrors Python SDK scan/models/content.py\n\nimport { readFileSync } from 'node:fs';\nimport {\n MAX_CONTENT_PROMPT_LENGTH,\n MAX_CONTENT_RESPONSE_LENGTH,\n MAX_CONTENT_CONTEXT_LENGTH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport type { ToolEvent } from '../models/tool-event.js';\nimport type { ScanRequestContentsInner } from '../models/scan-request.js';\n\n/** Options for constructing a {@link Content} instance. At least one field is required. */\nexport interface ContentOptions {\n /** User prompt text. Max 2 MB. */\n prompt?: string;\n /** AI model response text. Max 2 MB. */\n response?: string;\n /** Conversation context. Max 100 MB. */\n context?: string;\n /** Code prompt text. Max 2 MB. */\n codePrompt?: string;\n /** Code response text. Max 2 MB. */\n codeResponse?: string;\n /** Tool/function call event data. */\n toolEvent?: ToolEvent;\n}\n\n/**\n * Represents content to be scanned by AIRS.\n * Validates byte-length limits on construction and property assignment.\n */\nexport class Content {\n private _prompt?: string;\n private _response?: string;\n private _context?: string;\n private _codePrompt?: string;\n private _codeResponse?: string;\n private _toolEvent?: ToolEvent;\n\n constructor(opts: ContentOptions) {\n if (\n !opts.prompt &&\n !opts.response &&\n !opts.codePrompt &&\n !opts.codeResponse &&\n !opts.toolEvent\n ) {\n throw new AISecSDKException(\n 'At least one of prompt, response, codePrompt, codeResponse, or toolEvent must be provided',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n if (opts.prompt !== undefined) this.prompt = opts.prompt;\n if (opts.response !== undefined) this.response = opts.response;\n if (opts.context !== undefined) this.context = opts.context;\n if (opts.codePrompt !== undefined) this.codePrompt = opts.codePrompt;\n if (opts.codeResponse !== undefined) this.codeResponse = opts.codeResponse;\n if (opts.toolEvent !== undefined) this._toolEvent = opts.toolEvent;\n }\n\n get prompt(): string | undefined {\n return this._prompt;\n }\n set prompt(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_PROMPT_LENGTH) {\n throw new AISecSDKException(\n `prompt exceeds max length of ${MAX_CONTENT_PROMPT_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._prompt = value;\n }\n\n get response(): string | undefined {\n return this._response;\n }\n set response(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_RESPONSE_LENGTH) {\n throw new AISecSDKException(\n `response exceeds max length of ${MAX_CONTENT_RESPONSE_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._response = value;\n }\n\n get context(): string | undefined {\n return this._context;\n }\n set context(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_CONTEXT_LENGTH) {\n throw new AISecSDKException(\n `context exceeds max length of ${MAX_CONTENT_CONTEXT_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._context = value;\n }\n\n get codePrompt(): string | undefined {\n return this._codePrompt;\n }\n set codePrompt(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_PROMPT_LENGTH) {\n throw new AISecSDKException(\n `codePrompt exceeds max length of ${MAX_CONTENT_PROMPT_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._codePrompt = value;\n }\n\n get codeResponse(): string | undefined {\n return this._codeResponse;\n }\n set codeResponse(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_RESPONSE_LENGTH) {\n throw new AISecSDKException(\n `codeResponse exceeds max length of ${MAX_CONTENT_RESPONSE_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._codeResponse = value;\n }\n\n get toolEvent(): ToolEvent | undefined {\n return this._toolEvent;\n }\n set toolEvent(value: ToolEvent | undefined) {\n this._toolEvent = value;\n }\n\n /** Total byte length of all text content fields. */\n get length(): number {\n let total = 0;\n if (this._prompt) total += Buffer.byteLength(this._prompt);\n if (this._response) total += Buffer.byteLength(this._response);\n if (this._context) total += Buffer.byteLength(this._context);\n if (this._codePrompt) total += Buffer.byteLength(this._codePrompt);\n if (this._codeResponse) total += Buffer.byteLength(this._codeResponse);\n return total;\n }\n\n /** Serialize to the API request format. */\n toJSON(): ScanRequestContentsInner {\n const obj: ScanRequestContentsInner = {};\n if (this._prompt !== undefined) obj.prompt = this._prompt;\n if (this._response !== undefined) obj.response = this._response;\n if (this._context !== undefined) obj.context = this._context;\n if (this._codePrompt !== undefined) obj.code_prompt = this._codePrompt;\n if (this._codeResponse !== undefined) obj.code_response = this._codeResponse;\n if (this._toolEvent !== undefined) obj.tool_event = this._toolEvent;\n return obj;\n }\n\n /**\n * Create a Content instance from an API response object.\n * @param json - Scan request contents inner object.\n */\n static fromJSON(json: ScanRequestContentsInner): Content {\n return new Content({\n prompt: json.prompt,\n response: json.response,\n context: json.context,\n codePrompt: json.code_prompt,\n codeResponse: json.code_response,\n toolEvent: json.tool_event,\n });\n }\n\n /**\n * Load content from a JSON file.\n * @param filePath - Path to JSON file containing scan request contents.\n */\n static fromJSONFile(filePath: string): Content {\n const raw = readFileSync(filePath, 'utf-8');\n const parsed: ScanRequestContentsInner = JSON.parse(raw);\n return Content.fromJSON(parsed);\n }\n}\n","// src/models/enums.ts — typed enums for AIRS API verdict/action/category values\n\n/** Scan result verdict classification. */\nexport const Verdict = {\n BENIGN: 'benign',\n MALICIOUS: 'malicious',\n UNKNOWN: 'unknown',\n} as const;\n\n/** Union type of all possible verdict values. */\nexport type Verdict = (typeof Verdict)[keyof typeof Verdict];\n\n/** Enforcement action taken by AIRS. */\nexport const Action = {\n ALLOW: 'allow',\n BLOCK: 'block',\n ALERT: 'alert',\n} as const;\n\n/** Union type of all possible action values. */\nexport type Action = (typeof Action)[keyof typeof Action];\n\n/** Top-level scan result category. */\nexport const Category = {\n BENIGN: 'benign',\n MALICIOUS: 'malicious',\n UNKNOWN: 'unknown',\n} as const;\n\n/** Union type of all possible category values. */\nexport type Category = (typeof Category)[keyof typeof Category];\n","import { z } from 'zod';\nimport { MAX_AI_PROFILE_NAME_LENGTH } from '../constants.js';\n\n/** Zod schema for AI security profile identifier. Requires profile_id or profile_name. */\nexport const AiProfileSchema = z\n .object({\n profile_id: z.string().uuid().optional(),\n profile_name: z.string().max(MAX_AI_PROFILE_NAME_LENGTH).optional(),\n })\n .refine((d) => d.profile_id || d.profile_name, {\n message: 'Either profile_id or profile_name must be provided',\n });\n\n/** AI security profile identifier. At least one of profile_id or profile_name required. */\nexport type AiProfile = z.infer<typeof AiProfileSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for AI agent metadata. */\nexport const AgentMetaSchema = z.object({\n agent_id: z.string().optional(),\n agent_version: z.string().optional(),\n agent_arn: z.string().optional(),\n});\n\n/** AI agent metadata (agent ID, version, ARN). */\nexport type AgentMeta = z.infer<typeof AgentMetaSchema>;\n\n/** Zod schema for scan request metadata. */\nexport const MetadataSchema = z.object({\n app_name: z.string().optional(),\n app_user: z.string().optional(),\n ai_model: z.string().optional(),\n user_ip: z.string().optional(),\n agent_meta: AgentMetaSchema.optional(),\n});\n\n/** Application metadata attached to scan requests. */\nexport type Metadata = z.infer<typeof MetadataSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for tool/function call event metadata. */\nexport const ToolEventMetadataSchema = z.object({\n ecosystem: z.string(),\n method: z.string(),\n server_name: z.string(),\n tool_invoked: z.string().optional(),\n});\n\n/** Tool/function call event metadata (ecosystem, method, server, tool). */\nexport type ToolEventMetadata = z.infer<typeof ToolEventMetadataSchema>;\n\n/** Zod schema for a tool/function call event with input and output. */\nexport const ToolEventSchema = z.object({\n metadata: ToolEventMetadataSchema.optional(),\n input: z.string().optional(),\n output: z.string().optional(),\n});\n\n/** Tool/function call event with optional input and output strings. */\nexport type ToolEvent = z.infer<typeof ToolEventSchema>;\n","import { z } from 'zod';\nimport { MAX_TRANSACTION_ID_STR_LENGTH, MAX_SESSION_ID_STR_LENGTH } from '../constants.js';\nimport { AiProfileSchema } from './ai-profile.js';\nimport { MetadataSchema } from './metadata.js';\nimport { ToolEventSchema } from './tool-event.js';\n\n/** Zod schema for a single content item within a scan request. */\nexport const ScanRequestContentsInnerSchema = z.object({\n prompt: z.string().optional(),\n response: z.string().optional(),\n code_prompt: z.string().optional(),\n code_response: z.string().optional(),\n context: z.string().optional(),\n tool_event: ToolEventSchema.optional(),\n});\n\n/** Single content item within a scan request. */\nexport type ScanRequestContentsInner = z.infer<typeof ScanRequestContentsInnerSchema>;\n\n/** Zod schema for a complete scan request payload. */\nexport const ScanRequestSchema = z.object({\n tr_id: z.string().max(MAX_TRANSACTION_ID_STR_LENGTH).optional(),\n session_id: z.string().max(MAX_SESSION_ID_STR_LENGTH).optional(),\n ai_profile: AiProfileSchema,\n metadata: MetadataSchema.optional(),\n contents: z.array(ScanRequestContentsInnerSchema).min(1),\n});\n\n/** Complete scan request payload sent to the AIRS API. */\nexport type ScanRequest = z.infer<typeof ScanRequestSchema>;\n","import { z } from 'zod';\nimport { PromptDetectedSchema, PromptDetectionDetailsSchema } from './prompt-detected.js';\nimport { ResponseDetectedSchema, ResponseDetectionDetailsSchema } from './response-detected.js';\nimport { ToolEventMetadataSchema } from './tool-event.js';\n\n/** Zod schema for masked data in scan results. */\nexport const MaskedDataSchema = z.object({\n data: z.string().optional(),\n pattern_detections: z.array(z.record(z.unknown())).optional(),\n});\n\n/** Masked data containing redacted content and pattern detections. */\nexport type MaskedData = z.infer<typeof MaskedDataSchema>;\n\n/** Zod schema for I/O detection flags. */\nexport const IODetectedSchema = z\n .object({\n url_cats: z.boolean().optional(),\n dlp: z.boolean().optional(),\n injection: z.boolean().optional(),\n toxic_content: z.boolean().optional(),\n malicious_code: z.boolean().optional(),\n })\n .passthrough();\n\n/** Flags indicating which detection types triggered on input or output. */\nexport type IODetected = z.infer<typeof IODetectedSchema>;\n\n/** Zod schema for the scan summary (verdict + action). */\nexport const ScanSummarySchema = z\n .object({\n verdict: z.string().optional(),\n action: z.string().optional(),\n })\n .passthrough();\n\n/** Scan summary containing overall verdict and action. */\nexport type ScanSummary = z.infer<typeof ScanSummarySchema>;\n\n/** Zod schema for tool/agent detection results. */\nexport const ToolDetectedSchema = z.object({\n verdict: z.string().optional(),\n metadata: ToolEventMetadataSchema.optional(),\n summary: ScanSummarySchema.optional(),\n input_detected: IODetectedSchema.optional(),\n output_detected: IODetectedSchema.optional(),\n});\n\n/** Detection results for tool/agent interactions. */\nexport type ToolDetected = z.infer<typeof ToolDetectedSchema>;\n\n/** Zod schema for a complete scan response from the AIRS API. */\nexport const ScanResponseSchema = z.object({\n source: z.string().optional(),\n report_id: z.string(),\n scan_id: z.string(),\n tr_id: z.string().optional(),\n session_id: z.string().optional(),\n profile_id: z.string().optional(),\n profile_name: z.string().optional(),\n category: z.string(),\n action: z.string(),\n prompt_detected: PromptDetectedSchema.optional(),\n response_detected: ResponseDetectedSchema.optional(),\n prompt_masked_data: MaskedDataSchema.optional(),\n response_masked_data: MaskedDataSchema.optional(),\n prompt_detection_details: PromptDetectionDetailsSchema.optional(),\n response_detection_details: ResponseDetectionDetailsSchema.optional(),\n tool_detected: ToolDetectedSchema.optional(),\n created_at: z.string().optional(),\n completed_at: z.string().optional(),\n});\n\n/** Complete scan response with verdict, action, and detection details. */\nexport type ScanResponse = z.infer<typeof ScanResponseSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for prompt detection detail data. */\nexport const PromptDetectionDetailsSchema = z.object({\n topic_guardrails_details: z.record(z.unknown()).optional(),\n});\n\n/** Prompt detection detail data including topic guardrails. */\nexport type PromptDetectionDetails = z.infer<typeof PromptDetectionDetailsSchema>;\n\n/** Zod schema for prompt-side detection flags. */\nexport const PromptDetectedSchema = z.object({\n url_cats: z.boolean().optional(),\n dlp: z.boolean().optional(),\n injection: z.boolean().optional(),\n toxic_content: z.boolean().optional(),\n malicious_code: z.boolean().optional(),\n agent: z.boolean().optional(),\n topic_violation: z.boolean().optional(),\n});\n\n/** Flags indicating which detection types triggered on the prompt. */\nexport type PromptDetected = z.infer<typeof PromptDetectedSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for response detection detail data. */\nexport const ResponseDetectionDetailsSchema = z.object({\n topic_guardrails_details: z.record(z.unknown()).optional(),\n});\n\n/** Response detection detail data including topic guardrails. */\nexport type ResponseDetectionDetails = z.infer<typeof ResponseDetectionDetailsSchema>;\n\n/** Zod schema for response-side detection flags. */\nexport const ResponseDetectedSchema = z.object({\n url_cats: z.boolean().optional(),\n dlp: z.boolean().optional(),\n db_security: z.boolean().optional(),\n toxic_content: z.boolean().optional(),\n malicious_code: z.boolean().optional(),\n agent: z.boolean().optional(),\n ungrounded: z.boolean().optional(),\n topic_violation: z.boolean().optional(),\n});\n\n/** Flags indicating which detection types triggered on the response. */\nexport type ResponseDetected = z.infer<typeof ResponseDetectedSchema>;\n","import { z } from 'zod';\nimport { ScanRequestSchema } from './scan-request.js';\n\n/** Zod schema for an async scan batch item. */\nexport const AsyncScanObjectSchema = z.object({\n req_id: z.number().int(),\n scan_req: ScanRequestSchema,\n});\n\n/** Async scan batch item containing a request ID and scan request. */\nexport type AsyncScanObject = z.infer<typeof AsyncScanObjectSchema>;\n\n/** Zod schema for the async scan API response. */\nexport const AsyncScanResponseSchema = z.object({\n received: z.string(),\n scan_id: z.string(),\n report_id: z.string().optional(),\n source: z.string().optional(),\n});\n\n/** Async scan API response with scan ID for later querying. */\nexport type AsyncScanResponse = z.infer<typeof AsyncScanResponseSchema>;\n","import { z } from 'zod';\nimport { ScanResponseSchema } from './scan-response.js';\n\n/** Zod schema for a scan ID query result. */\nexport const ScanIdResultSchema = z.object({\n source: z.string().optional(),\n req_id: z.number().optional(),\n status: z.string().optional(),\n scan_id: z.string().optional(),\n result: ScanResponseSchema.optional(),\n});\n\n/** Result of querying a scan by its scan ID, including status and full scan response. */\nexport type ScanIdResult = z.infer<typeof ScanIdResultSchema>;\n","import { z } from 'zod';\nimport { DetectionServiceResultSchema } from './detection.js';\n\n/** Zod schema for a detailed threat scan report. */\nexport const ThreatScanReportSchema = z.object({\n source: z.string().optional(),\n report_id: z.string().optional(),\n scan_id: z.string().optional(),\n req_id: z.number().optional(),\n transaction_id: z.string().optional(),\n session_id: z.string().optional(),\n detection_results: z.array(DetectionServiceResultSchema).optional(),\n});\n\n/** Detailed threat scan report with per-service detection results. */\nexport type ThreatScanReport = z.infer<typeof ThreatScanReportSchema>;\n","import { z } from 'zod';\nimport { DlpReportSchema } from './dlp-report.js';\nimport { UrlfEntrySchema } from './urlf-report.js';\n\n/** Zod schema for detection service detail results (URLF and DLP reports). */\nexport const DSDetailResultSchema = z.object({\n urlf_report: z.array(UrlfEntrySchema).optional(),\n dlp_report: DlpReportSchema.optional(),\n});\n\n/** Detection service detail results containing URLF and DLP reports. */\nexport type DSDetailResult = z.infer<typeof DSDetailResultSchema>;\n\n/** Zod schema for detection service result metadata (score and confidence). */\nexport const DSResultMetadataSchema = z\n .object({\n score: z.number().optional(),\n confidence: z.string().optional(),\n })\n .passthrough();\n\n/** Detection service result metadata with score and confidence. */\nexport type DSResultMetadata = z.infer<typeof DSResultMetadataSchema>;\n\n/** Zod schema for an individual detection service result. */\nexport const DetectionServiceResultSchema = z.object({\n data_type: z.string().optional(),\n detection_service: z.string().optional(),\n verdict: z.string().optional(),\n action: z.string().optional(),\n metadata: DSResultMetadataSchema.optional(),\n result_detail: DSDetailResultSchema.optional(),\n});\n\n/** Individual detection service result with verdict, action, and details. */\nexport type DetectionServiceResult = z.infer<typeof DetectionServiceResultSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for a DLP (Data Loss Prevention) report. */\nexport const DlpReportSchema = z.object({\n dlp_report_id: z.string().optional(),\n dlp_profile_name: z.string().optional(),\n dlp_profile_id: z.string().optional(),\n dlp_profile_version: z.number().optional(),\n data_pattern_rule1_verdict: z.string().optional(),\n data_pattern_rule2_verdict: z.string().optional(),\n});\n\n/** DLP report with profile info and data pattern rule verdicts. */\nexport type DlpReport = z.infer<typeof DlpReportSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for a URL filtering report entry. */\nexport const UrlfEntrySchema = z.object({\n url: z.string().optional(),\n risk_level: z.string().optional(),\n categories: z.array(z.string()).optional(),\n});\n\n/** URL filtering report entry with URL, risk level, and categories. */\nexport type UrlfEntry = z.infer<typeof UrlfEntrySchema>;\n","import { z } from 'zod';\n\n/** Zod schema for an AIRS API error response. */\nexport const ErrorResponseSchema = z.object({\n status_code: z.number().optional(),\n message: z.string().optional(),\n error: z\n .object({\n message: z.string().optional(),\n })\n .passthrough()\n .optional(),\n retry_after: z\n .object({\n interval: z.number().optional(),\n unit: z.string().optional(),\n })\n .optional(),\n});\n\n/** AIRS API error response with optional retry-after guidance. */\nexport type ErrorResponse = z.infer<typeof ErrorResponseSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for DLP data profile configuration. */\nexport const DlpDataProfileSchema = z\n .object({\n profile_name: z.string(),\n active: z.boolean().optional(),\n })\n .passthrough();\n\n/** DLP data profile configuration. */\nexport type DlpDataProfile = z.infer<typeof DlpDataProfileSchema>;\n\n/** Zod schema for DLP configuration. */\nexport const DlpSchema = z\n .object({\n dlp_status: z.string().optional(),\n data_profiles: z.array(DlpDataProfileSchema).optional(),\n })\n .passthrough();\n\n/** DLP configuration with status and data profiles. */\nexport type Dlp = z.infer<typeof DlpSchema>;\n\n/** Zod schema for data leak detection settings. */\nexport const DataLeakDetectionSchema = z\n .object({\n 'data-leak-detection-status': z.string().optional(),\n dlp: DlpSchema.optional(),\n })\n .passthrough();\n\n/** Data leak detection settings. */\nexport type DataLeakDetection = z.infer<typeof DataLeakDetectionSchema>;\n\n/** Zod schema for application protection settings. */\nexport const AppProtectionSchema = z\n .object({\n 'prompt-injection': z.string().optional(),\n 'jailbreak-detection': z.string().optional(),\n })\n .passthrough();\n\n/** Application protection settings (prompt injection, jailbreak detection). */\nexport type AppProtection = z.infer<typeof AppProtectionSchema>;\n\n/** Zod schema for model protection settings. */\nexport const ModelProtectionSchema = z\n .object({\n 'model-denial-of-service': z.string().optional(),\n })\n .passthrough();\n\n/** Model protection settings (DoS protection). */\nexport type ModelProtection = z.infer<typeof ModelProtectionSchema>;\n\n/** Zod schema for agent protection settings. */\nexport const AgentProtectionSchema = z\n .object({\n 'malicious-agent-activity': z.string().optional(),\n })\n .passthrough();\n\n/** Agent protection settings (malicious agent activity detection). */\nexport type AgentProtection = z.infer<typeof AgentProtectionSchema>;\n\n/** Zod schema for latency configuration. */\nexport const LatencySchema = z\n .object({\n status: z.string().optional(),\n max_latency_ms: z.number().optional(),\n })\n .passthrough();\n\n/** Latency configuration for inline scanning. */\nexport type Latency = z.infer<typeof LatencySchema>;\n\n/** Zod schema for model configuration. */\nexport const ModelConfigurationSchema = z\n .object({\n latency: LatencySchema.optional(),\n })\n .passthrough();\n\n/** Model configuration including latency settings. */\nexport type ModelConfiguration = z.infer<typeof ModelConfigurationSchema>;\n\n/** Zod schema for the security profile policy. */\nexport const PolicySchema = z\n .object({\n 'data-leak-detection': DataLeakDetectionSchema.optional(),\n 'app-protection': AppProtectionSchema.optional(),\n 'model-protection': ModelProtectionSchema.optional(),\n 'agent-protection': AgentProtectionSchema.optional(),\n 'model-configuration': ModelConfigurationSchema.optional(),\n })\n .passthrough();\n\n/** Security profile policy containing all protection and configuration settings. */\nexport type Policy = z.infer<typeof PolicySchema>;\n\n/** Zod schema for an AIRS security profile. */\nexport const SecurityProfileSchema = z\n .object({\n profile_id: z.string().optional(),\n profile_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n policy: PolicySchema.optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n })\n .passthrough();\n\n/** AIRS security profile with name, policy, and audit metadata. */\nexport type SecurityProfile = z.infer<typeof SecurityProfileSchema>;\n\n/** Zod schema for a security profile create/update request. */\nexport const CreateSecurityProfileRequestSchema = z\n .object({\n profile_id: z.string().optional(),\n profile_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n policy: PolicySchema.optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n })\n .passthrough();\n\n/** Request body for creating or updating a security profile. */\nexport type CreateSecurityProfileRequest = z.infer<typeof CreateSecurityProfileRequestSchema>;\n\n/** Zod schema for a paginated security profile list response. */\nexport const SecurityProfileListResponseSchema = z\n .object({\n ai_profiles: z.array(SecurityProfileSchema),\n next_offset: z.number().optional(),\n })\n .passthrough();\n\n/** Paginated list of security profiles. */\nexport type SecurityProfileListResponse = z.infer<typeof SecurityProfileListResponseSchema>;\n\n/** Zod schema for a profile deletion response. */\nexport const DeleteProfileResponseSchema = z\n .object({\n message: z.string(),\n })\n .passthrough();\n\n/** Response from deleting a security profile. */\nexport type DeleteProfileResponse = z.infer<typeof DeleteProfileResponseSchema>;\n\n/** Zod schema for a profile deletion conflict (409). */\nexport const DeleteProfileConflictSchema = z\n .object({\n message: z.string(),\n payload: z.array(\n z\n .object({\n policy_id: z.string(),\n policy_name: z.string(),\n priority: z.number(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/** Conflict response when deleting a profile referenced by policies. */\nexport type DeleteProfileConflict = z.infer<typeof DeleteProfileConflictSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for an AIRS custom topic. */\nexport const CustomTopicSchema = z\n .object({\n topic_id: z.string().optional(),\n topic_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n description: z.string().optional(),\n examples: z.array(z.string()).optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n created_ts: z.string().optional(),\n })\n .passthrough();\n\n/** AIRS custom topic with name, description, examples, and audit metadata. */\nexport type CustomTopic = z.infer<typeof CustomTopicSchema>;\n\n/** Zod schema for a custom topic create/update request. */\nexport const CreateCustomTopicRequestSchema = z\n .object({\n topic_id: z.string().optional(),\n topic_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n description: z.string().optional(),\n examples: z.array(z.string()).optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n created_ts: z.string().optional(),\n })\n .passthrough();\n\n/** Request body for creating or updating a custom topic. */\nexport type CreateCustomTopicRequest = z.infer<typeof CreateCustomTopicRequestSchema>;\n\n/** Zod schema for a paginated custom topic list response. */\nexport const CustomTopicListResponseSchema = z\n .object({\n custom_topics: z.array(CustomTopicSchema),\n next_offset: z.number().optional(),\n })\n .passthrough();\n\n/** Paginated list of custom topics. */\nexport type CustomTopicListResponse = z.infer<typeof CustomTopicListResponseSchema>;\n\n/** Zod schema for a topic deletion response. */\nexport const DeleteTopicResponseSchema = z\n .object({\n message: z.string(),\n })\n .passthrough();\n\n/** Response from deleting a custom topic. */\nexport type DeleteTopicResponse = z.infer<typeof DeleteTopicResponseSchema>;\n\n/** Zod schema for a topic deletion conflict (409). */\nexport const DeleteTopicConflictSchema = z\n .object({\n message: z.string(),\n payload: z.array(\n z\n .object({\n profile_id: z.string(),\n profile_name: z.string(),\n revision: z.number(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/** Conflict response when deleting a topic referenced by profiles. */\nexport type DeleteTopicConflict = z.infer<typeof DeleteTopicConflictSchema>;\n","// src/models/model-security-enums.ts — typed enums for AIRS Model Security API values\n\n/** Error codes returned by the Model Security scan service. */\nexport const ErrorCodes = {\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n SCAN_ERROR: 'SCAN_ERROR',\n INVALID_RESPONSE: 'INVALID_RESPONSE',\n ACCESS_DENIED: 'ACCESS_DENIED',\n MISSING_CREDENTIALS: 'MISSING_CREDENTIALS',\n NO_SUCH_KEY: 'NO_SUCH_KEY',\n NO_SUCH_BUCKET: 'NO_SUCH_BUCKET',\n INVALID_BUCKET_NAME: 'INVALID_BUCKET_NAME',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n INVALID_OBJECT_STATE: 'INVALID_OBJECT_STATE',\n UNKNOWN_REMOTE_SERVICE_ERROR: 'UNKNOWN_REMOTE_SERVICE_ERROR',\n UNSUPPORTED_REMOTE_STORAGE: 'UNSUPPORTED_REMOTE_STORAGE',\n MISSING_ARTIFACTS: 'MISSING_ARTIFACTS',\n WORKER_ERROR: 'WORKER_ERROR',\n POLICY_EVAL_ERROR: 'POLICY_EVAL_ERROR',\n} as const;\n\n/** Union type of all possible error code values. */\nexport type ErrorCodes = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n\n/** Evaluation outcome for a model security scan. */\nexport const EvalOutcome = {\n PENDING: 'PENDING',\n ALLOWED: 'ALLOWED',\n BLOCKED: 'BLOCKED',\n ERROR: 'ERROR',\n} as const;\n\n/** Union type of all possible evaluation outcome values. */\nexport type EvalOutcome = (typeof EvalOutcome)[keyof typeof EvalOutcome];\n\n/** Results of individual file scanning. */\nexport const FileScanResult = {\n SKIPPED: 'SKIPPED',\n SUCCESS: 'SUCCESS',\n ERROR: 'ERROR',\n FAILED: 'FAILED',\n} as const;\n\n/** Union type of all possible file scan result values. */\nexport type FileScanResult = (typeof FileScanResult)[keyof typeof FileScanResult];\n\n/** File type in the scanned model tree. */\nexport const FileType = {\n DIRECTORY: 'DIRECTORY',\n FILE: 'FILE',\n} as const;\n\n/** Union type of all possible file type values. */\nexport type FileType = (typeof FileType)[keyof typeof FileType];\n\n/** Status of a model file scan. */\nexport const ModelScanStatus = {\n SCANNED: 'SCANNED',\n SKIPPED: 'SKIPPED',\n ERROR: 'ERROR',\n} as const;\n\n/** Union type of all possible model scan status values. */\nexport type ModelScanStatus = (typeof ModelScanStatus)[keyof typeof ModelScanStatus];\n\n/** Results of rule evaluation. */\nexport const RuleEvaluationResult = {\n PASSED: 'PASSED',\n FAILED: 'FAILED',\n ERROR: 'ERROR',\n} as const;\n\n/** Union type of all possible rule evaluation result values. */\nexport type RuleEvaluationResult = (typeof RuleEvaluationResult)[keyof typeof RuleEvaluationResult];\n\n/** Rule evaluation states. */\nexport const RuleState = {\n DISABLED: 'DISABLED',\n ALLOWING: 'ALLOWING',\n BLOCKING: 'BLOCKING',\n} as const;\n\n/** Union type of all possible rule state values. */\nexport type RuleState = (typeof RuleState)[keyof typeof RuleState];\n\n/** Origin of the model security scan. */\nexport const ScanOrigin = {\n MODEL_SECURITY_SDK: 'MODEL_SECURITY_SDK',\n HUGGING_FACE: 'HUGGING_FACE',\n} as const;\n\n/** Union type of all possible scan origin values. */\nexport type ScanOrigin = (typeof ScanOrigin)[keyof typeof ScanOrigin];\n\n/** Fields available for date-based sorting. */\nexport const SortByDateField = {\n CREATED_AT: 'created_at',\n UPDATED_AT: 'updated_at',\n} as const;\n\n/** Union type of all possible sort-by-date field values. */\nexport type SortByDateField = (typeof SortByDateField)[keyof typeof SortByDateField];\n\n/** Fields available for file-based sorting. */\nexport const SortByFileField = {\n PATH: 'path',\n TYPE: 'type',\n} as const;\n\n/** Union type of all possible sort-by-file field values. */\nexport type SortByFileField = (typeof SortByFileField)[keyof typeof SortByFileField];\n\n/** Sort direction for list queries. */\nexport const SortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\n/** Union type of all possible sort direction values. */\nexport type SortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\n/** Source type for model origin. */\nexport const SourceType = {\n LOCAL: 'LOCAL',\n HUGGING_FACE: 'HUGGING_FACE',\n S3: 'S3',\n GCS: 'GCS',\n AZURE: 'AZURE',\n ARTIFACTORY: 'ARTIFACTORY',\n GITLAB: 'GITLAB',\n ALL: 'ALL',\n} as const;\n\n/** Union type of all possible source type values. */\nexport type SourceType = (typeof SourceType)[keyof typeof SourceType];\n\n/**\n * Threat category codes for model scan issues.\n * Should be in sync with modelscan-pai issue codes.\n */\nexport const ThreatCategory = {\n PAIT_ARV_100: 'PAIT-ARV-100',\n PAIT_GGUF_100: 'PAIT-GGUF-100',\n PAIT_GGUF_101: 'PAIT-GGUF-101',\n PAIT_KERAS_100: 'PAIT-KERAS-100',\n PAIT_KERAS_101: 'PAIT-KERAS-101',\n PAIT_KERAS_102: 'PAIT-KERAS-102',\n PAIT_JOBLIB_100: 'PAIT-JOBLIB-100',\n PAIT_JOBLIB_101: 'PAIT-JOBLIB-101',\n PAIT_PKL_100: 'PAIT-PKL-100',\n PAIT_PKL_101: 'PAIT-PKL-101',\n PAIT_PYTCH_100: 'PAIT-PYTCH-100',\n PAIT_PYTCH_101: 'PAIT-PYTCH-101',\n PAIT_EXDIR_100: 'PAIT-EXDIR-100',\n PAIT_EXDIR_101: 'PAIT-EXDIR-101',\n PAIT_ONNX_200: 'PAIT-ONNX-200',\n PAIT_TF_200: 'PAIT-TF-200',\n PAIT_LMAFL_300: 'PAIT-LMAFL-300',\n PAIT_LITERT_300: 'PAIT-LITERT-300',\n PAIT_LITERT_301: 'PAIT-LITERT-301',\n PAIT_LITERT_302: 'PAIT-LITERT-302',\n PAIT_KERAS_300: 'PAIT-KERAS-300',\n PAIT_KERAS_301: 'PAIT-KERAS-301',\n PAIT_TCHST_300: 'PAIT-TCHST-300',\n PAIT_TCHST_301: 'PAIT-TCHST-301',\n PAIT_TF_300: 'PAIT-TF-300',\n PAIT_TF_301: 'PAIT-TF-301',\n PAIT_TF_302: 'PAIT-TF-302',\n PAIT_TMT_300: 'PAIT-TMT-300',\n PAIT_TMT_301: 'PAIT-TMT-301',\n UNAPPROVED_FORMATS: 'UNAPPROVED_FORMATS',\n} as const;\n\n/** Union type of all possible threat category values. */\nexport type ThreatCategory = (typeof ThreatCategory)[keyof typeof ThreatCategory];\n\n/** Security group states. */\nexport const ModelSecurityGroupState = {\n PENDING: 'PENDING',\n ACTIVE: 'ACTIVE',\n} as const;\n\n/** Union type of all possible model security group state values. */\nexport type ModelSecurityGroupState =\n (typeof ModelSecurityGroupState)[keyof typeof ModelSecurityGroupState];\n\n/** Rule types for different scanning approaches. */\nexport const RuleType = {\n METADATA: 'METADATA',\n ARTIFACT: 'ARTIFACT',\n} as const;\n\n/** Union type of all possible rule type values. */\nexport type RuleType = (typeof RuleType)[keyof typeof RuleType];\n\n/** Editable field types used by rule structure for UI rendering. */\nexport const RuleEditableFieldType = {\n SELECT: 'SELECT',\n LIST: 'LIST',\n} as const;\n\n/** Union type of all possible rule editable field type values. */\nexport type RuleEditableFieldType =\n (typeof RuleEditableFieldType)[keyof typeof RuleEditableFieldType];\n\n/** Allowed keys for rule field values configuration. */\nexport const RuleFieldValueKey = {\n APPROVED_FORMATS: 'approved_formats',\n APPROVED_LOCATIONS: 'approved_locations',\n APPROVED_LICENSES: 'approved_licenses',\n DENY_ORGS: 'deny_orgs',\n DENIED_ORG_MODELS: 'denied_org_models',\n APPROVED_ORG_MODELS: 'approved_org_models',\n} as const;\n\n/** Union type of all possible rule field value key values. */\nexport type RuleFieldValueKey = (typeof RuleFieldValueKey)[keyof typeof RuleFieldValueKey];\n","// src/models/model-security.ts — Zod schemas + types for AIRS Model Security API\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Shared / utility schemas\n// ---------------------------------------------------------------------------\n\n/** Zod schema for model security pagination metadata. */\nexport const ModelSecurityPaginationSchema = z\n .object({\n total_items: z.number().int().nullable().optional(),\n })\n .passthrough();\n\n/** Pagination metadata for model security list responses. */\nexport type ModelSecurityPagination = z.infer<typeof ModelSecurityPaginationSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Labels\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single label key-value pair. */\nexport const LabelSchema = z.object({\n key: z.string(),\n value: z.string(),\n});\n\n/** A single label key-value pair. */\nexport type Label = z.infer<typeof LabelSchema>;\n\n/** Zod schema for creating/setting labels on a scan. */\nexport const LabelsCreateRequestSchema = z.object({\n labels: z.array(LabelSchema),\n});\n\n/** Request body for creating or setting scan labels. */\nexport type LabelsCreateRequest = z.infer<typeof LabelsCreateRequestSchema>;\n\n/** Zod schema for labels response (empty body on success). */\nexport const LabelsResponseSchema = z.object({}).passthrough();\n\n/** Response from label create/set operations. */\nexport type LabelsResponse = z.infer<typeof LabelsResponseSchema>;\n\n/** Zod schema for a paginated list of label keys. */\nexport const LabelKeyListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n keys: z.array(z.string()),\n })\n .passthrough();\n\n/** Paginated list of distinct label keys. */\nexport type LabelKeyList = z.infer<typeof LabelKeyListSchema>;\n\n/** Zod schema for a paginated list of label values. */\nexport const LabelValueListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n values: z.array(z.string()),\n })\n .passthrough();\n\n/** Paginated list of distinct label values. */\nexport type LabelValueList = z.infer<typeof LabelValueListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Eval summary\n// ---------------------------------------------------------------------------\n\n/** Zod schema for evaluation summary counts. */\nexport const EvalSummarySchema = z\n .object({\n rules_failed: z.number().int().optional().default(0),\n rules_passed: z.number().int().optional().default(0),\n total_rules: z.number().int().optional().default(0),\n })\n .passthrough();\n\n/** Summary of rule evaluation pass/fail counts. */\nexport type EvalSummary = z.infer<typeof EvalSummarySchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Model scan issues & file scan data\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single issue detected during model scanning. */\nexport const ModelScanIssueSchema = z\n .object({\n description: z.string(),\n source: z.string(),\n threat: z.string().nullable().optional(),\n module: z.string().nullable().optional(),\n operator: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** A single issue detected during model file scanning. */\nexport type ModelScanIssue = z.infer<typeof ModelScanIssueSchema>;\n\n/** Zod schema for per-file scan data within a scan request. */\nexport const FileScanDataSchema = z\n .object({\n file_path: z.string(),\n modelscan_status: z.string(),\n blob_id: z.string(),\n error_message: z.string().nullable().optional(),\n formats: z.array(z.string()).nullable().optional(),\n issues_detected: z.array(ModelScanIssueSchema).nullable().optional(),\n })\n .passthrough();\n\n/** Per-file scan data included in a scan creation request. */\nexport type FileScanData = z.infer<typeof FileScanDataSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan details (nested in create request)\n// ---------------------------------------------------------------------------\n\n/** Zod schema for detailed scan results submitted with a scan creation. */\nexport const ScanDetailsSchema = z.object({\n scanner_version: z.string(),\n time_started: z.string(),\n files: z.array(FileScanDataSchema),\n total_files_scanned: z.number().int(),\n total_files_skipped: z.number().int(),\n model_formats: z.array(z.string()),\n model_size_bytes: z.number().int(),\n scan_duration_ms: z.number().int(),\n error_code: z.string().nullable().optional(),\n error_message: z.string().nullable().optional(),\n});\n\n/** Detailed scan results submitted with a scan creation request. */\nexport type ScanDetails = z.infer<typeof ScanDetailsSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan create request\n// ---------------------------------------------------------------------------\n\n/** Zod schema for creating a new model security scan. */\nexport const ScanCreateRequestSchema = z.object({\n model_uri: z.string(),\n security_group_uuid: z.string(),\n scan_origin: z.string(),\n allow_patterns: z.array(z.string()).nullable().optional(),\n ignore_patterns: z.array(z.string()).nullable().optional(),\n labels: z.array(LabelSchema).nullable().optional(),\n model_author: z.string().nullable().optional(),\n model_name: z.string().nullable().optional(),\n model_version: z.string().nullable().optional(),\n scan_details: ScanDetailsSchema.nullable().optional(),\n});\n\n/** Request body for creating a new model security scan. */\nexport type ScanCreateRequest = z.infer<typeof ScanCreateRequestSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan base response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for the base scan response returned by the API. */\nexport const ScanBaseResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n model_uri: z.string(),\n owner: z.string(),\n scan_origin: z.string(),\n security_group_uuid: z.string(),\n security_group_name: z.string(),\n model_version_uuid: z.string(),\n eval_outcome: z.string(),\n source_type: z.string(),\n created_by: z.string().nullable().optional(),\n enabled_rule_count_snapshot: z.number().int().nullable().optional(),\n error_code: z.string().nullable().optional(),\n error_message: z.string().nullable().optional(),\n eval_summary: EvalSummarySchema.nullable().optional(),\n labels: z.array(LabelSchema).optional(),\n model_formats: z.array(z.string()).nullable().optional(),\n scanner_version: z.string().nullable().optional(),\n time_started: z.string().nullable().optional(),\n total_files_scanned: z.number().int().nullable().optional(),\n total_files_skipped: z.number().int().nullable().optional(),\n })\n .passthrough();\n\n/** Base scan response from the Model Security API. */\nexport type ScanBaseResponse = z.infer<typeof ScanBaseResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan list\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a paginated list of scans. */\nexport const ScanListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n scans: z.array(ScanBaseResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security scans. */\nexport type ScanList = z.infer<typeof ScanListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — File response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a file entry in the scanned model tree. */\nexport const FileResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n path: z.string(),\n parent_path: z.string(),\n type: z.string(),\n result: z.string(),\n model_version_uuid: z.string(),\n blob_id: z.string().nullable().optional(),\n formats: z.array(z.string()).nullable().optional(),\n scan_uuid: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** A file entry in the scanned model tree. */\nexport type FileResponse = z.infer<typeof FileResponseSchema>;\n\n/** Zod schema for a paginated list of files. */\nexport const FileListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n files: z.array(FileResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of scanned model files. */\nexport type FileList = z.infer<typeof FileListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Rule evaluation response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single rule evaluation result. */\nexport const RuleEvaluationResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n result: z.string(),\n violation_count: z.number().int(),\n rule_instance_uuid: z.string(),\n scan_uuid: z.string(),\n rule_name: z.string(),\n rule_description: z.string(),\n rule_instance_state: z.string(),\n })\n .passthrough();\n\n/** A single rule evaluation result for a scan. */\nexport type RuleEvaluationResponse = z.infer<typeof RuleEvaluationResponseSchema>;\n\n/** Zod schema for a paginated list of rule evaluations. */\nexport const RuleEvaluationListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n evaluations: z.array(RuleEvaluationResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of rule evaluations. */\nexport type RuleEvaluationList = z.infer<typeof RuleEvaluationListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Violation response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single violation response. */\nexport const ViolationResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.string(),\n rule_instance_uuid: z.string(),\n rule_name: z.string(),\n rule_description: z.string(),\n rule_instance_state: z.string(),\n file: z.string().nullable().optional(),\n hash: z.string().nullable().optional(),\n module: z.string().nullable().optional(),\n operator: z.string().nullable().optional(),\n threat: z.string().nullable().optional(),\n threat_description: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** A single violation with detailed rule information. */\nexport type ViolationResponse = z.infer<typeof ViolationResponseSchema>;\n\n/** Zod schema for a paginated list of violations. */\nexport const ViolationListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n violations: z.array(ViolationResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of rule violations. */\nexport type ViolationList = z.infer<typeof ViolationListSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Rule editable field & remediation\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a dropdown option on a rule editable field. */\nexport const RuleEditableFieldDropdownSchema = z\n .object({\n value: z.string(),\n label: z.string(),\n })\n .passthrough();\n\n/** A dropdown option for a rule editable field. */\nexport type RuleEditableFieldDropdown = z.infer<typeof RuleEditableFieldDropdownSchema>;\n\n/** Zod schema for a rule editable field definition. */\nexport const RuleEditableFieldSchema = z\n .object({\n attribute_name: z.string(),\n type: z.string(),\n display_name: z.string(),\n display_type: z.string(),\n description: z.string().nullable().optional(),\n dropdown_values: z.array(RuleEditableFieldDropdownSchema).nullable().optional(),\n })\n .passthrough();\n\n/** A rule editable field definition for UI rendering. */\nexport type RuleEditableField = z.infer<typeof RuleEditableFieldSchema>;\n\n/** Zod schema for rule remediation steps. */\nexport const RuleRemediationSchema = z\n .object({\n description: z.string(),\n steps: z.array(z.string()),\n url: z.string(),\n })\n .passthrough();\n\n/** Remediation steps for a security rule. */\nexport type RuleRemediation = z.infer<typeof RuleRemediationSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Rule configuration (used in group creation)\n// ---------------------------------------------------------------------------\n\n/** Zod schema for rule configuration during security group creation. */\nexport const RuleConfigurationSchema = z\n .object({\n field_values: z.record(z.unknown()).optional(),\n state: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** Configuration for customizing a rule during security group creation. */\nexport type RuleConfiguration = z.infer<typeof RuleConfigurationSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Model security rule response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a model security rule definition. */\nexport const ModelSecurityRuleResponseSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n description: z.string(),\n rule_type: z.string(),\n compatible_sources: z.array(z.string()),\n default_state: z.string(),\n remediation: RuleRemediationSchema,\n editable_fields: z.array(RuleEditableFieldSchema),\n constant_values: z.record(z.unknown()),\n default_values: z.record(z.unknown()),\n })\n .passthrough();\n\n/** A model security rule definition. */\nexport type ModelSecurityRuleResponse = z.infer<typeof ModelSecurityRuleResponseSchema>;\n\n/** Zod schema for a paginated list of security rules. */\nexport const ListModelSecurityRulesResponseSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n rules: z.array(ModelSecurityRuleResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security rules. */\nexport type ListModelSecurityRulesResponse = z.infer<typeof ListModelSecurityRulesResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Rule instance\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a model security rule instance response. */\nexport const ModelSecurityRuleInstanceResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n security_group_uuid: z.string(),\n security_rule_uuid: z.string(),\n state: z.string(),\n rule: ModelSecurityRuleResponseSchema,\n field_values: z.record(z.unknown()).optional(),\n })\n .passthrough();\n\n/** An instantiated rule that gets evaluated against scans. */\nexport type ModelSecurityRuleInstanceResponse = z.infer<\n typeof ModelSecurityRuleInstanceResponseSchema\n>;\n\n/** Zod schema for updating a rule instance. */\nexport const ModelSecurityRuleInstanceUpdateRequestSchema = z.object({\n security_group_uuid: z.string(),\n state: z.string().nullable().optional(),\n field_values: z.record(z.unknown()).nullable().optional(),\n});\n\n/** Request body for updating a rule instance. */\nexport type ModelSecurityRuleInstanceUpdateRequest = z.infer<\n typeof ModelSecurityRuleInstanceUpdateRequestSchema\n>;\n\n/** Zod schema for a paginated list of rule instances. */\nexport const ListModelSecurityRuleInstancesResponseSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n rule_instances: z.array(ModelSecurityRuleInstanceResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security rule instances. */\nexport type ListModelSecurityRuleInstancesResponse = z.infer<\n typeof ListModelSecurityRuleInstancesResponseSchema\n>;\n\n// ---------------------------------------------------------------------------\n// Management — Security group\n// ---------------------------------------------------------------------------\n\n/** Zod schema for creating a model security group. */\nexport const ModelSecurityGroupCreateRequestSchema = z.object({\n name: z.string(),\n source_type: z.string(),\n description: z.string().optional().default(''),\n rule_configurations: z.record(RuleConfigurationSchema).optional(),\n});\n\n/** Request body for creating a new model security group. */\nexport type ModelSecurityGroupCreateRequest = z.infer<typeof ModelSecurityGroupCreateRequestSchema>;\n\n/** Zod schema for a model security group response. */\nexport const ModelSecurityGroupResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n name: z.string(),\n description: z.string(),\n source_type: z.string(),\n state: z.string(),\n is_tombstone: z.boolean(),\n })\n .passthrough();\n\n/** A model security group with its configuration and state. */\nexport type ModelSecurityGroupResponse = z.infer<typeof ModelSecurityGroupResponseSchema>;\n\n/** Zod schema for updating a model security group. */\nexport const ModelSecurityGroupUpdateRequestSchema = z.object({\n name: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n});\n\n/** Request body for updating a model security group. */\nexport type ModelSecurityGroupUpdateRequest = z.infer<typeof ModelSecurityGroupUpdateRequestSchema>;\n\n/** Zod schema for a paginated list of security groups. */\nexport const ListModelSecurityGroupsResponseSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n security_groups: z.array(ModelSecurityGroupResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security groups. */\nexport type ListModelSecurityGroupsResponse = z.infer<typeof ListModelSecurityGroupsResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — PyPI auth\n// ---------------------------------------------------------------------------\n\n/** Zod schema for PyPI authentication response. */\nexport const PyPIAuthResponseSchema = z\n .object({\n url: z.string(),\n expires_at: z.string(),\n })\n .passthrough();\n\n/** PyPI authentication response with Google Artifact Registry URL. */\nexport type PyPIAuthResponse = z.infer<typeof PyPIAuthResponseSchema>;\n","// src/models/red-team-enums.ts — typed enums for AIRS Red Teaming API values\n\n/** API endpoint accessibility type. */\nexport const ApiEndpointType = {\n PUBLIC: 'PUBLIC',\n PRIVATE: 'PRIVATE',\n NETWORK_BROKER: 'NETWORK_BROKER',\n} as const;\nexport type ApiEndpointType = (typeof ApiEndpointType)[keyof typeof ApiEndpointType];\n\n/** Attack lifecycle status. */\nexport const AttackStatus = {\n INIT: 'INIT',\n ATTACK: 'ATTACK',\n DETECTION: 'DETECTION',\n REPORT: 'REPORT',\n COMPLETED: 'COMPLETED',\n FAILED: 'FAILED',\n} as const;\nexport type AttackStatus = (typeof AttackStatus)[keyof typeof AttackStatus];\n\n/** Attack type classification. */\nexport const AttackType = {\n NORMAL: 'NORMAL',\n CUSTOM: 'CUSTOM',\n} as const;\nexport type AttackType = (typeof AttackType)[keyof typeof AttackType];\n\n/** Authentication type for target connections. */\nexport const AuthType = {\n OAUTH: 'OAUTH',\n ACCESS_TOKEN: 'ACCESS_TOKEN',\n} as const;\nexport type AuthType = (typeof AuthType)[keyof typeof AuthType];\n\n/** Brand risk subcategories. */\nexport const BrandSubCategory = {\n COMPETITOR_ENDORSEMENTS: 'COMPETITOR_ENDORSEMENTS',\n BRAND_TARNISHING_SELF_CRITICISM: 'BRAND_TARNISHING_SELF_CRITICISM',\n DISCRIMINATING_CLAIMS: 'DISCRIMINATING_CLAIMS',\n POLITICAL_ENDORSEMENTS: 'POLITICAL_ENDORSEMENTS',\n} as const;\nexport type BrandSubCategory = (typeof BrandSubCategory)[keyof typeof BrandSubCategory];\n\n/** Compliance framework subcategories. */\nexport const ComplianceSubCategory = {\n OWASP: 'OWASP',\n MITRE_ATLAS: 'MITRE_ATLAS',\n NIST: 'NIST',\n DASF_V2: 'DASF_V2',\n} as const;\nexport type ComplianceSubCategory =\n (typeof ComplianceSubCategory)[keyof typeof ComplianceSubCategory];\n\n/** Whether a scan counts toward quota. */\nexport const CountedQuotaEnum = {\n HELD: 'HELD',\n COUNTED: 'COUNTED',\n NOT_COUNTED: 'NOT_COUNTED',\n} as const;\nexport type CountedQuotaEnum = (typeof CountedQuotaEnum)[keyof typeof CountedQuotaEnum];\n\n/** Date range filter for dashboard queries. */\nexport const DateRangeFilter = {\n LAST_7_DAYS: 'LAST_7_DAYS',\n LAST_15_DAYS: 'LAST_15_DAYS',\n LAST_30_DAYS: 'LAST_30_DAYS',\n ALL: 'ALL',\n} as const;\nexport type DateRangeFilter = (typeof DateRangeFilter)[keyof typeof DateRangeFilter];\n\n/** Error source for error log entries. */\nexport const ErrorSource = {\n TARGET: 'TARGET',\n JOB: 'JOB',\n SYSTEM: 'SYSTEM',\n VALIDATION: 'VALIDATION',\n TARGET_PROFILING: 'TARGET_PROFILING',\n} as const;\nexport type ErrorSource = (typeof ErrorSource)[keyof typeof ErrorSource];\n\n/** Red Team error type classification (prefixed to avoid conflict with SDK ErrorType). */\nexport const RedTeamErrorType = {\n CONTENT_FILTER: 'CONTENT_FILTER',\n RATE_LIMIT: 'RATE_LIMIT',\n AUTHENTICATION: 'AUTHENTICATION',\n NETWORK: 'NETWORK',\n VALIDATION: 'VALIDATION',\n NETWORK_CHANNEL: 'NETWORK_CHANNEL',\n UNKNOWN: 'UNKNOWN',\n} as const;\nexport type RedTeamErrorType = (typeof RedTeamErrorType)[keyof typeof RedTeamErrorType];\n\n/** Report download file format. */\nexport const FileFormat = {\n CSV: 'CSV',\n JSON: 'JSON',\n ALL: 'ALL',\n} as const;\nexport type FileFormat = (typeof FileFormat)[keyof typeof FileFormat];\n\n/** Dynamic scan goal type. */\nexport const GoalType = {\n BASE: 'BASE',\n TOOL_MISUSE: 'TOOL_MISUSE',\n GOAL_MANIPULATION: 'GOAL_MANIPULATION',\n} as const;\nexport type GoalType = (typeof GoalType)[keyof typeof GoalType];\n\n/** Goal type query parameter filter. */\nexport const GoalTypeQueryParam = {\n AGENT: 'AGENT',\n HUMAN_AUGMENTED: 'HUMAN_AUGMENTED',\n} as const;\nexport type GoalTypeQueryParam = (typeof GoalTypeQueryParam)[keyof typeof GoalTypeQueryParam];\n\n/** Guardrail action for runtime security policies. */\nexport const GuardrailAction = {\n ALLOW: 'ALLOW',\n BLOCK: 'BLOCK',\n} as const;\nexport type GuardrailAction = (typeof GuardrailAction)[keyof typeof GuardrailAction];\n\n/** Red team scan job status. */\nexport const JobStatus = {\n INIT: 'INIT',\n QUEUED: 'QUEUED',\n RUNNING: 'RUNNING',\n COMPLETED: 'COMPLETED',\n PARTIALLY_COMPLETE: 'PARTIALLY_COMPLETE',\n FAILED: 'FAILED',\n ABORTED: 'ABORTED',\n} as const;\nexport type JobStatus = (typeof JobStatus)[keyof typeof JobStatus];\n\n/** Job status values available for filtering (excludes INIT). */\nexport const JobStatusFilter = {\n QUEUED: 'QUEUED',\n RUNNING: 'RUNNING',\n COMPLETED: 'COMPLETED',\n PARTIALLY_COMPLETE: 'PARTIALLY_COMPLETE',\n FAILED: 'FAILED',\n ABORTED: 'ABORTED',\n} as const;\nexport type JobStatusFilter = (typeof JobStatusFilter)[keyof typeof JobStatusFilter];\n\n/** Red team scan job type. */\nexport const JobType = {\n STATIC: 'STATIC',\n DYNAMIC: 'DYNAMIC',\n CUSTOM: 'CUSTOM',\n} as const;\nexport type JobType = (typeof JobType)[keyof typeof JobType];\n\n/** Runtime security policy type. */\nexport const PolicyType = {\n PROMPT_INJECTION: 'PROMPT_INJECTION',\n TOXIC_CONTENT: 'TOXIC_CONTENT',\n CUSTOM_TOPIC_GUARDRAILS: 'CUSTOM_TOPIC_GUARDRAILS',\n MALICIOUS_CODE_DETECTION: 'MALICIOUS_CODE_DETECTION',\n MALICIOUS_URL_DETECTION: 'MALICIOUS_URL_DETECTION',\n SENSITIVE_DATA_PROTECTION: 'SENSITIVE_DATA_PROTECTION',\n} as const;\nexport type PolicyType = (typeof PolicyType)[keyof typeof PolicyType];\n\n/** Target profiling status. */\nexport const ProfilingStatus = {\n INIT: 'INIT',\n QUEUED: 'QUEUED',\n IN_PROGRESS: 'IN_PROGRESS',\n COMPLETED: 'COMPLETED',\n FAILED: 'FAILED',\n} as const;\nexport type ProfilingStatus = (typeof ProfilingStatus)[keyof typeof ProfilingStatus];\n\n/** Red Team risk category (prefixed to avoid conflict with SDK Category). */\nexport const RedTeamCategory = {\n SECURITY: 'SECURITY',\n SAFETY: 'SAFETY',\n COMPLIANCE: 'COMPLIANCE',\n BRAND: 'BRAND',\n} as const;\nexport type RedTeamCategory = (typeof RedTeamCategory)[keyof typeof RedTeamCategory];\n\n/** Target response mode. */\nexport const ResponseMode = {\n REST: 'REST',\n STREAMING: 'STREAMING',\n} as const;\nexport type ResponseMode = (typeof ResponseMode)[keyof typeof ResponseMode];\n\n/** Risk rating levels. */\nexport const RiskRating = {\n LOW: 'LOW',\n MEDIUM: 'MEDIUM',\n HIGH: 'HIGH',\n CRITICAL: 'CRITICAL',\n} as const;\nexport type RiskRating = (typeof RiskRating)[keyof typeof RiskRating];\n\n/** Safety risk subcategories. */\nexport const SafetySubCategory = {\n BIAS: 'BIAS',\n CBRN: 'CBRN',\n CYBERCRIME: 'CYBERCRIME',\n DRUGS: 'DRUGS',\n HATE_TOXIC_ABUSE: 'HATE_TOXIC_ABUSE',\n NON_VIOLENT_CRIMES: 'NON_VIOLENT_CRIMES',\n POLITICAL: 'POLITICAL',\n SELF_HARM: 'SELF_HARM',\n SEXUAL: 'SEXUAL',\n VIOLENT_CRIMES_WEAPONS: 'VIOLENT_CRIMES_WEAPONS',\n} as const;\nexport type SafetySubCategory = (typeof SafetySubCategory)[keyof typeof SafetySubCategory];\n\n/** Security risk subcategories. */\nexport const SecuritySubCategory = {\n ADVERSARIAL_SUFFIX: 'ADVERSARIAL_SUFFIX',\n EVASION: 'EVASION',\n INDIRECT_PROMPT_INJECTION: 'INDIRECT_PROMPT_INJECTION',\n JAILBREAK: 'JAILBREAK',\n MULTI_TURN: 'MULTI_TURN',\n PROMPT_INJECTION: 'PROMPT_INJECTION',\n REMOTE_CODE_EXECUTION: 'REMOTE_CODE_EXECUTION',\n SYSTEM_PROMPT_LEAK: 'SYSTEM_PROMPT_LEAK',\n TOOL_LEAK: 'TOOL_LEAK',\n MALWARE_GENERATION: 'MALWARE_GENERATION',\n} as const;\nexport type SecuritySubCategory = (typeof SecuritySubCategory)[keyof typeof SecuritySubCategory];\n\n/** Severity filter levels. */\nexport const SeverityFilter = {\n LOW: 'LOW',\n MEDIUM: 'MEDIUM',\n HIGH: 'HIGH',\n CRITICAL: 'CRITICAL',\n} as const;\nexport type SeverityFilter = (typeof SeverityFilter)[keyof typeof SeverityFilter];\n\n/** Attack status query parameter filter. */\nexport const StatusQueryParam = {\n SUCCESSFUL: 'SUCCESSFUL',\n FAILED: 'FAILED',\n} as const;\nexport type StatusQueryParam = (typeof StatusQueryParam)[keyof typeof StatusQueryParam];\n\n/** Dynamic scan stream type. */\nexport const StreamType = {\n NORMAL: 'NORMAL',\n ADVERSARIAL: 'ADVERSARIAL',\n} as const;\nexport type StreamType = (typeof StreamType)[keyof typeof StreamType];\n\n/** Target connection provider type. */\nexport const TargetConnectionType = {\n DATABRICKS: 'DATABRICKS',\n BEDROCK: 'BEDROCK',\n OPENAI: 'OPENAI',\n HUGGING_FACE: 'HUGGING_FACE',\n CUSTOM: 'CUSTOM',\n REST: 'REST',\n STREAMING: 'STREAMING',\n} as const;\nexport type TargetConnectionType = (typeof TargetConnectionType)[keyof typeof TargetConnectionType];\n\n/** Target lifecycle status. */\nexport const TargetStatus = {\n DRAFT: 'DRAFT',\n VALIDATING: 'VALIDATING',\n VALIDATED: 'VALIDATED',\n ACTIVE: 'ACTIVE',\n INACTIVE: 'INACTIVE',\n FAILED: 'FAILED',\n PENDING_AUTH: 'PENDING_AUTH',\n} as const;\nexport type TargetStatus = (typeof TargetStatus)[keyof typeof TargetStatus];\n\n/** Target classification type. */\nexport const TargetType = {\n APPLICATION: 'APPLICATION',\n AGENT: 'AGENT',\n MODEL: 'MODEL',\n} as const;\nexport type TargetType = (typeof TargetType)[keyof typeof TargetType];\n","// src/models/red-team.ts — Zod schemas + types for AIRS Red Teaming API\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Shared / utility schemas\n// ---------------------------------------------------------------------------\n\nexport const RedTeamPaginationSchema = z\n .object({ total_items: z.number().int().nullable().optional() })\n .passthrough();\nexport type RedTeamPagination = z.infer<typeof RedTeamPaginationSchema>;\n\nexport const CountByNameSchema = z.object({ name: z.string(), count: z.number().int() });\nexport type CountByName = z.infer<typeof CountByNameSchema>;\n\nexport const ValidationErrorSchema = z.object({\n loc: z.array(z.union([z.string(), z.number()])),\n msg: z.string(),\n type: z.string(),\n});\nexport type ValidationError = z.infer<typeof ValidationErrorSchema>;\n\nexport const HTTPValidationErrorSchema = z\n .object({ detail: z.array(ValidationErrorSchema).optional() })\n .passthrough();\nexport type HTTPValidationError = z.infer<typeof HTTPValidationErrorSchema>;\n\n// ---------------------------------------------------------------------------\n// Target context schemas (shared between data plane & management)\n// ---------------------------------------------------------------------------\n\nexport const TargetBackgroundSchema = z\n .object({\n industry: z.unknown().optional(),\n use_case: z.unknown().optional(),\n competitors: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetBackground = z.infer<typeof TargetBackgroundSchema>;\n\nexport const TargetAdditionalContextSchema = z\n .object({\n base_model: z.unknown().optional(),\n core_architecture: z.unknown().optional(),\n system_prompt: z.unknown().optional(),\n languages_supported: z.unknown().optional(),\n banned_keywords: z.unknown().optional(),\n tools_accessible: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetAdditionalContext = z.infer<typeof TargetAdditionalContextSchema>;\n\nexport const TargetMetadataSchema = z\n .object({\n multi_turn: z.boolean().optional(),\n multi_turn_error_message: z.unknown().optional(),\n rate_limit: z.unknown().optional(),\n rate_limit_enabled: z.boolean().optional(),\n rate_limit_error_code: z.unknown().optional(),\n rate_limit_error_json: z.unknown().optional(),\n rate_limit_error_message: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.unknown().optional(),\n content_filter_error_json: z.unknown().optional(),\n content_filter_error_message: z.unknown().optional(),\n probe_message: z.string().optional(),\n request_timeout: z.number().optional(),\n })\n .passthrough();\nexport type TargetMetadata = z.infer<typeof TargetMetadataSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Job / Scan schemas\n// ---------------------------------------------------------------------------\n\nexport const TargetJobRequestSchema = z.object({\n uuid: z.string(),\n version: z.number().int().nullable().optional(),\n});\nexport type TargetJobRequest = z.infer<typeof TargetJobRequestSchema>;\n\nexport const JobTimeRecordSchema = z\n .object({\n queued_at: z.string().nullable().optional(),\n started_at: z.string().nullable().optional(),\n completed_at: z.string().nullable().optional(),\n time_taken: z.string().nullable().optional(),\n })\n .passthrough();\nexport type JobTimeRecord = z.infer<typeof JobTimeRecordSchema>;\n\nexport const StaticJobMetadataSchema = z\n .object({\n categories: z.record(z.unknown()),\n rate_limit_enabled: z.boolean().optional(),\n rate_limit: z.number().int().nullable().optional(),\n rate_limit_error_code: z.number().int().nullable().optional(),\n rate_limit_error_message: z.string().nullable().optional(),\n rate_limit_error_json: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.number().int().nullable().optional(),\n content_filter_error_message: z.string().nullable().optional(),\n content_filter_error_json: z.unknown().optional(),\n })\n .passthrough();\nexport type StaticJobMetadata = z.infer<typeof StaticJobMetadataSchema>;\n\nexport const DynamicJobMetadataSchema = z\n .object({\n rate_limit_enabled: z.boolean().optional(),\n rate_limit: z.number().int().nullable().optional(),\n rate_limit_error_code: z.number().int().nullable().optional(),\n rate_limit_error_message: z.string().nullable().optional(),\n rate_limit_error_json: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.number().int().nullable().optional(),\n content_filter_error_message: z.string().nullable().optional(),\n content_filter_error_json: z.unknown().optional(),\n stream_breadth: z.number().int().optional(),\n stream_depth: z.number().int().optional(),\n max_tokens: z.number().int().optional(),\n context_size: z.number().int().optional(),\n attack_goals: z.array(z.unknown()).optional(),\n base_model: z.string().nullable().optional(),\n use_case: z.string().nullable().optional(),\n system_prompt: z.string().nullable().optional(),\n })\n .passthrough();\nexport type DynamicJobMetadata = z.infer<typeof DynamicJobMetadataSchema>;\n\nexport const CustomJobMetadataSchema = z\n .object({\n custom_prompt_sets: z.array(z.unknown()),\n rate_limit_enabled: z.boolean().optional(),\n rate_limit: z.number().int().nullable().optional(),\n rate_limit_error_code: z.number().int().nullable().optional(),\n rate_limit_error_message: z.string().nullable().optional(),\n rate_limit_error_json: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.number().int().nullable().optional(),\n content_filter_error_message: z.string().nullable().optional(),\n content_filter_error_json: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomJobMetadata = z.infer<typeof CustomJobMetadataSchema>;\n\nexport const JobCreateRequestSchema = z.object({\n name: z.string(),\n target: TargetJobRequestSchema,\n job_type: z.string(),\n job_metadata: z.union([\n StaticJobMetadataSchema,\n DynamicJobMetadataSchema,\n CustomJobMetadataSchema,\n ]),\n version: z.number().int().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n});\nexport type JobCreateRequest = z.infer<typeof JobCreateRequestSchema>;\n\nexport const StaticJobReportStatsSchema = z\n .object({\n output_completion_percentage: z.number(),\n partial_report_unlocked: z.boolean().optional(),\n partial_report_unlocked_at: z.string().nullable().optional(),\n report_summary: z.string().nullable().optional(),\n })\n .passthrough();\nexport type StaticJobReportStats = z.infer<typeof StaticJobReportStatsSchema>;\n\nexport const DynamicJobReportStatsSchema = z\n .object({\n total_goals: z.number().int().optional(),\n total_streams: z.number().int().optional(),\n total_threats: z.number().int().optional(),\n goals_achieved: z.number().int().optional(),\n report_summary: z.string().nullable().optional(),\n })\n .passthrough();\nexport type DynamicJobReportStats = z.infer<typeof DynamicJobReportStatsSchema>;\n\nexport const TargetReferenceSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n target_type: z.string().nullable().optional(),\n connection_type: z.string().nullable().optional(),\n api_endpoint_type: z.string().nullable().optional(),\n response_mode: z.string().nullable().optional(),\n session_supported: z.boolean().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n status: z.string(),\n active: z.boolean(),\n validated: z.boolean(),\n version: z.number().int().nullable().optional(),\n secret_version: z.string().nullable().optional(),\n created_by_user_id: z.string().nullable().optional(),\n updated_by_user_id: z.string().nullable().optional(),\n created_at: z.string(),\n updated_at: z.string(),\n target_metadata: TargetMetadataSchema.optional(),\n target_background: TargetBackgroundSchema.nullable().optional(),\n profiling_status: z.string().nullable().optional(),\n additional_context: TargetAdditionalContextSchema.nullable().optional(),\n })\n .passthrough();\nexport type TargetReference = z.infer<typeof TargetReferenceSchema>;\n\nexport const JobResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n target: TargetReferenceSchema,\n job_type: z.string(),\n job_metadata: z.unknown(),\n version: z.number().int().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n target_id: z.string(),\n target_type: z.string(),\n total: z.number().int().nullable().optional(),\n completed: z.number().int().nullable().optional(),\n status: z.string().optional(),\n score: z.number().nullable().optional(),\n asr: z.number().nullable().optional(),\n time_record: JobTimeRecordSchema.nullable().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n created_by_user_id: z.string().nullable().optional(),\n report_stats: z.unknown().optional(),\n metering_quota_uuid: z.string().nullable().optional(),\n counted_towards_quota: z.string().optional(),\n invocation_id: z.string().nullable().optional(),\n })\n .passthrough();\nexport type JobResponse = z.infer<typeof JobResponseSchema>;\n\nexport const JobListResponseSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(JobResponseSchema),\n })\n .passthrough();\nexport type JobListResponse = z.infer<typeof JobListResponseSchema>;\n\nexport const JobAbortResponseSchema = z.object({\n job_id: z.string(),\n message: z.string(),\n});\nexport type JobAbortResponse = z.infer<typeof JobAbortResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Category schemas\n// ---------------------------------------------------------------------------\n\nexport const PrerequisiteModelSchema = z.object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n});\nexport type PrerequisiteModel = z.infer<typeof PrerequisiteModelSchema>;\n\nexport const SubCategoryModelSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n prerequisites: z.array(PrerequisiteModelSchema).nullable().optional(),\n active: z.boolean().optional(),\n })\n .passthrough();\nexport type SubCategoryModel = z.infer<typeof SubCategoryModelSchema>;\n\nexport const CategoryModelSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n sub_categories: z.array(SubCategoryModelSchema),\n })\n .passthrough();\nexport type CategoryModel = z.infer<typeof CategoryModelSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Attack schemas\n// ---------------------------------------------------------------------------\n\nexport const AttackOutputSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n attack_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n output: z.string(),\n threat: z.boolean().nullable().optional(),\n marked_safe: z.boolean().nullable().optional(),\n })\n .passthrough();\nexport type AttackOutput = z.infer<typeof AttackOutputSchema>;\n\nexport const AttackMultiTurnOutputSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n attack_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n output: z.string(),\n prompt: z.string(),\n turn: z.number().int(),\n threat: z.boolean().nullable().optional(),\n marked_safe: z.boolean().nullable().optional(),\n generation: z.number().int().optional(),\n multi_turn: z.boolean().optional(),\n })\n .passthrough();\nexport type AttackMultiTurnOutput = z.infer<typeof AttackMultiTurnOutputSchema>;\n\nexport const AttackListItemSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n prompt: z.string(),\n prompt_mapping_id: z.string(),\n prompt_id: z.string(),\n category: z.string(),\n sub_category: z.string(),\n category_display_name: z.string(),\n sub_category_display_name: z.string(),\n status: z.string().optional(),\n marked_safe: z.boolean().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n threat: z.boolean().nullable().optional(),\n attack_type: z.string().optional(),\n multi_turn: z.boolean().optional(),\n asr: z.number().nullable().optional(),\n version: z.number().int().nullable().optional(),\n severity: z.string().optional(),\n })\n .passthrough();\nexport type AttackListItem = z.infer<typeof AttackListItemSchema>;\n\nexport const AttackListResponseSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(AttackListItemSchema),\n })\n .passthrough();\nexport type AttackListResponse = z.infer<typeof AttackListResponseSchema>;\n\nexport const AttackDetailResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n prompt: z.string(),\n prompt_mapping_id: z.string(),\n prompt_id: z.string(),\n category: z.string(),\n sub_category: z.string(),\n category_display_name: z.string(),\n sub_category_display_name: z.string(),\n compliance_frameworks: z.array(z.unknown()),\n goal: z.string().nullable(),\n status: z.string().optional(),\n marked_safe: z.boolean().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n threat: z.boolean().nullable().optional(),\n attack_type: z.string().optional(),\n multi_turn: z.boolean().optional(),\n asr: z.number().nullable().optional(),\n version: z.number().int().nullable().optional(),\n severity: z.string().optional(),\n outputs: z.array(AttackOutputSchema).optional(),\n })\n .passthrough();\nexport type AttackDetailResponse = z.infer<typeof AttackDetailResponseSchema>;\n\nexport const AttackMultiTurnDetailResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n prompt: z.string(),\n prompt_mapping_id: z.string(),\n prompt_id: z.string(),\n category: z.string(),\n sub_category: z.string(),\n category_display_name: z.string(),\n sub_category_display_name: z.string(),\n compliance_frameworks: z.array(z.unknown()),\n goal: z.string().nullable(),\n status: z.string().optional(),\n marked_safe: z.boolean().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n threat: z.boolean().nullable().optional(),\n attack_type: z.string().optional(),\n multi_turn: z.boolean().optional(),\n asr: z.number().nullable().optional(),\n version: z.number().int().nullable().optional(),\n severity: z.string().optional(),\n outputs: z.array(AttackMultiTurnOutputSchema).optional(),\n })\n .passthrough();\nexport type AttackMultiTurnDetailResponse = z.infer<typeof AttackMultiTurnDetailResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Report schemas\n// ---------------------------------------------------------------------------\n\nexport const SubCategoryStatsSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n prerequisites: z.array(PrerequisiteModelSchema).nullable().optional(),\n active: z.boolean().optional(),\n successful: z.number().int(),\n failed: z.number().int(),\n total: z.number().int().optional(),\n })\n .passthrough();\nexport type SubCategoryStats = z.infer<typeof SubCategoryStatsSchema>;\n\nexport const CategoryReportSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n sub_categories: z.array(SubCategoryStatsSchema),\n asr: z.number(),\n total_prompts: z.number().int(),\n total_attacks: z.number().int(),\n successful: z.number().int(),\n failed: z.number().int(),\n })\n .passthrough();\nexport type CategoryReport = z.infer<typeof CategoryReportSchema>;\n\nexport const SeverityStatsSchema = z\n .object({\n severity: z.string(),\n successful: z.number().int().optional(),\n failed: z.number().int().optional(),\n })\n .passthrough();\nexport type SeverityStats = z.infer<typeof SeverityStatsSchema>;\n\nexport const SeverityReportSchema = z\n .object({\n stats: z.array(SeverityStatsSchema),\n successful: z.number().int().optional(),\n failed: z.number().int().optional(),\n total_attacks: z.number().int().optional(),\n })\n .passthrough();\nexport type SeverityReport = z.infer<typeof SeverityReportSchema>;\n\nexport const ComplianceTechniqueSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n compliance_id: z.string(),\n description: z.string(),\n link: z.string(),\n version: z.string(),\n active: z.boolean(),\n successful: z.number().int().optional(),\n failed: z.number().int().optional(),\n total: z.number().int().optional(),\n })\n .passthrough();\nexport type ComplianceTechnique = z.infer<typeof ComplianceTechniqueSchema>;\n\nexport const ComplianceReportSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n active: z.boolean(),\n version: z.string(),\n link: z.string(),\n techniques: z.array(ComplianceTechniqueSchema),\n score: z.number().int().optional(),\n })\n .passthrough();\nexport type ComplianceReport = z.infer<typeof ComplianceReportSchema>;\n\nexport const RuntimeSecurityPolicySchema = z\n .object({\n policy_id: z.string(),\n display_name: z.string(),\n config: z.record(z.unknown()),\n })\n .passthrough();\nexport type RuntimeSecurityPolicy = z.infer<typeof RuntimeSecurityPolicySchema>;\n\nexport const StaticJobRemediationSchema = z\n .object({\n remediation: z.string(),\n description: z.string(),\n mapping_remediation_id: z.string().nullable().optional(),\n subcategories: z.array(z.string()).nullable().optional(),\n effectiveness: z.number().int().optional(),\n ease_of_implementation: z.number().int().optional(),\n priority: z.number().int().optional(),\n resource_links: z.array(z.string()).optional(),\n categories: z.array(z.string()).nullable().optional(),\n })\n .passthrough();\nexport type StaticJobRemediation = z.infer<typeof StaticJobRemediationSchema>;\n\nexport const StaticJobRemediationRecommendationSchema = z\n .object({\n runtime_security_policy_configuration: z\n .array(RuntimeSecurityPolicySchema)\n .nullable()\n .optional(),\n other_measures: z.array(StaticJobRemediationSchema).optional(),\n })\n .passthrough();\nexport type StaticJobRemediationRecommendation = z.infer<\n typeof StaticJobRemediationRecommendationSchema\n>;\n\nexport const StaticJobReportSchema = z\n .object({\n severity_report: SeverityReportSchema,\n asr: z.number().nullable().optional(),\n score: z.number().nullable().optional(),\n security_report: CategoryReportSchema.nullable().optional(),\n safety_report: CategoryReportSchema.nullable().optional(),\n brand_report: CategoryReportSchema.nullable().optional(),\n compliance_report: z.array(ComplianceReportSchema).nullable().optional(),\n report_summary: z.string().nullable().optional(),\n recommendations: StaticJobRemediationRecommendationSchema.nullable().optional(),\n })\n .passthrough();\nexport type StaticJobReport = z.infer<typeof StaticJobReportSchema>;\n\nexport const DynamicJobReportSchema = z\n .object({\n total_goals: z.number().int().optional(),\n total_streams: z.number().int().optional(),\n total_threats: z.number().int().optional(),\n goals_achieved: z.number().int().optional(),\n report_summary: z.string().nullable().optional(),\n score: z.number().optional(),\n asr: z.number().optional(),\n })\n .passthrough();\nexport type DynamicJobReport = z.infer<typeof DynamicJobReportSchema>;\n\nexport const RemediationDetailSchema = z\n .object({\n remediation: z.string(),\n description: z.string(),\n resource_links: z.array(z.string()).optional(),\n priority_level: z.string().optional(),\n ease_of_implementation_level: z.string().optional(),\n effectiveness_level: z.string().optional(),\n })\n .passthrough();\nexport type RemediationDetail = z.infer<typeof RemediationDetailSchema>;\n\nexport const RemediationResponseSchema = z\n .object({ remediations: z.array(RemediationDetailSchema).optional() })\n .passthrough();\nexport type RemediationResponse = z.infer<typeof RemediationResponseSchema>;\n\nexport const RuntimeSecurityProfileResponseSchema = z\n .object({\n runtime_security_profile: z.array(RuntimeSecurityPolicySchema).nullable().optional(),\n })\n .passthrough();\nexport type RuntimeSecurityProfileResponse = z.infer<typeof RuntimeSecurityProfileResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Goal & Stream schemas (dynamic reports)\n// ---------------------------------------------------------------------------\n\nexport const GoalSchema = z\n .object({\n goal: z.string(),\n safe_response: z.string(),\n jailbroken_response: z.string(),\n goal_metadata: z.record(z.unknown()).optional(),\n custom_goal: z.boolean().optional(),\n goal_type: z.string().optional(),\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n goal_to_show: z.string().nullable().optional(),\n threat: z.boolean().optional(),\n version: z.number().int().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n })\n .passthrough();\nexport type Goal = z.infer<typeof GoalSchema>;\n\nexport const GoalListResponseSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(GoalSchema) })\n .passthrough();\nexport type GoalListResponse = z.infer<typeof GoalListResponseSchema>;\n\nexport const StreamIterationDataSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n stream_id: z.string(),\n goal_id: z.string(),\n iteration: z.number().int(),\n prompt: z.string(),\n techniques: z.string(),\n improvement: z.string(),\n prompts_objective: z.string(),\n summary: z.string(),\n output: z.string().nullable().optional(),\n score: z.number().int().nullable().optional(),\n judge_reasoning: z.string().nullable().optional(),\n threat: z.boolean().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n version: z.number().int().nullable().optional(),\n })\n .passthrough();\nexport type StreamIterationData = z.infer<typeof StreamIterationDataSchema>;\n\nexport const StreamDetailResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n goal_id: z.string(),\n stream_idx: z.number().int().optional(),\n iteration: z.number().int().optional(),\n goal: z.unknown().optional(),\n marked_safe: z.boolean().optional(),\n stream_type: z.string().nullable().optional(),\n threat: z.boolean().optional(),\n first_threat_iteration: StreamIterationDataSchema.nullable().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n version: z.number().int().nullable().optional(),\n iterations: z.array(StreamIterationDataSchema).optional(),\n })\n .passthrough();\nexport type StreamDetailResponse = z.infer<typeof StreamDetailResponseSchema>;\n\nexport const StreamListResponseSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(StreamDetailResponseSchema) })\n .passthrough();\nexport type StreamListResponse = z.infer<typeof StreamListResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Custom attack report schemas\n// ---------------------------------------------------------------------------\n\nexport const CustomAttackOutputSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n custom_attack_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n output: z.string(),\n threat: z.boolean().nullable().optional(),\n marked_safe: z.boolean().nullable().optional(),\n })\n .passthrough();\nexport type CustomAttackOutput = z.infer<typeof CustomAttackOutputSchema>;\n\nexport const PropertyAssignmentSchema = z.object({\n name: z.string(),\n value: z.string(),\n});\nexport type PropertyAssignment = z.infer<typeof PropertyAssignmentSchema>;\n\nexport const PropertyValueStatisticSchema = z.object({\n value: z.string(),\n successful_attack_count: z.number().int(),\n total_attack_count: z.number().int(),\n success_rate: z.number(),\n});\nexport type PropertyValueStatistic = z.infer<typeof PropertyValueStatisticSchema>;\n\nexport const PropertyStatisticSchema = z.object({\n property_name: z.string(),\n values: z.array(PropertyValueStatisticSchema),\n});\nexport type PropertyStatistic = z.infer<typeof PropertyStatisticSchema>;\n\nexport const PromptSetSummarySchema = z\n .object({\n prompt_set_id: z.string(),\n prompt_set_name: z.string(),\n total_prompts: z.number().int(),\n total_attacks: z.number().int(),\n total_threats: z.number().int(),\n failed_attacks: z.number().int(),\n threat_rate: z.number(),\n property_names: z.array(z.string()).optional(),\n property_statistics: z.array(PropertyStatisticSchema).optional(),\n })\n .passthrough();\nexport type PromptSetSummary = z.infer<typeof PromptSetSummarySchema>;\n\nexport const CustomAttackReportResponseSchema = z\n .object({\n total_prompts: z.number().int(),\n total_attacks: z.number().int(),\n total_threats: z.number().int(),\n failed_attacks: z.number().int(),\n score: z.number(),\n asr: z.number(),\n custom_attack_reports: z.array(PromptSetSummarySchema).optional(),\n property_statistics: z.array(PropertyStatisticSchema).optional(),\n })\n .passthrough();\nexport type CustomAttackReportResponse = z.infer<typeof CustomAttackReportResponseSchema>;\n\nexport const PromptSetsReportResponseSchema = z\n .object({\n prompt_sets: z.array(PromptSetSummarySchema),\n total_prompt_sets: z.number().int(),\n applied_filters: z.record(z.unknown()).optional(),\n })\n .passthrough();\nexport type PromptSetsReportResponse = z.infer<typeof PromptSetsReportResponseSchema>;\n\nexport const PromptDetailResponseSchema = z\n .object({\n prompt_id: z.string(),\n prompt_text: z.string(),\n goal: z.string().nullable().optional(),\n user_defined_goal: z.boolean().optional(),\n properties: z.array(PropertyAssignmentSchema).optional(),\n attack_id: z.string().nullable().optional(),\n threat: z.boolean().nullable().optional(),\n attack_outputs: z.array(CustomAttackOutputSchema).optional(),\n asr: z.number().nullable().optional(),\n prompt_set_id: z.string().nullable().optional(),\n prompt_set_name: z.string().nullable().optional(),\n })\n .passthrough();\nexport type PromptDetailResponse = z.infer<typeof PromptDetailResponseSchema>;\n\nexport const CustomAttacksListResponseSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(z.unknown()),\n total_attacks: z.number().int(),\n total_threats: z.number().int(),\n })\n .passthrough();\nexport type CustomAttacksListResponse = z.infer<typeof CustomAttacksListResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Dashboard schemas\n// ---------------------------------------------------------------------------\n\nexport const RiskLevelSchema = z\n .object({\n risk_rating: z.string(),\n total: z.number().int(),\n targets_by_type: z.array(CountByNameSchema).optional(),\n })\n .passthrough();\nexport type RiskLevel = z.infer<typeof RiskLevelSchema>;\n\nexport const ScanStatisticsResponseSchema = z\n .object({\n total_scans: z.number().int(),\n targets_scanned: z.number().int(),\n targets_scanned_by_type: z.array(CountByNameSchema).optional(),\n scan_status: z.array(CountByNameSchema).optional(),\n risk_profile: z.array(RiskLevelSchema).optional(),\n })\n .passthrough();\nexport type ScanStatisticsResponse = z.infer<typeof ScanStatisticsResponseSchema>;\n\nexport const ScoreTrendSeriesSchema = z.object({\n label: z.string(),\n data: z.array(z.number().nullable()),\n});\nexport type ScoreTrendSeries = z.infer<typeof ScoreTrendSeriesSchema>;\n\nexport const ScoreTrendResponseSchema = z.object({\n labels: z.array(z.string()),\n series: z.array(ScoreTrendSeriesSchema),\n});\nexport type ScoreTrendResponse = z.infer<typeof ScoreTrendResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Sentiment, Quota, Error Log schemas\n// ---------------------------------------------------------------------------\n\nexport const SentimentRequestSchema = z.object({\n job_id: z.string(),\n up_vote: z.boolean().optional(),\n down_vote: z.boolean().optional(),\n});\nexport type SentimentRequest = z.infer<typeof SentimentRequestSchema>;\n\nexport const SentimentResponseSchema = z\n .object({\n job_id: z.string(),\n up_vote: z.boolean().optional(),\n down_vote: z.boolean().optional(),\n })\n .passthrough();\nexport type SentimentResponse = z.infer<typeof SentimentResponseSchema>;\n\nexport const QuotaDetailsSchema = z.object({\n allocated: z.number().int(),\n unlimited: z.boolean(),\n consumed: z.number().int(),\n});\nexport type QuotaDetails = z.infer<typeof QuotaDetailsSchema>;\n\nexport const QuotaSummarySchema = z.object({\n static: QuotaDetailsSchema,\n dynamic: QuotaDetailsSchema,\n custom: QuotaDetailsSchema,\n});\nexport type QuotaSummary = z.infer<typeof QuotaSummarySchema>;\n\nexport const ErrorLogSchema = z\n .object({\n created_at: z.string(),\n updated_at: z.string(),\n job_id: z.string().nullable().optional(),\n target_id: z.string().nullable().optional(),\n target_version: z.number().int().nullable().optional(),\n attack_id: z.string().nullable().optional(),\n error_type: z.string().nullable().optional(),\n error_source: z.string().nullable().optional(),\n error_message: z.string().nullable().optional(),\n target_object: z.record(z.unknown()).nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n version: z.number().int().optional(),\n })\n .passthrough();\nexport type ErrorLog = z.infer<typeof ErrorLogSchema>;\n\nexport const ErrorLogListResponseSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(ErrorLogSchema) })\n .passthrough();\nexport type ErrorLogListResponse = z.infer<typeof ErrorLogListResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Target schemas\n// ---------------------------------------------------------------------------\n\nexport const TargetCreateRequestSchema = z\n .object({\n name: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n connection_params: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n network_broker_channel_uuid: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetCreateRequest = z.infer<typeof TargetCreateRequestSchema>;\n\nexport const TargetUpdateRequestSchema = z\n .object({\n name: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n connection_params: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n network_broker_channel_uuid: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetUpdateRequest = z.infer<typeof TargetUpdateRequestSchema>;\n\nexport const TargetContextUpdateSchema = z\n .object({\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetContextUpdate = z.infer<typeof TargetContextUpdateSchema>;\n\nexport const TargetResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n status: z.unknown(),\n active: z.boolean(),\n validated: z.boolean(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n extra_info: z.unknown().optional(),\n version: z.unknown().optional(),\n secret_version: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n updated_by_user_id: z.unknown().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n profiling_status: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetResponse = z.infer<typeof TargetResponseSchema>;\n\nexport const TargetListItemSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n status: z.unknown(),\n active: z.boolean(),\n validated: z.boolean(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n extra_info: z.unknown().optional(),\n version: z.unknown().optional(),\n secret_version: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n updated_by_user_id: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetListItem = z.infer<typeof TargetListItemSchema>;\n\nexport const TargetListSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(TargetListItemSchema).optional() })\n .passthrough();\nexport type TargetList = z.infer<typeof TargetListSchema>;\n\nexport const TargetProbeRequestSchema = z\n .object({\n name: z.string(),\n uuid: z.unknown().optional(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n connection_params: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n network_broker_channel_uuid: z.unknown().optional(),\n probe_fields: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetProbeRequest = z.infer<typeof TargetProbeRequestSchema>;\n\nexport const TargetProfileResponseSchema = z\n .object({\n target_id: z.string(),\n target_version: z.number().int(),\n status: z.string(),\n profiling_status: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n ai_generated_fields: z.unknown().optional(),\n other_details: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetProfileResponse = z.infer<typeof TargetProfileResponseSchema>;\n\nexport const BaseResponseSchema = z.object({\n message: z.string(),\n status: z.number().int(),\n});\nexport type BaseResponse = z.infer<typeof BaseResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Custom attack / prompt set schemas\n// ---------------------------------------------------------------------------\n\nexport const PromptSetStatsSchema = z\n .object({\n total_prompts: z.number().int(),\n active_prompts: z.number().int(),\n inactive_prompts: z.number().int(),\n failed_prompts: z.number().int().optional(),\n validation_prompts: z.number().int().optional(),\n })\n .passthrough();\nexport type PromptSetStats = z.infer<typeof PromptSetStatsSchema>;\n\nexport const CustomPromptSetCreateRequestSchema = z.object({\n name: z.string(),\n description: z.unknown().optional(),\n property_names: z.array(z.string()).optional(),\n});\nexport type CustomPromptSetCreateRequest = z.infer<typeof CustomPromptSetCreateRequestSchema>;\n\nexport const CustomPromptSetUpdateRequestSchema = z\n .object({\n name: z.unknown().optional(),\n description: z.unknown().optional(),\n archive: z.unknown().optional(),\n property_names: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetUpdateRequest = z.infer<typeof CustomPromptSetUpdateRequestSchema>;\n\nexport const CustomPromptSetArchiveRequestSchema = z.object({ archive: z.boolean() });\nexport type CustomPromptSetArchiveRequest = z.infer<typeof CustomPromptSetArchiveRequestSchema>;\n\nexport const CustomPromptSetResponseSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n active: z.boolean(),\n archive: z.boolean(),\n status: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n property_names: z.array(z.string()).optional(),\n properties: z.array(z.unknown()).optional(),\n stats: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n version: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n updated_by_user_id: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetResponse = z.infer<typeof CustomPromptSetResponseSchema>;\n\nexport const CustomPromptSetListItemSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n active: z.boolean(),\n archive: z.boolean(),\n status: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n property_names: z.array(z.string()).optional(),\n stats: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetListItem = z.infer<typeof CustomPromptSetListItemSchema>;\n\nexport const CustomPromptSetListSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(CustomPromptSetListItemSchema).optional(),\n })\n .passthrough();\nexport type CustomPromptSetList = z.infer<typeof CustomPromptSetListSchema>;\n\nexport const CustomPromptSetListActiveSchema = z\n .object({ data: z.array(CustomPromptSetListItemSchema).optional() })\n .passthrough();\nexport type CustomPromptSetListActive = z.infer<typeof CustomPromptSetListActiveSchema>;\n\nexport const CustomPromptSetReferenceSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n status: z.string(),\n active: z.boolean(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n version: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetReference = z.infer<typeof CustomPromptSetReferenceSchema>;\n\nexport const CustomPromptSetVersionInfoSchema = z\n .object({\n uuid: z.string(),\n status: z.string(),\n is_latest: z.boolean(),\n version: z.unknown().optional(),\n stats: z.unknown().optional(),\n snapshot_created_at: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetVersionInfo = z.infer<typeof CustomPromptSetVersionInfoSchema>;\n\nexport const CustomPromptCreateRequestSchema = z.object({\n prompt: z.string(),\n prompt_set_id: z.string(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n});\nexport type CustomPromptCreateRequest = z.infer<typeof CustomPromptCreateRequestSchema>;\n\nexport const CustomPromptUpdateRequestSchema = z\n .object({\n prompt: z.unknown().optional(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptUpdateRequest = z.infer<typeof CustomPromptUpdateRequestSchema>;\n\nexport const CustomPromptResponseSchema = z\n .object({\n uuid: z.string(),\n prompt: z.string(),\n user_defined_goal: z.boolean(),\n status: z.string(),\n active: z.boolean(),\n prompt_set_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n property_assignments: z.array(z.unknown()).optional(),\n detector_category: z.unknown().optional(),\n severity: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptResponse = z.infer<typeof CustomPromptResponseSchema>;\n\nexport const CustomPromptListItemSchema = z\n .object({\n uuid: z.string(),\n prompt: z.string(),\n user_defined_goal: z.boolean(),\n status: z.string(),\n active: z.boolean(),\n created_at: z.string(),\n updated_at: z.string(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptListItem = z.infer<typeof CustomPromptListItemSchema>;\n\nexport const CustomPromptListSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(CustomPromptListItemSchema).optional(),\n })\n .passthrough();\nexport type CustomPromptList = z.infer<typeof CustomPromptListSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Property schemas\n// ---------------------------------------------------------------------------\n\nexport const PropertyNameCreateRequestSchema = z.object({ name: z.string() });\nexport type PropertyNameCreateRequest = z.infer<typeof PropertyNameCreateRequestSchema>;\n\nexport const PropertyValueCreateRequestSchema = z.object({\n property_name: z.string(),\n property_value: z.string(),\n});\nexport type PropertyValueCreateRequest = z.infer<typeof PropertyValueCreateRequestSchema>;\n\nexport const PropertyDefinitionSchema = z.object({\n property_name: z.string(),\n created_at: z.string(),\n});\nexport type PropertyDefinition = z.infer<typeof PropertyDefinitionSchema>;\n\nexport const PropertyNamesListResponseSchema = z\n .object({ data: z.array(PropertyDefinitionSchema).optional() })\n .passthrough();\nexport type PropertyNamesListResponse = z.infer<typeof PropertyNamesListResponseSchema>;\n\nexport const PropertyValuesResponseSchema = z\n .object({\n name: z.string(),\n values: z.array(z.string()).optional(),\n })\n .passthrough();\nexport type PropertyValuesResponse = z.infer<typeof PropertyValuesResponseSchema>;\n\nexport const PropertyValuesMultipleResponseSchema = z\n .object({ data: z.record(z.array(z.string())).optional() })\n .passthrough();\nexport type PropertyValuesMultipleResponse = z.infer<typeof PropertyValuesMultipleResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Dashboard schemas\n// ---------------------------------------------------------------------------\n\nexport const DashboardOverviewResponseSchema = z\n .object({\n total_targets: z.number().int(),\n targets_by_type: z.array(CountByNameSchema).optional(),\n })\n .passthrough();\nexport type DashboardOverviewResponse = z.infer<typeof DashboardOverviewResponseSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for an OAuth2 token response. */\nexport const OAuthTokenResponseSchema = z.object({\n access_token: z.string(),\n token_type: z.string().optional(),\n expires_in: z.number(),\n scope: z.string().optional(),\n});\n\n/** OAuth2 token response with access token and expiry. */\nexport type OAuthTokenResponse = z.infer<typeof OAuthTokenResponseSchema>;\n","import { DEFAULT_TOKEN_ENDPOINT } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { OAuthTokenResponseSchema } from '../models/oauth-token.js';\n\n/** Snapshot of the current token state (never exposes the actual token). */\nexport interface TokenInfo {\n /** Whether a token has been fetched. */\n hasToken: boolean;\n /** Whether the token is valid (not expired and outside the pre-expiry buffer). */\n isValid: boolean;\n /** Whether the token has passed its expiry time. */\n isExpired: boolean;\n /** Whether the token is within the pre-expiry buffer window. */\n isExpiringSoon: boolean;\n /** Milliseconds until the token expires (0 if expired or no token). */\n expiresInMs: number;\n /** Unix timestamp (ms) when the token expires (0 if no token). */\n expiresAt: number;\n}\n\n/** Options for constructing an {@link OAuthClient}. */\nexport interface OAuthClientOptions {\n /** OAuth2 client ID. */\n clientId: string;\n /** OAuth2 client secret. */\n clientSecret: string;\n /** Tenant Service Group ID. */\n tsgId: string;\n /** OAuth2 token endpoint URL. Defaults to Palo Alto Networks auth endpoint. */\n tokenEndpoint?: string;\n /** Pre-expiry buffer in ms. Token refreshes this many ms before expiry. Defaults to 30000 (30s). */\n tokenBufferMs?: number;\n /** Callback invoked after each successful token refresh with current {@link TokenInfo}. */\n onTokenRefresh?: (info: TokenInfo) => void;\n}\n\nconst DEFAULT_TOKEN_BUFFER_MS = 30_000; // refresh 30s before expiry\n\n/**\n * OAuth2 client_credentials token manager.\n * Caches tokens, refreshes before expiry, and deduplicates concurrent requests.\n */\nexport class OAuthClient {\n public readonly tokenEndpoint: string;\n private readonly clientId: string;\n private readonly clientSecret: string;\n private readonly tsgId: string;\n private readonly tokenBufferMs: number;\n private readonly onTokenRefresh?: (info: TokenInfo) => void;\n\n private accessToken: string | null = null;\n private expiresAt = 0;\n private pendingFetch: Promise<string> | null = null;\n\n constructor(opts: OAuthClientOptions) {\n this.clientId = opts.clientId;\n this.clientSecret = opts.clientSecret;\n this.tsgId = opts.tsgId;\n this.tokenEndpoint = opts.tokenEndpoint ?? DEFAULT_TOKEN_ENDPOINT;\n this.tokenBufferMs = opts.tokenBufferMs ?? DEFAULT_TOKEN_BUFFER_MS;\n this.onTokenRefresh = opts.onTokenRefresh;\n }\n\n /**\n * Get a valid access token, refreshing if needed.\n * @returns Bearer access token string.\n */\n async getToken(): Promise<string> {\n if (this.accessToken && Date.now() < this.expiresAt - this.tokenBufferMs) {\n return this.accessToken;\n }\n\n if (this.pendingFetch) {\n return this.pendingFetch;\n }\n\n this.pendingFetch = this.fetchToken().finally(() => {\n this.pendingFetch = null;\n });\n\n return this.pendingFetch;\n }\n\n /** Clear the cached token, forcing a fresh fetch on next call. */\n clearToken(): void {\n this.accessToken = null;\n this.expiresAt = 0;\n }\n\n /** Check if the current token has passed its expiry time. Returns true if no token exists. */\n isTokenExpired(): boolean {\n if (!this.accessToken) return true;\n return Date.now() >= this.expiresAt;\n }\n\n /**\n * Check if the token is within the pre-expiry buffer window.\n * Returns true if no token exists.\n * @param bufferMs - Custom buffer in ms. Defaults to the configured `tokenBufferMs`.\n */\n isTokenExpiringSoon(bufferMs?: number): boolean {\n if (!this.accessToken) return true;\n const buffer = bufferMs ?? this.tokenBufferMs;\n return Date.now() >= this.expiresAt - buffer;\n }\n\n /**\n * Get a snapshot of the current token state without exposing the actual token value.\n * @returns Current {@link TokenInfo}.\n */\n getTokenInfo(): TokenInfo {\n const now = Date.now();\n const hasToken = this.accessToken !== null;\n const isExpired = !hasToken || now >= this.expiresAt;\n const isExpiringSoon = !hasToken || now >= this.expiresAt - this.tokenBufferMs;\n const expiresInMs = hasToken ? Math.max(0, this.expiresAt - now) : 0;\n return {\n hasToken,\n isValid: hasToken && !isExpiringSoon,\n isExpired,\n isExpiringSoon,\n expiresInMs,\n expiresAt: hasToken ? this.expiresAt : 0,\n };\n }\n\n private async fetchToken(): Promise<string> {\n const credentials = btoa(`${this.clientId}:${this.clientSecret}`);\n const body = new URLSearchParams({\n grant_type: 'client_credentials',\n scope: `tsg_id:${this.tsgId}`,\n });\n\n let response: Response;\n try {\n response = await fetch(this.tokenEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: `Basic ${credentials}`,\n },\n body: body.toString(),\n });\n } catch (err) {\n throw new AISecSDKException(\n `Token request failed: ${(err as Error).message}`,\n ErrorType.OAUTH_ERROR,\n );\n }\n\n if (!response.ok) {\n let errorMsg: string;\n try {\n const errorBody = (await response.json()) as Record<string, unknown>;\n errorMsg =\n (errorBody.error_description as string) ??\n (errorBody.error as string) ??\n `Token request failed with status ${response.status}`;\n } catch {\n errorMsg = `Token request failed with status ${response.status}`;\n }\n throw new AISecSDKException(errorMsg, ErrorType.OAUTH_ERROR);\n }\n\n const data = OAuthTokenResponseSchema.parse(await response.json());\n this.accessToken = data.access_token;\n this.expiresAt = Date.now() + data.expires_in * 1000;\n\n if (this.onTokenRefresh) {\n try {\n this.onTokenRefresh(this.getTokenInfo());\n } catch {\n // Don't let callback errors block token delivery\n }\n }\n\n return this.accessToken;\n }\n}\n","import { USER_AGENT } from '../constants.js';\nimport { executeWithRetry } from '../http-retry.js';\nimport type { OAuthClient } from './oauth-client.js';\n\n/** @internal Options for a management API HTTP request. */\nexport interface MgmtHttpRequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n baseUrl: string;\n path: string;\n body?: unknown;\n params?: Record<string, string>;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** @internal Typed management API HTTP response. */\nexport interface MgmtHttpResponse<T = unknown> {\n status: number;\n data: T;\n}\n\nexport async function managementHttpRequest<T>(\n opts: MgmtHttpRequestOptions,\n): Promise<MgmtHttpResponse<T>> {\n const { method, baseUrl, path, body, params, oauthClient, numRetries } = opts;\n let hadTokenRefresh = false;\n\n const response = await executeWithRetry({\n maxRetries: numRetries,\n execute: async () => {\n const token = await oauthClient.getToken();\n const stripped = baseUrl.replace(/\\/+$/, '');\n const url = new URL(`${stripped}${path}`);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n url.searchParams.set(key, value);\n }\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n 'User-Agent': USER_AGENT,\n };\n\n let bodyStr: string | undefined;\n if (body !== undefined) {\n headers['Content-Type'] = 'application/json';\n bodyStr = JSON.stringify(body);\n }\n\n return fetch(url.toString(), { method, headers, body: bodyStr });\n },\n onRetryableFailure: async (response) => {\n if ((response.status === 401 || response.status === 403) && !hadTokenRefresh) {\n hadTokenRefresh = true;\n oauthClient.clearToken();\n return true;\n }\n return false;\n },\n });\n\n const text = await response.text();\n const data = text ? (JSON.parse(text) as T) : ({} as T);\n return { status: response.status, data };\n}\n","import { MGMT_PROFILE_PATH, MGMT_PROFILES_TSG_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from './management-http-client.js';\nimport type { OAuthClient } from './oauth-client.js';\nimport type {\n SecurityProfile,\n CreateSecurityProfileRequest,\n SecurityProfileListResponse,\n DeleteProfileResponse,\n} from '../models/mgmt-security-profile.js';\n\n/** Pagination parameters for list operations. */\nexport interface PaginationOptions {\n /** Starting offset. Defaults to 0. */\n offset?: number;\n /** Max items to return. Defaults to 100. */\n limit?: number;\n}\n\n/** @internal */\nexport interface ProfilesClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n tsgId: string;\n numRetries: number;\n}\n\n/** Client for AIRS security profile CRUD operations. */\nexport class ProfilesClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly tsgId: string;\n private readonly numRetries: number;\n\n constructor(opts: ProfilesClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.tsgId = opts.tsgId;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new security profile.\n * @param request - Profile configuration.\n * @returns The created security profile.\n */\n async create(request: CreateSecurityProfileRequest): Promise<SecurityProfile> {\n const res = await managementHttpRequest<SecurityProfile>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MGMT_PROFILE_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List security profiles for the TSG.\n * @param opts - Pagination options.\n * @returns Paginated list of security profiles.\n */\n async list(opts?: PaginationOptions): Promise<SecurityProfileListResponse> {\n const params: Record<string, string> = {\n offset: String(opts?.offset ?? 0),\n limit: String(opts?.limit ?? 100),\n };\n\n const res = await managementHttpRequest<SecurityProfileListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MGMT_PROFILES_TSG_PATH}/${this.tsgId}`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update an existing security profile.\n * @param profileId - UUID of the profile to update.\n * @param request - Updated profile configuration.\n * @returns The updated security profile.\n */\n async update(profileId: string, request: CreateSecurityProfileRequest): Promise<SecurityProfile> {\n if (!isValidUuid(profileId)) {\n throw new AISecSDKException(\n `Invalid profile_id: ${profileId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<SecurityProfile>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MGMT_PROFILE_PATH}/uuid/${profileId}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete a security profile.\n * @param profileId - UUID of the profile to delete.\n * @returns Deletion confirmation message.\n */\n async delete(profileId: string): Promise<DeleteProfileResponse> {\n if (!isValidUuid(profileId)) {\n throw new AISecSDKException(\n `Invalid profile_id: ${profileId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<DeleteProfileResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MGMT_PROFILE_PATH}/${profileId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { MGMT_TOPIC_PATH, MGMT_TOPICS_TSG_PATH, MGMT_TOPIC_FORCE_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from './management-http-client.js';\nimport type { OAuthClient } from './oauth-client.js';\nimport type {\n CustomTopic,\n CreateCustomTopicRequest,\n CustomTopicListResponse,\n DeleteTopicResponse,\n} from '../models/mgmt-custom-topic.js';\nimport type { PaginationOptions } from './profiles.js';\n\n/** @internal */\nexport interface TopicsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n tsgId: string;\n numRetries: number;\n}\n\n/** Client for AIRS custom topic CRUD operations. */\nexport class TopicsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly tsgId: string;\n private readonly numRetries: number;\n\n constructor(opts: TopicsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.tsgId = opts.tsgId;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new custom topic.\n * @param request - Topic definition with name, description, and examples.\n * @returns The created custom topic.\n */\n async create(request: CreateCustomTopicRequest): Promise<CustomTopic> {\n const res = await managementHttpRequest<CustomTopic>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MGMT_TOPIC_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List custom topics for the TSG.\n * @param opts - Pagination options.\n * @returns Paginated list of custom topics.\n */\n async list(opts?: PaginationOptions): Promise<CustomTopicListResponse> {\n const params: Record<string, string> = {\n offset: String(opts?.offset ?? 0),\n limit: String(opts?.limit ?? 100),\n };\n\n const res = await managementHttpRequest<CustomTopicListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPICS_TSG_PATH}/${this.tsgId}`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update an existing custom topic.\n * @param topicId - UUID of the topic to update.\n * @param request - Updated topic definition.\n * @returns The updated custom topic.\n */\n async update(topicId: string, request: CreateCustomTopicRequest): Promise<CustomTopic> {\n if (!isValidUuid(topicId)) {\n throw new AISecSDKException(\n `Invalid topic_id: ${topicId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<CustomTopic>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPIC_PATH}/uuid/${topicId}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete a custom topic. Fails if topic is referenced by a profile.\n * @param topicId - UUID of the topic to delete.\n * @returns Deletion confirmation message.\n */\n async delete(topicId: string): Promise<DeleteTopicResponse> {\n if (!isValidUuid(topicId)) {\n throw new AISecSDKException(\n `Invalid topic_id: ${topicId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<DeleteTopicResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPIC_PATH}/${topicId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Force-delete a custom topic, removing it from any referencing profiles.\n * @param topicId - UUID of the topic to force-delete.\n * @returns Deletion confirmation message.\n */\n async forceDelete(topicId: string): Promise<DeleteTopicResponse> {\n if (!isValidUuid(topicId)) {\n throw new AISecSDKException(\n `Invalid topic_id: ${topicId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<DeleteTopicResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPIC_FORCE_PATH}/${topicId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n DEFAULT_MGMT_ENDPOINT,\n MGMT_CLIENT_ID,\n MGMT_CLIENT_SECRET,\n MGMT_TSG_ID,\n MGMT_ENDPOINT,\n MGMT_TOKEN_ENDPOINT,\n MAX_NUMBER_OF_RETRIES,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { OAuthClient } from './oauth-client.js';\nimport { ProfilesClient } from './profiles.js';\nimport { TopicsClient } from './topics.js';\n\n/** Options for constructing a {@link ManagementClient}. */\nexport interface ManagementClientOptions {\n /** OAuth2 client ID. Falls back to `PANW_MGMT_CLIENT_ID` env var. */\n clientId?: string;\n /** OAuth2 client secret. Falls back to `PANW_MGMT_CLIENT_SECRET` env var. */\n clientSecret?: string;\n /** Tenant Service Group ID. Falls back to `PANW_MGMT_TSG_ID` env var. */\n tsgId?: string;\n /** Management API endpoint URL. Falls back to `PANW_MGMT_ENDPOINT` env var. */\n apiEndpoint?: string;\n /** OAuth2 token endpoint URL. Falls back to `PANW_MGMT_TOKEN_ENDPOINT` env var. */\n tokenEndpoint?: string;\n /** Max retry attempts (0–5). Defaults to 5. */\n numRetries?: number;\n}\n\n/**\n * Client for AIRS management API operations (profiles and topics CRUD).\n * Authenticates via OAuth2 client_credentials flow.\n */\nexport class ManagementClient {\n public readonly profiles: ProfilesClient;\n public readonly topics: TopicsClient;\n\n constructor(opts: ManagementClientOptions = {}) {\n const clientId = opts.clientId ?? process.env[MGMT_CLIENT_ID];\n const clientSecret = opts.clientSecret ?? process.env[MGMT_CLIENT_SECRET];\n const tsgId = opts.tsgId ?? process.env[MGMT_TSG_ID];\n const apiEndpoint = opts.apiEndpoint ?? process.env[MGMT_ENDPOINT] ?? DEFAULT_MGMT_ENDPOINT;\n const tokenEndpoint = opts.tokenEndpoint ?? process.env[MGMT_TOKEN_ENDPOINT];\n const numRetries = Math.min(\n Math.max(opts.numRetries ?? MAX_NUMBER_OF_RETRIES, 0),\n MAX_NUMBER_OF_RETRIES,\n );\n\n if (!clientId) {\n throw new AISecSDKException(\n 'clientId is required (option or PANW_MGMT_CLIENT_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!clientSecret) {\n throw new AISecSDKException(\n 'clientSecret is required (option or PANW_MGMT_CLIENT_SECRET env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!tsgId) {\n throw new AISecSDKException(\n 'tsgId is required (option or PANW_MGMT_TSG_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n const oauthClient = new OAuthClient({\n clientId,\n clientSecret,\n tsgId,\n tokenEndpoint,\n });\n\n this.profiles = new ProfilesClient({\n baseUrl: apiEndpoint,\n oauthClient,\n tsgId,\n numRetries,\n });\n\n this.topics = new TopicsClient({\n baseUrl: apiEndpoint,\n oauthClient,\n tsgId,\n numRetries,\n });\n }\n}\n","import {\n MODEL_SEC_SCANS_PATH,\n MODEL_SEC_EVALUATIONS_PATH,\n MODEL_SEC_VIOLATIONS_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type {\n ScanCreateRequest,\n ScanBaseResponse,\n ScanList,\n RuleEvaluationList,\n RuleEvaluationResponse,\n FileList,\n LabelsCreateRequest,\n LabelsResponse,\n ViolationList,\n ViolationResponse,\n LabelKeyList,\n LabelValueList,\n} from '../models/model-security.js';\n\n/** Pagination and filter options for model security list operations. */\nexport interface ModelSecurityListOptions {\n /** Number of items to skip. */\n skip?: number;\n /** Maximum number of items to return. */\n limit?: number;\n /** Field name to sort by. */\n sort_by?: string;\n /** Sort direction: 'asc' or 'desc'. */\n sort_direction?: string;\n /** Search query string. */\n search?: string;\n}\n\n/** Extended list options for scan listing with additional filters. */\nexport interface ModelSecurityScanListOptions extends ModelSecurityListOptions {\n /** Filter by evaluation outcome. */\n eval_outcome?: string;\n /** Filter by source type. */\n source_type?: string;\n /** Filter by scan origin. */\n scan_origin?: string;\n}\n\n/** List options for file listing with file-specific filters. */\nexport interface ModelSecurityFileListOptions extends ModelSecurityListOptions {\n /** Filter by file type. */\n type?: string;\n /** Filter by file result. */\n result?: string;\n}\n\n/** @internal */\nexport interface ModelSecurityScansClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** Build query params from list options. */\nfunction buildListParams(opts?: ModelSecurityListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Model Security data plane scan operations. */\nexport class ModelSecurityScansClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityScansClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new model security scan.\n * @param request - Scan creation request body.\n * @returns The created scan response.\n */\n async create(request: ScanCreateRequest): Promise<ScanBaseResponse> {\n const res = await managementHttpRequest<ScanBaseResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SCANS_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List model security scans with optional filters.\n * @param opts - Pagination and filter options.\n * @returns Paginated list of scans.\n */\n async list(opts?: ModelSecurityScanListOptions): Promise<ScanList> {\n const params = buildListParams(opts);\n if (opts?.eval_outcome !== undefined) params.eval_outcome = opts.eval_outcome;\n if (opts?.source_type !== undefined) params.source_type = opts.source_type;\n if (opts?.scan_origin !== undefined) params.scan_origin = opts.scan_origin;\n\n const res = await managementHttpRequest<ScanList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SCANS_PATH,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single scan by UUID.\n * @param uuid - Scan UUID.\n * @returns The scan response.\n */\n async get(uuid: string): Promise<ScanBaseResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ScanBaseResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get rule evaluations for a scan.\n * @param scanUuid - Scan UUID.\n * @param opts - Pagination options.\n * @returns Paginated list of rule evaluations.\n */\n async getEvaluations(\n scanUuid: string,\n opts?: ModelSecurityListOptions,\n ): Promise<RuleEvaluationList> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<RuleEvaluationList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/evaluations`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get files for a scan.\n * @param scanUuid - Scan UUID.\n * @param opts - Pagination and file filter options.\n * @returns Paginated list of files.\n */\n async getFiles(scanUuid: string, opts?: ModelSecurityFileListOptions): Promise<FileList> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const params = buildListParams(opts);\n if (opts?.type !== undefined) params.type = opts.type;\n if (opts?.result !== undefined) params.result = opts.result;\n\n const res = await managementHttpRequest<FileList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/files`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Add labels to a scan (merge with existing).\n * @param scanUuid - Scan UUID.\n * @param request - Labels to add.\n * @returns Labels response.\n */\n async addLabels(scanUuid: string, request: LabelsCreateRequest): Promise<LabelsResponse> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<LabelsResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Set labels on a scan (replace all existing).\n * @param scanUuid - Scan UUID.\n * @param request - Labels to set.\n * @returns Labels response.\n */\n async setLabels(scanUuid: string, request: LabelsCreateRequest): Promise<LabelsResponse> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<LabelsResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete labels from a scan by key.\n * @param scanUuid - Scan UUID.\n * @param keys - Label keys to delete.\n */\n async deleteLabels(scanUuid: string, keys: string[]): Promise<void> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n // Build keys as repeated query params: ?keys=key1&keys=key2\n // managementHttpRequest uses URLSearchParams.set which only supports single values,\n // so we manually build the query string portion\n const url = new URL(`https://placeholder${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels`);\n for (const key of keys) {\n url.searchParams.append('keys', key);\n }\n // Extract just the query string and append to path\n const queryString = url.searchParams.toString();\n const pathWithQuery = `${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels${queryString ? `?${queryString}` : ''}`;\n\n await managementHttpRequest<void>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: pathWithQuery,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n }\n\n /**\n * Get rule violations for a scan.\n * @param scanUuid - Scan UUID.\n * @param opts - Pagination options.\n * @returns Paginated list of violations.\n */\n async getViolations(scanUuid: string, opts?: ModelSecurityListOptions): Promise<ViolationList> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ViolationList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/rule-violations`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get distinct label keys across all scans.\n * @param opts - Pagination options.\n * @returns Paginated list of label keys.\n */\n async getLabelKeys(opts?: ModelSecurityListOptions): Promise<LabelKeyList> {\n const res = await managementHttpRequest<LabelKeyList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/label-keys`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get distinct values for a label key.\n * @param key - Label key to get values for.\n * @param opts - Pagination options.\n * @returns Paginated list of label values.\n */\n async getLabelValues(key: string, opts?: ModelSecurityListOptions): Promise<LabelValueList> {\n const res = await managementHttpRequest<LabelValueList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/label-keys/${encodeURIComponent(key)}/values`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single rule evaluation by UUID.\n * @param uuid - Evaluation UUID.\n * @returns The rule evaluation response.\n */\n async getEvaluation(uuid: string): Promise<RuleEvaluationResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid evaluation uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<RuleEvaluationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_EVALUATIONS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single violation by UUID.\n * @param uuid - Violation UUID.\n * @returns The violation response.\n */\n async getViolation(uuid: string): Promise<ViolationResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid violation uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ViolationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_VIOLATIONS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { MODEL_SEC_SECURITY_GROUPS_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { ModelSecurityListOptions } from './scans-client.js';\nimport type {\n ModelSecurityGroupCreateRequest,\n ModelSecurityGroupResponse,\n ModelSecurityGroupUpdateRequest,\n ListModelSecurityGroupsResponse,\n ModelSecurityRuleInstanceResponse,\n ModelSecurityRuleInstanceUpdateRequest,\n ListModelSecurityRuleInstancesResponse,\n} from '../models/model-security.js';\n\n/** @internal */\nexport interface ModelSecurityGroupsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** Build query params from list options. */\nfunction buildListParams(opts?: ModelSecurityListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Model Security management plane security group operations. */\nexport class ModelSecurityGroupsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityGroupsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new security group.\n * @param request - Security group creation request.\n * @returns The created security group.\n */\n async create(request: ModelSecurityGroupCreateRequest): Promise<ModelSecurityGroupResponse> {\n const res = await managementHttpRequest<ModelSecurityGroupResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SECURITY_GROUPS_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List security groups with optional filters.\n * @param opts - Pagination and filter options.\n * @returns Paginated list of security groups.\n */\n async list(opts?: ModelSecurityListOptions): Promise<ListModelSecurityGroupsResponse> {\n const res = await managementHttpRequest<ListModelSecurityGroupsResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SECURITY_GROUPS_PATH,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single security group by UUID.\n * @param uuid - Security group UUID.\n * @returns The security group.\n */\n async get(uuid: string): Promise<ModelSecurityGroupResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityGroupResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update an existing security group.\n * @param uuid - Security group UUID.\n * @param request - Updated security group fields.\n * @returns The updated security group.\n */\n async update(\n uuid: string,\n request: ModelSecurityGroupUpdateRequest,\n ): Promise<ModelSecurityGroupResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityGroupResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${uuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete a security group.\n * @param uuid - Security group UUID.\n */\n async delete(uuid: string): Promise<void> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n await managementHttpRequest<void>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n }\n\n /**\n * List rule instances for a security group.\n * @param securityGroupUuid - Security group UUID.\n * @param opts - Pagination options.\n * @returns Paginated list of rule instances.\n */\n async listRuleInstances(\n securityGroupUuid: string,\n opts?: ModelSecurityListOptions,\n ): Promise<ListModelSecurityRuleInstancesResponse> {\n if (!isValidUuid(securityGroupUuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${securityGroupUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ListModelSecurityRuleInstancesResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${securityGroupUuid}/rule-instances`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single rule instance within a security group.\n * @param securityGroupUuid - Security group UUID.\n * @param ruleInstanceUuid - Rule instance UUID.\n * @returns The rule instance.\n */\n async getRuleInstance(\n securityGroupUuid: string,\n ruleInstanceUuid: string,\n ): Promise<ModelSecurityRuleInstanceResponse> {\n if (!isValidUuid(securityGroupUuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${securityGroupUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (!isValidUuid(ruleInstanceUuid)) {\n throw new AISecSDKException(\n `Invalid rule instance uuid: ${ruleInstanceUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityRuleInstanceResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${securityGroupUuid}/rule-instances/${ruleInstanceUuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update a rule instance within a security group.\n * @param securityGroupUuid - Security group UUID.\n * @param ruleInstanceUuid - Rule instance UUID.\n * @param request - Updated rule instance fields.\n * @returns The updated rule instance.\n */\n async updateRuleInstance(\n securityGroupUuid: string,\n ruleInstanceUuid: string,\n request: ModelSecurityRuleInstanceUpdateRequest,\n ): Promise<ModelSecurityRuleInstanceResponse> {\n if (!isValidUuid(securityGroupUuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${securityGroupUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (!isValidUuid(ruleInstanceUuid)) {\n throw new AISecSDKException(\n `Invalid rule instance uuid: ${ruleInstanceUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityRuleInstanceResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${securityGroupUuid}/rule-instances/${ruleInstanceUuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { MODEL_SEC_SECURITY_RULES_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { ModelSecurityListOptions } from './scans-client.js';\nimport type {\n ListModelSecurityRulesResponse,\n ModelSecurityRuleResponse,\n} from '../models/model-security.js';\n\n/** @internal */\nexport interface ModelSecurityRulesClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** Build query params from list options. */\nfunction buildListParams(opts?: ModelSecurityListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Model Security management plane security rule operations (read-only). */\nexport class ModelSecurityRulesClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityRulesClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * List available security rules.\n * @param opts - Pagination options.\n * @returns Paginated list of security rules.\n */\n async list(opts?: ModelSecurityListOptions): Promise<ListModelSecurityRulesResponse> {\n const res = await managementHttpRequest<ListModelSecurityRulesResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SECURITY_RULES_PATH,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single security rule by UUID.\n * @param uuid - Security rule UUID.\n * @returns The security rule.\n */\n async get(uuid: string): Promise<ModelSecurityRuleResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security rule uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityRuleResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_RULES_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n DEFAULT_MODEL_SEC_DATA_ENDPOINT,\n DEFAULT_MODEL_SEC_MGMT_ENDPOINT,\n MODEL_SEC_CLIENT_ID,\n MODEL_SEC_CLIENT_SECRET,\n MODEL_SEC_TSG_ID,\n MODEL_SEC_DATA_ENDPOINT,\n MODEL_SEC_MGMT_ENDPOINT,\n MODEL_SEC_TOKEN_ENDPOINT,\n MGMT_CLIENT_ID,\n MGMT_CLIENT_SECRET,\n MGMT_TSG_ID,\n MGMT_TOKEN_ENDPOINT,\n MAX_NUMBER_OF_RETRIES,\n MODEL_SEC_PYPI_AUTH_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { OAuthClient } from '../management/oauth-client.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport { ModelSecurityScansClient } from './scans-client.js';\nimport { ModelSecurityGroupsClient } from './security-groups-client.js';\nimport { ModelSecurityRulesClient } from './security-rules-client.js';\nimport type { PyPIAuthResponse } from '../models/model-security.js';\n\n/** Options for constructing a {@link ModelSecurityClient}. */\nexport interface ModelSecurityClientOptions {\n /** OAuth2 client ID. Falls back to `PANW_MODEL_SEC_CLIENT_ID`, then `PANW_MGMT_CLIENT_ID`. */\n clientId?: string;\n /** OAuth2 client secret. Falls back to `PANW_MODEL_SEC_CLIENT_SECRET`, then `PANW_MGMT_CLIENT_SECRET`. */\n clientSecret?: string;\n /** Tenant Service Group ID. Falls back to `PANW_MODEL_SEC_TSG_ID`, then `PANW_MGMT_TSG_ID`. */\n tsgId?: string;\n /** Data plane endpoint URL. Falls back to `PANW_MODEL_SEC_DATA_ENDPOINT`. */\n dataEndpoint?: string;\n /** Management plane endpoint URL. Falls back to `PANW_MODEL_SEC_MGMT_ENDPOINT`. */\n mgmtEndpoint?: string;\n /** OAuth2 token endpoint URL. Falls back to `PANW_MODEL_SEC_TOKEN_ENDPOINT`, then `PANW_MGMT_TOKEN_ENDPOINT`. */\n tokenEndpoint?: string;\n /** Max retry attempts (0-5). Defaults to 5. */\n numRetries?: number;\n}\n\n/**\n * Client for AIRS Model Security API operations.\n * Uses two base URLs: data plane for scans, management plane for security groups/rules.\n * Authenticates via OAuth2 client_credentials flow (shared token for both planes).\n */\nexport class ModelSecurityClient {\n /** Data plane scan operations. */\n public readonly scans: ModelSecurityScansClient;\n /** Management plane security group operations. */\n public readonly securityGroups: ModelSecurityGroupsClient;\n /** Management plane security rule operations (read-only). */\n public readonly securityRules: ModelSecurityRulesClient;\n\n private readonly mgmtEndpoint: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityClientOptions = {}) {\n const clientId =\n opts.clientId ?? process.env[MODEL_SEC_CLIENT_ID] ?? process.env[MGMT_CLIENT_ID];\n const clientSecret =\n opts.clientSecret ?? process.env[MODEL_SEC_CLIENT_SECRET] ?? process.env[MGMT_CLIENT_SECRET];\n const tsgId = opts.tsgId ?? process.env[MODEL_SEC_TSG_ID] ?? process.env[MGMT_TSG_ID];\n const dataEndpoint =\n opts.dataEndpoint ?? process.env[MODEL_SEC_DATA_ENDPOINT] ?? DEFAULT_MODEL_SEC_DATA_ENDPOINT;\n const mgmtEndpoint =\n opts.mgmtEndpoint ?? process.env[MODEL_SEC_MGMT_ENDPOINT] ?? DEFAULT_MODEL_SEC_MGMT_ENDPOINT;\n const tokenEndpoint =\n opts.tokenEndpoint ??\n process.env[MODEL_SEC_TOKEN_ENDPOINT] ??\n process.env[MGMT_TOKEN_ENDPOINT];\n const numRetries = Math.min(\n Math.max(opts.numRetries ?? MAX_NUMBER_OF_RETRIES, 0),\n MAX_NUMBER_OF_RETRIES,\n );\n\n if (!clientId) {\n throw new AISecSDKException(\n 'clientId is required (option or PANW_MODEL_SEC_CLIENT_ID / PANW_MGMT_CLIENT_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!clientSecret) {\n throw new AISecSDKException(\n 'clientSecret is required (option or PANW_MODEL_SEC_CLIENT_SECRET / PANW_MGMT_CLIENT_SECRET env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!tsgId) {\n throw new AISecSDKException(\n 'tsgId is required (option or PANW_MODEL_SEC_TSG_ID / PANW_MGMT_TSG_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n this.oauthClient = new OAuthClient({\n clientId,\n clientSecret,\n tsgId,\n tokenEndpoint,\n });\n this.mgmtEndpoint = mgmtEndpoint;\n this.numRetries = numRetries;\n\n this.scans = new ModelSecurityScansClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.securityGroups = new ModelSecurityGroupsClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.securityRules = new ModelSecurityRulesClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n }\n\n /**\n * Get PyPI authentication credentials for Google Artifact Registry.\n * @returns PyPI auth response with URL and expiration.\n */\n async getPyPIAuth(): Promise<PyPIAuthResponse> {\n const res = await managementHttpRequest<PyPIAuthResponse>({\n method: 'GET',\n baseUrl: this.mgmtEndpoint,\n path: MODEL_SEC_PYPI_AUTH_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_SCAN_PATH, RED_TEAM_CATEGORIES_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type {\n JobCreateRequest,\n JobResponse,\n JobListResponse,\n JobAbortResponse,\n CategoryModel,\n} from '../models/red-team.js';\n\n/** Pagination and filter options for Red Team list operations. */\nexport interface RedTeamListOptions {\n skip?: number;\n limit?: number;\n sort_by?: string;\n sort_direction?: string;\n search?: string;\n}\n\n/** Extended list options for scan/job listing. */\nexport interface RedTeamScanListOptions extends RedTeamListOptions {\n status?: string;\n job_type?: string;\n target_id?: string;\n}\n\n/** @internal */\nexport interface RedTeamScansClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Red Team data plane scan operations. */\nexport class RedTeamScansClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamScansClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /** Create a new red team scan job. */\n async create(request: JobCreateRequest): Promise<JobResponse> {\n const res = await managementHttpRequest<JobResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: RED_TEAM_SCAN_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List red team scan jobs with optional filters. */\n async list(opts?: RedTeamScanListOptions): Promise<JobListResponse> {\n const params = buildListParams(opts);\n if (opts?.status !== undefined) params.status = opts.status;\n if (opts?.job_type !== undefined) params.job_type = opts.job_type;\n if (opts?.target_id !== undefined) params.target_id = opts.target_id;\n\n const res = await managementHttpRequest<JobListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: RED_TEAM_SCAN_PATH,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a single scan job by ID. */\n async get(jobId: string): Promise<JobResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n\n const res = await managementHttpRequest<JobResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_SCAN_PATH}/${jobId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Abort a running scan job. */\n async abort(jobId: string): Promise<JobAbortResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n\n const res = await managementHttpRequest<JobAbortResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_SCAN_PATH}/${jobId}/abort`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get all categories with subcategories. */\n async getCategories(): Promise<CategoryModel[]> {\n const res = await managementHttpRequest<CategoryModel[]>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: RED_TEAM_CATEGORIES_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n RED_TEAM_REPORT_STATIC_PATH,\n RED_TEAM_REPORT_DYNAMIC_PATH,\n RED_TEAM_REPORT_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n AttackListResponse,\n AttackDetailResponse,\n AttackMultiTurnDetailResponse,\n StaticJobReport,\n DynamicJobReport,\n RemediationResponse,\n RuntimeSecurityProfileResponse,\n GoalListResponse,\n StreamListResponse,\n StreamDetailResponse,\n} from '../models/red-team.js';\n\n/** Attack list filter options. */\nexport interface AttackListOptions extends RedTeamListOptions {\n status?: string;\n severity?: string;\n category?: string;\n sub_category?: string;\n}\n\n/** Goal list filter options. */\nexport interface GoalListOptions extends RedTeamListOptions {\n goal_type?: string;\n}\n\n/** @internal */\nexport interface RedTeamReportsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\nfunction validateJobId(jobId: string): void {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n}\n\n/** Client for Red Team data plane report operations. */\nexport class RedTeamReportsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamReportsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n // -----------------------------------------------------------------------\n // Static (attack library) report endpoints\n // -----------------------------------------------------------------------\n\n /** List attacks for a static scan. */\n async listAttacks(jobId: string, opts?: AttackListOptions): Promise<AttackListResponse> {\n validateJobId(jobId);\n const params = buildListParams(opts);\n if (opts?.status !== undefined) params.status = opts.status;\n if (opts?.severity !== undefined) params.severity = opts.severity;\n if (opts?.category !== undefined) params.category = opts.category;\n if (opts?.sub_category !== undefined) params.sub_category = opts.sub_category;\n\n const res = await managementHttpRequest<AttackListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/list-attacks`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get attack details for a static scan. */\n async getAttackDetail(jobId: string, attackId: string): Promise<AttackDetailResponse> {\n validateJobId(jobId);\n if (!isValidUuid(attackId)) {\n throw new AISecSDKException(\n `Invalid attack id: ${attackId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<AttackDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/attack/${attackId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get multi-turn attack details for a static scan. */\n async getMultiTurnAttackDetail(\n jobId: string,\n attackId: string,\n ): Promise<AttackMultiTurnDetailResponse> {\n validateJobId(jobId);\n if (!isValidUuid(attackId)) {\n throw new AISecSDKException(\n `Invalid attack id: ${attackId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<AttackMultiTurnDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/attack-multi-turn/${attackId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get the attack library report for a static scan. */\n async getStaticReport(jobId: string): Promise<StaticJobReport> {\n validateJobId(jobId);\n const res = await managementHttpRequest<StaticJobReport>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/report`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get remediation recommendations for a static scan. */\n async getStaticRemediation(jobId: string): Promise<RemediationResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RemediationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/remediation`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get runtime security profile config for a static scan. */\n async getStaticRuntimePolicy(jobId: string): Promise<RuntimeSecurityProfileResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RuntimeSecurityProfileResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/runtime-policy-config`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Dynamic (agent) report endpoints\n // -----------------------------------------------------------------------\n\n /** Get the agent scan report for a dynamic scan. */\n async getDynamicReport(jobId: string): Promise<DynamicJobReport> {\n validateJobId(jobId);\n const res = await managementHttpRequest<DynamicJobReport>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/report`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get remediation recommendations for a dynamic scan. */\n async getDynamicRemediation(jobId: string): Promise<RemediationResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RemediationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/remediation`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get runtime security profile config for a dynamic scan. */\n async getDynamicRuntimePolicy(jobId: string): Promise<RuntimeSecurityProfileResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RuntimeSecurityProfileResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/runtime-policy-config`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List goals for a dynamic scan. */\n async listGoals(jobId: string, opts?: GoalListOptions): Promise<GoalListResponse> {\n validateJobId(jobId);\n const params = buildListParams(opts);\n if (opts?.goal_type !== undefined) params.goal_type = opts.goal_type;\n\n const res = await managementHttpRequest<GoalListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/list-goals`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List streams for a goal in a dynamic scan. */\n async listGoalStreams(\n jobId: string,\n goalId: string,\n opts?: RedTeamListOptions,\n ): Promise<StreamListResponse> {\n validateJobId(jobId);\n if (!isValidUuid(goalId)) {\n throw new AISecSDKException(\n `Invalid goal id: ${goalId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<StreamListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/goal/${goalId}/list-streams`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Common report endpoints\n // -----------------------------------------------------------------------\n\n /** Get stream details by stream ID. */\n async getStreamDetail(streamId: string): Promise<StreamDetailResponse> {\n if (!isValidUuid(streamId)) {\n throw new AISecSDKException(\n `Invalid stream id: ${streamId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<StreamDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/stream/${streamId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Download a report in the specified format. */\n async downloadReport(jobId: string, format?: string): Promise<unknown> {\n validateJobId(jobId);\n const params: Record<string, string> = {};\n if (format !== undefined) params.file_format = format;\n\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_PATH}/${jobId}/download`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Generate a partial report for a running scan. */\n async generatePartialReport(jobId: string): Promise<unknown> {\n validateJobId(jobId);\n const res = await managementHttpRequest<unknown>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_PATH}/${jobId}/generate-partial-report`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n CustomAttackReportResponse,\n PromptSetsReportResponse,\n PromptDetailResponse,\n CustomAttacksListResponse,\n PropertyStatistic,\n} from '../models/red-team.js';\n\n/** @internal */\nexport interface RedTeamCustomAttackReportsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\nfunction validateJobId(jobId: string): void {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n}\n\n/** Client for Red Team custom attack report operations. */\nexport class RedTeamCustomAttackReportsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamCustomAttackReportsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /** Get custom attack report for a scan. */\n async getReport(jobId: string): Promise<CustomAttackReportResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<CustomAttackReportResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get prompt sets for a custom attack scan. */\n async getPromptSets(jobId: string): Promise<PromptSetsReportResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<PromptSetsReportResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}/prompt-sets`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get prompts for a specific prompt set in a scan. */\n async getPromptsBySet(\n jobId: string,\n promptSetId: string,\n opts?: RedTeamListOptions,\n ): Promise<unknown> {\n validateJobId(jobId);\n if (!isValidUuid(promptSetId)) {\n throw new AISecSDKException(\n `Invalid prompt set id: ${promptSetId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}/prompt-set/${promptSetId}/prompts`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get details for a specific prompt. */\n async getPromptDetail(jobId: string, promptId: string): Promise<PromptDetailResponse> {\n validateJobId(jobId);\n if (!isValidUuid(promptId)) {\n throw new AISecSDKException(\n `Invalid prompt id: ${promptId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<PromptDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}/prompt/${promptId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List custom attacks for a scan. */\n async listCustomAttacks(\n jobId: string,\n opts?: RedTeamListOptions,\n ): Promise<CustomAttacksListResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<CustomAttacksListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/job/${jobId}/list-custom-attacks`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get attack outputs for a custom attack. */\n async getAttackOutputs(jobId: string, attackId: string): Promise<unknown> {\n validateJobId(jobId);\n if (!isValidUuid(attackId)) {\n throw new AISecSDKException(\n `Invalid attack id: ${attackId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/job/${jobId}/attack/${attackId}/list-outputs`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get property statistics for a custom attack scan. */\n async getPropertyStats(jobId: string): Promise<PropertyStatistic[]> {\n validateJobId(jobId);\n const res = await managementHttpRequest<PropertyStatistic[]>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/job/${jobId}/property-stats`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_TARGET_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n TargetCreateRequest,\n TargetUpdateRequest,\n TargetContextUpdate,\n TargetResponse,\n TargetList,\n TargetProbeRequest,\n TargetProfileResponse,\n BaseResponse,\n} from '../models/red-team.js';\n\n/** Target list filter options. */\nexport interface TargetListOptions extends RedTeamListOptions {\n target_type?: string;\n status?: string;\n active?: boolean;\n}\n\n/** @internal */\nexport interface RedTeamTargetsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Red Team management plane target operations. */\nexport class RedTeamTargetsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamTargetsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /** Create a new target. */\n async create(request: TargetCreateRequest): Promise<TargetResponse> {\n const res = await managementHttpRequest<TargetResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: RED_TEAM_TARGET_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List targets with optional filters. */\n async list(opts?: TargetListOptions): Promise<TargetList> {\n const params = buildListParams(opts);\n if (opts?.target_type !== undefined) params.target_type = opts.target_type;\n if (opts?.status !== undefined) params.status = opts.status;\n if (opts?.active !== undefined) params.active = String(opts.active);\n\n const res = await managementHttpRequest<TargetList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: RED_TEAM_TARGET_PATH,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a target by UUID. */\n async get(uuid: string): Promise<TargetResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a target. */\n async update(uuid: string, request: TargetUpdateRequest): Promise<TargetResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Delete a target. */\n async delete(uuid: string): Promise<BaseResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<BaseResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Run profiling probes on a target. */\n async probe(request: TargetProbeRequest): Promise<TargetResponse> {\n const res = await managementHttpRequest<TargetResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/probe`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get profiling results for a target. */\n async getProfile(uuid: string): Promise<TargetProfileResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetProfileResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}/profile`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a target profile (background + additional context). */\n async updateProfile(uuid: string, request: TargetContextUpdate): Promise<TargetProfileResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetProfileResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}/profile`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_CUSTOM_ATTACK_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n CustomPromptSetCreateRequest,\n CustomPromptSetUpdateRequest,\n CustomPromptSetArchiveRequest,\n CustomPromptSetResponse,\n CustomPromptSetList,\n CustomPromptSetListActive,\n CustomPromptSetReference,\n CustomPromptSetVersionInfo,\n CustomPromptCreateRequest,\n CustomPromptUpdateRequest,\n CustomPromptResponse,\n CustomPromptList,\n PropertyNameCreateRequest,\n PropertyValueCreateRequest,\n PropertyNamesListResponse,\n PropertyValuesResponse,\n PropertyValuesMultipleResponse,\n BaseResponse,\n} from '../models/red-team.js';\n\n/** Prompt set list filter options. */\nexport interface PromptSetListOptions extends RedTeamListOptions {\n active?: boolean;\n archive?: boolean;\n}\n\n/** Prompt list filter options. */\nexport interface PromptListOptions extends RedTeamListOptions {\n active?: boolean;\n}\n\n/** @internal */\nexport interface RedTeamCustomAttacksClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\nfunction validateUuid(uuid: string, label: string): void {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(`Invalid ${label}: ${uuid}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n}\n\n/** Client for Red Team management plane custom attack operations. */\nexport class RedTeamCustomAttacksClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamCustomAttacksClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n // -----------------------------------------------------------------------\n // Prompt Set operations\n // -----------------------------------------------------------------------\n\n /** Create a new custom prompt set. */\n async createPromptSet(request: CustomPromptSetCreateRequest): Promise<CustomPromptSetResponse> {\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List custom prompt sets. */\n async listPromptSets(opts?: PromptSetListOptions): Promise<CustomPromptSetList> {\n const params = buildListParams(opts);\n if (opts?.active !== undefined) params.active = String(opts.active);\n if (opts?.archive !== undefined) params.archive = String(opts.archive);\n\n const res = await managementHttpRequest<CustomPromptSetList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/list-custom-prompt-sets`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a prompt set by UUID. */\n async getPromptSet(uuid: string): Promise<CustomPromptSetResponse> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a prompt set. */\n async updatePromptSet(\n uuid: string,\n request: CustomPromptSetUpdateRequest,\n ): Promise<CustomPromptSetResponse> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Archive or unarchive a prompt set. */\n async archivePromptSet(\n uuid: string,\n request: CustomPromptSetArchiveRequest,\n ): Promise<CustomPromptSetResponse> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}/archive`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Resolve a prompt set reference for data plane consumption. */\n async getPromptSetReference(uuid: string): Promise<CustomPromptSetReference> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetReference>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}/reference`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get version information for a prompt set. */\n async getPromptSetVersionInfo(uuid: string): Promise<CustomPromptSetVersionInfo> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetVersionInfo>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}/version-info`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List active prompt sets (for data plane). */\n async listActivePromptSets(): Promise<CustomPromptSetListActive> {\n const res = await managementHttpRequest<CustomPromptSetListActive>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/active-custom-prompt-sets`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Download CSV template for a prompt set. */\n async downloadTemplate(uuid: string): Promise<unknown> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/download-template/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Prompt operations\n // -----------------------------------------------------------------------\n\n /** Create a new custom prompt. */\n async createPrompt(request: CustomPromptCreateRequest): Promise<CustomPromptResponse> {\n const res = await managementHttpRequest<CustomPromptResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/custom-prompt`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List prompts in a prompt set. */\n async listPrompts(promptSetUuid: string, opts?: PromptListOptions): Promise<CustomPromptList> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n const params = buildListParams(opts);\n if (opts?.active !== undefined) params.active = String(opts.active);\n\n const res = await managementHttpRequest<CustomPromptList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/list-custom-prompts`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a prompt by UUID. */\n async getPrompt(promptSetUuid: string, promptUuid: string): Promise<CustomPromptResponse> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n validateUuid(promptUuid, 'prompt uuid');\n const res = await managementHttpRequest<CustomPromptResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/custom-prompt/${promptUuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a prompt. */\n async updatePrompt(\n promptSetUuid: string,\n promptUuid: string,\n request: CustomPromptUpdateRequest,\n ): Promise<CustomPromptResponse> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n validateUuid(promptUuid, 'prompt uuid');\n const res = await managementHttpRequest<CustomPromptResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/custom-prompt/${promptUuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Delete a prompt. */\n async deletePrompt(promptSetUuid: string, promptUuid: string): Promise<BaseResponse> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n validateUuid(promptUuid, 'prompt uuid');\n const res = await managementHttpRequest<BaseResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/custom-prompt/${promptUuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Property operations\n // -----------------------------------------------------------------------\n\n /** Get all property names. */\n async getPropertyNames(): Promise<PropertyNamesListResponse> {\n const res = await managementHttpRequest<PropertyNamesListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-names`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Create a new property name. */\n async createPropertyName(request: PropertyNameCreateRequest): Promise<BaseResponse> {\n const res = await managementHttpRequest<BaseResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-names`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get values for a property name. */\n async getPropertyValues(propertyName: string): Promise<PropertyValuesResponse> {\n const res = await managementHttpRequest<PropertyValuesResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values/${encodeURIComponent(propertyName)}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get values for multiple property names. */\n async getPropertyValuesMultiple(\n propertyNames: string[],\n ): Promise<PropertyValuesMultipleResponse> {\n const url = new URL(`https://placeholder${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values`);\n for (const name of propertyNames) {\n url.searchParams.append('property_names', name);\n }\n const queryString = url.searchParams.toString();\n const pathWithQuery = `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values${queryString ? `?${queryString}` : ''}`;\n\n const res = await managementHttpRequest<PropertyValuesMultipleResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: pathWithQuery,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Create a property value. */\n async createPropertyValue(request: PropertyValueCreateRequest): Promise<BaseResponse> {\n const res = await managementHttpRequest<BaseResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n DEFAULT_RED_TEAM_DATA_ENDPOINT,\n DEFAULT_RED_TEAM_MGMT_ENDPOINT,\n RED_TEAM_CLIENT_ID,\n RED_TEAM_CLIENT_SECRET,\n RED_TEAM_TSG_ID,\n RED_TEAM_DATA_ENDPOINT,\n RED_TEAM_MGMT_ENDPOINT,\n RED_TEAM_TOKEN_ENDPOINT,\n MGMT_CLIENT_ID,\n MGMT_CLIENT_SECRET,\n MGMT_TSG_ID,\n MGMT_TOKEN_ENDPOINT,\n MAX_NUMBER_OF_RETRIES,\n RED_TEAM_DASHBOARD_PATH,\n RED_TEAM_QUOTA_PATH,\n RED_TEAM_ERROR_LOG_PATH,\n RED_TEAM_SENTIMENT_PATH,\n RED_TEAM_MGMT_DASHBOARD_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { OAuthClient } from '../management/oauth-client.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport { RedTeamScansClient } from './scans-client.js';\nimport { RedTeamReportsClient } from './reports-client.js';\nimport { RedTeamCustomAttackReportsClient } from './custom-attack-reports-client.js';\nimport { RedTeamTargetsClient } from './targets-client.js';\nimport { RedTeamCustomAttacksClient } from './custom-attacks-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n ScanStatisticsResponse,\n ScoreTrendResponse,\n QuotaSummary,\n ErrorLogListResponse,\n SentimentRequest,\n SentimentResponse,\n DashboardOverviewResponse,\n} from '../models/red-team.js';\n\n/** Options for constructing a {@link RedTeamClient}. */\nexport interface RedTeamClientOptions {\n /** OAuth2 client ID. Falls back to `PANW_RED_TEAM_CLIENT_ID`, then `PANW_MGMT_CLIENT_ID`. */\n clientId?: string;\n /** OAuth2 client secret. Falls back to `PANW_RED_TEAM_CLIENT_SECRET`, then `PANW_MGMT_CLIENT_SECRET`. */\n clientSecret?: string;\n /** Tenant Service Group ID. Falls back to `PANW_RED_TEAM_TSG_ID`, then `PANW_MGMT_TSG_ID`. */\n tsgId?: string;\n /** Data plane endpoint URL. Falls back to `PANW_RED_TEAM_DATA_ENDPOINT`. */\n dataEndpoint?: string;\n /** Management plane endpoint URL. Falls back to `PANW_RED_TEAM_MGMT_ENDPOINT`. */\n mgmtEndpoint?: string;\n /** OAuth2 token endpoint URL. Falls back to `PANW_RED_TEAM_TOKEN_ENDPOINT`, then `PANW_MGMT_TOKEN_ENDPOINT`. */\n tokenEndpoint?: string;\n /** Max retry attempts (0-5). Defaults to 5. */\n numRetries?: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/**\n * Client for AIRS Red Teaming API operations.\n * Uses two base URLs: data plane for scans/reports, management plane for targets/custom attacks.\n */\nexport class RedTeamClient {\n /** Data plane scan operations. */\n public readonly scans: RedTeamScansClient;\n /** Data plane report operations. */\n public readonly reports: RedTeamReportsClient;\n /** Data plane custom attack report operations. */\n public readonly customAttackReports: RedTeamCustomAttackReportsClient;\n /** Management plane target operations. */\n public readonly targets: RedTeamTargetsClient;\n /** Management plane custom attack/prompt set operations. */\n public readonly customAttacks: RedTeamCustomAttacksClient;\n\n private readonly dataEndpoint: string;\n private readonly mgmtEndpoint: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamClientOptions = {}) {\n const clientId =\n opts.clientId ?? process.env[RED_TEAM_CLIENT_ID] ?? process.env[MGMT_CLIENT_ID];\n const clientSecret =\n opts.clientSecret ?? process.env[RED_TEAM_CLIENT_SECRET] ?? process.env[MGMT_CLIENT_SECRET];\n const tsgId = opts.tsgId ?? process.env[RED_TEAM_TSG_ID] ?? process.env[MGMT_TSG_ID];\n const dataEndpoint =\n opts.dataEndpoint ?? process.env[RED_TEAM_DATA_ENDPOINT] ?? DEFAULT_RED_TEAM_DATA_ENDPOINT;\n const mgmtEndpoint =\n opts.mgmtEndpoint ?? process.env[RED_TEAM_MGMT_ENDPOINT] ?? DEFAULT_RED_TEAM_MGMT_ENDPOINT;\n const tokenEndpoint =\n opts.tokenEndpoint ??\n process.env[RED_TEAM_TOKEN_ENDPOINT] ??\n process.env[MGMT_TOKEN_ENDPOINT];\n const numRetries = Math.min(\n Math.max(opts.numRetries ?? MAX_NUMBER_OF_RETRIES, 0),\n MAX_NUMBER_OF_RETRIES,\n );\n\n if (!clientId) {\n throw new AISecSDKException(\n 'clientId is required (option or PANW_RED_TEAM_CLIENT_ID / PANW_MGMT_CLIENT_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!clientSecret) {\n throw new AISecSDKException(\n 'clientSecret is required (option or PANW_RED_TEAM_CLIENT_SECRET / PANW_MGMT_CLIENT_SECRET env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!tsgId) {\n throw new AISecSDKException(\n 'tsgId is required (option or PANW_RED_TEAM_TSG_ID / PANW_MGMT_TSG_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n this.oauthClient = new OAuthClient({ clientId, clientSecret, tsgId, tokenEndpoint });\n this.dataEndpoint = dataEndpoint;\n this.mgmtEndpoint = mgmtEndpoint;\n this.numRetries = numRetries;\n\n this.scans = new RedTeamScansClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.reports = new RedTeamReportsClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.customAttackReports = new RedTeamCustomAttackReportsClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.targets = new RedTeamTargetsClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.customAttacks = new RedTeamCustomAttacksClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n }\n\n // -----------------------------------------------------------------------\n // Data plane convenience methods\n // -----------------------------------------------------------------------\n\n /** Get scan statistics and risk profile (data plane dashboard). */\n async getScanStatistics(params?: {\n date_range?: string;\n target_id?: string;\n }): Promise<ScanStatisticsResponse> {\n const p: Record<string, string> = {};\n if (params?.date_range !== undefined) p.date_range = params.date_range;\n if (params?.target_id !== undefined) p.target_id = params.target_id;\n\n const res = await managementHttpRequest<ScanStatisticsResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_DASHBOARD_PATH}/scan-statistics`,\n params: p,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get score trend for a target (data plane dashboard). */\n async getScoreTrend(targetId: string): Promise<ScoreTrendResponse> {\n if (!isValidUuid(targetId)) {\n throw new AISecSDKException(\n `Invalid target id: ${targetId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n const res = await managementHttpRequest<ScoreTrendResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_DASHBOARD_PATH}/score-trend`,\n params: { target_id: targetId },\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get quota summary. */\n async getQuota(): Promise<QuotaSummary> {\n const res = await managementHttpRequest<QuotaSummary>({\n method: 'POST',\n baseUrl: this.dataEndpoint,\n path: RED_TEAM_QUOTA_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List error logs for a scan job. */\n async getErrorLogs(jobId: string, opts?: RedTeamListOptions): Promise<ErrorLogListResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n const res = await managementHttpRequest<ErrorLogListResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_ERROR_LOG_PATH}/${jobId}`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update sentiment for a scan report. */\n async updateSentiment(request: SentimentRequest): Promise<SentimentResponse> {\n const res = await managementHttpRequest<SentimentResponse>({\n method: 'POST',\n baseUrl: this.dataEndpoint,\n path: RED_TEAM_SENTIMENT_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get sentiment for a scan report. */\n async getSentiment(jobId: string): Promise<SentimentResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n const res = await managementHttpRequest<SentimentResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_SENTIMENT_PATH}/${jobId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Management plane convenience methods\n // -----------------------------------------------------------------------\n\n /** Get management dashboard overview. */\n async getDashboardOverview(): Promise<DashboardOverviewResponse> {\n const res = await managementHttpRequest<DashboardOverviewResponse>({\n method: 'GET',\n baseUrl: this.mgmtEndpoint,\n path: RED_TEAM_MGMT_DASHBOARD_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n"],"mappings":"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","names":["ErrorType","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","response","buildListParams","buildListParams","buildListParams","buildListParams","buildListParams","validateJobId","buildListParams","buildListParams","buildListParams"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/errors.ts","../src/configuration.ts","../src/http-retry.ts","../src/utils.ts","../src/http-client.ts","../src/scan/scanner.ts","../src/scan/content.ts","../src/models/enums.ts","../src/models/ai-profile.ts","../src/models/metadata.ts","../src/models/tool-event.ts","../src/models/scan-request.ts","../src/models/scan-response.ts","../src/models/prompt-detected.ts","../src/models/response-detected.ts","../src/models/async-scan.ts","../src/models/scan-id-result.ts","../src/models/threat-report.ts","../src/models/detection.ts","../src/models/dlp-report.ts","../src/models/urlf-report.ts","../src/models/error-response.ts","../src/models/mgmt-security-profile.ts","../src/models/mgmt-custom-topic.ts","../src/models/model-security-enums.ts","../src/models/model-security.ts","../src/models/red-team-enums.ts","../src/models/red-team.ts","../src/models/oauth-token.ts","../src/management/oauth-client.ts","../src/management/management-http-client.ts","../src/management/profiles.ts","../src/management/topics.ts","../src/management/client.ts","../src/model-security/scans-client.ts","../src/model-security/security-groups-client.ts","../src/model-security/security-rules-client.ts","../src/model-security/client.ts","../src/red-team/scans-client.ts","../src/red-team/reports-client.ts","../src/red-team/custom-attack-reports-client.ts","../src/red-team/targets-client.ts","../src/red-team/custom-attacks-client.ts","../src/red-team/client.ts"],"sourcesContent":["// src/constants.ts — mirrors Python SDK constants/base.py\n\nexport const HEADER_API_KEY = 'x-pan-token';\nexport const HEADER_AUTH_TOKEN = 'Authorization';\nexport const PAYLOAD_HASH = 'x-payload-hash';\nexport const BEARER = 'Bearer ';\n\nexport const DEFAULT_ENDPOINT = 'https://service.api.aisecurity.paloaltonetworks.com';\n\n// Environment variable names\nexport const AI_SEC_API_KEY = 'PANW_AI_SEC_API_KEY';\nexport const AI_SEC_API_TOKEN = 'PANW_AI_SEC_API_TOKEN';\nexport const AI_SEC_API_ENDPOINT = 'PANW_AI_SEC_API_ENDPOINT';\n\n// Content length limits (bytes)\nexport const MAX_CONTENT_PROMPT_LENGTH = 2 * 1024 * 1024; // 2 MB\nexport const MAX_CONTENT_RESPONSE_LENGTH = 2 * 1024 * 1024; // 2 MB\nexport const MAX_CONTENT_CONTEXT_LENGTH = 100 * 1024 * 1024; // 100 MB\n\n// Auth limits\nexport const MAX_API_KEY_LENGTH = 2048;\nexport const MAX_TOKEN_LENGTH = 2048;\n\n// String length limits\nexport const MAX_TRANSACTION_ID_STR_LENGTH = 100;\nexport const MAX_SESSION_ID_STR_LENGTH = 100;\nexport const MAX_SCAN_ID_STR_LENGTH = 36;\nexport const MAX_REPORT_ID_STR_LENGTH = 40;\nexport const MAX_AI_PROFILE_NAME_LENGTH = 100;\n\n// Batch / query limits\nexport const MAX_NUMBER_OF_SCAN_IDS = 5;\nexport const MAX_NUMBER_OF_REPORT_IDS = 5;\nexport const MAX_NUMBER_OF_BATCH_SCAN_OBJECTS = 5;\n\n// HTTP / retry\nexport const MAX_CONNECTION_POOL_SIZE = 100;\nexport const MAX_NUMBER_OF_RETRIES = 5;\nexport const HTTP_FORCE_RETRY_STATUS_CODES = [500, 502, 503, 504];\n\n// User-Agent (version injected at build time or read from package.json)\nexport const SDK_VERSION = '0.5.2';\nexport const USER_AGENT = `PAN-AIRS/${SDK_VERSION}-typescript-sdk`;\n\n// Management API defaults\nexport const DEFAULT_MGMT_ENDPOINT = 'https://api.sase.paloaltonetworks.com/aisec';\nexport const DEFAULT_TOKEN_ENDPOINT = 'https://auth.apps.paloaltonetworks.com/oauth2/access_token';\n\n// Management env vars\nexport const MGMT_CLIENT_ID = 'PANW_MGMT_CLIENT_ID';\nexport const MGMT_CLIENT_SECRET = 'PANW_MGMT_CLIENT_SECRET';\nexport const MGMT_TSG_ID = 'PANW_MGMT_TSG_ID';\nexport const MGMT_ENDPOINT = 'PANW_MGMT_ENDPOINT';\nexport const MGMT_TOKEN_ENDPOINT = 'PANW_MGMT_TOKEN_ENDPOINT';\n\n// API paths — scan\nexport const SYNC_SCAN_PATH = '/v1/scan/sync/request';\nexport const ASYNC_SCAN_PATH = '/v1/scan/async/request';\nexport const SCAN_RESULTS_PATH = '/v1/scan/results';\nexport const SCAN_REPORTS_PATH = '/v1/scan/reports';\n\n// API paths — management\nexport const MGMT_PROFILE_PATH = '/v1/mgmt/profile';\nexport const MGMT_PROFILES_TSG_PATH = '/v1/mgmt/profiles/tsg';\nexport const MGMT_TOPIC_PATH = '/v1/mgmt/topic';\nexport const MGMT_TOPICS_TSG_PATH = '/v1/mgmt/topics/tsg';\nexport const MGMT_TOPIC_FORCE_PATH = '/v1/mgmt/topic/force';\n\n// Model Security API defaults\nexport const DEFAULT_MODEL_SEC_DATA_ENDPOINT = 'https://api.sase.paloaltonetworks.com/aims/data';\nexport const DEFAULT_MODEL_SEC_MGMT_ENDPOINT = 'https://api.sase.paloaltonetworks.com/aims/mgmt';\n\n// Model Security env vars\nexport const MODEL_SEC_CLIENT_ID = 'PANW_MODEL_SEC_CLIENT_ID';\nexport const MODEL_SEC_CLIENT_SECRET = 'PANW_MODEL_SEC_CLIENT_SECRET';\nexport const MODEL_SEC_TSG_ID = 'PANW_MODEL_SEC_TSG_ID';\nexport const MODEL_SEC_DATA_ENDPOINT = 'PANW_MODEL_SEC_DATA_ENDPOINT';\nexport const MODEL_SEC_MGMT_ENDPOINT = 'PANW_MODEL_SEC_MGMT_ENDPOINT';\nexport const MODEL_SEC_TOKEN_ENDPOINT = 'PANW_MODEL_SEC_TOKEN_ENDPOINT';\n\n// API paths — model security data plane\nexport const MODEL_SEC_SCANS_PATH = '/v1/scans';\nexport const MODEL_SEC_EVALUATIONS_PATH = '/v1/evaluations';\nexport const MODEL_SEC_VIOLATIONS_PATH = '/v1/violations';\n\n// API paths — model security management\nexport const MODEL_SEC_SECURITY_GROUPS_PATH = '/v1/security-groups';\nexport const MODEL_SEC_SECURITY_RULES_PATH = '/v1/security-rules';\nexport const MODEL_SEC_PYPI_AUTH_PATH = '/v1/pypi/authenticate';\n\n// Red Team API defaults\nexport const DEFAULT_RED_TEAM_DATA_ENDPOINT =\n 'https://api.sase.paloaltonetworks.com/ai-red-teaming/data-plane';\nexport const DEFAULT_RED_TEAM_MGMT_ENDPOINT =\n 'https://api.sase.paloaltonetworks.com/ai-red-teaming/mgmt-plane';\n\n// Red Team env vars\nexport const RED_TEAM_CLIENT_ID = 'PANW_RED_TEAM_CLIENT_ID';\nexport const RED_TEAM_CLIENT_SECRET = 'PANW_RED_TEAM_CLIENT_SECRET';\nexport const RED_TEAM_TSG_ID = 'PANW_RED_TEAM_TSG_ID';\nexport const RED_TEAM_DATA_ENDPOINT = 'PANW_RED_TEAM_DATA_ENDPOINT';\nexport const RED_TEAM_MGMT_ENDPOINT = 'PANW_RED_TEAM_MGMT_ENDPOINT';\nexport const RED_TEAM_TOKEN_ENDPOINT = 'PANW_RED_TEAM_TOKEN_ENDPOINT';\n\n// API paths — red team data plane\nexport const RED_TEAM_SCAN_PATH = '/v1/scan';\nexport const RED_TEAM_CATEGORIES_PATH = '/v1/categories';\nexport const RED_TEAM_REPORT_STATIC_PATH = '/v1/report/static';\nexport const RED_TEAM_REPORT_DYNAMIC_PATH = '/v1/report/dynamic';\nexport const RED_TEAM_REPORT_PATH = '/v1/report';\nexport const RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH = '/v1/custom-attacks';\nexport const RED_TEAM_DASHBOARD_PATH = '/v1/dashboard';\nexport const RED_TEAM_QUOTA_PATH = '/v1/metering/quota';\nexport const RED_TEAM_ERROR_LOG_PATH = '/v1/error-log/job';\nexport const RED_TEAM_SENTIMENT_PATH = '/v1/sentiment';\n\n// API paths — red team management plane\nexport const RED_TEAM_TARGET_PATH = '/v1/target';\nexport const RED_TEAM_CUSTOM_ATTACK_PATH = '/v1/custom-attack';\nexport const RED_TEAM_MGMT_DASHBOARD_PATH = '/v1/dashboard/overview';\n","// src/errors.ts — mirrors Python SDK exceptions.py\n\n/** Classification of SDK errors by origin. */\nexport enum ErrorType {\n /** 5xx response from the AIRS API. */\n SERVER_SIDE_ERROR = 'AISEC_SERVER_SIDE_ERROR',\n /** 4xx response or network failure. */\n CLIENT_SIDE_ERROR = 'AISEC_CLIENT_SIDE_ERROR',\n /** Invalid user-supplied input (bad UUID, oversized content, etc.). */\n USER_REQUEST_PAYLOAD_ERROR = 'AISEC_USER_REQUEST_PAYLOAD_ERROR',\n /** Required configuration value is missing. */\n MISSING_VARIABLE = 'AISEC_MISSING_VARIABLE',\n /** Internal SDK error. */\n AISEC_SDK_ERROR = 'AISEC_SDK_ERROR',\n /** OAuth2 token fetch failure. */\n OAUTH_ERROR = 'AISEC_OAUTH_ERROR',\n}\n\n/**\n * Base exception for all AIRS SDK errors.\n * The `errorType` field classifies the error origin.\n */\nexport class AISecSDKException extends Error {\n public readonly errorType?: ErrorType;\n\n /**\n * @param message - Human-readable error description.\n * @param errorType - Classification of the error.\n */\n constructor(message: string, errorType?: ErrorType) {\n super(errorType ? `${errorType}:${message}` : message);\n this.name = 'AISecSDKException';\n this.errorType = errorType;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AISecSDKException);\n }\n }\n}\n","// src/configuration.ts — mirrors Python SDK configuration.py\n\nimport {\n DEFAULT_ENDPOINT,\n AI_SEC_API_KEY,\n AI_SEC_API_TOKEN,\n AI_SEC_API_ENDPOINT,\n MAX_API_KEY_LENGTH,\n MAX_TOKEN_LENGTH,\n MAX_NUMBER_OF_RETRIES,\n} from './constants.js';\nimport { AISecSDKException, ErrorType } from './errors.js';\n\n/** Options for initializing the global scan API configuration. */\nexport interface InitOptions {\n /** AIRS API key. Falls back to `PANW_AI_SEC_API_KEY` env var. */\n apiKey?: string;\n /** Pre-obtained bearer token. Falls back to `PANW_AI_SEC_API_TOKEN` env var. */\n apiToken?: string;\n /** AIRS API endpoint URL. Falls back to `PANW_AI_SEC_API_ENDPOINT` env var. */\n apiEndpoint?: string;\n /** Max retry attempts (0–5). Defaults to 5. */\n numRetries?: number;\n}\n\nclass Configuration {\n private _apiKey?: string;\n private _apiToken?: string;\n private _apiEndpoint: string = DEFAULT_ENDPOINT;\n private _numRetries: number = MAX_NUMBER_OF_RETRIES;\n private _initialized = false;\n\n get apiKey(): string | undefined {\n return this._apiKey;\n }\n get apiToken(): string | undefined {\n return this._apiToken;\n }\n get apiEndpoint(): string {\n return this._apiEndpoint;\n }\n get numRetries(): number {\n return this._numRetries;\n }\n get initialized(): boolean {\n return this._initialized;\n }\n\n init(opts: InitOptions = {}): void {\n // Resolve api key\n const apiKey = (opts.apiKey ?? process.env[AI_SEC_API_KEY] ?? '').trim() || undefined;\n const apiToken = (opts.apiToken ?? process.env[AI_SEC_API_TOKEN] ?? '').trim() || undefined;\n\n if (!apiKey && !apiToken) {\n throw new AISecSDKException(\n 'Either apiKey or apiToken must be provided (or set via environment variables)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n if (apiKey && apiKey.length > MAX_API_KEY_LENGTH) {\n throw new AISecSDKException(\n `apiKey exceeds max length of ${MAX_API_KEY_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n if (apiToken && apiToken.length > MAX_TOKEN_LENGTH) {\n throw new AISecSDKException(\n `apiToken exceeds max length of ${MAX_TOKEN_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n this._apiKey = apiKey;\n this._apiToken = apiToken;\n\n // Resolve endpoint\n const endpoint = opts.apiEndpoint ?? process.env[AI_SEC_API_ENDPOINT] ?? DEFAULT_ENDPOINT;\n this._apiEndpoint = endpoint.replace(/\\/+$/, ''); // strip trailing slashes\n\n // Resolve retries\n if (opts.numRetries !== undefined) {\n if (opts.numRetries < 0 || opts.numRetries > MAX_NUMBER_OF_RETRIES) {\n throw new AISecSDKException(\n `numRetries must be between 0 and ${MAX_NUMBER_OF_RETRIES}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._numRetries = opts.numRetries;\n }\n\n this._initialized = true;\n }\n\n reset(): void {\n this._apiKey = undefined;\n this._apiToken = undefined;\n this._apiEndpoint = DEFAULT_ENDPOINT;\n this._numRetries = MAX_NUMBER_OF_RETRIES;\n this._initialized = false;\n }\n}\n\n/** Global singleton holding scan API configuration. */\nexport const globalConfiguration = new Configuration();\n\n/**\n * Initialize the global scan API configuration. Must be called before using {@link Scanner}.\n * @param opts - Configuration options. Reads env vars as fallbacks.\n * @throws {AISecSDKException} If neither apiKey nor apiToken is provided.\n */\nexport function init(opts: InitOptions = {}): void {\n globalConfiguration.init(opts);\n}\n","// src/http-retry.ts — shared retry logic for HTTP clients\n\nimport { HTTP_FORCE_RETRY_STATUS_CODES } from './constants.js';\nimport { AISecSDKException, ErrorType } from './errors.js';\n\n/**\n * Sleep for the given number of milliseconds.\n * @param ms - Milliseconds to wait.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Calculate exponential backoff delay for the given attempt.\n * @param attempt - Zero-based attempt number.\n * @returns Delay in milliseconds.\n */\nexport function backoffDelay(attempt: number): number {\n return Math.pow(2, attempt) * 1000;\n}\n\n/**\n * Check if an HTTP status code should trigger a retry.\n * @param status - HTTP status code.\n */\nexport function isRetryableStatus(status: number): boolean {\n return HTTP_FORCE_RETRY_STATUS_CODES.includes(status);\n}\n\n/**\n * Classify an HTTP status code as server-side or client-side error.\n * @param status - HTTP status code.\n */\nexport function classifyErrorType(status: number): ErrorType {\n return status >= 500 ? ErrorType.SERVER_SIDE_ERROR : ErrorType.CLIENT_SIDE_ERROR;\n}\n\n/**\n * Extract a human-readable error message from an API error response body.\n * Tries `error_message`, `message`, and `error.message` fields in order.\n * @param body - Raw response body string.\n * @param status - HTTP status code for fallback message.\n */\nexport function extractErrorMessage(body: string, status: number): string {\n try {\n const parsed = JSON.parse(body) as Record<string, unknown>;\n return (\n (parsed.error_message as string) ??\n (parsed.message as string) ??\n ((parsed.error as Record<string, unknown> | undefined)?.message as string) ??\n `API error ${status}`\n );\n } catch {\n return body ? `API error ${status}: ${body}` : `API error ${status}`;\n }\n}\n\n/** Options for {@link executeWithRetry}. */\nexport interface RetryOptions {\n /** Maximum number of retry attempts. */\n maxRetries: number;\n /** Function that performs the HTTP request for each attempt. */\n execute: (attempt: number) => Promise<Response>;\n /** Optional callback for handling special failure cases (e.g. 401 token refresh). Return true to retry without consuming the retry budget. */\n onRetryableFailure?: (response: Response, attempt: number) => Promise<boolean>;\n}\n\n/**\n * Execute an HTTP request with exponential backoff retry.\n * @param opts - Retry configuration and request function.\n * @returns Successful HTTP Response.\n * @throws {AISecSDKException} After exhausting retries or on non-retryable errors.\n */\nexport async function executeWithRetry(opts: RetryOptions): Promise<Response> {\n const { maxRetries, execute, onRetryableFailure } = opts;\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n let response: Response;\n try {\n response = await execute(attempt);\n } catch (err) {\n if (err instanceof AISecSDKException) throw err;\n lastError = err as Error;\n if (attempt < maxRetries) {\n await sleep(backoffDelay(attempt));\n continue;\n }\n throw new AISecSDKException(\n lastError.message ?? 'Network error',\n ErrorType.CLIENT_SIDE_ERROR,\n );\n }\n\n if (response.ok) return response;\n\n // Let caller handle special status codes (e.g. 401 token refresh)\n // When handled, decrement attempt so it doesn't count against retry budget\n if (onRetryableFailure) {\n const handled = await onRetryableFailure(response, attempt);\n if (handled) {\n attempt--;\n continue;\n }\n }\n\n if (isRetryableStatus(response.status) && attempt < maxRetries) {\n await sleep(backoffDelay(attempt));\n continue;\n }\n\n // Non-retryable error\n const errorText = await response.text();\n const errorMessage = extractErrorMessage(errorText, response.status);\n throw new AISecSDKException(errorMessage, classifyErrorType(response.status));\n }\n\n throw new AISecSDKException(\n lastError?.message ?? 'Max retries exceeded',\n ErrorType.CLIENT_SIDE_ERROR,\n );\n}\n","// src/utils.ts — UUID validation + HMAC payload hash\n\nimport { createHmac } from 'node:crypto';\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport function isValidUuid(value: string): boolean {\n return UUID_RE.test(value);\n}\n\nexport function generatePayloadHash(payload: string, secret: string): string {\n return createHmac('sha256', secret).update(payload).digest('hex');\n}\n","// src/http-client.ts — internal fetch wrapper with retry\n\nimport { globalConfiguration } from './configuration.js';\nimport {\n HEADER_API_KEY,\n HEADER_AUTH_TOKEN,\n BEARER,\n PAYLOAD_HASH,\n USER_AGENT,\n} from './constants.js';\nimport { AISecSDKException, ErrorType } from './errors.js';\nimport { executeWithRetry } from './http-retry.js';\nimport { generatePayloadHash } from './utils.js';\n\n/** Options for a scan API HTTP request. */\nexport interface HttpRequestOptions {\n /** HTTP method. */\n method: 'GET' | 'POST';\n /** API path (appended to the configured endpoint). */\n path: string;\n /** Request body (JSON-serialized). */\n body?: unknown;\n /** URL query parameters. */\n params?: Record<string, string>;\n}\n\n/** Typed HTTP response wrapper. */\nexport interface HttpResponse<T = unknown> {\n /** HTTP status code. */\n status: number;\n /** Parsed response body. */\n data: T;\n}\n\nfunction buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'User-Agent': USER_AGENT,\n };\n\n const cfg = globalConfiguration;\n if (cfg.apiToken) {\n headers[HEADER_AUTH_TOKEN] = `${BEARER}${cfg.apiToken}`;\n }\n if (cfg.apiKey) {\n headers[HEADER_API_KEY] = cfg.apiKey;\n }\n\n return headers;\n}\n\nexport async function httpRequest<T>(opts: HttpRequestOptions): Promise<HttpResponse<T>> {\n if (!globalConfiguration.initialized) {\n throw new AISecSDKException(\n 'SDK not initialized. Call init() before making requests.',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n const baseUrl = globalConfiguration.apiEndpoint;\n const url = new URL(opts.path, baseUrl);\n\n if (opts.params) {\n for (const [key, value] of Object.entries(opts.params)) {\n url.searchParams.set(key, value);\n }\n }\n\n const headers = buildHeaders();\n let bodyStr: string | undefined;\n if (opts.body !== undefined) {\n bodyStr = JSON.stringify(opts.body);\n if (globalConfiguration.apiKey) {\n headers[PAYLOAD_HASH] = generatePayloadHash(bodyStr, globalConfiguration.apiKey);\n }\n }\n\n const response = await executeWithRetry({\n maxRetries: globalConfiguration.numRetries,\n execute: () =>\n fetch(url.toString(), {\n method: opts.method,\n headers,\n body: bodyStr,\n }),\n });\n\n const data = (await response.json()) as T;\n return { status: response.status, data };\n}\n","// src/scan/scanner.ts — mirrors Python SDK scanner classes\n\nimport { httpRequest } from '../http-client.js';\nimport {\n SYNC_SCAN_PATH,\n ASYNC_SCAN_PATH,\n SCAN_RESULTS_PATH,\n SCAN_REPORTS_PATH,\n MAX_NUMBER_OF_SCAN_IDS,\n MAX_NUMBER_OF_REPORT_IDS,\n MAX_NUMBER_OF_BATCH_SCAN_OBJECTS,\n MAX_TRANSACTION_ID_STR_LENGTH,\n MAX_SESSION_ID_STR_LENGTH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\n\nimport type { AiProfile } from '../models/ai-profile.js';\nimport type { Metadata } from '../models/metadata.js';\nimport type { ScanResponse } from '../models/scan-response.js';\nimport type { AsyncScanObject, AsyncScanResponse } from '../models/async-scan.js';\nimport type { ScanIdResult } from '../models/scan-id-result.js';\nimport type { ThreatScanReport } from '../models/threat-report.js';\nimport { Content } from './content.js';\n\n/** Optional parameters for {@link Scanner.syncScan}. */\nexport interface SyncScanOptions {\n /** Transaction ID for tracing. Max 100 characters. */\n trId?: string;\n /** Session ID for grouping related scans. Max 100 characters. */\n sessionId?: string;\n /** Application metadata attached to the scan request. */\n metadata?: Metadata;\n}\n\n/** Client for AIRS scan operations (sync, async, and query). */\nexport class Scanner {\n /**\n * Perform a synchronous content scan.\n * @param aiProfile - AI security profile to scan against.\n * @param content - Content to scan.\n * @param opts - Optional transaction/session IDs and metadata.\n * @returns Scan response with verdict, action, and detection details.\n */\n async syncScan(\n aiProfile: AiProfile,\n content: Content,\n opts: SyncScanOptions = {},\n ): Promise<ScanResponse> {\n if (opts.trId && opts.trId.length > MAX_TRANSACTION_ID_STR_LENGTH) {\n throw new AISecSDKException(\n `trId exceeds max length of ${MAX_TRANSACTION_ID_STR_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (opts.sessionId && opts.sessionId.length > MAX_SESSION_ID_STR_LENGTH) {\n throw new AISecSDKException(\n `sessionId exceeds max length of ${MAX_SESSION_ID_STR_LENGTH}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const body: Record<string, unknown> = {\n ai_profile: aiProfile,\n contents: [content.toJSON()],\n };\n if (opts.trId) body.tr_id = opts.trId;\n if (opts.sessionId) body.session_id = opts.sessionId;\n if (opts.metadata) body.metadata = opts.metadata;\n\n const res = await httpRequest<ScanResponse>({\n method: 'POST',\n path: SYNC_SCAN_PATH,\n body,\n });\n return res.data;\n }\n\n /**\n * Submit content for asynchronous scanning.\n * @param scanObjects - Array of scan objects (1–5 items).\n * @returns Response containing scan IDs for later querying.\n */\n async asyncScan(scanObjects: AsyncScanObject[]): Promise<AsyncScanResponse> {\n if (scanObjects.length < 1) {\n throw new AISecSDKException(\n 'At least 1 scan object is required',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (scanObjects.length > MAX_NUMBER_OF_BATCH_SCAN_OBJECTS) {\n throw new AISecSDKException(\n `Max of ${MAX_NUMBER_OF_BATCH_SCAN_OBJECTS} scan objects allowed`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await httpRequest<AsyncScanResponse>({\n method: 'POST',\n path: ASYNC_SCAN_PATH,\n body: scanObjects,\n });\n return res.data;\n }\n\n /**\n * Query scan results by scan IDs.\n * @param scanIds - Array of scan UUIDs (1–5 items).\n * @returns Array of scan results with status and response data.\n */\n async queryByScanIds(scanIds: string[]): Promise<ScanIdResult[]> {\n if (scanIds.length < 1) {\n throw new AISecSDKException(\n 'At least 1 scan_id is required',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (scanIds.length > MAX_NUMBER_OF_SCAN_IDS) {\n throw new AISecSDKException(\n `Max of ${MAX_NUMBER_OF_SCAN_IDS} scan_ids allowed`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n for (const id of scanIds) {\n if (!isValidUuid(id)) {\n throw new AISecSDKException(`Invalid scan_id: ${id}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n }\n\n const res = await httpRequest<ScanIdResult[]>({\n method: 'GET',\n path: SCAN_RESULTS_PATH,\n params: { scan_ids: scanIds.join(',') },\n });\n return res.data;\n }\n\n /**\n * Query detailed threat reports by report IDs.\n * @param reportIds - Array of report IDs (1–5 items).\n * @returns Array of threat scan reports with detection details.\n */\n async queryByReportIds(reportIds: string[]): Promise<ThreatScanReport[]> {\n if (reportIds.length < 1) {\n throw new AISecSDKException(\n 'At least 1 report_id is required',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (reportIds.length > MAX_NUMBER_OF_REPORT_IDS) {\n throw new AISecSDKException(\n `Max of ${MAX_NUMBER_OF_REPORT_IDS} report_ids allowed`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await httpRequest<ThreatScanReport[]>({\n method: 'GET',\n path: SCAN_REPORTS_PATH,\n params: { report_ids: reportIds.join(',') },\n });\n return res.data;\n }\n}\n","// src/scan/content.ts — mirrors Python SDK scan/models/content.py\n\nimport { readFileSync } from 'node:fs';\nimport {\n MAX_CONTENT_PROMPT_LENGTH,\n MAX_CONTENT_RESPONSE_LENGTH,\n MAX_CONTENT_CONTEXT_LENGTH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport type { ToolEvent } from '../models/tool-event.js';\nimport type { ScanRequestContentsInner } from '../models/scan-request.js';\n\n/** Options for constructing a {@link Content} instance. At least one field is required. */\nexport interface ContentOptions {\n /** User prompt text. Max 2 MB. */\n prompt?: string;\n /** AI model response text. Max 2 MB. */\n response?: string;\n /** Conversation context. Max 100 MB. */\n context?: string;\n /** Code prompt text. Max 2 MB. */\n codePrompt?: string;\n /** Code response text. Max 2 MB. */\n codeResponse?: string;\n /** Tool/function call event data. */\n toolEvent?: ToolEvent;\n}\n\n/**\n * Represents content to be scanned by AIRS.\n * Validates byte-length limits on construction and property assignment.\n */\nexport class Content {\n private _prompt?: string;\n private _response?: string;\n private _context?: string;\n private _codePrompt?: string;\n private _codeResponse?: string;\n private _toolEvent?: ToolEvent;\n\n constructor(opts: ContentOptions) {\n if (\n !opts.prompt &&\n !opts.response &&\n !opts.codePrompt &&\n !opts.codeResponse &&\n !opts.toolEvent\n ) {\n throw new AISecSDKException(\n 'At least one of prompt, response, codePrompt, codeResponse, or toolEvent must be provided',\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n if (opts.prompt !== undefined) this.prompt = opts.prompt;\n if (opts.response !== undefined) this.response = opts.response;\n if (opts.context !== undefined) this.context = opts.context;\n if (opts.codePrompt !== undefined) this.codePrompt = opts.codePrompt;\n if (opts.codeResponse !== undefined) this.codeResponse = opts.codeResponse;\n if (opts.toolEvent !== undefined) this._toolEvent = opts.toolEvent;\n }\n\n get prompt(): string | undefined {\n return this._prompt;\n }\n set prompt(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_PROMPT_LENGTH) {\n throw new AISecSDKException(\n `prompt exceeds max length of ${MAX_CONTENT_PROMPT_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._prompt = value;\n }\n\n get response(): string | undefined {\n return this._response;\n }\n set response(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_RESPONSE_LENGTH) {\n throw new AISecSDKException(\n `response exceeds max length of ${MAX_CONTENT_RESPONSE_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._response = value;\n }\n\n get context(): string | undefined {\n return this._context;\n }\n set context(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_CONTEXT_LENGTH) {\n throw new AISecSDKException(\n `context exceeds max length of ${MAX_CONTENT_CONTEXT_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._context = value;\n }\n\n get codePrompt(): string | undefined {\n return this._codePrompt;\n }\n set codePrompt(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_PROMPT_LENGTH) {\n throw new AISecSDKException(\n `codePrompt exceeds max length of ${MAX_CONTENT_PROMPT_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._codePrompt = value;\n }\n\n get codeResponse(): string | undefined {\n return this._codeResponse;\n }\n set codeResponse(value: string | undefined) {\n if (value !== undefined && Buffer.byteLength(value) > MAX_CONTENT_RESPONSE_LENGTH) {\n throw new AISecSDKException(\n `codeResponse exceeds max length of ${MAX_CONTENT_RESPONSE_LENGTH} bytes`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n this._codeResponse = value;\n }\n\n get toolEvent(): ToolEvent | undefined {\n return this._toolEvent;\n }\n set toolEvent(value: ToolEvent | undefined) {\n this._toolEvent = value;\n }\n\n /** Total byte length of all text content fields. */\n get length(): number {\n let total = 0;\n if (this._prompt) total += Buffer.byteLength(this._prompt);\n if (this._response) total += Buffer.byteLength(this._response);\n if (this._context) total += Buffer.byteLength(this._context);\n if (this._codePrompt) total += Buffer.byteLength(this._codePrompt);\n if (this._codeResponse) total += Buffer.byteLength(this._codeResponse);\n return total;\n }\n\n /** Serialize to the API request format. */\n toJSON(): ScanRequestContentsInner {\n const obj: ScanRequestContentsInner = {};\n if (this._prompt !== undefined) obj.prompt = this._prompt;\n if (this._response !== undefined) obj.response = this._response;\n if (this._context !== undefined) obj.context = this._context;\n if (this._codePrompt !== undefined) obj.code_prompt = this._codePrompt;\n if (this._codeResponse !== undefined) obj.code_response = this._codeResponse;\n if (this._toolEvent !== undefined) obj.tool_event = this._toolEvent;\n return obj;\n }\n\n /**\n * Create a Content instance from an API response object.\n * @param json - Scan request contents inner object.\n */\n static fromJSON(json: ScanRequestContentsInner): Content {\n return new Content({\n prompt: json.prompt,\n response: json.response,\n context: json.context,\n codePrompt: json.code_prompt,\n codeResponse: json.code_response,\n toolEvent: json.tool_event,\n });\n }\n\n /**\n * Load content from a JSON file.\n * @param filePath - Path to JSON file containing scan request contents.\n */\n static fromJSONFile(filePath: string): Content {\n const raw = readFileSync(filePath, 'utf-8');\n const parsed: ScanRequestContentsInner = JSON.parse(raw);\n return Content.fromJSON(parsed);\n }\n}\n","// src/models/enums.ts — typed enums for AIRS API verdict/action/category values\n\n/** Scan result verdict classification. */\nexport const Verdict = {\n BENIGN: 'benign',\n MALICIOUS: 'malicious',\n UNKNOWN: 'unknown',\n} as const;\n\n/** Union type of all possible verdict values. */\nexport type Verdict = (typeof Verdict)[keyof typeof Verdict];\n\n/** Enforcement action taken by AIRS. */\nexport const Action = {\n ALLOW: 'allow',\n BLOCK: 'block',\n ALERT: 'alert',\n} as const;\n\n/** Union type of all possible action values. */\nexport type Action = (typeof Action)[keyof typeof Action];\n\n/** Top-level scan result category. */\nexport const Category = {\n BENIGN: 'benign',\n MALICIOUS: 'malicious',\n UNKNOWN: 'unknown',\n} as const;\n\n/** Union type of all possible category values. */\nexport type Category = (typeof Category)[keyof typeof Category];\n","import { z } from 'zod';\nimport { MAX_AI_PROFILE_NAME_LENGTH } from '../constants.js';\n\n/** Zod schema for AI security profile identifier. Requires profile_id or profile_name. */\nexport const AiProfileSchema = z\n .object({\n profile_id: z.string().uuid().optional(),\n profile_name: z.string().max(MAX_AI_PROFILE_NAME_LENGTH).optional(),\n })\n .refine((d) => d.profile_id || d.profile_name, {\n message: 'Either profile_id or profile_name must be provided',\n });\n\n/** AI security profile identifier. At least one of profile_id or profile_name required. */\nexport type AiProfile = z.infer<typeof AiProfileSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for AI agent metadata. */\nexport const AgentMetaSchema = z.object({\n agent_id: z.string().optional(),\n agent_version: z.string().optional(),\n agent_arn: z.string().optional(),\n});\n\n/** AI agent metadata (agent ID, version, ARN). */\nexport type AgentMeta = z.infer<typeof AgentMetaSchema>;\n\n/** Zod schema for scan request metadata. */\nexport const MetadataSchema = z.object({\n app_name: z.string().optional(),\n app_user: z.string().optional(),\n ai_model: z.string().optional(),\n user_ip: z.string().optional(),\n agent_meta: AgentMetaSchema.optional(),\n});\n\n/** Application metadata attached to scan requests. */\nexport type Metadata = z.infer<typeof MetadataSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for tool/function call event metadata. */\nexport const ToolEventMetadataSchema = z.object({\n ecosystem: z.string(),\n method: z.string(),\n server_name: z.string(),\n tool_invoked: z.string().optional(),\n});\n\n/** Tool/function call event metadata (ecosystem, method, server, tool). */\nexport type ToolEventMetadata = z.infer<typeof ToolEventMetadataSchema>;\n\n/** Zod schema for a tool/function call event with input and output. */\nexport const ToolEventSchema = z.object({\n metadata: ToolEventMetadataSchema.optional(),\n input: z.string().optional(),\n output: z.string().optional(),\n});\n\n/** Tool/function call event with optional input and output strings. */\nexport type ToolEvent = z.infer<typeof ToolEventSchema>;\n","import { z } from 'zod';\nimport { MAX_TRANSACTION_ID_STR_LENGTH, MAX_SESSION_ID_STR_LENGTH } from '../constants.js';\nimport { AiProfileSchema } from './ai-profile.js';\nimport { MetadataSchema } from './metadata.js';\nimport { ToolEventSchema } from './tool-event.js';\n\n/** Zod schema for a single content item within a scan request. */\nexport const ScanRequestContentsInnerSchema = z.object({\n prompt: z.string().optional(),\n response: z.string().optional(),\n code_prompt: z.string().optional(),\n code_response: z.string().optional(),\n context: z.string().optional(),\n tool_event: ToolEventSchema.optional(),\n});\n\n/** Single content item within a scan request. */\nexport type ScanRequestContentsInner = z.infer<typeof ScanRequestContentsInnerSchema>;\n\n/** Zod schema for a complete scan request payload. */\nexport const ScanRequestSchema = z.object({\n tr_id: z.string().max(MAX_TRANSACTION_ID_STR_LENGTH).optional(),\n session_id: z.string().max(MAX_SESSION_ID_STR_LENGTH).optional(),\n ai_profile: AiProfileSchema,\n metadata: MetadataSchema.optional(),\n contents: z.array(ScanRequestContentsInnerSchema).min(1),\n});\n\n/** Complete scan request payload sent to the AIRS API. */\nexport type ScanRequest = z.infer<typeof ScanRequestSchema>;\n","import { z } from 'zod';\nimport { PromptDetectedSchema, PromptDetectionDetailsSchema } from './prompt-detected.js';\nimport { ResponseDetectedSchema, ResponseDetectionDetailsSchema } from './response-detected.js';\nimport { ToolEventMetadataSchema } from './tool-event.js';\n\n/** Zod schema for masked data in scan results. */\nexport const MaskedDataSchema = z.object({\n data: z.string().optional(),\n pattern_detections: z.array(z.record(z.unknown())).optional(),\n});\n\n/** Masked data containing redacted content and pattern detections. */\nexport type MaskedData = z.infer<typeof MaskedDataSchema>;\n\n/** Zod schema for I/O detection flags. */\nexport const IODetectedSchema = z\n .object({\n url_cats: z.boolean().optional(),\n dlp: z.boolean().optional(),\n injection: z.boolean().optional(),\n toxic_content: z.boolean().optional(),\n malicious_code: z.boolean().optional(),\n })\n .passthrough();\n\n/** Flags indicating which detection types triggered on input or output. */\nexport type IODetected = z.infer<typeof IODetectedSchema>;\n\n/** Zod schema for the scan summary (verdict + action). */\nexport const ScanSummarySchema = z\n .object({\n verdict: z.string().optional(),\n action: z.string().optional(),\n })\n .passthrough();\n\n/** Scan summary containing overall verdict and action. */\nexport type ScanSummary = z.infer<typeof ScanSummarySchema>;\n\n/** Zod schema for tool/agent detection results. */\nexport const ToolDetectedSchema = z.object({\n verdict: z.string().optional(),\n metadata: ToolEventMetadataSchema.optional(),\n summary: ScanSummarySchema.optional(),\n input_detected: IODetectedSchema.optional(),\n output_detected: IODetectedSchema.optional(),\n});\n\n/** Detection results for tool/agent interactions. */\nexport type ToolDetected = z.infer<typeof ToolDetectedSchema>;\n\n/** Zod schema for a complete scan response from the AIRS API. */\nexport const ScanResponseSchema = z.object({\n source: z.string().optional(),\n report_id: z.string(),\n scan_id: z.string(),\n tr_id: z.string().optional(),\n session_id: z.string().optional(),\n profile_id: z.string().optional(),\n profile_name: z.string().optional(),\n category: z.string(),\n action: z.string(),\n prompt_detected: PromptDetectedSchema.optional(),\n response_detected: ResponseDetectedSchema.optional(),\n prompt_masked_data: MaskedDataSchema.optional(),\n response_masked_data: MaskedDataSchema.optional(),\n prompt_detection_details: PromptDetectionDetailsSchema.optional(),\n response_detection_details: ResponseDetectionDetailsSchema.optional(),\n tool_detected: ToolDetectedSchema.optional(),\n created_at: z.string().optional(),\n completed_at: z.string().optional(),\n});\n\n/** Complete scan response with verdict, action, and detection details. */\nexport type ScanResponse = z.infer<typeof ScanResponseSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for prompt detection detail data. */\nexport const PromptDetectionDetailsSchema = z.object({\n topic_guardrails_details: z.record(z.unknown()).optional(),\n});\n\n/** Prompt detection detail data including topic guardrails. */\nexport type PromptDetectionDetails = z.infer<typeof PromptDetectionDetailsSchema>;\n\n/** Zod schema for prompt-side detection flags. */\nexport const PromptDetectedSchema = z.object({\n url_cats: z.boolean().optional(),\n dlp: z.boolean().optional(),\n injection: z.boolean().optional(),\n toxic_content: z.boolean().optional(),\n malicious_code: z.boolean().optional(),\n agent: z.boolean().optional(),\n topic_violation: z.boolean().optional(),\n});\n\n/** Flags indicating which detection types triggered on the prompt. */\nexport type PromptDetected = z.infer<typeof PromptDetectedSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for response detection detail data. */\nexport const ResponseDetectionDetailsSchema = z.object({\n topic_guardrails_details: z.record(z.unknown()).optional(),\n});\n\n/** Response detection detail data including topic guardrails. */\nexport type ResponseDetectionDetails = z.infer<typeof ResponseDetectionDetailsSchema>;\n\n/** Zod schema for response-side detection flags. */\nexport const ResponseDetectedSchema = z.object({\n url_cats: z.boolean().optional(),\n dlp: z.boolean().optional(),\n db_security: z.boolean().optional(),\n toxic_content: z.boolean().optional(),\n malicious_code: z.boolean().optional(),\n agent: z.boolean().optional(),\n ungrounded: z.boolean().optional(),\n topic_violation: z.boolean().optional(),\n});\n\n/** Flags indicating which detection types triggered on the response. */\nexport type ResponseDetected = z.infer<typeof ResponseDetectedSchema>;\n","import { z } from 'zod';\nimport { ScanRequestSchema } from './scan-request.js';\n\n/** Zod schema for an async scan batch item. */\nexport const AsyncScanObjectSchema = z.object({\n req_id: z.number().int(),\n scan_req: ScanRequestSchema,\n});\n\n/** Async scan batch item containing a request ID and scan request. */\nexport type AsyncScanObject = z.infer<typeof AsyncScanObjectSchema>;\n\n/** Zod schema for the async scan API response. */\nexport const AsyncScanResponseSchema = z.object({\n received: z.string(),\n scan_id: z.string(),\n report_id: z.string().optional(),\n source: z.string().optional(),\n});\n\n/** Async scan API response with scan ID for later querying. */\nexport type AsyncScanResponse = z.infer<typeof AsyncScanResponseSchema>;\n","import { z } from 'zod';\nimport { ScanResponseSchema } from './scan-response.js';\n\n/** Zod schema for a scan ID query result. */\nexport const ScanIdResultSchema = z.object({\n source: z.string().optional(),\n req_id: z.number().optional(),\n status: z.string().optional(),\n scan_id: z.string().optional(),\n result: ScanResponseSchema.optional(),\n});\n\n/** Result of querying a scan by its scan ID, including status and full scan response. */\nexport type ScanIdResult = z.infer<typeof ScanIdResultSchema>;\n","import { z } from 'zod';\nimport { DetectionServiceResultSchema } from './detection.js';\n\n/** Zod schema for a detailed threat scan report. */\nexport const ThreatScanReportSchema = z.object({\n source: z.string().optional(),\n report_id: z.string().optional(),\n scan_id: z.string().optional(),\n req_id: z.number().optional(),\n transaction_id: z.string().optional(),\n session_id: z.string().optional(),\n detection_results: z.array(DetectionServiceResultSchema).optional(),\n});\n\n/** Detailed threat scan report with per-service detection results. */\nexport type ThreatScanReport = z.infer<typeof ThreatScanReportSchema>;\n","import { z } from 'zod';\nimport { DlpReportSchema } from './dlp-report.js';\nimport { UrlfEntrySchema } from './urlf-report.js';\n\n/** Zod schema for detection service detail results (URLF and DLP reports). */\nexport const DSDetailResultSchema = z.object({\n urlf_report: z.array(UrlfEntrySchema).optional(),\n dlp_report: DlpReportSchema.optional(),\n});\n\n/** Detection service detail results containing URLF and DLP reports. */\nexport type DSDetailResult = z.infer<typeof DSDetailResultSchema>;\n\n/** Zod schema for detection service result metadata (score and confidence). */\nexport const DSResultMetadataSchema = z\n .object({\n score: z.number().optional(),\n confidence: z.string().optional(),\n })\n .passthrough();\n\n/** Detection service result metadata with score and confidence. */\nexport type DSResultMetadata = z.infer<typeof DSResultMetadataSchema>;\n\n/** Zod schema for an individual detection service result. */\nexport const DetectionServiceResultSchema = z.object({\n data_type: z.string().optional(),\n detection_service: z.string().optional(),\n verdict: z.string().optional(),\n action: z.string().optional(),\n metadata: DSResultMetadataSchema.optional(),\n result_detail: DSDetailResultSchema.optional(),\n});\n\n/** Individual detection service result with verdict, action, and details. */\nexport type DetectionServiceResult = z.infer<typeof DetectionServiceResultSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for a DLP (Data Loss Prevention) report. */\nexport const DlpReportSchema = z.object({\n dlp_report_id: z.string().optional(),\n dlp_profile_name: z.string().optional(),\n dlp_profile_id: z.string().optional(),\n dlp_profile_version: z.number().optional(),\n data_pattern_rule1_verdict: z.string().optional(),\n data_pattern_rule2_verdict: z.string().optional(),\n});\n\n/** DLP report with profile info and data pattern rule verdicts. */\nexport type DlpReport = z.infer<typeof DlpReportSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for a URL filtering report entry. */\nexport const UrlfEntrySchema = z.object({\n url: z.string().optional(),\n risk_level: z.string().optional(),\n categories: z.array(z.string()).optional(),\n});\n\n/** URL filtering report entry with URL, risk level, and categories. */\nexport type UrlfEntry = z.infer<typeof UrlfEntrySchema>;\n","import { z } from 'zod';\n\n/** Zod schema for an AIRS API error response. */\nexport const ErrorResponseSchema = z.object({\n status_code: z.number().optional(),\n message: z.string().optional(),\n error: z\n .object({\n message: z.string().optional(),\n })\n .passthrough()\n .optional(),\n retry_after: z\n .object({\n interval: z.number().optional(),\n unit: z.string().optional(),\n })\n .optional(),\n});\n\n/** AIRS API error response with optional retry-after guidance. */\nexport type ErrorResponse = z.infer<typeof ErrorResponseSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for DLP data profile configuration. */\nexport const DlpDataProfileSchema = z\n .object({\n profile_name: z.string(),\n active: z.boolean().optional(),\n })\n .passthrough();\n\n/** DLP data profile configuration. */\nexport type DlpDataProfile = z.infer<typeof DlpDataProfileSchema>;\n\n/** Zod schema for DLP configuration. */\nexport const DlpSchema = z\n .object({\n dlp_status: z.string().optional(),\n data_profiles: z.array(DlpDataProfileSchema).optional(),\n })\n .passthrough();\n\n/** DLP configuration with status and data profiles. */\nexport type Dlp = z.infer<typeof DlpSchema>;\n\n/** Zod schema for data leak detection settings. */\nexport const DataLeakDetectionSchema = z\n .object({\n 'data-leak-detection-status': z.string().optional(),\n dlp: DlpSchema.optional(),\n })\n .passthrough();\n\n/** Data leak detection settings. */\nexport type DataLeakDetection = z.infer<typeof DataLeakDetectionSchema>;\n\n/** Zod schema for application protection settings. */\nexport const AppProtectionSchema = z\n .object({\n 'prompt-injection': z.string().optional(),\n 'jailbreak-detection': z.string().optional(),\n })\n .passthrough();\n\n/** Application protection settings (prompt injection, jailbreak detection). */\nexport type AppProtection = z.infer<typeof AppProtectionSchema>;\n\n/** Zod schema for model protection settings. */\nexport const ModelProtectionSchema = z\n .object({\n 'model-denial-of-service': z.string().optional(),\n })\n .passthrough();\n\n/** Model protection settings (DoS protection). */\nexport type ModelProtection = z.infer<typeof ModelProtectionSchema>;\n\n/** Zod schema for agent protection settings. */\nexport const AgentProtectionSchema = z\n .object({\n 'malicious-agent-activity': z.string().optional(),\n })\n .passthrough();\n\n/** Agent protection settings (malicious agent activity detection). */\nexport type AgentProtection = z.infer<typeof AgentProtectionSchema>;\n\n/** Zod schema for latency configuration. */\nexport const LatencySchema = z\n .object({\n status: z.string().optional(),\n max_latency_ms: z.number().optional(),\n })\n .passthrough();\n\n/** Latency configuration for inline scanning. */\nexport type Latency = z.infer<typeof LatencySchema>;\n\n/** Zod schema for model configuration. */\nexport const ModelConfigurationSchema = z\n .object({\n latency: LatencySchema.optional(),\n })\n .passthrough();\n\n/** Model configuration including latency settings. */\nexport type ModelConfiguration = z.infer<typeof ModelConfigurationSchema>;\n\n/** Zod schema for the security profile policy. */\nexport const PolicySchema = z\n .object({\n 'data-leak-detection': DataLeakDetectionSchema.optional(),\n 'app-protection': AppProtectionSchema.optional(),\n 'model-protection': ModelProtectionSchema.optional(),\n 'agent-protection': AgentProtectionSchema.optional(),\n 'model-configuration': ModelConfigurationSchema.optional(),\n })\n .passthrough();\n\n/** Security profile policy containing all protection and configuration settings. */\nexport type Policy = z.infer<typeof PolicySchema>;\n\n/** Zod schema for an AIRS security profile. */\nexport const SecurityProfileSchema = z\n .object({\n profile_id: z.string().optional(),\n profile_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n policy: PolicySchema.optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n })\n .passthrough();\n\n/** AIRS security profile with name, policy, and audit metadata. */\nexport type SecurityProfile = z.infer<typeof SecurityProfileSchema>;\n\n/** Zod schema for a security profile create/update request. */\nexport const CreateSecurityProfileRequestSchema = z\n .object({\n profile_id: z.string().optional(),\n profile_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n policy: PolicySchema.optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n })\n .passthrough();\n\n/** Request body for creating or updating a security profile. */\nexport type CreateSecurityProfileRequest = z.infer<typeof CreateSecurityProfileRequestSchema>;\n\n/** Zod schema for a paginated security profile list response. */\nexport const SecurityProfileListResponseSchema = z\n .object({\n ai_profiles: z.array(SecurityProfileSchema),\n next_offset: z.number().optional(),\n })\n .passthrough();\n\n/** Paginated list of security profiles. */\nexport type SecurityProfileListResponse = z.infer<typeof SecurityProfileListResponseSchema>;\n\n/** Zod schema for a profile deletion response. */\nexport const DeleteProfileResponseSchema = z\n .object({\n message: z.string(),\n })\n .passthrough();\n\n/** Response from deleting a security profile. */\nexport type DeleteProfileResponse = z.infer<typeof DeleteProfileResponseSchema>;\n\n/** Zod schema for a profile deletion conflict (409). */\nexport const DeleteProfileConflictSchema = z\n .object({\n message: z.string(),\n payload: z.array(\n z\n .object({\n policy_id: z.string(),\n policy_name: z.string(),\n priority: z.number(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/** Conflict response when deleting a profile referenced by policies. */\nexport type DeleteProfileConflict = z.infer<typeof DeleteProfileConflictSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for an AIRS custom topic. */\nexport const CustomTopicSchema = z\n .object({\n topic_id: z.string().optional(),\n topic_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n description: z.string().optional(),\n examples: z.array(z.string()).optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n created_ts: z.string().optional(),\n })\n .passthrough();\n\n/** AIRS custom topic with name, description, examples, and audit metadata. */\nexport type CustomTopic = z.infer<typeof CustomTopicSchema>;\n\n/** Zod schema for a custom topic create/update request. */\nexport const CreateCustomTopicRequestSchema = z\n .object({\n topic_id: z.string().optional(),\n topic_name: z.string(),\n revision: z.number().optional(),\n active: z.boolean().optional(),\n description: z.string().optional(),\n examples: z.array(z.string()).optional(),\n created_by: z.string().optional(),\n updated_by: z.string().optional(),\n last_modified_ts: z.string().optional(),\n created_ts: z.string().optional(),\n })\n .passthrough();\n\n/** Request body for creating or updating a custom topic. */\nexport type CreateCustomTopicRequest = z.infer<typeof CreateCustomTopicRequestSchema>;\n\n/** Zod schema for a paginated custom topic list response. */\nexport const CustomTopicListResponseSchema = z\n .object({\n custom_topics: z.array(CustomTopicSchema),\n next_offset: z.number().optional(),\n })\n .passthrough();\n\n/** Paginated list of custom topics. */\nexport type CustomTopicListResponse = z.infer<typeof CustomTopicListResponseSchema>;\n\n/** Zod schema for a topic deletion response. */\nexport const DeleteTopicResponseSchema = z\n .object({\n message: z.string(),\n })\n .passthrough();\n\n/** Response from deleting a custom topic. */\nexport type DeleteTopicResponse = z.infer<typeof DeleteTopicResponseSchema>;\n\n/** Zod schema for a topic deletion conflict (409). */\nexport const DeleteTopicConflictSchema = z\n .object({\n message: z.string(),\n payload: z.array(\n z\n .object({\n profile_id: z.string(),\n profile_name: z.string(),\n revision: z.number(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/** Conflict response when deleting a topic referenced by profiles. */\nexport type DeleteTopicConflict = z.infer<typeof DeleteTopicConflictSchema>;\n","// src/models/model-security-enums.ts — typed enums for AIRS Model Security API values\n\n/** Error codes returned by the Model Security scan service. */\nexport const ErrorCodes = {\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n SCAN_ERROR: 'SCAN_ERROR',\n INVALID_RESPONSE: 'INVALID_RESPONSE',\n ACCESS_DENIED: 'ACCESS_DENIED',\n MISSING_CREDENTIALS: 'MISSING_CREDENTIALS',\n NO_SUCH_KEY: 'NO_SUCH_KEY',\n NO_SUCH_BUCKET: 'NO_SUCH_BUCKET',\n INVALID_BUCKET_NAME: 'INVALID_BUCKET_NAME',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n INVALID_OBJECT_STATE: 'INVALID_OBJECT_STATE',\n UNKNOWN_REMOTE_SERVICE_ERROR: 'UNKNOWN_REMOTE_SERVICE_ERROR',\n UNSUPPORTED_REMOTE_STORAGE: 'UNSUPPORTED_REMOTE_STORAGE',\n MISSING_ARTIFACTS: 'MISSING_ARTIFACTS',\n WORKER_ERROR: 'WORKER_ERROR',\n POLICY_EVAL_ERROR: 'POLICY_EVAL_ERROR',\n} as const;\n\n/** Union type of all possible error code values. */\nexport type ErrorCodes = (typeof ErrorCodes)[keyof typeof ErrorCodes];\n\n/** Evaluation outcome for a model security scan. */\nexport const EvalOutcome = {\n PENDING: 'PENDING',\n ALLOWED: 'ALLOWED',\n BLOCKED: 'BLOCKED',\n ERROR: 'ERROR',\n} as const;\n\n/** Union type of all possible evaluation outcome values. */\nexport type EvalOutcome = (typeof EvalOutcome)[keyof typeof EvalOutcome];\n\n/** Results of individual file scanning. */\nexport const FileScanResult = {\n SKIPPED: 'SKIPPED',\n SUCCESS: 'SUCCESS',\n ERROR: 'ERROR',\n FAILED: 'FAILED',\n} as const;\n\n/** Union type of all possible file scan result values. */\nexport type FileScanResult = (typeof FileScanResult)[keyof typeof FileScanResult];\n\n/** File type in the scanned model tree. */\nexport const FileType = {\n DIRECTORY: 'DIRECTORY',\n FILE: 'FILE',\n} as const;\n\n/** Union type of all possible file type values. */\nexport type FileType = (typeof FileType)[keyof typeof FileType];\n\n/** Status of a model file scan. */\nexport const ModelScanStatus = {\n SCANNED: 'SCANNED',\n SKIPPED: 'SKIPPED',\n ERROR: 'ERROR',\n} as const;\n\n/** Union type of all possible model scan status values. */\nexport type ModelScanStatus = (typeof ModelScanStatus)[keyof typeof ModelScanStatus];\n\n/** Results of rule evaluation. */\nexport const RuleEvaluationResult = {\n PASSED: 'PASSED',\n FAILED: 'FAILED',\n ERROR: 'ERROR',\n} as const;\n\n/** Union type of all possible rule evaluation result values. */\nexport type RuleEvaluationResult = (typeof RuleEvaluationResult)[keyof typeof RuleEvaluationResult];\n\n/** Rule evaluation states. */\nexport const RuleState = {\n DISABLED: 'DISABLED',\n ALLOWING: 'ALLOWING',\n BLOCKING: 'BLOCKING',\n} as const;\n\n/** Union type of all possible rule state values. */\nexport type RuleState = (typeof RuleState)[keyof typeof RuleState];\n\n/** Origin of the model security scan. */\nexport const ScanOrigin = {\n MODEL_SECURITY_SDK: 'MODEL_SECURITY_SDK',\n HUGGING_FACE: 'HUGGING_FACE',\n} as const;\n\n/** Union type of all possible scan origin values. */\nexport type ScanOrigin = (typeof ScanOrigin)[keyof typeof ScanOrigin];\n\n/** Fields available for date-based sorting. */\nexport const SortByDateField = {\n CREATED_AT: 'created_at',\n UPDATED_AT: 'updated_at',\n} as const;\n\n/** Union type of all possible sort-by-date field values. */\nexport type SortByDateField = (typeof SortByDateField)[keyof typeof SortByDateField];\n\n/** Fields available for file-based sorting. */\nexport const SortByFileField = {\n PATH: 'path',\n TYPE: 'type',\n} as const;\n\n/** Union type of all possible sort-by-file field values. */\nexport type SortByFileField = (typeof SortByFileField)[keyof typeof SortByFileField];\n\n/** Sort direction for list queries. */\nexport const SortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\n/** Union type of all possible sort direction values. */\nexport type SortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\n/** Source type for model origin. */\nexport const SourceType = {\n LOCAL: 'LOCAL',\n HUGGING_FACE: 'HUGGING_FACE',\n S3: 'S3',\n GCS: 'GCS',\n AZURE: 'AZURE',\n ARTIFACTORY: 'ARTIFACTORY',\n GITLAB: 'GITLAB',\n ALL: 'ALL',\n} as const;\n\n/** Union type of all possible source type values. */\nexport type SourceType = (typeof SourceType)[keyof typeof SourceType];\n\n/**\n * Threat category codes for model scan issues.\n * Should be in sync with modelscan-pai issue codes.\n */\nexport const ThreatCategory = {\n PAIT_ARV_100: 'PAIT-ARV-100',\n PAIT_GGUF_100: 'PAIT-GGUF-100',\n PAIT_GGUF_101: 'PAIT-GGUF-101',\n PAIT_KERAS_100: 'PAIT-KERAS-100',\n PAIT_KERAS_101: 'PAIT-KERAS-101',\n PAIT_KERAS_102: 'PAIT-KERAS-102',\n PAIT_JOBLIB_100: 'PAIT-JOBLIB-100',\n PAIT_JOBLIB_101: 'PAIT-JOBLIB-101',\n PAIT_PKL_100: 'PAIT-PKL-100',\n PAIT_PKL_101: 'PAIT-PKL-101',\n PAIT_PYTCH_100: 'PAIT-PYTCH-100',\n PAIT_PYTCH_101: 'PAIT-PYTCH-101',\n PAIT_EXDIR_100: 'PAIT-EXDIR-100',\n PAIT_EXDIR_101: 'PAIT-EXDIR-101',\n PAIT_ONNX_200: 'PAIT-ONNX-200',\n PAIT_TF_200: 'PAIT-TF-200',\n PAIT_LMAFL_300: 'PAIT-LMAFL-300',\n PAIT_LITERT_300: 'PAIT-LITERT-300',\n PAIT_LITERT_301: 'PAIT-LITERT-301',\n PAIT_LITERT_302: 'PAIT-LITERT-302',\n PAIT_KERAS_300: 'PAIT-KERAS-300',\n PAIT_KERAS_301: 'PAIT-KERAS-301',\n PAIT_TCHST_300: 'PAIT-TCHST-300',\n PAIT_TCHST_301: 'PAIT-TCHST-301',\n PAIT_TF_300: 'PAIT-TF-300',\n PAIT_TF_301: 'PAIT-TF-301',\n PAIT_TF_302: 'PAIT-TF-302',\n PAIT_TMT_300: 'PAIT-TMT-300',\n PAIT_TMT_301: 'PAIT-TMT-301',\n UNAPPROVED_FORMATS: 'UNAPPROVED_FORMATS',\n} as const;\n\n/** Union type of all possible threat category values. */\nexport type ThreatCategory = (typeof ThreatCategory)[keyof typeof ThreatCategory];\n\n/** Security group states. */\nexport const ModelSecurityGroupState = {\n PENDING: 'PENDING',\n ACTIVE: 'ACTIVE',\n} as const;\n\n/** Union type of all possible model security group state values. */\nexport type ModelSecurityGroupState =\n (typeof ModelSecurityGroupState)[keyof typeof ModelSecurityGroupState];\n\n/** Rule types for different scanning approaches. */\nexport const RuleType = {\n METADATA: 'METADATA',\n ARTIFACT: 'ARTIFACT',\n} as const;\n\n/** Union type of all possible rule type values. */\nexport type RuleType = (typeof RuleType)[keyof typeof RuleType];\n\n/** Editable field types used by rule structure for UI rendering. */\nexport const RuleEditableFieldType = {\n SELECT: 'SELECT',\n LIST: 'LIST',\n} as const;\n\n/** Union type of all possible rule editable field type values. */\nexport type RuleEditableFieldType =\n (typeof RuleEditableFieldType)[keyof typeof RuleEditableFieldType];\n\n/** Allowed keys for rule field values configuration. */\nexport const RuleFieldValueKey = {\n APPROVED_FORMATS: 'approved_formats',\n APPROVED_LOCATIONS: 'approved_locations',\n APPROVED_LICENSES: 'approved_licenses',\n DENY_ORGS: 'deny_orgs',\n DENIED_ORG_MODELS: 'denied_org_models',\n APPROVED_ORG_MODELS: 'approved_org_models',\n} as const;\n\n/** Union type of all possible rule field value key values. */\nexport type RuleFieldValueKey = (typeof RuleFieldValueKey)[keyof typeof RuleFieldValueKey];\n","// src/models/model-security.ts — Zod schemas + types for AIRS Model Security API\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Shared / utility schemas\n// ---------------------------------------------------------------------------\n\n/** Zod schema for model security pagination metadata. */\nexport const ModelSecurityPaginationSchema = z\n .object({\n total_items: z.number().int().nullable().optional(),\n })\n .passthrough();\n\n/** Pagination metadata for model security list responses. */\nexport type ModelSecurityPagination = z.infer<typeof ModelSecurityPaginationSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Labels\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single label key-value pair. */\nexport const LabelSchema = z.object({\n key: z.string(),\n value: z.string(),\n});\n\n/** A single label key-value pair. */\nexport type Label = z.infer<typeof LabelSchema>;\n\n/** Zod schema for creating/setting labels on a scan. */\nexport const LabelsCreateRequestSchema = z.object({\n labels: z.array(LabelSchema),\n});\n\n/** Request body for creating or setting scan labels. */\nexport type LabelsCreateRequest = z.infer<typeof LabelsCreateRequestSchema>;\n\n/** Zod schema for labels response (empty body on success). */\nexport const LabelsResponseSchema = z.object({}).passthrough();\n\n/** Response from label create/set operations. */\nexport type LabelsResponse = z.infer<typeof LabelsResponseSchema>;\n\n/** Zod schema for a paginated list of label keys. */\nexport const LabelKeyListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n keys: z.array(z.string()),\n })\n .passthrough();\n\n/** Paginated list of distinct label keys. */\nexport type LabelKeyList = z.infer<typeof LabelKeyListSchema>;\n\n/** Zod schema for a paginated list of label values. */\nexport const LabelValueListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n values: z.array(z.string()),\n })\n .passthrough();\n\n/** Paginated list of distinct label values. */\nexport type LabelValueList = z.infer<typeof LabelValueListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Eval summary\n// ---------------------------------------------------------------------------\n\n/** Zod schema for evaluation summary counts. */\nexport const EvalSummarySchema = z\n .object({\n rules_failed: z.number().int().optional().default(0),\n rules_passed: z.number().int().optional().default(0),\n total_rules: z.number().int().optional().default(0),\n })\n .passthrough();\n\n/** Summary of rule evaluation pass/fail counts. */\nexport type EvalSummary = z.infer<typeof EvalSummarySchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Model scan issues & file scan data\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single issue detected during model scanning. */\nexport const ModelScanIssueSchema = z\n .object({\n description: z.string(),\n source: z.string(),\n threat: z.string().nullable().optional(),\n module: z.string().nullable().optional(),\n operator: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** A single issue detected during model file scanning. */\nexport type ModelScanIssue = z.infer<typeof ModelScanIssueSchema>;\n\n/** Zod schema for per-file scan data within a scan request. */\nexport const FileScanDataSchema = z\n .object({\n file_path: z.string(),\n modelscan_status: z.string(),\n blob_id: z.string(),\n error_message: z.string().nullable().optional(),\n formats: z.array(z.string()).nullable().optional(),\n issues_detected: z.array(ModelScanIssueSchema).nullable().optional(),\n })\n .passthrough();\n\n/** Per-file scan data included in a scan creation request. */\nexport type FileScanData = z.infer<typeof FileScanDataSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan details (nested in create request)\n// ---------------------------------------------------------------------------\n\n/** Zod schema for detailed scan results submitted with a scan creation. */\nexport const ScanDetailsSchema = z.object({\n scanner_version: z.string(),\n time_started: z.string(),\n files: z.array(FileScanDataSchema),\n total_files_scanned: z.number().int(),\n total_files_skipped: z.number().int(),\n model_formats: z.array(z.string()),\n model_size_bytes: z.number().int(),\n scan_duration_ms: z.number().int(),\n error_code: z.string().nullable().optional(),\n error_message: z.string().nullable().optional(),\n});\n\n/** Detailed scan results submitted with a scan creation request. */\nexport type ScanDetails = z.infer<typeof ScanDetailsSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan create request\n// ---------------------------------------------------------------------------\n\n/** Zod schema for creating a new model security scan. */\nexport const ScanCreateRequestSchema = z.object({\n model_uri: z.string(),\n security_group_uuid: z.string(),\n scan_origin: z.string(),\n allow_patterns: z.array(z.string()).nullable().optional(),\n ignore_patterns: z.array(z.string()).nullable().optional(),\n labels: z.array(LabelSchema).nullable().optional(),\n model_author: z.string().nullable().optional(),\n model_name: z.string().nullable().optional(),\n model_version: z.string().nullable().optional(),\n scan_details: ScanDetailsSchema.nullable().optional(),\n});\n\n/** Request body for creating a new model security scan. */\nexport type ScanCreateRequest = z.infer<typeof ScanCreateRequestSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan base response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for the base scan response returned by the API. */\nexport const ScanBaseResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n model_uri: z.string(),\n owner: z.string(),\n scan_origin: z.string(),\n security_group_uuid: z.string(),\n security_group_name: z.string(),\n model_version_uuid: z.string(),\n eval_outcome: z.string(),\n source_type: z.string(),\n created_by: z.string().nullable().optional(),\n enabled_rule_count_snapshot: z.number().int().nullable().optional(),\n error_code: z.string().nullable().optional(),\n error_message: z.string().nullable().optional(),\n eval_summary: EvalSummarySchema.nullable().optional(),\n labels: z.array(LabelSchema).optional(),\n model_formats: z.array(z.string()).nullable().optional(),\n scanner_version: z.string().nullable().optional(),\n time_started: z.string().nullable().optional(),\n total_files_scanned: z.number().int().nullable().optional(),\n total_files_skipped: z.number().int().nullable().optional(),\n })\n .passthrough();\n\n/** Base scan response from the Model Security API. */\nexport type ScanBaseResponse = z.infer<typeof ScanBaseResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Scan list\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a paginated list of scans. */\nexport const ScanListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n scans: z.array(ScanBaseResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security scans. */\nexport type ScanList = z.infer<typeof ScanListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — File response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a file entry in the scanned model tree. */\nexport const FileResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n path: z.string(),\n parent_path: z.string(),\n type: z.string(),\n result: z.string(),\n model_version_uuid: z.string(),\n blob_id: z.string().nullable().optional(),\n formats: z.array(z.string()).nullable().optional(),\n scan_uuid: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** A file entry in the scanned model tree. */\nexport type FileResponse = z.infer<typeof FileResponseSchema>;\n\n/** Zod schema for a paginated list of files. */\nexport const FileListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n files: z.array(FileResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of scanned model files. */\nexport type FileList = z.infer<typeof FileListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Rule evaluation response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single rule evaluation result. */\nexport const RuleEvaluationResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n result: z.string(),\n violation_count: z.number().int(),\n rule_instance_uuid: z.string(),\n scan_uuid: z.string(),\n rule_name: z.string(),\n rule_description: z.string(),\n rule_instance_state: z.string(),\n })\n .passthrough();\n\n/** A single rule evaluation result for a scan. */\nexport type RuleEvaluationResponse = z.infer<typeof RuleEvaluationResponseSchema>;\n\n/** Zod schema for a paginated list of rule evaluations. */\nexport const RuleEvaluationListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n evaluations: z.array(RuleEvaluationResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of rule evaluations. */\nexport type RuleEvaluationList = z.infer<typeof RuleEvaluationListSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Violation response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a single violation response. */\nexport const ViolationResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.string(),\n rule_instance_uuid: z.string(),\n rule_name: z.string(),\n rule_description: z.string(),\n rule_instance_state: z.string(),\n file: z.string().nullable().optional(),\n hash: z.string().nullable().optional(),\n module: z.string().nullable().optional(),\n operator: z.string().nullable().optional(),\n threat: z.string().nullable().optional(),\n threat_description: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** A single violation with detailed rule information. */\nexport type ViolationResponse = z.infer<typeof ViolationResponseSchema>;\n\n/** Zod schema for a paginated list of violations. */\nexport const ViolationListSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n violations: z.array(ViolationResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of rule violations. */\nexport type ViolationList = z.infer<typeof ViolationListSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Rule editable field & remediation\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a dropdown option on a rule editable field. */\nexport const RuleEditableFieldDropdownSchema = z\n .object({\n value: z.string(),\n label: z.string(),\n })\n .passthrough();\n\n/** A dropdown option for a rule editable field. */\nexport type RuleEditableFieldDropdown = z.infer<typeof RuleEditableFieldDropdownSchema>;\n\n/** Zod schema for a rule editable field definition. */\nexport const RuleEditableFieldSchema = z\n .object({\n attribute_name: z.string(),\n type: z.string(),\n display_name: z.string(),\n display_type: z.string(),\n description: z.string().nullable().optional(),\n dropdown_values: z.array(RuleEditableFieldDropdownSchema).nullable().optional(),\n })\n .passthrough();\n\n/** A rule editable field definition for UI rendering. */\nexport type RuleEditableField = z.infer<typeof RuleEditableFieldSchema>;\n\n/** Zod schema for rule remediation steps. */\nexport const RuleRemediationSchema = z\n .object({\n description: z.string(),\n steps: z.array(z.string()),\n url: z.string(),\n })\n .passthrough();\n\n/** Remediation steps for a security rule. */\nexport type RuleRemediation = z.infer<typeof RuleRemediationSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Rule configuration (used in group creation)\n// ---------------------------------------------------------------------------\n\n/** Zod schema for rule configuration during security group creation. */\nexport const RuleConfigurationSchema = z\n .object({\n field_values: z.record(z.unknown()).optional(),\n state: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** Configuration for customizing a rule during security group creation. */\nexport type RuleConfiguration = z.infer<typeof RuleConfigurationSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Model security rule response\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a model security rule definition. */\nexport const ModelSecurityRuleResponseSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n description: z.string(),\n rule_type: z.string(),\n compatible_sources: z.array(z.string()),\n default_state: z.string(),\n remediation: RuleRemediationSchema,\n editable_fields: z.array(RuleEditableFieldSchema),\n constant_values: z.record(z.unknown()),\n default_values: z.record(z.unknown()),\n })\n .passthrough();\n\n/** A model security rule definition. */\nexport type ModelSecurityRuleResponse = z.infer<typeof ModelSecurityRuleResponseSchema>;\n\n/** Zod schema for a paginated list of security rules. */\nexport const ListModelSecurityRulesResponseSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n rules: z.array(ModelSecurityRuleResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security rules. */\nexport type ListModelSecurityRulesResponse = z.infer<typeof ListModelSecurityRulesResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Rule instance\n// ---------------------------------------------------------------------------\n\n/** Zod schema for a model security rule instance response. */\nexport const ModelSecurityRuleInstanceResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n security_group_uuid: z.string(),\n security_rule_uuid: z.string(),\n state: z.string(),\n rule: ModelSecurityRuleResponseSchema,\n field_values: z.record(z.unknown()).optional(),\n })\n .passthrough();\n\n/** An instantiated rule that gets evaluated against scans. */\nexport type ModelSecurityRuleInstanceResponse = z.infer<\n typeof ModelSecurityRuleInstanceResponseSchema\n>;\n\n/** Zod schema for updating a rule instance. */\nexport const ModelSecurityRuleInstanceUpdateRequestSchema = z.object({\n security_group_uuid: z.string(),\n state: z.string().nullable().optional(),\n field_values: z.record(z.unknown()).nullable().optional(),\n});\n\n/** Request body for updating a rule instance. */\nexport type ModelSecurityRuleInstanceUpdateRequest = z.infer<\n typeof ModelSecurityRuleInstanceUpdateRequestSchema\n>;\n\n/** Zod schema for a paginated list of rule instances. */\nexport const ListModelSecurityRuleInstancesResponseSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n rule_instances: z.array(ModelSecurityRuleInstanceResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security rule instances. */\nexport type ListModelSecurityRuleInstancesResponse = z.infer<\n typeof ListModelSecurityRuleInstancesResponseSchema\n>;\n\n// ---------------------------------------------------------------------------\n// Management — Security group\n// ---------------------------------------------------------------------------\n\n/** Zod schema for creating a model security group. */\nexport const ModelSecurityGroupCreateRequestSchema = z.object({\n name: z.string(),\n source_type: z.string(),\n description: z.string().optional().default(''),\n rule_configurations: z.record(RuleConfigurationSchema).optional(),\n});\n\n/** Request body for creating a new model security group. */\nexport type ModelSecurityGroupCreateRequest = z.infer<typeof ModelSecurityGroupCreateRequestSchema>;\n\n/** Zod schema for a model security group response. */\nexport const ModelSecurityGroupResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n name: z.string(),\n description: z.string(),\n source_type: z.string(),\n state: z.string(),\n is_tombstone: z.boolean(),\n })\n .passthrough();\n\n/** A model security group with its configuration and state. */\nexport type ModelSecurityGroupResponse = z.infer<typeof ModelSecurityGroupResponseSchema>;\n\n/** Zod schema for updating a model security group. */\nexport const ModelSecurityGroupUpdateRequestSchema = z.object({\n name: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n});\n\n/** Request body for updating a model security group. */\nexport type ModelSecurityGroupUpdateRequest = z.infer<typeof ModelSecurityGroupUpdateRequestSchema>;\n\n/** Zod schema for a paginated list of security groups. */\nexport const ListModelSecurityGroupsResponseSchema = z\n .object({\n pagination: ModelSecurityPaginationSchema,\n security_groups: z.array(ModelSecurityGroupResponseSchema),\n })\n .passthrough();\n\n/** Paginated list of model security groups. */\nexport type ListModelSecurityGroupsResponse = z.infer<typeof ListModelSecurityGroupsResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — PyPI auth\n// ---------------------------------------------------------------------------\n\n/** Zod schema for PyPI authentication response. */\nexport const PyPIAuthResponseSchema = z\n .object({\n url: z.string(),\n expires_at: z.string(),\n })\n .passthrough();\n\n/** PyPI authentication response with Google Artifact Registry URL. */\nexport type PyPIAuthResponse = z.infer<typeof PyPIAuthResponseSchema>;\n","// src/models/red-team-enums.ts — typed enums for AIRS Red Teaming API values\n\n/** API endpoint accessibility type. */\nexport const ApiEndpointType = {\n PUBLIC: 'PUBLIC',\n PRIVATE: 'PRIVATE',\n NETWORK_BROKER: 'NETWORK_BROKER',\n} as const;\nexport type ApiEndpointType = (typeof ApiEndpointType)[keyof typeof ApiEndpointType];\n\n/** Attack lifecycle status. */\nexport const AttackStatus = {\n INIT: 'INIT',\n ATTACK: 'ATTACK',\n DETECTION: 'DETECTION',\n REPORT: 'REPORT',\n COMPLETED: 'COMPLETED',\n FAILED: 'FAILED',\n} as const;\nexport type AttackStatus = (typeof AttackStatus)[keyof typeof AttackStatus];\n\n/** Attack type classification. */\nexport const AttackType = {\n NORMAL: 'NORMAL',\n CUSTOM: 'CUSTOM',\n} as const;\nexport type AttackType = (typeof AttackType)[keyof typeof AttackType];\n\n/** Authentication type for target connections. */\nexport const AuthType = {\n OAUTH: 'OAUTH',\n ACCESS_TOKEN: 'ACCESS_TOKEN',\n} as const;\nexport type AuthType = (typeof AuthType)[keyof typeof AuthType];\n\n/** Brand risk subcategories. */\nexport const BrandSubCategory = {\n COMPETITOR_ENDORSEMENTS: 'COMPETITOR_ENDORSEMENTS',\n BRAND_TARNISHING_SELF_CRITICISM: 'BRAND_TARNISHING_SELF_CRITICISM',\n DISCRIMINATING_CLAIMS: 'DISCRIMINATING_CLAIMS',\n POLITICAL_ENDORSEMENTS: 'POLITICAL_ENDORSEMENTS',\n} as const;\nexport type BrandSubCategory = (typeof BrandSubCategory)[keyof typeof BrandSubCategory];\n\n/** Compliance framework subcategories. */\nexport const ComplianceSubCategory = {\n OWASP: 'OWASP',\n MITRE_ATLAS: 'MITRE_ATLAS',\n NIST: 'NIST',\n DASF_V2: 'DASF_V2',\n} as const;\nexport type ComplianceSubCategory =\n (typeof ComplianceSubCategory)[keyof typeof ComplianceSubCategory];\n\n/** Whether a scan counts toward quota. */\nexport const CountedQuotaEnum = {\n HELD: 'HELD',\n COUNTED: 'COUNTED',\n NOT_COUNTED: 'NOT_COUNTED',\n} as const;\nexport type CountedQuotaEnum = (typeof CountedQuotaEnum)[keyof typeof CountedQuotaEnum];\n\n/** Date range filter for dashboard queries. */\nexport const DateRangeFilter = {\n LAST_7_DAYS: 'LAST_7_DAYS',\n LAST_15_DAYS: 'LAST_15_DAYS',\n LAST_30_DAYS: 'LAST_30_DAYS',\n ALL: 'ALL',\n} as const;\nexport type DateRangeFilter = (typeof DateRangeFilter)[keyof typeof DateRangeFilter];\n\n/** Error source for error log entries. */\nexport const ErrorSource = {\n TARGET: 'TARGET',\n JOB: 'JOB',\n SYSTEM: 'SYSTEM',\n VALIDATION: 'VALIDATION',\n TARGET_PROFILING: 'TARGET_PROFILING',\n} as const;\nexport type ErrorSource = (typeof ErrorSource)[keyof typeof ErrorSource];\n\n/** Red Team error type classification (prefixed to avoid conflict with SDK ErrorType). */\nexport const RedTeamErrorType = {\n CONTENT_FILTER: 'CONTENT_FILTER',\n RATE_LIMIT: 'RATE_LIMIT',\n AUTHENTICATION: 'AUTHENTICATION',\n NETWORK: 'NETWORK',\n VALIDATION: 'VALIDATION',\n NETWORK_CHANNEL: 'NETWORK_CHANNEL',\n UNKNOWN: 'UNKNOWN',\n} as const;\nexport type RedTeamErrorType = (typeof RedTeamErrorType)[keyof typeof RedTeamErrorType];\n\n/** Report download file format. */\nexport const FileFormat = {\n CSV: 'CSV',\n JSON: 'JSON',\n ALL: 'ALL',\n} as const;\nexport type FileFormat = (typeof FileFormat)[keyof typeof FileFormat];\n\n/** Dynamic scan goal type. */\nexport const GoalType = {\n BASE: 'BASE',\n TOOL_MISUSE: 'TOOL_MISUSE',\n GOAL_MANIPULATION: 'GOAL_MANIPULATION',\n} as const;\nexport type GoalType = (typeof GoalType)[keyof typeof GoalType];\n\n/** Goal type query parameter filter. */\nexport const GoalTypeQueryParam = {\n AGENT: 'AGENT',\n HUMAN_AUGMENTED: 'HUMAN_AUGMENTED',\n} as const;\nexport type GoalTypeQueryParam = (typeof GoalTypeQueryParam)[keyof typeof GoalTypeQueryParam];\n\n/** Guardrail action for runtime security policies. */\nexport const GuardrailAction = {\n ALLOW: 'ALLOW',\n BLOCK: 'BLOCK',\n} as const;\nexport type GuardrailAction = (typeof GuardrailAction)[keyof typeof GuardrailAction];\n\n/** Red team scan job status. */\nexport const JobStatus = {\n INIT: 'INIT',\n QUEUED: 'QUEUED',\n RUNNING: 'RUNNING',\n COMPLETED: 'COMPLETED',\n PARTIALLY_COMPLETE: 'PARTIALLY_COMPLETE',\n FAILED: 'FAILED',\n ABORTED: 'ABORTED',\n} as const;\nexport type JobStatus = (typeof JobStatus)[keyof typeof JobStatus];\n\n/** Job status values available for filtering (excludes INIT). */\nexport const JobStatusFilter = {\n QUEUED: 'QUEUED',\n RUNNING: 'RUNNING',\n COMPLETED: 'COMPLETED',\n PARTIALLY_COMPLETE: 'PARTIALLY_COMPLETE',\n FAILED: 'FAILED',\n ABORTED: 'ABORTED',\n} as const;\nexport type JobStatusFilter = (typeof JobStatusFilter)[keyof typeof JobStatusFilter];\n\n/** Red team scan job type. */\nexport const JobType = {\n STATIC: 'STATIC',\n DYNAMIC: 'DYNAMIC',\n CUSTOM: 'CUSTOM',\n} as const;\nexport type JobType = (typeof JobType)[keyof typeof JobType];\n\n/** Runtime security policy type. */\nexport const PolicyType = {\n PROMPT_INJECTION: 'PROMPT_INJECTION',\n TOXIC_CONTENT: 'TOXIC_CONTENT',\n CUSTOM_TOPIC_GUARDRAILS: 'CUSTOM_TOPIC_GUARDRAILS',\n MALICIOUS_CODE_DETECTION: 'MALICIOUS_CODE_DETECTION',\n MALICIOUS_URL_DETECTION: 'MALICIOUS_URL_DETECTION',\n SENSITIVE_DATA_PROTECTION: 'SENSITIVE_DATA_PROTECTION',\n} as const;\nexport type PolicyType = (typeof PolicyType)[keyof typeof PolicyType];\n\n/** Target profiling status. */\nexport const ProfilingStatus = {\n INIT: 'INIT',\n QUEUED: 'QUEUED',\n IN_PROGRESS: 'IN_PROGRESS',\n COMPLETED: 'COMPLETED',\n FAILED: 'FAILED',\n} as const;\nexport type ProfilingStatus = (typeof ProfilingStatus)[keyof typeof ProfilingStatus];\n\n/** Red Team risk category (prefixed to avoid conflict with SDK Category). */\nexport const RedTeamCategory = {\n SECURITY: 'SECURITY',\n SAFETY: 'SAFETY',\n COMPLIANCE: 'COMPLIANCE',\n BRAND: 'BRAND',\n} as const;\nexport type RedTeamCategory = (typeof RedTeamCategory)[keyof typeof RedTeamCategory];\n\n/** Target response mode. */\nexport const ResponseMode = {\n REST: 'REST',\n STREAMING: 'STREAMING',\n} as const;\nexport type ResponseMode = (typeof ResponseMode)[keyof typeof ResponseMode];\n\n/** Risk rating levels. */\nexport const RiskRating = {\n LOW: 'LOW',\n MEDIUM: 'MEDIUM',\n HIGH: 'HIGH',\n CRITICAL: 'CRITICAL',\n} as const;\nexport type RiskRating = (typeof RiskRating)[keyof typeof RiskRating];\n\n/** Safety risk subcategories. */\nexport const SafetySubCategory = {\n BIAS: 'BIAS',\n CBRN: 'CBRN',\n CYBERCRIME: 'CYBERCRIME',\n DRUGS: 'DRUGS',\n HATE_TOXIC_ABUSE: 'HATE_TOXIC_ABUSE',\n NON_VIOLENT_CRIMES: 'NON_VIOLENT_CRIMES',\n POLITICAL: 'POLITICAL',\n SELF_HARM: 'SELF_HARM',\n SEXUAL: 'SEXUAL',\n VIOLENT_CRIMES_WEAPONS: 'VIOLENT_CRIMES_WEAPONS',\n} as const;\nexport type SafetySubCategory = (typeof SafetySubCategory)[keyof typeof SafetySubCategory];\n\n/** Security risk subcategories. */\nexport const SecuritySubCategory = {\n ADVERSARIAL_SUFFIX: 'ADVERSARIAL_SUFFIX',\n EVASION: 'EVASION',\n INDIRECT_PROMPT_INJECTION: 'INDIRECT_PROMPT_INJECTION',\n JAILBREAK: 'JAILBREAK',\n MULTI_TURN: 'MULTI_TURN',\n PROMPT_INJECTION: 'PROMPT_INJECTION',\n REMOTE_CODE_EXECUTION: 'REMOTE_CODE_EXECUTION',\n SYSTEM_PROMPT_LEAK: 'SYSTEM_PROMPT_LEAK',\n TOOL_LEAK: 'TOOL_LEAK',\n MALWARE_GENERATION: 'MALWARE_GENERATION',\n} as const;\nexport type SecuritySubCategory = (typeof SecuritySubCategory)[keyof typeof SecuritySubCategory];\n\n/** Severity filter levels. */\nexport const SeverityFilter = {\n LOW: 'LOW',\n MEDIUM: 'MEDIUM',\n HIGH: 'HIGH',\n CRITICAL: 'CRITICAL',\n} as const;\nexport type SeverityFilter = (typeof SeverityFilter)[keyof typeof SeverityFilter];\n\n/** Attack status query parameter filter. */\nexport const StatusQueryParam = {\n SUCCESSFUL: 'SUCCESSFUL',\n FAILED: 'FAILED',\n} as const;\nexport type StatusQueryParam = (typeof StatusQueryParam)[keyof typeof StatusQueryParam];\n\n/** Dynamic scan stream type. */\nexport const StreamType = {\n NORMAL: 'NORMAL',\n ADVERSARIAL: 'ADVERSARIAL',\n} as const;\nexport type StreamType = (typeof StreamType)[keyof typeof StreamType];\n\n/** Target connection provider type. */\nexport const TargetConnectionType = {\n DATABRICKS: 'DATABRICKS',\n BEDROCK: 'BEDROCK',\n OPENAI: 'OPENAI',\n HUGGING_FACE: 'HUGGING_FACE',\n CUSTOM: 'CUSTOM',\n REST: 'REST',\n STREAMING: 'STREAMING',\n} as const;\nexport type TargetConnectionType = (typeof TargetConnectionType)[keyof typeof TargetConnectionType];\n\n/** Target lifecycle status. */\nexport const TargetStatus = {\n DRAFT: 'DRAFT',\n VALIDATING: 'VALIDATING',\n VALIDATED: 'VALIDATED',\n ACTIVE: 'ACTIVE',\n INACTIVE: 'INACTIVE',\n FAILED: 'FAILED',\n PENDING_AUTH: 'PENDING_AUTH',\n} as const;\nexport type TargetStatus = (typeof TargetStatus)[keyof typeof TargetStatus];\n\n/** Target classification type. */\nexport const TargetType = {\n APPLICATION: 'APPLICATION',\n AGENT: 'AGENT',\n MODEL: 'MODEL',\n} as const;\nexport type TargetType = (typeof TargetType)[keyof typeof TargetType];\n","// src/models/red-team.ts — Zod schemas + types for AIRS Red Teaming API\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Shared / utility schemas\n// ---------------------------------------------------------------------------\n\nexport const RedTeamPaginationSchema = z\n .object({ total_items: z.number().int().nullable().optional() })\n .passthrough();\nexport type RedTeamPagination = z.infer<typeof RedTeamPaginationSchema>;\n\nexport const CountByNameSchema = z.object({ name: z.string(), count: z.number().int() });\nexport type CountByName = z.infer<typeof CountByNameSchema>;\n\nexport const ValidationErrorSchema = z.object({\n loc: z.array(z.union([z.string(), z.number()])),\n msg: z.string(),\n type: z.string(),\n});\nexport type ValidationError = z.infer<typeof ValidationErrorSchema>;\n\nexport const HTTPValidationErrorSchema = z\n .object({ detail: z.array(ValidationErrorSchema).optional() })\n .passthrough();\nexport type HTTPValidationError = z.infer<typeof HTTPValidationErrorSchema>;\n\n// ---------------------------------------------------------------------------\n// Target context schemas (shared between data plane & management)\n// ---------------------------------------------------------------------------\n\nexport const TargetBackgroundSchema = z\n .object({\n industry: z.unknown().optional(),\n use_case: z.unknown().optional(),\n competitors: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetBackground = z.infer<typeof TargetBackgroundSchema>;\n\nexport const TargetAdditionalContextSchema = z\n .object({\n base_model: z.unknown().optional(),\n core_architecture: z.unknown().optional(),\n system_prompt: z.unknown().optional(),\n languages_supported: z.unknown().optional(),\n banned_keywords: z.unknown().optional(),\n tools_accessible: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetAdditionalContext = z.infer<typeof TargetAdditionalContextSchema>;\n\nexport const TargetMetadataSchema = z\n .object({\n multi_turn: z.boolean().optional(),\n multi_turn_error_message: z.unknown().optional(),\n rate_limit: z.unknown().optional(),\n rate_limit_enabled: z.boolean().optional(),\n rate_limit_error_code: z.unknown().optional(),\n rate_limit_error_json: z.unknown().optional(),\n rate_limit_error_message: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.unknown().optional(),\n content_filter_error_json: z.unknown().optional(),\n content_filter_error_message: z.unknown().optional(),\n probe_message: z.string().optional(),\n request_timeout: z.number().optional(),\n })\n .passthrough();\nexport type TargetMetadata = z.infer<typeof TargetMetadataSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Job / Scan schemas\n// ---------------------------------------------------------------------------\n\nexport const TargetJobRequestSchema = z.object({\n uuid: z.string(),\n version: z.number().int().nullable().optional(),\n});\nexport type TargetJobRequest = z.infer<typeof TargetJobRequestSchema>;\n\nexport const JobTimeRecordSchema = z\n .object({\n queued_at: z.string().nullable().optional(),\n started_at: z.string().nullable().optional(),\n completed_at: z.string().nullable().optional(),\n time_taken: z.string().nullable().optional(),\n })\n .passthrough();\nexport type JobTimeRecord = z.infer<typeof JobTimeRecordSchema>;\n\nexport const StaticJobMetadataSchema = z\n .object({\n categories: z.record(z.unknown()),\n rate_limit_enabled: z.boolean().optional(),\n rate_limit: z.number().int().nullable().optional(),\n rate_limit_error_code: z.number().int().nullable().optional(),\n rate_limit_error_message: z.string().nullable().optional(),\n rate_limit_error_json: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.number().int().nullable().optional(),\n content_filter_error_message: z.string().nullable().optional(),\n content_filter_error_json: z.unknown().optional(),\n })\n .passthrough();\nexport type StaticJobMetadata = z.infer<typeof StaticJobMetadataSchema>;\n\nexport const DynamicJobMetadataSchema = z\n .object({\n rate_limit_enabled: z.boolean().optional(),\n rate_limit: z.number().int().nullable().optional(),\n rate_limit_error_code: z.number().int().nullable().optional(),\n rate_limit_error_message: z.string().nullable().optional(),\n rate_limit_error_json: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.number().int().nullable().optional(),\n content_filter_error_message: z.string().nullable().optional(),\n content_filter_error_json: z.unknown().optional(),\n stream_breadth: z.number().int().optional(),\n stream_depth: z.number().int().optional(),\n max_tokens: z.number().int().optional(),\n context_size: z.number().int().optional(),\n attack_goals: z.array(z.unknown()).optional(),\n base_model: z.string().nullable().optional(),\n use_case: z.string().nullable().optional(),\n system_prompt: z.string().nullable().optional(),\n })\n .passthrough();\nexport type DynamicJobMetadata = z.infer<typeof DynamicJobMetadataSchema>;\n\nexport const CustomJobMetadataSchema = z\n .object({\n custom_prompt_sets: z.array(z.unknown()),\n rate_limit_enabled: z.boolean().optional(),\n rate_limit: z.number().int().nullable().optional(),\n rate_limit_error_code: z.number().int().nullable().optional(),\n rate_limit_error_message: z.string().nullable().optional(),\n rate_limit_error_json: z.unknown().optional(),\n content_filter_enabled: z.boolean().optional(),\n content_filter_error_code: z.number().int().nullable().optional(),\n content_filter_error_message: z.string().nullable().optional(),\n content_filter_error_json: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomJobMetadata = z.infer<typeof CustomJobMetadataSchema>;\n\nexport const JobCreateRequestSchema = z.object({\n name: z.string(),\n target: TargetJobRequestSchema,\n job_type: z.string(),\n job_metadata: z.union([\n StaticJobMetadataSchema,\n DynamicJobMetadataSchema,\n CustomJobMetadataSchema,\n ]),\n version: z.number().int().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n});\nexport type JobCreateRequest = z.infer<typeof JobCreateRequestSchema>;\n\nexport const StaticJobReportStatsSchema = z\n .object({\n output_completion_percentage: z.number(),\n partial_report_unlocked: z.boolean().optional(),\n partial_report_unlocked_at: z.string().nullable().optional(),\n report_summary: z.string().nullable().optional(),\n })\n .passthrough();\nexport type StaticJobReportStats = z.infer<typeof StaticJobReportStatsSchema>;\n\nexport const DynamicJobReportStatsSchema = z\n .object({\n total_goals: z.number().int().optional(),\n total_streams: z.number().int().optional(),\n total_threats: z.number().int().optional(),\n goals_achieved: z.number().int().optional(),\n report_summary: z.string().nullable().optional(),\n })\n .passthrough();\nexport type DynamicJobReportStats = z.infer<typeof DynamicJobReportStatsSchema>;\n\nexport const TargetReferenceSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n target_type: z.string().nullable().optional(),\n connection_type: z.string().nullable().optional(),\n api_endpoint_type: z.string().nullable().optional(),\n response_mode: z.string().nullable().optional(),\n session_supported: z.boolean().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n status: z.string(),\n active: z.boolean(),\n validated: z.boolean(),\n version: z.number().int().nullable().optional(),\n secret_version: z.string().nullable().optional(),\n created_by_user_id: z.string().nullable().optional(),\n updated_by_user_id: z.string().nullable().optional(),\n created_at: z.string(),\n updated_at: z.string(),\n target_metadata: TargetMetadataSchema.optional(),\n target_background: TargetBackgroundSchema.nullable().optional(),\n profiling_status: z.string().nullable().optional(),\n additional_context: TargetAdditionalContextSchema.nullable().optional(),\n })\n .passthrough();\nexport type TargetReference = z.infer<typeof TargetReferenceSchema>;\n\nexport const JobResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n target: TargetReferenceSchema,\n job_type: z.string(),\n job_metadata: z.unknown(),\n version: z.number().int().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n target_id: z.string(),\n target_type: z.string(),\n total: z.number().int().nullable().optional(),\n completed: z.number().int().nullable().optional(),\n status: z.string().optional(),\n score: z.number().nullable().optional(),\n asr: z.number().nullable().optional(),\n time_record: JobTimeRecordSchema.nullable().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n created_by_user_id: z.string().nullable().optional(),\n report_stats: z.unknown().optional(),\n metering_quota_uuid: z.string().nullable().optional(),\n counted_towards_quota: z.string().optional(),\n invocation_id: z.string().nullable().optional(),\n })\n .passthrough();\nexport type JobResponse = z.infer<typeof JobResponseSchema>;\n\nexport const JobListResponseSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(JobResponseSchema),\n })\n .passthrough();\nexport type JobListResponse = z.infer<typeof JobListResponseSchema>;\n\nexport const JobAbortResponseSchema = z.object({\n job_id: z.string(),\n message: z.string(),\n});\nexport type JobAbortResponse = z.infer<typeof JobAbortResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Category schemas\n// ---------------------------------------------------------------------------\n\nexport const PrerequisiteModelSchema = z.object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n});\nexport type PrerequisiteModel = z.infer<typeof PrerequisiteModelSchema>;\n\nexport const SubCategoryModelSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n prerequisites: z.array(PrerequisiteModelSchema).nullable().optional(),\n active: z.boolean().optional(),\n })\n .passthrough();\nexport type SubCategoryModel = z.infer<typeof SubCategoryModelSchema>;\n\nexport const CategoryModelSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n sub_categories: z.array(SubCategoryModelSchema),\n })\n .passthrough();\nexport type CategoryModel = z.infer<typeof CategoryModelSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Attack schemas\n// ---------------------------------------------------------------------------\n\nexport const AttackOutputSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n attack_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n output: z.string(),\n threat: z.boolean().nullable().optional(),\n marked_safe: z.boolean().nullable().optional(),\n })\n .passthrough();\nexport type AttackOutput = z.infer<typeof AttackOutputSchema>;\n\nexport const AttackMultiTurnOutputSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n attack_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n output: z.string(),\n prompt: z.string(),\n turn: z.number().int(),\n threat: z.boolean().nullable().optional(),\n marked_safe: z.boolean().nullable().optional(),\n generation: z.number().int().optional(),\n multi_turn: z.boolean().optional(),\n })\n .passthrough();\nexport type AttackMultiTurnOutput = z.infer<typeof AttackMultiTurnOutputSchema>;\n\nexport const AttackListItemSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n prompt: z.string(),\n prompt_mapping_id: z.string(),\n prompt_id: z.string(),\n category: z.string(),\n sub_category: z.string(),\n category_display_name: z.string(),\n sub_category_display_name: z.string(),\n status: z.string().optional(),\n marked_safe: z.boolean().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n threat: z.boolean().nullable().optional(),\n attack_type: z.string().optional(),\n multi_turn: z.boolean().optional(),\n asr: z.number().nullable().optional(),\n version: z.number().int().nullable().optional(),\n severity: z.string().optional(),\n })\n .passthrough();\nexport type AttackListItem = z.infer<typeof AttackListItemSchema>;\n\nexport const AttackListResponseSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(AttackListItemSchema),\n })\n .passthrough();\nexport type AttackListResponse = z.infer<typeof AttackListResponseSchema>;\n\nexport const AttackDetailResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n prompt: z.string(),\n prompt_mapping_id: z.string(),\n prompt_id: z.string(),\n category: z.string(),\n sub_category: z.string(),\n category_display_name: z.string(),\n sub_category_display_name: z.string(),\n compliance_frameworks: z.array(z.unknown()),\n goal: z.string().nullable(),\n status: z.string().optional(),\n marked_safe: z.boolean().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n threat: z.boolean().nullable().optional(),\n attack_type: z.string().optional(),\n multi_turn: z.boolean().optional(),\n asr: z.number().nullable().optional(),\n version: z.number().int().nullable().optional(),\n severity: z.string().optional(),\n outputs: z.array(AttackOutputSchema).optional(),\n })\n .passthrough();\nexport type AttackDetailResponse = z.infer<typeof AttackDetailResponseSchema>;\n\nexport const AttackMultiTurnDetailResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n prompt: z.string(),\n prompt_mapping_id: z.string(),\n prompt_id: z.string(),\n category: z.string(),\n sub_category: z.string(),\n category_display_name: z.string(),\n sub_category_display_name: z.string(),\n compliance_frameworks: z.array(z.unknown()),\n goal: z.string().nullable(),\n status: z.string().optional(),\n marked_safe: z.boolean().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n threat: z.boolean().nullable().optional(),\n attack_type: z.string().optional(),\n multi_turn: z.boolean().optional(),\n asr: z.number().nullable().optional(),\n version: z.number().int().nullable().optional(),\n severity: z.string().optional(),\n outputs: z.array(AttackMultiTurnOutputSchema).optional(),\n })\n .passthrough();\nexport type AttackMultiTurnDetailResponse = z.infer<typeof AttackMultiTurnDetailResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Report schemas\n// ---------------------------------------------------------------------------\n\nexport const SubCategoryStatsSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n prerequisites: z.array(PrerequisiteModelSchema).nullable().optional(),\n active: z.boolean().optional(),\n successful: z.number().int(),\n failed: z.number().int(),\n total: z.number().int().optional(),\n })\n .passthrough();\nexport type SubCategoryStats = z.infer<typeof SubCategoryStatsSchema>;\n\nexport const CategoryReportSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n preselect: z.boolean().optional(),\n sub_categories: z.array(SubCategoryStatsSchema),\n asr: z.number(),\n total_prompts: z.number().int(),\n total_attacks: z.number().int(),\n successful: z.number().int(),\n failed: z.number().int(),\n })\n .passthrough();\nexport type CategoryReport = z.infer<typeof CategoryReportSchema>;\n\nexport const SeverityStatsSchema = z\n .object({\n severity: z.string(),\n successful: z.number().int().optional(),\n failed: z.number().int().optional(),\n })\n .passthrough();\nexport type SeverityStats = z.infer<typeof SeverityStatsSchema>;\n\nexport const SeverityReportSchema = z\n .object({\n stats: z.array(SeverityStatsSchema),\n successful: z.number().int().optional(),\n failed: z.number().int().optional(),\n total_attacks: z.number().int().optional(),\n })\n .passthrough();\nexport type SeverityReport = z.infer<typeof SeverityReportSchema>;\n\nexport const ComplianceTechniqueSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n compliance_id: z.string(),\n description: z.string(),\n link: z.string(),\n version: z.string(),\n active: z.boolean(),\n successful: z.number().int().optional(),\n failed: z.number().int().optional(),\n total: z.number().int().optional(),\n })\n .passthrough();\nexport type ComplianceTechnique = z.infer<typeof ComplianceTechniqueSchema>;\n\nexport const ComplianceReportSchema = z\n .object({\n id: z.string(),\n display_name: z.string(),\n description: z.string(),\n active: z.boolean(),\n version: z.string(),\n link: z.string(),\n techniques: z.array(ComplianceTechniqueSchema),\n score: z.number().int().optional(),\n })\n .passthrough();\nexport type ComplianceReport = z.infer<typeof ComplianceReportSchema>;\n\nexport const RuntimeSecurityPolicySchema = z\n .object({\n policy_id: z.string(),\n display_name: z.string(),\n config: z.record(z.unknown()),\n })\n .passthrough();\nexport type RuntimeSecurityPolicy = z.infer<typeof RuntimeSecurityPolicySchema>;\n\nexport const StaticJobRemediationSchema = z\n .object({\n remediation: z.string(),\n description: z.string(),\n mapping_remediation_id: z.string().nullable().optional(),\n subcategories: z.array(z.string()).nullable().optional(),\n effectiveness: z.number().int().optional(),\n ease_of_implementation: z.number().int().optional(),\n priority: z.number().int().optional(),\n resource_links: z.array(z.string()).optional(),\n categories: z.array(z.string()).nullable().optional(),\n })\n .passthrough();\nexport type StaticJobRemediation = z.infer<typeof StaticJobRemediationSchema>;\n\nexport const StaticJobRemediationRecommendationSchema = z\n .object({\n runtime_security_policy_configuration: z\n .array(RuntimeSecurityPolicySchema)\n .nullable()\n .optional(),\n other_measures: z.array(StaticJobRemediationSchema).optional(),\n })\n .passthrough();\nexport type StaticJobRemediationRecommendation = z.infer<\n typeof StaticJobRemediationRecommendationSchema\n>;\n\nexport const StaticJobReportSchema = z\n .object({\n severity_report: SeverityReportSchema,\n asr: z.number().nullable().optional(),\n score: z.number().nullable().optional(),\n security_report: CategoryReportSchema.nullable().optional(),\n safety_report: CategoryReportSchema.nullable().optional(),\n brand_report: CategoryReportSchema.nullable().optional(),\n compliance_report: z.array(ComplianceReportSchema).nullable().optional(),\n report_summary: z.string().nullable().optional(),\n recommendations: StaticJobRemediationRecommendationSchema.nullable().optional(),\n })\n .passthrough();\nexport type StaticJobReport = z.infer<typeof StaticJobReportSchema>;\n\nexport const DynamicJobReportSchema = z\n .object({\n total_goals: z.number().int().optional(),\n total_streams: z.number().int().optional(),\n total_threats: z.number().int().optional(),\n goals_achieved: z.number().int().optional(),\n report_summary: z.string().nullable().optional(),\n score: z.number().optional(),\n asr: z.number().optional(),\n })\n .passthrough();\nexport type DynamicJobReport = z.infer<typeof DynamicJobReportSchema>;\n\nexport const RemediationDetailSchema = z\n .object({\n remediation: z.string(),\n description: z.string(),\n resource_links: z.array(z.string()).optional(),\n priority_level: z.string().optional(),\n ease_of_implementation_level: z.string().optional(),\n effectiveness_level: z.string().optional(),\n })\n .passthrough();\nexport type RemediationDetail = z.infer<typeof RemediationDetailSchema>;\n\nexport const RemediationResponseSchema = z\n .object({ remediations: z.array(RemediationDetailSchema).optional() })\n .passthrough();\nexport type RemediationResponse = z.infer<typeof RemediationResponseSchema>;\n\nexport const RuntimeSecurityProfileResponseSchema = z\n .object({\n runtime_security_profile: z.array(RuntimeSecurityPolicySchema).nullable().optional(),\n })\n .passthrough();\nexport type RuntimeSecurityProfileResponse = z.infer<typeof RuntimeSecurityProfileResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Goal & Stream schemas (dynamic reports)\n// ---------------------------------------------------------------------------\n\nexport const GoalSchema = z\n .object({\n goal: z.string(),\n safe_response: z.string(),\n jailbroken_response: z.string(),\n goal_metadata: z.record(z.unknown()).optional(),\n custom_goal: z.boolean().optional(),\n goal_type: z.string().optional(),\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n goal_to_show: z.string().nullable().optional(),\n threat: z.boolean().optional(),\n version: z.number().int().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n })\n .passthrough();\nexport type Goal = z.infer<typeof GoalSchema>;\n\nexport const GoalListResponseSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(GoalSchema) })\n .passthrough();\nexport type GoalListResponse = z.infer<typeof GoalListResponseSchema>;\n\nexport const StreamIterationDataSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n stream_id: z.string(),\n goal_id: z.string(),\n iteration: z.number().int(),\n prompt: z.string(),\n techniques: z.string(),\n improvement: z.string(),\n prompts_objective: z.string(),\n summary: z.string(),\n output: z.string().nullable().optional(),\n score: z.number().int().nullable().optional(),\n judge_reasoning: z.string().nullable().optional(),\n threat: z.boolean().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n version: z.number().int().nullable().optional(),\n })\n .passthrough();\nexport type StreamIterationData = z.infer<typeof StreamIterationDataSchema>;\n\nexport const StreamDetailResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n goal_id: z.string(),\n stream_idx: z.number().int().optional(),\n iteration: z.number().int().optional(),\n goal: z.unknown().optional(),\n marked_safe: z.boolean().optional(),\n stream_type: z.string().nullable().optional(),\n threat: z.boolean().optional(),\n first_threat_iteration: StreamIterationDataSchema.nullable().optional(),\n created_at: z.string().nullable().optional(),\n updated_at: z.string().nullable().optional(),\n extra_info: z.record(z.unknown()).optional(),\n version: z.number().int().nullable().optional(),\n iterations: z.array(StreamIterationDataSchema).optional(),\n })\n .passthrough();\nexport type StreamDetailResponse = z.infer<typeof StreamDetailResponseSchema>;\n\nexport const StreamListResponseSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(StreamDetailResponseSchema) })\n .passthrough();\nexport type StreamListResponse = z.infer<typeof StreamListResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Custom attack report schemas\n// ---------------------------------------------------------------------------\n\nexport const CustomAttackOutputSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n custom_attack_id: z.string(),\n job_id: z.string(),\n target_id: z.string(),\n output: z.string(),\n threat: z.boolean().nullable().optional(),\n marked_safe: z.boolean().nullable().optional(),\n })\n .passthrough();\nexport type CustomAttackOutput = z.infer<typeof CustomAttackOutputSchema>;\n\nexport const PropertyAssignmentSchema = z.object({\n name: z.string(),\n value: z.string(),\n});\nexport type PropertyAssignment = z.infer<typeof PropertyAssignmentSchema>;\n\nexport const PropertyValueStatisticSchema = z.object({\n value: z.string(),\n successful_attack_count: z.number().int(),\n total_attack_count: z.number().int(),\n success_rate: z.number(),\n});\nexport type PropertyValueStatistic = z.infer<typeof PropertyValueStatisticSchema>;\n\nexport const PropertyStatisticSchema = z.object({\n property_name: z.string(),\n values: z.array(PropertyValueStatisticSchema),\n});\nexport type PropertyStatistic = z.infer<typeof PropertyStatisticSchema>;\n\nexport const PromptSetSummarySchema = z\n .object({\n prompt_set_id: z.string(),\n prompt_set_name: z.string(),\n total_prompts: z.number().int(),\n total_attacks: z.number().int(),\n total_threats: z.number().int(),\n failed_attacks: z.number().int(),\n threat_rate: z.number(),\n property_names: z.array(z.string()).optional(),\n property_statistics: z.array(PropertyStatisticSchema).optional(),\n })\n .passthrough();\nexport type PromptSetSummary = z.infer<typeof PromptSetSummarySchema>;\n\nexport const CustomAttackReportResponseSchema = z\n .object({\n total_prompts: z.number().int(),\n total_attacks: z.number().int(),\n total_threats: z.number().int(),\n failed_attacks: z.number().int(),\n score: z.number(),\n asr: z.number(),\n custom_attack_reports: z.array(PromptSetSummarySchema).optional(),\n property_statistics: z.array(PropertyStatisticSchema).optional(),\n })\n .passthrough();\nexport type CustomAttackReportResponse = z.infer<typeof CustomAttackReportResponseSchema>;\n\nexport const PromptSetsReportResponseSchema = z\n .object({\n prompt_sets: z.array(PromptSetSummarySchema),\n total_prompt_sets: z.number().int(),\n applied_filters: z.record(z.unknown()).optional(),\n })\n .passthrough();\nexport type PromptSetsReportResponse = z.infer<typeof PromptSetsReportResponseSchema>;\n\nexport const PromptDetailResponseSchema = z\n .object({\n prompt_id: z.string(),\n prompt_text: z.string(),\n goal: z.string().nullable().optional(),\n user_defined_goal: z.boolean().optional(),\n properties: z.array(PropertyAssignmentSchema).optional(),\n attack_id: z.string().nullable().optional(),\n threat: z.boolean().nullable().optional(),\n attack_outputs: z.array(CustomAttackOutputSchema).optional(),\n asr: z.number().nullable().optional(),\n prompt_set_id: z.string().nullable().optional(),\n prompt_set_name: z.string().nullable().optional(),\n })\n .passthrough();\nexport type PromptDetailResponse = z.infer<typeof PromptDetailResponseSchema>;\n\nexport const CustomAttacksListResponseSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(z.unknown()),\n total_attacks: z.number().int(),\n total_threats: z.number().int(),\n })\n .passthrough();\nexport type CustomAttacksListResponse = z.infer<typeof CustomAttacksListResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Dashboard schemas\n// ---------------------------------------------------------------------------\n\nexport const RiskLevelSchema = z\n .object({\n risk_rating: z.string(),\n total: z.number().int(),\n targets_by_type: z.array(CountByNameSchema).optional(),\n })\n .passthrough();\nexport type RiskLevel = z.infer<typeof RiskLevelSchema>;\n\nexport const ScanStatisticsResponseSchema = z\n .object({\n total_scans: z.number().int(),\n targets_scanned: z.number().int(),\n targets_scanned_by_type: z.array(CountByNameSchema).optional(),\n scan_status: z.array(CountByNameSchema).optional(),\n risk_profile: z.array(RiskLevelSchema).optional(),\n })\n .passthrough();\nexport type ScanStatisticsResponse = z.infer<typeof ScanStatisticsResponseSchema>;\n\nexport const ScoreTrendSeriesSchema = z.object({\n label: z.string(),\n data: z.array(z.number().nullable()),\n});\nexport type ScoreTrendSeries = z.infer<typeof ScoreTrendSeriesSchema>;\n\nexport const ScoreTrendResponseSchema = z.object({\n labels: z.array(z.string()),\n series: z.array(ScoreTrendSeriesSchema),\n});\nexport type ScoreTrendResponse = z.infer<typeof ScoreTrendResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// DataPlane — Sentiment, Quota, Error Log schemas\n// ---------------------------------------------------------------------------\n\nexport const SentimentRequestSchema = z.object({\n job_id: z.string(),\n up_vote: z.boolean().optional(),\n down_vote: z.boolean().optional(),\n});\nexport type SentimentRequest = z.infer<typeof SentimentRequestSchema>;\n\nexport const SentimentResponseSchema = z\n .object({\n job_id: z.string(),\n up_vote: z.boolean().optional(),\n down_vote: z.boolean().optional(),\n })\n .passthrough();\nexport type SentimentResponse = z.infer<typeof SentimentResponseSchema>;\n\nexport const QuotaDetailsSchema = z.object({\n allocated: z.number().int(),\n unlimited: z.boolean(),\n consumed: z.number().int(),\n});\nexport type QuotaDetails = z.infer<typeof QuotaDetailsSchema>;\n\nexport const QuotaSummarySchema = z.object({\n static: QuotaDetailsSchema,\n dynamic: QuotaDetailsSchema,\n custom: QuotaDetailsSchema,\n});\nexport type QuotaSummary = z.infer<typeof QuotaSummarySchema>;\n\nexport const ErrorLogSchema = z\n .object({\n created_at: z.string(),\n updated_at: z.string(),\n job_id: z.string().nullable().optional(),\n target_id: z.string().nullable().optional(),\n target_version: z.number().int().nullable().optional(),\n attack_id: z.string().nullable().optional(),\n error_type: z.string().nullable().optional(),\n error_source: z.string().nullable().optional(),\n error_message: z.string().nullable().optional(),\n target_object: z.record(z.unknown()).nullable().optional(),\n extra_info: z.record(z.unknown()).nullable().optional(),\n version: z.number().int().optional(),\n })\n .passthrough();\nexport type ErrorLog = z.infer<typeof ErrorLogSchema>;\n\nexport const ErrorLogListResponseSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(ErrorLogSchema) })\n .passthrough();\nexport type ErrorLogListResponse = z.infer<typeof ErrorLogListResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Target schemas\n// ---------------------------------------------------------------------------\n\nexport const TargetCreateRequestSchema = z\n .object({\n name: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n connection_params: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n network_broker_channel_uuid: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetCreateRequest = z.infer<typeof TargetCreateRequestSchema>;\n\nexport const TargetUpdateRequestSchema = z\n .object({\n name: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n connection_params: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n network_broker_channel_uuid: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetUpdateRequest = z.infer<typeof TargetUpdateRequestSchema>;\n\nexport const TargetContextUpdateSchema = z\n .object({\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetContextUpdate = z.infer<typeof TargetContextUpdateSchema>;\n\nexport const TargetResponseSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n status: z.unknown(),\n active: z.boolean(),\n validated: z.boolean(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n extra_info: z.unknown().optional(),\n version: z.unknown().optional(),\n secret_version: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n updated_by_user_id: z.unknown().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n profiling_status: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetResponse = z.infer<typeof TargetResponseSchema>;\n\nexport const TargetListItemSchema = z\n .object({\n uuid: z.string(),\n tsg_id: z.string(),\n name: z.string(),\n status: z.unknown(),\n active: z.boolean(),\n validated: z.boolean(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n extra_info: z.unknown().optional(),\n version: z.unknown().optional(),\n secret_version: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n updated_by_user_id: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetListItem = z.infer<typeof TargetListItemSchema>;\n\nexport const TargetListSchema = z\n .object({ pagination: RedTeamPaginationSchema, data: z.array(TargetListItemSchema).optional() })\n .passthrough();\nexport type TargetList = z.infer<typeof TargetListSchema>;\n\nexport const TargetProbeRequestSchema = z\n .object({\n name: z.string(),\n uuid: z.unknown().optional(),\n description: z.unknown().optional(),\n target_type: z.unknown().optional(),\n connection_type: z.unknown().optional(),\n api_endpoint_type: z.unknown().optional(),\n response_mode: z.unknown().optional(),\n connection_params: z.unknown().optional(),\n session_supported: z.boolean().optional(),\n target_metadata: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n network_broker_channel_uuid: z.unknown().optional(),\n probe_fields: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetProbeRequest = z.infer<typeof TargetProbeRequestSchema>;\n\nexport const TargetProfileResponseSchema = z\n .object({\n target_id: z.string(),\n target_version: z.number().int(),\n status: z.string(),\n profiling_status: z.unknown().optional(),\n target_background: z.unknown().optional(),\n additional_context: z.unknown().optional(),\n ai_generated_fields: z.unknown().optional(),\n other_details: z.unknown().optional(),\n })\n .passthrough();\nexport type TargetProfileResponse = z.infer<typeof TargetProfileResponseSchema>;\n\nexport const BaseResponseSchema = z.object({\n message: z.string(),\n status: z.number().int(),\n});\nexport type BaseResponse = z.infer<typeof BaseResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Custom attack / prompt set schemas\n// ---------------------------------------------------------------------------\n\nexport const PromptSetStatsSchema = z\n .object({\n total_prompts: z.number().int(),\n active_prompts: z.number().int(),\n inactive_prompts: z.number().int(),\n failed_prompts: z.number().int().optional(),\n validation_prompts: z.number().int().optional(),\n })\n .passthrough();\nexport type PromptSetStats = z.infer<typeof PromptSetStatsSchema>;\n\nexport const CustomPromptSetCreateRequestSchema = z.object({\n name: z.string(),\n description: z.unknown().optional(),\n property_names: z.array(z.string()).optional(),\n});\nexport type CustomPromptSetCreateRequest = z.infer<typeof CustomPromptSetCreateRequestSchema>;\n\nexport const CustomPromptSetUpdateRequestSchema = z\n .object({\n name: z.unknown().optional(),\n description: z.unknown().optional(),\n archive: z.unknown().optional(),\n property_names: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetUpdateRequest = z.infer<typeof CustomPromptSetUpdateRequestSchema>;\n\nexport const CustomPromptSetArchiveRequestSchema = z.object({ archive: z.boolean() });\nexport type CustomPromptSetArchiveRequest = z.infer<typeof CustomPromptSetArchiveRequestSchema>;\n\nexport const CustomPromptSetResponseSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n active: z.boolean(),\n archive: z.boolean(),\n status: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n property_names: z.array(z.string()).optional(),\n properties: z.array(z.unknown()).optional(),\n stats: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n version: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n updated_by_user_id: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetResponse = z.infer<typeof CustomPromptSetResponseSchema>;\n\nexport const CustomPromptSetListItemSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n active: z.boolean(),\n archive: z.boolean(),\n status: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n description: z.unknown().optional(),\n property_names: z.array(z.string()).optional(),\n stats: z.unknown().optional(),\n created_by_user_id: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetListItem = z.infer<typeof CustomPromptSetListItemSchema>;\n\nexport const CustomPromptSetListSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(CustomPromptSetListItemSchema).optional(),\n })\n .passthrough();\nexport type CustomPromptSetList = z.infer<typeof CustomPromptSetListSchema>;\n\nexport const CustomPromptSetListActiveSchema = z\n .object({ data: z.array(CustomPromptSetListItemSchema).optional() })\n .passthrough();\nexport type CustomPromptSetListActive = z.infer<typeof CustomPromptSetListActiveSchema>;\n\nexport const CustomPromptSetReferenceSchema = z\n .object({\n uuid: z.string(),\n name: z.string(),\n status: z.string(),\n active: z.boolean(),\n tsg_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n version: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetReference = z.infer<typeof CustomPromptSetReferenceSchema>;\n\nexport const CustomPromptSetVersionInfoSchema = z\n .object({\n uuid: z.string(),\n status: z.string(),\n is_latest: z.boolean(),\n version: z.unknown().optional(),\n stats: z.unknown().optional(),\n snapshot_created_at: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptSetVersionInfo = z.infer<typeof CustomPromptSetVersionInfoSchema>;\n\nexport const CustomPromptCreateRequestSchema = z.object({\n prompt: z.string(),\n prompt_set_id: z.string(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n});\nexport type CustomPromptCreateRequest = z.infer<typeof CustomPromptCreateRequestSchema>;\n\nexport const CustomPromptUpdateRequestSchema = z\n .object({\n prompt: z.unknown().optional(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptUpdateRequest = z.infer<typeof CustomPromptUpdateRequestSchema>;\n\nexport const CustomPromptResponseSchema = z\n .object({\n uuid: z.string(),\n prompt: z.string(),\n user_defined_goal: z.boolean(),\n status: z.string(),\n active: z.boolean(),\n prompt_set_id: z.string(),\n created_at: z.string(),\n updated_at: z.string(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n property_assignments: z.array(z.unknown()).optional(),\n detector_category: z.unknown().optional(),\n severity: z.unknown().optional(),\n extra_info: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptResponse = z.infer<typeof CustomPromptResponseSchema>;\n\nexport const CustomPromptListItemSchema = z\n .object({\n uuid: z.string(),\n prompt: z.string(),\n user_defined_goal: z.boolean(),\n status: z.string(),\n active: z.boolean(),\n created_at: z.string(),\n updated_at: z.string(),\n goal: z.unknown().optional(),\n properties: z.unknown().optional(),\n })\n .passthrough();\nexport type CustomPromptListItem = z.infer<typeof CustomPromptListItemSchema>;\n\nexport const CustomPromptListSchema = z\n .object({\n pagination: RedTeamPaginationSchema,\n data: z.array(CustomPromptListItemSchema).optional(),\n })\n .passthrough();\nexport type CustomPromptList = z.infer<typeof CustomPromptListSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Property schemas\n// ---------------------------------------------------------------------------\n\nexport const PropertyNameCreateRequestSchema = z.object({ name: z.string() });\nexport type PropertyNameCreateRequest = z.infer<typeof PropertyNameCreateRequestSchema>;\n\nexport const PropertyValueCreateRequestSchema = z.object({\n property_name: z.string(),\n property_value: z.string(),\n});\nexport type PropertyValueCreateRequest = z.infer<typeof PropertyValueCreateRequestSchema>;\n\nexport const PropertyDefinitionSchema = z.object({\n property_name: z.string(),\n created_at: z.string(),\n});\nexport type PropertyDefinition = z.infer<typeof PropertyDefinitionSchema>;\n\nexport const PropertyNamesListResponseSchema = z\n .object({ data: z.array(PropertyDefinitionSchema).optional() })\n .passthrough();\nexport type PropertyNamesListResponse = z.infer<typeof PropertyNamesListResponseSchema>;\n\nexport const PropertyValuesResponseSchema = z\n .object({\n name: z.string(),\n values: z.array(z.string()).optional(),\n })\n .passthrough();\nexport type PropertyValuesResponse = z.infer<typeof PropertyValuesResponseSchema>;\n\nexport const PropertyValuesMultipleResponseSchema = z\n .object({ data: z.record(z.array(z.string())).optional() })\n .passthrough();\nexport type PropertyValuesMultipleResponse = z.infer<typeof PropertyValuesMultipleResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Management — Dashboard schemas\n// ---------------------------------------------------------------------------\n\nexport const DashboardOverviewResponseSchema = z\n .object({\n total_targets: z.number().int(),\n targets_by_type: z.array(CountByNameSchema).optional(),\n })\n .passthrough();\nexport type DashboardOverviewResponse = z.infer<typeof DashboardOverviewResponseSchema>;\n","import { z } from 'zod';\n\n/** Zod schema for an OAuth2 token response. */\nexport const OAuthTokenResponseSchema = z.object({\n access_token: z.string(),\n token_type: z.string().optional(),\n expires_in: z.number(),\n scope: z.string().optional(),\n});\n\n/** OAuth2 token response with access token and expiry. */\nexport type OAuthTokenResponse = z.infer<typeof OAuthTokenResponseSchema>;\n","import { DEFAULT_TOKEN_ENDPOINT } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { OAuthTokenResponseSchema } from '../models/oauth-token.js';\n\n/** Snapshot of the current token state (never exposes the actual token). */\nexport interface TokenInfo {\n /** Whether a token has been fetched. */\n hasToken: boolean;\n /** Whether the token is valid (not expired and outside the pre-expiry buffer). */\n isValid: boolean;\n /** Whether the token has passed its expiry time. */\n isExpired: boolean;\n /** Whether the token is within the pre-expiry buffer window. */\n isExpiringSoon: boolean;\n /** Milliseconds until the token expires (0 if expired or no token). */\n expiresInMs: number;\n /** Unix timestamp (ms) when the token expires (0 if no token). */\n expiresAt: number;\n}\n\n/** Options for constructing an {@link OAuthClient}. */\nexport interface OAuthClientOptions {\n /** OAuth2 client ID. */\n clientId: string;\n /** OAuth2 client secret. */\n clientSecret: string;\n /** Tenant Service Group ID. */\n tsgId: string;\n /** OAuth2 token endpoint URL. Defaults to Palo Alto Networks auth endpoint. */\n tokenEndpoint?: string;\n /** Pre-expiry buffer in ms. Token refreshes this many ms before expiry. Defaults to 30000 (30s). */\n tokenBufferMs?: number;\n /** Callback invoked after each successful token refresh with current {@link TokenInfo}. */\n onTokenRefresh?: (info: TokenInfo) => void;\n}\n\nconst DEFAULT_TOKEN_BUFFER_MS = 30_000; // refresh 30s before expiry\n\n/**\n * OAuth2 client_credentials token manager.\n * Caches tokens, refreshes before expiry, and deduplicates concurrent requests.\n */\nexport class OAuthClient {\n public readonly tokenEndpoint: string;\n private readonly clientId: string;\n private readonly clientSecret: string;\n private readonly tsgId: string;\n private readonly tokenBufferMs: number;\n private readonly onTokenRefresh?: (info: TokenInfo) => void;\n\n private accessToken: string | null = null;\n private expiresAt = 0;\n private pendingFetch: Promise<string> | null = null;\n\n constructor(opts: OAuthClientOptions) {\n this.clientId = opts.clientId;\n this.clientSecret = opts.clientSecret;\n this.tsgId = opts.tsgId;\n this.tokenEndpoint = opts.tokenEndpoint ?? DEFAULT_TOKEN_ENDPOINT;\n this.tokenBufferMs = opts.tokenBufferMs ?? DEFAULT_TOKEN_BUFFER_MS;\n this.onTokenRefresh = opts.onTokenRefresh;\n }\n\n /**\n * Get a valid access token, refreshing if needed.\n * @returns Bearer access token string.\n */\n async getToken(): Promise<string> {\n if (this.accessToken && Date.now() < this.expiresAt - this.tokenBufferMs) {\n return this.accessToken;\n }\n\n if (this.pendingFetch) {\n return this.pendingFetch;\n }\n\n this.pendingFetch = this.fetchToken().finally(() => {\n this.pendingFetch = null;\n });\n\n return this.pendingFetch;\n }\n\n /** Clear the cached token, forcing a fresh fetch on next call. */\n clearToken(): void {\n this.accessToken = null;\n this.expiresAt = 0;\n }\n\n /** Check if the current token has passed its expiry time. Returns true if no token exists. */\n isTokenExpired(): boolean {\n if (!this.accessToken) return true;\n return Date.now() >= this.expiresAt;\n }\n\n /**\n * Check if the token is within the pre-expiry buffer window.\n * Returns true if no token exists.\n * @param bufferMs - Custom buffer in ms. Defaults to the configured `tokenBufferMs`.\n */\n isTokenExpiringSoon(bufferMs?: number): boolean {\n if (!this.accessToken) return true;\n const buffer = bufferMs ?? this.tokenBufferMs;\n return Date.now() >= this.expiresAt - buffer;\n }\n\n /**\n * Get a snapshot of the current token state without exposing the actual token value.\n * @returns Current {@link TokenInfo}.\n */\n getTokenInfo(): TokenInfo {\n const now = Date.now();\n const hasToken = this.accessToken !== null;\n const isExpired = !hasToken || now >= this.expiresAt;\n const isExpiringSoon = !hasToken || now >= this.expiresAt - this.tokenBufferMs;\n const expiresInMs = hasToken ? Math.max(0, this.expiresAt - now) : 0;\n return {\n hasToken,\n isValid: hasToken && !isExpiringSoon,\n isExpired,\n isExpiringSoon,\n expiresInMs,\n expiresAt: hasToken ? this.expiresAt : 0,\n };\n }\n\n private async fetchToken(): Promise<string> {\n const credentials = btoa(`${this.clientId}:${this.clientSecret}`);\n const body = new URLSearchParams({\n grant_type: 'client_credentials',\n scope: `tsg_id:${this.tsgId}`,\n });\n\n let response: Response;\n try {\n response = await fetch(this.tokenEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: `Basic ${credentials}`,\n },\n body: body.toString(),\n });\n } catch (err) {\n throw new AISecSDKException(\n `Token request failed: ${(err as Error).message}`,\n ErrorType.OAUTH_ERROR,\n );\n }\n\n if (!response.ok) {\n let errorMsg: string;\n try {\n const errorBody = (await response.json()) as Record<string, unknown>;\n errorMsg =\n (errorBody.error_description as string) ??\n (errorBody.error as string) ??\n `Token request failed with status ${response.status}`;\n } catch {\n errorMsg = `Token request failed with status ${response.status}`;\n }\n throw new AISecSDKException(errorMsg, ErrorType.OAUTH_ERROR);\n }\n\n const data = OAuthTokenResponseSchema.parse(await response.json());\n this.accessToken = data.access_token;\n this.expiresAt = Date.now() + data.expires_in * 1000;\n\n if (this.onTokenRefresh) {\n try {\n this.onTokenRefresh(this.getTokenInfo());\n } catch {\n // Don't let callback errors block token delivery\n }\n }\n\n return this.accessToken;\n }\n}\n","import { USER_AGENT } from '../constants.js';\nimport { executeWithRetry } from '../http-retry.js';\nimport type { OAuthClient } from './oauth-client.js';\n\n/** @internal Options for a management API HTTP request. */\nexport interface MgmtHttpRequestOptions {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n baseUrl: string;\n path: string;\n body?: unknown;\n params?: Record<string, string>;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** @internal Typed management API HTTP response. */\nexport interface MgmtHttpResponse<T = unknown> {\n status: number;\n data: T;\n}\n\nexport async function managementHttpRequest<T>(\n opts: MgmtHttpRequestOptions,\n): Promise<MgmtHttpResponse<T>> {\n const { method, baseUrl, path, body, params, oauthClient, numRetries } = opts;\n let hadTokenRefresh = false;\n\n const response = await executeWithRetry({\n maxRetries: numRetries,\n execute: async () => {\n const token = await oauthClient.getToken();\n const stripped = baseUrl.replace(/\\/+$/, '');\n const url = new URL(`${stripped}${path}`);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n url.searchParams.set(key, value);\n }\n }\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n 'User-Agent': USER_AGENT,\n };\n\n let bodyStr: string | undefined;\n if (body !== undefined) {\n headers['Content-Type'] = 'application/json';\n bodyStr = JSON.stringify(body);\n }\n\n return fetch(url.toString(), { method, headers, body: bodyStr });\n },\n onRetryableFailure: async (response) => {\n if ((response.status === 401 || response.status === 403) && !hadTokenRefresh) {\n hadTokenRefresh = true;\n oauthClient.clearToken();\n return true;\n }\n return false;\n },\n });\n\n const text = await response.text();\n const data = text ? (JSON.parse(text) as T) : ({} as T);\n return { status: response.status, data };\n}\n","import { MGMT_PROFILE_PATH, MGMT_PROFILES_TSG_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from './management-http-client.js';\nimport type { OAuthClient } from './oauth-client.js';\nimport type {\n SecurityProfile,\n CreateSecurityProfileRequest,\n SecurityProfileListResponse,\n DeleteProfileResponse,\n} from '../models/mgmt-security-profile.js';\n\n/** Pagination parameters for list operations. */\nexport interface PaginationOptions {\n /** Starting offset. Defaults to 0. */\n offset?: number;\n /** Max items to return. Defaults to 100. */\n limit?: number;\n}\n\n/** @internal */\nexport interface ProfilesClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n tsgId: string;\n numRetries: number;\n}\n\n/** Client for AIRS security profile CRUD operations. */\nexport class ProfilesClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly tsgId: string;\n private readonly numRetries: number;\n\n constructor(opts: ProfilesClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.tsgId = opts.tsgId;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new security profile.\n * @param request - Profile configuration.\n * @returns The created security profile.\n */\n async create(request: CreateSecurityProfileRequest): Promise<SecurityProfile> {\n const res = await managementHttpRequest<SecurityProfile>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MGMT_PROFILE_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List security profiles for the TSG.\n * @param opts - Pagination options.\n * @returns Paginated list of security profiles.\n */\n async list(opts?: PaginationOptions): Promise<SecurityProfileListResponse> {\n const params: Record<string, string> = {\n offset: String(opts?.offset ?? 0),\n limit: String(opts?.limit ?? 100),\n };\n\n const res = await managementHttpRequest<SecurityProfileListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MGMT_PROFILES_TSG_PATH}/${this.tsgId}`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update an existing security profile.\n * @param profileId - UUID of the profile to update.\n * @param request - Updated profile configuration.\n * @returns The updated security profile.\n */\n async update(profileId: string, request: CreateSecurityProfileRequest): Promise<SecurityProfile> {\n if (!isValidUuid(profileId)) {\n throw new AISecSDKException(\n `Invalid profile_id: ${profileId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<SecurityProfile>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MGMT_PROFILE_PATH}/uuid/${profileId}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete a security profile.\n * @param profileId - UUID of the profile to delete.\n * @returns Deletion confirmation message.\n */\n async delete(profileId: string): Promise<DeleteProfileResponse> {\n if (!isValidUuid(profileId)) {\n throw new AISecSDKException(\n `Invalid profile_id: ${profileId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<DeleteProfileResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MGMT_PROFILE_PATH}/${profileId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { MGMT_TOPIC_PATH, MGMT_TOPICS_TSG_PATH, MGMT_TOPIC_FORCE_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from './management-http-client.js';\nimport type { OAuthClient } from './oauth-client.js';\nimport type {\n CustomTopic,\n CreateCustomTopicRequest,\n CustomTopicListResponse,\n DeleteTopicResponse,\n} from '../models/mgmt-custom-topic.js';\nimport type { PaginationOptions } from './profiles.js';\n\n/** @internal */\nexport interface TopicsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n tsgId: string;\n numRetries: number;\n}\n\n/** Client for AIRS custom topic CRUD operations. */\nexport class TopicsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly tsgId: string;\n private readonly numRetries: number;\n\n constructor(opts: TopicsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.tsgId = opts.tsgId;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new custom topic.\n * @param request - Topic definition with name, description, and examples.\n * @returns The created custom topic.\n */\n async create(request: CreateCustomTopicRequest): Promise<CustomTopic> {\n const res = await managementHttpRequest<CustomTopic>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MGMT_TOPIC_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List custom topics for the TSG.\n * @param opts - Pagination options.\n * @returns Paginated list of custom topics.\n */\n async list(opts?: PaginationOptions): Promise<CustomTopicListResponse> {\n const params: Record<string, string> = {\n offset: String(opts?.offset ?? 0),\n limit: String(opts?.limit ?? 100),\n };\n\n const res = await managementHttpRequest<CustomTopicListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPICS_TSG_PATH}/${this.tsgId}`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update an existing custom topic.\n * @param topicId - UUID of the topic to update.\n * @param request - Updated topic definition.\n * @returns The updated custom topic.\n */\n async update(topicId: string, request: CreateCustomTopicRequest): Promise<CustomTopic> {\n if (!isValidUuid(topicId)) {\n throw new AISecSDKException(\n `Invalid topic_id: ${topicId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<CustomTopic>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPIC_PATH}/uuid/${topicId}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete a custom topic. Fails if topic is referenced by a profile.\n * @param topicId - UUID of the topic to delete.\n * @returns Deletion confirmation message.\n */\n async delete(topicId: string): Promise<DeleteTopicResponse> {\n if (!isValidUuid(topicId)) {\n throw new AISecSDKException(\n `Invalid topic_id: ${topicId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<DeleteTopicResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPIC_PATH}/${topicId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Force-delete a custom topic, removing it from any referencing profiles.\n * @param topicId - UUID of the topic to force-delete.\n * @returns Deletion confirmation message.\n */\n async forceDelete(topicId: string): Promise<DeleteTopicResponse> {\n if (!isValidUuid(topicId)) {\n throw new AISecSDKException(\n `Invalid topic_id: ${topicId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<DeleteTopicResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MGMT_TOPIC_FORCE_PATH}/${topicId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n DEFAULT_MGMT_ENDPOINT,\n MGMT_CLIENT_ID,\n MGMT_CLIENT_SECRET,\n MGMT_TSG_ID,\n MGMT_ENDPOINT,\n MGMT_TOKEN_ENDPOINT,\n MAX_NUMBER_OF_RETRIES,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { OAuthClient } from './oauth-client.js';\nimport { ProfilesClient } from './profiles.js';\nimport { TopicsClient } from './topics.js';\n\n/** Options for constructing a {@link ManagementClient}. */\nexport interface ManagementClientOptions {\n /** OAuth2 client ID. Falls back to `PANW_MGMT_CLIENT_ID` env var. */\n clientId?: string;\n /** OAuth2 client secret. Falls back to `PANW_MGMT_CLIENT_SECRET` env var. */\n clientSecret?: string;\n /** Tenant Service Group ID. Falls back to `PANW_MGMT_TSG_ID` env var. */\n tsgId?: string;\n /** Management API endpoint URL. Falls back to `PANW_MGMT_ENDPOINT` env var. */\n apiEndpoint?: string;\n /** OAuth2 token endpoint URL. Falls back to `PANW_MGMT_TOKEN_ENDPOINT` env var. */\n tokenEndpoint?: string;\n /** Max retry attempts (0–5). Defaults to 5. */\n numRetries?: number;\n}\n\n/**\n * Client for AIRS management API operations (profiles and topics CRUD).\n * Authenticates via OAuth2 client_credentials flow.\n */\nexport class ManagementClient {\n public readonly profiles: ProfilesClient;\n public readonly topics: TopicsClient;\n\n constructor(opts: ManagementClientOptions = {}) {\n const clientId = opts.clientId ?? process.env[MGMT_CLIENT_ID];\n const clientSecret = opts.clientSecret ?? process.env[MGMT_CLIENT_SECRET];\n const tsgId = opts.tsgId ?? process.env[MGMT_TSG_ID];\n const apiEndpoint = opts.apiEndpoint ?? process.env[MGMT_ENDPOINT] ?? DEFAULT_MGMT_ENDPOINT;\n const tokenEndpoint = opts.tokenEndpoint ?? process.env[MGMT_TOKEN_ENDPOINT];\n const numRetries = Math.min(\n Math.max(opts.numRetries ?? MAX_NUMBER_OF_RETRIES, 0),\n MAX_NUMBER_OF_RETRIES,\n );\n\n if (!clientId) {\n throw new AISecSDKException(\n 'clientId is required (option or PANW_MGMT_CLIENT_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!clientSecret) {\n throw new AISecSDKException(\n 'clientSecret is required (option or PANW_MGMT_CLIENT_SECRET env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!tsgId) {\n throw new AISecSDKException(\n 'tsgId is required (option or PANW_MGMT_TSG_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n const oauthClient = new OAuthClient({\n clientId,\n clientSecret,\n tsgId,\n tokenEndpoint,\n });\n\n this.profiles = new ProfilesClient({\n baseUrl: apiEndpoint,\n oauthClient,\n tsgId,\n numRetries,\n });\n\n this.topics = new TopicsClient({\n baseUrl: apiEndpoint,\n oauthClient,\n tsgId,\n numRetries,\n });\n }\n}\n","import {\n MODEL_SEC_SCANS_PATH,\n MODEL_SEC_EVALUATIONS_PATH,\n MODEL_SEC_VIOLATIONS_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type {\n ScanCreateRequest,\n ScanBaseResponse,\n ScanList,\n RuleEvaluationList,\n RuleEvaluationResponse,\n FileList,\n LabelsCreateRequest,\n LabelsResponse,\n ViolationList,\n ViolationResponse,\n LabelKeyList,\n LabelValueList,\n} from '../models/model-security.js';\n\n/** Pagination and filter options for model security list operations. */\nexport interface ModelSecurityListOptions {\n /** Number of items to skip. */\n skip?: number;\n /** Maximum number of items to return. */\n limit?: number;\n /** Field name to sort by. */\n sort_by?: string;\n /** Sort direction: 'asc' or 'desc'. */\n sort_direction?: string;\n /** Search query string. */\n search?: string;\n}\n\n/** Extended list options for scan listing with additional filters. */\nexport interface ModelSecurityScanListOptions extends ModelSecurityListOptions {\n /** Filter by evaluation outcome. */\n eval_outcome?: string;\n /** Filter by source type. */\n source_type?: string;\n /** Filter by scan origin. */\n scan_origin?: string;\n}\n\n/** List options for file listing with file-specific filters. */\nexport interface ModelSecurityFileListOptions extends ModelSecurityListOptions {\n /** Filter by file type. */\n type?: string;\n /** Filter by file result. */\n result?: string;\n}\n\n/** @internal */\nexport interface ModelSecurityScansClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** Build query params from list options. */\nfunction buildListParams(opts?: ModelSecurityListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Model Security data plane scan operations. */\nexport class ModelSecurityScansClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityScansClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new model security scan.\n * @param request - Scan creation request body.\n * @returns The created scan response.\n */\n async create(request: ScanCreateRequest): Promise<ScanBaseResponse> {\n const res = await managementHttpRequest<ScanBaseResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SCANS_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List model security scans with optional filters.\n * @param opts - Pagination and filter options.\n * @returns Paginated list of scans.\n */\n async list(opts?: ModelSecurityScanListOptions): Promise<ScanList> {\n const params = buildListParams(opts);\n if (opts?.eval_outcome !== undefined) params.eval_outcome = opts.eval_outcome;\n if (opts?.source_type !== undefined) params.source_type = opts.source_type;\n if (opts?.scan_origin !== undefined) params.scan_origin = opts.scan_origin;\n\n const res = await managementHttpRequest<ScanList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SCANS_PATH,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single scan by UUID.\n * @param uuid - Scan UUID.\n * @returns The scan response.\n */\n async get(uuid: string): Promise<ScanBaseResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ScanBaseResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get rule evaluations for a scan.\n * @param scanUuid - Scan UUID.\n * @param opts - Pagination options.\n * @returns Paginated list of rule evaluations.\n */\n async getEvaluations(\n scanUuid: string,\n opts?: ModelSecurityListOptions,\n ): Promise<RuleEvaluationList> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<RuleEvaluationList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/evaluations`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get files for a scan.\n * @param scanUuid - Scan UUID.\n * @param opts - Pagination and file filter options.\n * @returns Paginated list of files.\n */\n async getFiles(scanUuid: string, opts?: ModelSecurityFileListOptions): Promise<FileList> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const params = buildListParams(opts);\n if (opts?.type !== undefined) params.type = opts.type;\n if (opts?.result !== undefined) params.result = opts.result;\n\n const res = await managementHttpRequest<FileList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/files`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Add labels to a scan (merge with existing).\n * @param scanUuid - Scan UUID.\n * @param request - Labels to add.\n * @returns Labels response.\n */\n async addLabels(scanUuid: string, request: LabelsCreateRequest): Promise<LabelsResponse> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<LabelsResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Set labels on a scan (replace all existing).\n * @param scanUuid - Scan UUID.\n * @param request - Labels to set.\n * @returns Labels response.\n */\n async setLabels(scanUuid: string, request: LabelsCreateRequest): Promise<LabelsResponse> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<LabelsResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete labels from a scan by key.\n * @param scanUuid - Scan UUID.\n * @param keys - Label keys to delete.\n */\n async deleteLabels(scanUuid: string, keys: string[]): Promise<void> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n // Build keys as repeated query params: ?keys=key1&keys=key2\n // managementHttpRequest uses URLSearchParams.set which only supports single values,\n // so we manually build the query string portion\n const url = new URL(`https://placeholder${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels`);\n for (const key of keys) {\n url.searchParams.append('keys', key);\n }\n // Extract just the query string and append to path\n const queryString = url.searchParams.toString();\n const pathWithQuery = `${MODEL_SEC_SCANS_PATH}/${scanUuid}/labels${queryString ? `?${queryString}` : ''}`;\n\n await managementHttpRequest<void>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: pathWithQuery,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n }\n\n /**\n * Get rule violations for a scan.\n * @param scanUuid - Scan UUID.\n * @param opts - Pagination options.\n * @returns Paginated list of violations.\n */\n async getViolations(scanUuid: string, opts?: ModelSecurityListOptions): Promise<ViolationList> {\n if (!isValidUuid(scanUuid)) {\n throw new AISecSDKException(\n `Invalid scan uuid: ${scanUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ViolationList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/${scanUuid}/rule-violations`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get distinct label keys across all scans.\n * @param opts - Pagination options.\n * @returns Paginated list of label keys.\n */\n async getLabelKeys(opts?: ModelSecurityListOptions): Promise<LabelKeyList> {\n const res = await managementHttpRequest<LabelKeyList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/label-keys`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get distinct values for a label key.\n * @param key - Label key to get values for.\n * @param opts - Pagination options.\n * @returns Paginated list of label values.\n */\n async getLabelValues(key: string, opts?: ModelSecurityListOptions): Promise<LabelValueList> {\n const res = await managementHttpRequest<LabelValueList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SCANS_PATH}/label-keys/${encodeURIComponent(key)}/values`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single rule evaluation by UUID.\n * @param uuid - Evaluation UUID.\n * @returns The rule evaluation response.\n */\n async getEvaluation(uuid: string): Promise<RuleEvaluationResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid evaluation uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<RuleEvaluationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_EVALUATIONS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single violation by UUID.\n * @param uuid - Violation UUID.\n * @returns The violation response.\n */\n async getViolation(uuid: string): Promise<ViolationResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid violation uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ViolationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_VIOLATIONS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { MODEL_SEC_SECURITY_GROUPS_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { ModelSecurityListOptions } from './scans-client.js';\nimport type {\n ModelSecurityGroupCreateRequest,\n ModelSecurityGroupResponse,\n ModelSecurityGroupUpdateRequest,\n ListModelSecurityGroupsResponse,\n ModelSecurityRuleInstanceResponse,\n ModelSecurityRuleInstanceUpdateRequest,\n ListModelSecurityRuleInstancesResponse,\n} from '../models/model-security.js';\n\n/** @internal */\nexport interface ModelSecurityGroupsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** Build query params from list options. */\nfunction buildListParams(opts?: ModelSecurityListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Model Security management plane security group operations. */\nexport class ModelSecurityGroupsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityGroupsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * Create a new security group.\n * @param request - Security group creation request.\n * @returns The created security group.\n */\n async create(request: ModelSecurityGroupCreateRequest): Promise<ModelSecurityGroupResponse> {\n const res = await managementHttpRequest<ModelSecurityGroupResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SECURITY_GROUPS_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * List security groups with optional filters.\n * @param opts - Pagination and filter options.\n * @returns Paginated list of security groups.\n */\n async list(opts?: ModelSecurityListOptions): Promise<ListModelSecurityGroupsResponse> {\n const res = await managementHttpRequest<ListModelSecurityGroupsResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SECURITY_GROUPS_PATH,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single security group by UUID.\n * @param uuid - Security group UUID.\n * @returns The security group.\n */\n async get(uuid: string): Promise<ModelSecurityGroupResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityGroupResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update an existing security group.\n * @param uuid - Security group UUID.\n * @param request - Updated security group fields.\n * @returns The updated security group.\n */\n async update(\n uuid: string,\n request: ModelSecurityGroupUpdateRequest,\n ): Promise<ModelSecurityGroupResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityGroupResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${uuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Delete a security group.\n * @param uuid - Security group UUID.\n */\n async delete(uuid: string): Promise<void> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n await managementHttpRequest<void>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n }\n\n /**\n * List rule instances for a security group.\n * @param securityGroupUuid - Security group UUID.\n * @param opts - Pagination options.\n * @returns Paginated list of rule instances.\n */\n async listRuleInstances(\n securityGroupUuid: string,\n opts?: ModelSecurityListOptions,\n ): Promise<ListModelSecurityRuleInstancesResponse> {\n if (!isValidUuid(securityGroupUuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${securityGroupUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ListModelSecurityRuleInstancesResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${securityGroupUuid}/rule-instances`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single rule instance within a security group.\n * @param securityGroupUuid - Security group UUID.\n * @param ruleInstanceUuid - Rule instance UUID.\n * @returns The rule instance.\n */\n async getRuleInstance(\n securityGroupUuid: string,\n ruleInstanceUuid: string,\n ): Promise<ModelSecurityRuleInstanceResponse> {\n if (!isValidUuid(securityGroupUuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${securityGroupUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (!isValidUuid(ruleInstanceUuid)) {\n throw new AISecSDKException(\n `Invalid rule instance uuid: ${ruleInstanceUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityRuleInstanceResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${securityGroupUuid}/rule-instances/${ruleInstanceUuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Update a rule instance within a security group.\n * @param securityGroupUuid - Security group UUID.\n * @param ruleInstanceUuid - Rule instance UUID.\n * @param request - Updated rule instance fields.\n * @returns The updated rule instance.\n */\n async updateRuleInstance(\n securityGroupUuid: string,\n ruleInstanceUuid: string,\n request: ModelSecurityRuleInstanceUpdateRequest,\n ): Promise<ModelSecurityRuleInstanceResponse> {\n if (!isValidUuid(securityGroupUuid)) {\n throw new AISecSDKException(\n `Invalid security group uuid: ${securityGroupUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n if (!isValidUuid(ruleInstanceUuid)) {\n throw new AISecSDKException(\n `Invalid rule instance uuid: ${ruleInstanceUuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityRuleInstanceResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_GROUPS_PATH}/${securityGroupUuid}/rule-instances/${ruleInstanceUuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { MODEL_SEC_SECURITY_RULES_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { ModelSecurityListOptions } from './scans-client.js';\nimport type {\n ListModelSecurityRulesResponse,\n ModelSecurityRuleResponse,\n} from '../models/model-security.js';\n\n/** @internal */\nexport interface ModelSecurityRulesClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\n/** Build query params from list options. */\nfunction buildListParams(opts?: ModelSecurityListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Model Security management plane security rule operations (read-only). */\nexport class ModelSecurityRulesClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityRulesClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /**\n * List available security rules.\n * @param opts - Pagination options.\n * @returns Paginated list of security rules.\n */\n async list(opts?: ModelSecurityListOptions): Promise<ListModelSecurityRulesResponse> {\n const res = await managementHttpRequest<ListModelSecurityRulesResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: MODEL_SEC_SECURITY_RULES_PATH,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /**\n * Get a single security rule by UUID.\n * @param uuid - Security rule UUID.\n * @returns The security rule.\n */\n async get(uuid: string): Promise<ModelSecurityRuleResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid security rule uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<ModelSecurityRuleResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${MODEL_SEC_SECURITY_RULES_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n DEFAULT_MODEL_SEC_DATA_ENDPOINT,\n DEFAULT_MODEL_SEC_MGMT_ENDPOINT,\n MODEL_SEC_CLIENT_ID,\n MODEL_SEC_CLIENT_SECRET,\n MODEL_SEC_TSG_ID,\n MODEL_SEC_DATA_ENDPOINT,\n MODEL_SEC_MGMT_ENDPOINT,\n MODEL_SEC_TOKEN_ENDPOINT,\n MGMT_CLIENT_ID,\n MGMT_CLIENT_SECRET,\n MGMT_TSG_ID,\n MGMT_TOKEN_ENDPOINT,\n MAX_NUMBER_OF_RETRIES,\n MODEL_SEC_PYPI_AUTH_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { OAuthClient } from '../management/oauth-client.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport { ModelSecurityScansClient } from './scans-client.js';\nimport { ModelSecurityGroupsClient } from './security-groups-client.js';\nimport { ModelSecurityRulesClient } from './security-rules-client.js';\nimport type { PyPIAuthResponse } from '../models/model-security.js';\n\n/** Options for constructing a {@link ModelSecurityClient}. */\nexport interface ModelSecurityClientOptions {\n /** OAuth2 client ID. Falls back to `PANW_MODEL_SEC_CLIENT_ID`, then `PANW_MGMT_CLIENT_ID`. */\n clientId?: string;\n /** OAuth2 client secret. Falls back to `PANW_MODEL_SEC_CLIENT_SECRET`, then `PANW_MGMT_CLIENT_SECRET`. */\n clientSecret?: string;\n /** Tenant Service Group ID. Falls back to `PANW_MODEL_SEC_TSG_ID`, then `PANW_MGMT_TSG_ID`. */\n tsgId?: string;\n /** Data plane endpoint URL. Falls back to `PANW_MODEL_SEC_DATA_ENDPOINT`. */\n dataEndpoint?: string;\n /** Management plane endpoint URL. Falls back to `PANW_MODEL_SEC_MGMT_ENDPOINT`. */\n mgmtEndpoint?: string;\n /** OAuth2 token endpoint URL. Falls back to `PANW_MODEL_SEC_TOKEN_ENDPOINT`, then `PANW_MGMT_TOKEN_ENDPOINT`. */\n tokenEndpoint?: string;\n /** Max retry attempts (0-5). Defaults to 5. */\n numRetries?: number;\n}\n\n/**\n * Client for AIRS Model Security API operations.\n * Uses two base URLs: data plane for scans, management plane for security groups/rules.\n * Authenticates via OAuth2 client_credentials flow (shared token for both planes).\n */\nexport class ModelSecurityClient {\n /** Data plane scan operations. */\n public readonly scans: ModelSecurityScansClient;\n /** Management plane security group operations. */\n public readonly securityGroups: ModelSecurityGroupsClient;\n /** Management plane security rule operations (read-only). */\n public readonly securityRules: ModelSecurityRulesClient;\n\n private readonly mgmtEndpoint: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: ModelSecurityClientOptions = {}) {\n const clientId =\n opts.clientId ?? process.env[MODEL_SEC_CLIENT_ID] ?? process.env[MGMT_CLIENT_ID];\n const clientSecret =\n opts.clientSecret ?? process.env[MODEL_SEC_CLIENT_SECRET] ?? process.env[MGMT_CLIENT_SECRET];\n const tsgId = opts.tsgId ?? process.env[MODEL_SEC_TSG_ID] ?? process.env[MGMT_TSG_ID];\n const dataEndpoint =\n opts.dataEndpoint ?? process.env[MODEL_SEC_DATA_ENDPOINT] ?? DEFAULT_MODEL_SEC_DATA_ENDPOINT;\n const mgmtEndpoint =\n opts.mgmtEndpoint ?? process.env[MODEL_SEC_MGMT_ENDPOINT] ?? DEFAULT_MODEL_SEC_MGMT_ENDPOINT;\n const tokenEndpoint =\n opts.tokenEndpoint ??\n process.env[MODEL_SEC_TOKEN_ENDPOINT] ??\n process.env[MGMT_TOKEN_ENDPOINT];\n const numRetries = Math.min(\n Math.max(opts.numRetries ?? MAX_NUMBER_OF_RETRIES, 0),\n MAX_NUMBER_OF_RETRIES,\n );\n\n if (!clientId) {\n throw new AISecSDKException(\n 'clientId is required (option or PANW_MODEL_SEC_CLIENT_ID / PANW_MGMT_CLIENT_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!clientSecret) {\n throw new AISecSDKException(\n 'clientSecret is required (option or PANW_MODEL_SEC_CLIENT_SECRET / PANW_MGMT_CLIENT_SECRET env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!tsgId) {\n throw new AISecSDKException(\n 'tsgId is required (option or PANW_MODEL_SEC_TSG_ID / PANW_MGMT_TSG_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n this.oauthClient = new OAuthClient({\n clientId,\n clientSecret,\n tsgId,\n tokenEndpoint,\n });\n this.mgmtEndpoint = mgmtEndpoint;\n this.numRetries = numRetries;\n\n this.scans = new ModelSecurityScansClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.securityGroups = new ModelSecurityGroupsClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.securityRules = new ModelSecurityRulesClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n }\n\n /**\n * Get PyPI authentication credentials for Google Artifact Registry.\n * @returns PyPI auth response with URL and expiration.\n */\n async getPyPIAuth(): Promise<PyPIAuthResponse> {\n const res = await managementHttpRequest<PyPIAuthResponse>({\n method: 'GET',\n baseUrl: this.mgmtEndpoint,\n path: MODEL_SEC_PYPI_AUTH_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_SCAN_PATH, RED_TEAM_CATEGORIES_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type {\n JobCreateRequest,\n JobResponse,\n JobListResponse,\n JobAbortResponse,\n CategoryModel,\n} from '../models/red-team.js';\n\n/** Pagination and filter options for Red Team list operations. */\nexport interface RedTeamListOptions {\n skip?: number;\n limit?: number;\n sort_by?: string;\n sort_direction?: string;\n search?: string;\n}\n\n/** Extended list options for scan/job listing. */\nexport interface RedTeamScanListOptions extends RedTeamListOptions {\n status?: string;\n job_type?: string;\n target_id?: string;\n}\n\n/** @internal */\nexport interface RedTeamScansClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Red Team data plane scan operations. */\nexport class RedTeamScansClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamScansClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /** Create a new red team scan job. */\n async create(request: JobCreateRequest): Promise<JobResponse> {\n const res = await managementHttpRequest<JobResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: RED_TEAM_SCAN_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List red team scan jobs with optional filters. */\n async list(opts?: RedTeamScanListOptions): Promise<JobListResponse> {\n const params = buildListParams(opts);\n if (opts?.status !== undefined) params.status = opts.status;\n if (opts?.job_type !== undefined) params.job_type = opts.job_type;\n if (opts?.target_id !== undefined) params.target_id = opts.target_id;\n\n const res = await managementHttpRequest<JobListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: RED_TEAM_SCAN_PATH,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a single scan job by ID. */\n async get(jobId: string): Promise<JobResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n\n const res = await managementHttpRequest<JobResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_SCAN_PATH}/${jobId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Abort a running scan job. */\n async abort(jobId: string): Promise<JobAbortResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n\n const res = await managementHttpRequest<JobAbortResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_SCAN_PATH}/${jobId}/abort`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get all categories with subcategories. */\n async getCategories(): Promise<CategoryModel[]> {\n const res = await managementHttpRequest<CategoryModel[]>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: RED_TEAM_CATEGORIES_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n RED_TEAM_REPORT_STATIC_PATH,\n RED_TEAM_REPORT_DYNAMIC_PATH,\n RED_TEAM_REPORT_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n AttackListResponse,\n AttackDetailResponse,\n AttackMultiTurnDetailResponse,\n StaticJobReport,\n DynamicJobReport,\n RemediationResponse,\n RuntimeSecurityProfileResponse,\n GoalListResponse,\n StreamListResponse,\n StreamDetailResponse,\n} from '../models/red-team.js';\n\n/** Attack list filter options. */\nexport interface AttackListOptions extends RedTeamListOptions {\n status?: string;\n severity?: string;\n category?: string;\n sub_category?: string;\n}\n\n/** Goal list filter options. */\nexport interface GoalListOptions extends RedTeamListOptions {\n goal_type?: string;\n}\n\n/** @internal */\nexport interface RedTeamReportsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\nfunction validateJobId(jobId: string): void {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n}\n\n/** Client for Red Team data plane report operations. */\nexport class RedTeamReportsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamReportsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n // -----------------------------------------------------------------------\n // Static (attack library) report endpoints\n // -----------------------------------------------------------------------\n\n /** List attacks for a static scan. */\n async listAttacks(jobId: string, opts?: AttackListOptions): Promise<AttackListResponse> {\n validateJobId(jobId);\n const params = buildListParams(opts);\n if (opts?.status !== undefined) params.status = opts.status;\n if (opts?.severity !== undefined) params.severity = opts.severity;\n if (opts?.category !== undefined) params.category = opts.category;\n if (opts?.sub_category !== undefined) params.sub_category = opts.sub_category;\n\n const res = await managementHttpRequest<AttackListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/list-attacks`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get attack details for a static scan. */\n async getAttackDetail(jobId: string, attackId: string): Promise<AttackDetailResponse> {\n validateJobId(jobId);\n if (!isValidUuid(attackId)) {\n throw new AISecSDKException(\n `Invalid attack id: ${attackId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<AttackDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/attack/${attackId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get multi-turn attack details for a static scan. */\n async getMultiTurnAttackDetail(\n jobId: string,\n attackId: string,\n ): Promise<AttackMultiTurnDetailResponse> {\n validateJobId(jobId);\n if (!isValidUuid(attackId)) {\n throw new AISecSDKException(\n `Invalid attack id: ${attackId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<AttackMultiTurnDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/attack-multi-turn/${attackId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get the attack library report for a static scan. */\n async getStaticReport(jobId: string): Promise<StaticJobReport> {\n validateJobId(jobId);\n const res = await managementHttpRequest<StaticJobReport>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/report`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get remediation recommendations for a static scan. */\n async getStaticRemediation(jobId: string): Promise<RemediationResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RemediationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/remediation`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get runtime security profile config for a static scan. */\n async getStaticRuntimePolicy(jobId: string): Promise<RuntimeSecurityProfileResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RuntimeSecurityProfileResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_STATIC_PATH}/${jobId}/runtime-policy-config`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Dynamic (agent) report endpoints\n // -----------------------------------------------------------------------\n\n /** Get the agent scan report for a dynamic scan. */\n async getDynamicReport(jobId: string): Promise<DynamicJobReport> {\n validateJobId(jobId);\n const res = await managementHttpRequest<DynamicJobReport>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/report`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get remediation recommendations for a dynamic scan. */\n async getDynamicRemediation(jobId: string): Promise<RemediationResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RemediationResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/remediation`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get runtime security profile config for a dynamic scan. */\n async getDynamicRuntimePolicy(jobId: string): Promise<RuntimeSecurityProfileResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<RuntimeSecurityProfileResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/runtime-policy-config`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List goals for a dynamic scan. */\n async listGoals(jobId: string, opts?: GoalListOptions): Promise<GoalListResponse> {\n validateJobId(jobId);\n const params = buildListParams(opts);\n if (opts?.goal_type !== undefined) params.goal_type = opts.goal_type;\n\n const res = await managementHttpRequest<GoalListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/list-goals`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List streams for a goal in a dynamic scan. */\n async listGoalStreams(\n jobId: string,\n goalId: string,\n opts?: RedTeamListOptions,\n ): Promise<StreamListResponse> {\n validateJobId(jobId);\n if (!isValidUuid(goalId)) {\n throw new AISecSDKException(\n `Invalid goal id: ${goalId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<StreamListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/${jobId}/goal/${goalId}/list-streams`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Common report endpoints\n // -----------------------------------------------------------------------\n\n /** Get stream details by stream ID. */\n async getStreamDetail(streamId: string): Promise<StreamDetailResponse> {\n if (!isValidUuid(streamId)) {\n throw new AISecSDKException(\n `Invalid stream id: ${streamId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<StreamDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_DYNAMIC_PATH}/stream/${streamId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Download a report in the specified format. */\n async downloadReport(jobId: string, format?: string): Promise<unknown> {\n validateJobId(jobId);\n const params: Record<string, string> = {};\n if (format !== undefined) params.file_format = format;\n\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_PATH}/${jobId}/download`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Generate a partial report for a running scan. */\n async generatePartialReport(jobId: string): Promise<unknown> {\n validateJobId(jobId);\n const res = await managementHttpRequest<unknown>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_REPORT_PATH}/${jobId}/generate-partial-report`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n CustomAttackReportResponse,\n PromptSetsReportResponse,\n PromptDetailResponse,\n CustomAttacksListResponse,\n PropertyStatistic,\n} from '../models/red-team.js';\n\n/** @internal */\nexport interface RedTeamCustomAttackReportsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\nfunction validateJobId(jobId: string): void {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n}\n\n/** Client for Red Team custom attack report operations. */\nexport class RedTeamCustomAttackReportsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamCustomAttackReportsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /** Get custom attack report for a scan. */\n async getReport(jobId: string): Promise<CustomAttackReportResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<CustomAttackReportResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get prompt sets for a custom attack scan. */\n async getPromptSets(jobId: string): Promise<PromptSetsReportResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<PromptSetsReportResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}/prompt-sets`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get prompts for a specific prompt set in a scan. */\n async getPromptsBySet(\n jobId: string,\n promptSetId: string,\n opts?: RedTeamListOptions,\n ): Promise<unknown> {\n validateJobId(jobId);\n if (!isValidUuid(promptSetId)) {\n throw new AISecSDKException(\n `Invalid prompt set id: ${promptSetId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}/prompt-set/${promptSetId}/prompts`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get details for a specific prompt. */\n async getPromptDetail(jobId: string, promptId: string): Promise<PromptDetailResponse> {\n validateJobId(jobId);\n if (!isValidUuid(promptId)) {\n throw new AISecSDKException(\n `Invalid prompt id: ${promptId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<PromptDetailResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/report/${jobId}/prompt/${promptId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List custom attacks for a scan. */\n async listCustomAttacks(\n jobId: string,\n opts?: RedTeamListOptions,\n ): Promise<CustomAttacksListResponse> {\n validateJobId(jobId);\n const res = await managementHttpRequest<CustomAttacksListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/job/${jobId}/list-custom-attacks`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get attack outputs for a custom attack. */\n async getAttackOutputs(jobId: string, attackId: string): Promise<unknown> {\n validateJobId(jobId);\n if (!isValidUuid(attackId)) {\n throw new AISecSDKException(\n `Invalid attack id: ${attackId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/job/${jobId}/attack/${attackId}/list-outputs`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get property statistics for a custom attack scan. */\n async getPropertyStats(jobId: string): Promise<PropertyStatistic[]> {\n validateJobId(jobId);\n const res = await managementHttpRequest<PropertyStatistic[]>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACKS_REPORT_PATH}/job/${jobId}/property-stats`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_TARGET_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n TargetCreateRequest,\n TargetUpdateRequest,\n TargetContextUpdate,\n TargetResponse,\n TargetList,\n TargetProbeRequest,\n TargetProfileResponse,\n BaseResponse,\n} from '../models/red-team.js';\n\n/** Target list filter options. */\nexport interface TargetListOptions extends RedTeamListOptions {\n target_type?: string;\n status?: string;\n active?: boolean;\n}\n\n/** @internal */\nexport interface RedTeamTargetsClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/** Client for Red Team management plane target operations. */\nexport class RedTeamTargetsClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamTargetsClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n /** Create a new target. */\n async create(request: TargetCreateRequest): Promise<TargetResponse> {\n const res = await managementHttpRequest<TargetResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: RED_TEAM_TARGET_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List targets with optional filters. */\n async list(opts?: TargetListOptions): Promise<TargetList> {\n const params = buildListParams(opts);\n if (opts?.target_type !== undefined) params.target_type = opts.target_type;\n if (opts?.status !== undefined) params.status = opts.status;\n if (opts?.active !== undefined) params.active = String(opts.active);\n\n const res = await managementHttpRequest<TargetList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: RED_TEAM_TARGET_PATH,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a target by UUID. */\n async get(uuid: string): Promise<TargetResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a target. */\n async update(uuid: string, request: TargetUpdateRequest): Promise<TargetResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Delete a target. */\n async delete(uuid: string): Promise<BaseResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<BaseResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Run profiling probes on a target. */\n async probe(request: TargetProbeRequest): Promise<TargetResponse> {\n const res = await managementHttpRequest<TargetResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/probe`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get profiling results for a target. */\n async getProfile(uuid: string): Promise<TargetProfileResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetProfileResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}/profile`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a target profile (background + additional context). */\n async updateProfile(uuid: string, request: TargetContextUpdate): Promise<TargetProfileResponse> {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(\n `Invalid target uuid: ${uuid}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n\n const res = await managementHttpRequest<TargetProfileResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_TARGET_PATH}/${uuid}/profile`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import { RED_TEAM_CUSTOM_ATTACK_PATH } from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport type { OAuthClient } from '../management/oauth-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n CustomPromptSetCreateRequest,\n CustomPromptSetUpdateRequest,\n CustomPromptSetArchiveRequest,\n CustomPromptSetResponse,\n CustomPromptSetList,\n CustomPromptSetListActive,\n CustomPromptSetReference,\n CustomPromptSetVersionInfo,\n CustomPromptCreateRequest,\n CustomPromptUpdateRequest,\n CustomPromptResponse,\n CustomPromptList,\n PropertyNameCreateRequest,\n PropertyValueCreateRequest,\n PropertyNamesListResponse,\n PropertyValuesResponse,\n PropertyValuesMultipleResponse,\n BaseResponse,\n} from '../models/red-team.js';\n\n/** Prompt set list filter options. */\nexport interface PromptSetListOptions extends RedTeamListOptions {\n active?: boolean;\n archive?: boolean;\n}\n\n/** Prompt list filter options. */\nexport interface PromptListOptions extends RedTeamListOptions {\n active?: boolean;\n}\n\n/** @internal */\nexport interface RedTeamCustomAttacksClientOptions {\n baseUrl: string;\n oauthClient: OAuthClient;\n numRetries: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\nfunction validateUuid(uuid: string, label: string): void {\n if (!isValidUuid(uuid)) {\n throw new AISecSDKException(`Invalid ${label}: ${uuid}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n}\n\n/** Client for Red Team management plane custom attack operations. */\nexport class RedTeamCustomAttacksClient {\n private readonly baseUrl: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamCustomAttacksClientOptions) {\n this.baseUrl = opts.baseUrl;\n this.oauthClient = opts.oauthClient;\n this.numRetries = opts.numRetries;\n }\n\n // -----------------------------------------------------------------------\n // Prompt Set operations\n // -----------------------------------------------------------------------\n\n /** Create a new custom prompt set. */\n async createPromptSet(request: CustomPromptSetCreateRequest): Promise<CustomPromptSetResponse> {\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List custom prompt sets. */\n async listPromptSets(opts?: PromptSetListOptions): Promise<CustomPromptSetList> {\n const params = buildListParams(opts);\n if (opts?.active !== undefined) params.active = String(opts.active);\n if (opts?.archive !== undefined) params.archive = String(opts.archive);\n\n const res = await managementHttpRequest<CustomPromptSetList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/list-custom-prompt-sets`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a prompt set by UUID. */\n async getPromptSet(uuid: string): Promise<CustomPromptSetResponse> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a prompt set. */\n async updatePromptSet(\n uuid: string,\n request: CustomPromptSetUpdateRequest,\n ): Promise<CustomPromptSetResponse> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Archive or unarchive a prompt set. */\n async archivePromptSet(\n uuid: string,\n request: CustomPromptSetArchiveRequest,\n ): Promise<CustomPromptSetResponse> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}/archive`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Resolve a prompt set reference for data plane consumption. */\n async getPromptSetReference(uuid: string): Promise<CustomPromptSetReference> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetReference>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}/reference`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get version information for a prompt set. */\n async getPromptSetVersionInfo(uuid: string): Promise<CustomPromptSetVersionInfo> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<CustomPromptSetVersionInfo>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${uuid}/version-info`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List active prompt sets (for data plane). */\n async listActivePromptSets(): Promise<CustomPromptSetListActive> {\n const res = await managementHttpRequest<CustomPromptSetListActive>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/active-custom-prompt-sets`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Download CSV template for a prompt set. */\n async downloadTemplate(uuid: string): Promise<unknown> {\n validateUuid(uuid, 'prompt set uuid');\n const res = await managementHttpRequest<unknown>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/download-template/${uuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Prompt operations\n // -----------------------------------------------------------------------\n\n /** Create a new custom prompt. */\n async createPrompt(request: CustomPromptCreateRequest): Promise<CustomPromptResponse> {\n const res = await managementHttpRequest<CustomPromptResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/custom-prompt`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List prompts in a prompt set. */\n async listPrompts(promptSetUuid: string, opts?: PromptListOptions): Promise<CustomPromptList> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n const params = buildListParams(opts);\n if (opts?.active !== undefined) params.active = String(opts.active);\n\n const res = await managementHttpRequest<CustomPromptList>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/list-custom-prompts`,\n params,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get a prompt by UUID. */\n async getPrompt(promptSetUuid: string, promptUuid: string): Promise<CustomPromptResponse> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n validateUuid(promptUuid, 'prompt uuid');\n const res = await managementHttpRequest<CustomPromptResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/custom-prompt/${promptUuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update a prompt. */\n async updatePrompt(\n promptSetUuid: string,\n promptUuid: string,\n request: CustomPromptUpdateRequest,\n ): Promise<CustomPromptResponse> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n validateUuid(promptUuid, 'prompt uuid');\n const res = await managementHttpRequest<CustomPromptResponse>({\n method: 'PUT',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/custom-prompt/${promptUuid}`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Delete a prompt. */\n async deletePrompt(promptSetUuid: string, promptUuid: string): Promise<BaseResponse> {\n validateUuid(promptSetUuid, 'prompt set uuid');\n validateUuid(promptUuid, 'prompt uuid');\n const res = await managementHttpRequest<BaseResponse>({\n method: 'DELETE',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/custom-prompt-set/${promptSetUuid}/custom-prompt/${promptUuid}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Property operations\n // -----------------------------------------------------------------------\n\n /** Get all property names. */\n async getPropertyNames(): Promise<PropertyNamesListResponse> {\n const res = await managementHttpRequest<PropertyNamesListResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-names`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Create a new property name. */\n async createPropertyName(request: PropertyNameCreateRequest): Promise<BaseResponse> {\n const res = await managementHttpRequest<BaseResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-names`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get values for a property name. */\n async getPropertyValues(propertyName: string): Promise<PropertyValuesResponse> {\n const res = await managementHttpRequest<PropertyValuesResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values/${encodeURIComponent(propertyName)}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get values for multiple property names. */\n async getPropertyValuesMultiple(\n propertyNames: string[],\n ): Promise<PropertyValuesMultipleResponse> {\n const url = new URL(`https://placeholder${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values`);\n for (const name of propertyNames) {\n url.searchParams.append('property_names', name);\n }\n const queryString = url.searchParams.toString();\n const pathWithQuery = `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values${queryString ? `?${queryString}` : ''}`;\n\n const res = await managementHttpRequest<PropertyValuesMultipleResponse>({\n method: 'GET',\n baseUrl: this.baseUrl,\n path: pathWithQuery,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Create a property value. */\n async createPropertyValue(request: PropertyValueCreateRequest): Promise<BaseResponse> {\n const res = await managementHttpRequest<BaseResponse>({\n method: 'POST',\n baseUrl: this.baseUrl,\n path: `${RED_TEAM_CUSTOM_ATTACK_PATH}/property-values`,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n","import {\n DEFAULT_RED_TEAM_DATA_ENDPOINT,\n DEFAULT_RED_TEAM_MGMT_ENDPOINT,\n RED_TEAM_CLIENT_ID,\n RED_TEAM_CLIENT_SECRET,\n RED_TEAM_TSG_ID,\n RED_TEAM_DATA_ENDPOINT,\n RED_TEAM_MGMT_ENDPOINT,\n RED_TEAM_TOKEN_ENDPOINT,\n MGMT_CLIENT_ID,\n MGMT_CLIENT_SECRET,\n MGMT_TSG_ID,\n MGMT_TOKEN_ENDPOINT,\n MAX_NUMBER_OF_RETRIES,\n RED_TEAM_DASHBOARD_PATH,\n RED_TEAM_QUOTA_PATH,\n RED_TEAM_ERROR_LOG_PATH,\n RED_TEAM_SENTIMENT_PATH,\n RED_TEAM_MGMT_DASHBOARD_PATH,\n} from '../constants.js';\nimport { AISecSDKException, ErrorType } from '../errors.js';\nimport { isValidUuid } from '../utils.js';\nimport { OAuthClient } from '../management/oauth-client.js';\nimport { managementHttpRequest } from '../management/management-http-client.js';\nimport { RedTeamScansClient } from './scans-client.js';\nimport { RedTeamReportsClient } from './reports-client.js';\nimport { RedTeamCustomAttackReportsClient } from './custom-attack-reports-client.js';\nimport { RedTeamTargetsClient } from './targets-client.js';\nimport { RedTeamCustomAttacksClient } from './custom-attacks-client.js';\nimport type { RedTeamListOptions } from './scans-client.js';\nimport type {\n ScanStatisticsResponse,\n ScoreTrendResponse,\n QuotaSummary,\n ErrorLogListResponse,\n SentimentRequest,\n SentimentResponse,\n DashboardOverviewResponse,\n} from '../models/red-team.js';\n\n/** Options for constructing a {@link RedTeamClient}. */\nexport interface RedTeamClientOptions {\n /** OAuth2 client ID. Falls back to `PANW_RED_TEAM_CLIENT_ID`, then `PANW_MGMT_CLIENT_ID`. */\n clientId?: string;\n /** OAuth2 client secret. Falls back to `PANW_RED_TEAM_CLIENT_SECRET`, then `PANW_MGMT_CLIENT_SECRET`. */\n clientSecret?: string;\n /** Tenant Service Group ID. Falls back to `PANW_RED_TEAM_TSG_ID`, then `PANW_MGMT_TSG_ID`. */\n tsgId?: string;\n /** Data plane endpoint URL. Falls back to `PANW_RED_TEAM_DATA_ENDPOINT`. */\n dataEndpoint?: string;\n /** Management plane endpoint URL. Falls back to `PANW_RED_TEAM_MGMT_ENDPOINT`. */\n mgmtEndpoint?: string;\n /** OAuth2 token endpoint URL. Falls back to `PANW_RED_TEAM_TOKEN_ENDPOINT`, then `PANW_MGMT_TOKEN_ENDPOINT`. */\n tokenEndpoint?: string;\n /** Max retry attempts (0-5). Defaults to 5. */\n numRetries?: number;\n}\n\nfunction buildListParams(opts?: RedTeamListOptions): Record<string, string> {\n const params: Record<string, string> = {};\n if (opts?.skip !== undefined) params.skip = String(opts.skip);\n if (opts?.limit !== undefined) params.limit = String(opts.limit);\n if (opts?.sort_by !== undefined) params.sort_by = opts.sort_by;\n if (opts?.sort_direction !== undefined) params.sort_direction = opts.sort_direction;\n if (opts?.search !== undefined) params.search = opts.search;\n return params;\n}\n\n/**\n * Client for AIRS Red Teaming API operations.\n * Uses two base URLs: data plane for scans/reports, management plane for targets/custom attacks.\n */\nexport class RedTeamClient {\n /** Data plane scan operations. */\n public readonly scans: RedTeamScansClient;\n /** Data plane report operations. */\n public readonly reports: RedTeamReportsClient;\n /** Data plane custom attack report operations. */\n public readonly customAttackReports: RedTeamCustomAttackReportsClient;\n /** Management plane target operations. */\n public readonly targets: RedTeamTargetsClient;\n /** Management plane custom attack/prompt set operations. */\n public readonly customAttacks: RedTeamCustomAttacksClient;\n\n private readonly dataEndpoint: string;\n private readonly mgmtEndpoint: string;\n private readonly oauthClient: OAuthClient;\n private readonly numRetries: number;\n\n constructor(opts: RedTeamClientOptions = {}) {\n const clientId =\n opts.clientId ?? process.env[RED_TEAM_CLIENT_ID] ?? process.env[MGMT_CLIENT_ID];\n const clientSecret =\n opts.clientSecret ?? process.env[RED_TEAM_CLIENT_SECRET] ?? process.env[MGMT_CLIENT_SECRET];\n const tsgId = opts.tsgId ?? process.env[RED_TEAM_TSG_ID] ?? process.env[MGMT_TSG_ID];\n const dataEndpoint =\n opts.dataEndpoint ?? process.env[RED_TEAM_DATA_ENDPOINT] ?? DEFAULT_RED_TEAM_DATA_ENDPOINT;\n const mgmtEndpoint =\n opts.mgmtEndpoint ?? process.env[RED_TEAM_MGMT_ENDPOINT] ?? DEFAULT_RED_TEAM_MGMT_ENDPOINT;\n const tokenEndpoint =\n opts.tokenEndpoint ??\n process.env[RED_TEAM_TOKEN_ENDPOINT] ??\n process.env[MGMT_TOKEN_ENDPOINT];\n const numRetries = Math.min(\n Math.max(opts.numRetries ?? MAX_NUMBER_OF_RETRIES, 0),\n MAX_NUMBER_OF_RETRIES,\n );\n\n if (!clientId) {\n throw new AISecSDKException(\n 'clientId is required (option or PANW_RED_TEAM_CLIENT_ID / PANW_MGMT_CLIENT_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!clientSecret) {\n throw new AISecSDKException(\n 'clientSecret is required (option or PANW_RED_TEAM_CLIENT_SECRET / PANW_MGMT_CLIENT_SECRET env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n if (!tsgId) {\n throw new AISecSDKException(\n 'tsgId is required (option or PANW_RED_TEAM_TSG_ID / PANW_MGMT_TSG_ID env var)',\n ErrorType.MISSING_VARIABLE,\n );\n }\n\n this.oauthClient = new OAuthClient({ clientId, clientSecret, tsgId, tokenEndpoint });\n this.dataEndpoint = dataEndpoint;\n this.mgmtEndpoint = mgmtEndpoint;\n this.numRetries = numRetries;\n\n this.scans = new RedTeamScansClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.reports = new RedTeamReportsClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.customAttackReports = new RedTeamCustomAttackReportsClient({\n baseUrl: dataEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.targets = new RedTeamTargetsClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n\n this.customAttacks = new RedTeamCustomAttacksClient({\n baseUrl: mgmtEndpoint,\n oauthClient: this.oauthClient,\n numRetries,\n });\n }\n\n // -----------------------------------------------------------------------\n // Data plane convenience methods\n // -----------------------------------------------------------------------\n\n /** Get scan statistics and risk profile (data plane dashboard). */\n async getScanStatistics(params?: {\n date_range?: string;\n target_id?: string;\n }): Promise<ScanStatisticsResponse> {\n const p: Record<string, string> = {};\n if (params?.date_range !== undefined) p.date_range = params.date_range;\n if (params?.target_id !== undefined) p.target_id = params.target_id;\n\n const res = await managementHttpRequest<ScanStatisticsResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_DASHBOARD_PATH}/scan-statistics`,\n params: p,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get score trend for a target (data plane dashboard). */\n async getScoreTrend(targetId: string): Promise<ScoreTrendResponse> {\n if (!isValidUuid(targetId)) {\n throw new AISecSDKException(\n `Invalid target id: ${targetId}`,\n ErrorType.USER_REQUEST_PAYLOAD_ERROR,\n );\n }\n const res = await managementHttpRequest<ScoreTrendResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_DASHBOARD_PATH}/score-trend`,\n params: { target_id: targetId },\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get quota summary. */\n async getQuota(): Promise<QuotaSummary> {\n const res = await managementHttpRequest<QuotaSummary>({\n method: 'POST',\n baseUrl: this.dataEndpoint,\n path: RED_TEAM_QUOTA_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** List error logs for a scan job. */\n async getErrorLogs(jobId: string, opts?: RedTeamListOptions): Promise<ErrorLogListResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n const res = await managementHttpRequest<ErrorLogListResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_ERROR_LOG_PATH}/${jobId}`,\n params: buildListParams(opts),\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Update sentiment for a scan report. */\n async updateSentiment(request: SentimentRequest): Promise<SentimentResponse> {\n const res = await managementHttpRequest<SentimentResponse>({\n method: 'POST',\n baseUrl: this.dataEndpoint,\n path: RED_TEAM_SENTIMENT_PATH,\n body: request,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n /** Get sentiment for a scan report. */\n async getSentiment(jobId: string): Promise<SentimentResponse> {\n if (!isValidUuid(jobId)) {\n throw new AISecSDKException(`Invalid job id: ${jobId}`, ErrorType.USER_REQUEST_PAYLOAD_ERROR);\n }\n const res = await managementHttpRequest<SentimentResponse>({\n method: 'GET',\n baseUrl: this.dataEndpoint,\n path: `${RED_TEAM_SENTIMENT_PATH}/${jobId}`,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n\n // -----------------------------------------------------------------------\n // Management plane convenience methods\n // -----------------------------------------------------------------------\n\n /** Get management dashboard overview. */\n async getDashboardOverview(): Promise<DashboardOverviewResponse> {\n const res = await managementHttpRequest<DashboardOverviewResponse>({\n method: 'GET',\n baseUrl: this.mgmtEndpoint,\n path: RED_TEAM_MGMT_DASHBOARD_PATH,\n oauthClient: this.oauthClient,\n numRetries: this.numRetries,\n });\n return res.data;\n }\n}\n"],"mappings":"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","names":["ErrorType","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","response","buildListParams","buildListParams","buildListParams","buildListParams","buildListParams","validateJobId","buildListParams","buildListParams","buildListParams"]}
|