Skip to main content

Class: RedTeamAdaptersClient

Defined in: src/red-team/adapters-client.ts:83

Client for Red Team custom target adapter operations (management plane).

Custom target adapters are Python scripts that run inside an adapter sidecar alongside the network broker client pod. They give full control over how attack prompts are delivered to targets that use non-standard protocols, dynamic auth, or multi-turn session handling.

Example​

import { RedTeamClient } from '@cdot65/prisma-airs-sdk';
const rt = new RedTeamClient();

const adapter = await rt.adapters.create({
name: 'my-keycloak-agent',
script_b64: Buffer.from(pythonScript).toString('base64'),
network_broker_channel_uuid: '550e8400-e29b-41d4-a716-446655440000',
variables: [
{ key: 'endpoint', value: 'http://agent.svc:8080/v1/chat/completions', type: 'VAR' },
{ key: 'client_secret', value: 'changeme', type: 'SECRET' },
],
prompt: 'What is the capital of France?',
});
// adapter.status => 'ACTIVE' (when validate=true, default)

Constructors​

Constructor​

new RedTeamAdaptersClient(opts): RedTeamAdaptersClient;

Defined in: src/red-team/adapters-client.ts:99

Parameters​

ParameterType
optsRedTeamAdaptersClientOptions

Returns​

RedTeamAdaptersClient

Methods​

getConfig()​

getConfig(): Promise<objectOutputType<{
default_script_b64: ZodString;
default_test_prompt: ZodString;
}, ZodTypeAny, "passthrough">>;

Defined in: src/red-team/adapters-client.ts:85

Read adapter script and test-prompt defaults.

Returns​

Promise<objectOutputType<{ default_script_b64: ZodString; default_test_prompt: ZodString; }, ZodTypeAny, "passthrough">>

Example​

`const config = await rt.adapters.getConfig();`

create()​

create(body, opts?): Promise<objectOutputType<{
uuid: ZodString;
tsg_id: ZodString;
name: ZodString;
script_b64: ZodString;
status: ZodString;
description: ZodOptional<ZodNullable<ZodString>>;
network_broker_channel_uuid: ZodOptional<ZodNullable<ZodString>>;
variables: ZodOptional<ZodArray<ZodObject<{
key: ZodString;
value: ZodOptional<ZodNullable<ZodString>>;
type: ZodEnum<["VAR", "SECRET"]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, "passthrough", ZodTypeAny, objectOutputType<{
key: ZodString;
value: ZodOptional<ZodNullable<...>>;
type: ZodEnum<[..., ...]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, ZodTypeAny, "passthrough">, objectInputType<{
key: ZodString;
value: ZodOptional<ZodNullable<...>>;
type: ZodEnum<[..., ...]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, ZodTypeAny, "passthrough">>, "many">>;
target_count: ZodOptional<ZodNumber>;
created_at: ZodOptional<ZodNullable<ZodString>>;
updated_at: ZodOptional<ZodNullable<ZodString>>;
created_by_user_id: ZodOptional<ZodNullable<ZodString>>;
updated_by_user_id: ZodOptional<ZodNullable<ZodString>>;
}, ZodTypeAny, "passthrough">>;

Defined in: src/red-team/adapters-client.ts:121

Create a new custom target adapter.

Parameters​

ParameterTypeDescription
body{ name: string; description?: string | null; script_b64: string; network_broker_channel_uuid?: string | null; variables?: { key: string; value?: string | null; type: "VAR" | "SECRET"; }[]; prompt: string; }Adapter creation request (name, base64 script, variables, validation prompt).
body.namestring-
body.description?string | null-
body.script_b64?string-
body.network_broker_channel_uuid?string | nullOptional while the adapter is a DRAFT; required to activate (validate: true).
body.variables?{ key: string; value?: string | null; type: "VAR" | "SECRET"; }[]-
body.prompt?stringSample prompt used to exercise the adapter end-to-end during validation. Not stored.
opts?AdapterOperationOptionsSet validate: false to save as DRAFT without running the script.

Returns​

Promise<objectOutputType<{ uuid: ZodString; tsg_id: ZodString; name: ZodString; script_b64: ZodString; status: ZodString; description: ZodOptional<ZodNullable<ZodString>>; network_broker_channel_uuid: ZodOptional<ZodNullable<ZodString>>; variables: ZodOptional<ZodArray<ZodObject<{ key: ZodString; value: ZodOptional<ZodNullable<ZodString>>; type: ZodEnum<["VAR", "SECRET"]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, "passthrough", ZodTypeAny, objectOutputType<{ key: ZodString; value: ZodOptional<ZodNullable<...>>; type: ZodEnum<[..., ...]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, ZodTypeAny, "passthrough">, objectInputType<{ key: ZodString; value: ZodOptional<ZodNullable<...>>; type: ZodEnum<[..., ...]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, ZodTypeAny, "passthrough">>, "many">>; target_count: ZodOptional<ZodNumber>; created_at: ZodOptional<ZodNullable<ZodString>>; updated_at: ZodOptional<ZodNullable<ZodString>>; created_by_user_id: ZodOptional<ZodNullable<ZodString>>; updated_by_user_id: ZodOptional<ZodNullable<ZodString>>; }, ZodTypeAny, "passthrough">>

The created adapter.

Example​

const adapter = await rt.adapters.create({
name: 'my-adapter',
script_b64: Buffer.from(script).toString('base64'),
network_broker_channel_uuid: '550e8400-...',
variables: [{ key: 'endpoint', value: 'http://...', type: 'VAR' }],
prompt: 'Hello',
}, { validate: true });

list()​

list(opts?): Promise<objectOutputType<{
pagination: ZodObject<{
total_items: ZodOptional<ZodNullable<ZodNumber>>;
}, "passthrough", ZodTypeAny, objectOutputType<{
total_items: ZodOptional<ZodNullable<ZodNumber>>;
}, ZodTypeAny, "passthrough">, objectInputType<{
total_items: ZodOptional<ZodNullable<ZodNumber>>;
}, ZodTypeAny, "passthrough">>;
data: ZodOptional<ZodArray<ZodObject<{
uuid: ZodString;
name: ZodString;
status: ZodString;
created_at: ZodString;
updated_at: ZodString;
created_by_user_id: ZodOptional<ZodNullable<ZodString>>;
target_count: ZodOptional<ZodNullable<ZodNumber>>;
}, "passthrough", ZodTypeAny, objectOutputType<{
uuid: ZodString;
name: ZodString;
status: ZodString;
created_at: ZodString;
updated_at: ZodString;
created_by_user_id: ZodOptional<ZodNullable<ZodString>>;
target_count: ZodOptional<ZodNullable<ZodNumber>>;
}, ZodTypeAny, "passthrough">, objectInputType<{
uuid: ZodString;
name: ZodString;
status: ZodString;
created_at: ZodString;
updated_at: ZodString;
created_by_user_id: ZodOptional<ZodNullable<ZodString>>;
target_count: ZodOptional<ZodNullable<ZodNumber>>;
}, ZodTypeAny, "passthrough">>, "many">>;
}, ZodTypeAny, "passthrough">>;

Defined in: src/red-team/adapters-client.ts:149

List adapters with optional pagination.

Parameters​

ParameterTypeDescription
opts?AdapterListOptionsOptional limit/skip/search.

Returns​

Promise<objectOutputType<{ pagination: ZodObject<{ total_items: ZodOptional<ZodNullable<ZodNumber>>; }, "passthrough", ZodTypeAny, objectOutputType<{ total_items: ZodOptional<ZodNullable<ZodNumber>>; }, ZodTypeAny, "passthrough">, objectInputType<{ total_items: ZodOptional<ZodNullable<ZodNumber>>; }, ZodTypeAny, "passthrough">>; data: ZodOptional<ZodArray<ZodObject<{ uuid: ZodString; name: ZodString; status: ZodString; created_at: ZodString; updated_at: ZodString; created_by_user_id: ZodOptional<ZodNullable<ZodString>>; target_count: ZodOptional<ZodNullable<ZodNumber>>; }, "passthrough", ZodTypeAny, objectOutputType<{ uuid: ZodString; name: ZodString; status: ZodString; created_at: ZodString; updated_at: ZodString; created_by_user_id: ZodOptional<ZodNullable<ZodString>>; target_count: ZodOptional<ZodNullable<ZodNumber>>; }, ZodTypeAny, "passthrough">, objectInputType<{ uuid: ZodString; name: ZodString; status: ZodString; created_at: ZodString; updated_at: ZodString; created_by_user_id: ZodOptional<ZodNullable<ZodString>>; target_count: ZodOptional<ZodNullable<ZodNumber>>; }, ZodTypeAny, "passthrough">>, "many">>; }, ZodTypeAny, "passthrough">>

Paginated list of adapters.

Example​

const { data } = await rt.adapters.list({ limit: 20 });
// data => [{ uuid: '...', name: 'my-adapter', status: 'ACTIVE' }]

listAll()​

listAll(opts?): Promise<objectOutputType<{
uuid: ZodString;
name: ZodString;
status: ZodString;
created_at: ZodString;
updated_at: ZodString;
created_by_user_id: ZodOptional<ZodNullable<ZodString>>;
target_count: ZodOptional<ZodNullable<ZodNumber>>;
}, ZodTypeAny, "passthrough">[]>;

Defined in: src/red-team/adapters-client.ts:166

List every adapter page.

Parameters​

ParameterType
optsAdapterListAllOptions

Returns​

Promise<objectOutputType<{ uuid: ZodString; name: ZodString; status: ZodString; created_at: ZodString; updated_at: ZodString; created_by_user_id: ZodOptional<ZodNullable<ZodString>>; target_count: ZodOptional<ZodNullable<ZodNumber>>; }, ZodTypeAny, "passthrough">[]>

Example​

`const adapters = await rt.adapters.listAll();`

get()​

get(uuid): Promise<objectOutputType<{
uuid: ZodString;
tsg_id: ZodString;
name: ZodString;
script_b64: ZodString;
status: ZodString;
description: ZodOptional<ZodNullable<ZodString>>;
network_broker_channel_uuid: ZodOptional<ZodNullable<ZodString>>;
variables: ZodOptional<ZodArray<ZodObject<{
key: ZodString;
value: ZodOptional<ZodNullable<ZodString>>;
type: ZodEnum<["VAR", "SECRET"]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, "passthrough", ZodTypeAny, objectOutputType<{
key: ZodString;
value: ZodOptional<ZodNullable<...>>;
type: ZodEnum<[..., ...]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, ZodTypeAny, "passthrough">, objectInputType<{
key: ZodString;
value: ZodOptional<ZodNullable<...>>;
type: ZodEnum<[..., ...]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, ZodTypeAny, "passthrough">>, "many">>;
target_count: ZodOptional<ZodNumber>;
created_at: ZodOptional<ZodNullable<ZodString>>;
updated_at: ZodOptional<ZodNullable<ZodString>>;
created_by_user_id: ZodOptional<ZodNullable<ZodString>>;
updated_by_user_id: ZodOptional<ZodNullable<ZodString>>;
}, ZodTypeAny, "passthrough">>;

Defined in: src/red-team/adapters-client.ts:183

Get a single adapter by UUID.

Parameters​

ParameterTypeDescription
uuidstringAdapter UUID.

Returns​

Promise<objectOutputType<{ uuid: ZodString; tsg_id: ZodString; name: ZodString; script_b64: ZodString; status: ZodString; description: ZodOptional<ZodNullable<ZodString>>; network_broker_channel_uuid: ZodOptional<ZodNullable<ZodString>>; variables: ZodOptional<ZodArray<ZodObject<{ key: ZodString; value: ZodOptional<ZodNullable<ZodString>>; type: ZodEnum<["VAR", "SECRET"]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, "passthrough", ZodTypeAny, objectOutputType<{ key: ZodString; value: ZodOptional<ZodNullable<...>>; type: ZodEnum<[..., ...]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, ZodTypeAny, "passthrough">, objectInputType<{ key: ZodString; value: ZodOptional<ZodNullable<...>>; type: ZodEnum<[..., ...]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, ZodTypeAny, "passthrough">>, "many">>; target_count: ZodOptional<ZodNumber>; created_at: ZodOptional<ZodNullable<ZodString>>; updated_at: ZodOptional<ZodNullable<ZodString>>; created_by_user_id: ZodOptional<ZodNullable<ZodString>>; updated_by_user_id: ZodOptional<ZodNullable<ZodString>>; }, ZodTypeAny, "passthrough">>

The adapter detail.

Example​

const adapter = await rt.adapters.get('550e8400-e29b-41d4-a716-446655440000');
// adapter.status => 'ACTIVE'

update()​

update(
uuid,
body,
opts?): Promise<objectOutputType<{
uuid: ZodString;
tsg_id: ZodString;
name: ZodString;
script_b64: ZodString;
status: ZodString;
description: ZodOptional<ZodNullable<ZodString>>;
network_broker_channel_uuid: ZodOptional<ZodNullable<ZodString>>;
variables: ZodOptional<ZodArray<ZodObject<{
key: ZodString;
value: ZodOptional<ZodNullable<ZodString>>;
type: ZodEnum<["VAR", "SECRET"]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, "passthrough", ZodTypeAny, objectOutputType<{
key: ZodString;
value: ZodOptional<ZodNullable<...>>;
type: ZodEnum<[..., ...]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, ZodTypeAny, "passthrough">, objectInputType<{
key: ZodString;
value: ZodOptional<ZodNullable<...>>;
type: ZodEnum<[..., ...]>;
} & {
is_redacted: ZodOptional<ZodBoolean>;
}, ZodTypeAny, "passthrough">>, "many">>;
target_count: ZodOptional<ZodNumber>;
created_at: ZodOptional<ZodNullable<ZodString>>;
updated_at: ZodOptional<ZodNullable<ZodString>>;
created_by_user_id: ZodOptional<ZodNullable<ZodString>>;
updated_by_user_id: ZodOptional<ZodNullable<ZodString>>;
}, ZodTypeAny, "passthrough">>;

Defined in: src/red-team/adapters-client.ts:217

Update an adapter. Full replacement (PUT), not a patch — name, script_b64, and prompt are required just as on create. For variables, the list defines the complete desired key set: a provided value sets it, null keeps the stored value (unchanged secrets), and omitting a key deletes that variable.

Parameters​

ParameterTypeDescription
uuidstringAdapter UUID.
body{ name: string; description?: string | null; script_b64: string; network_broker_channel_uuid?: string | null; variables?: { key: string; value?: string | null; type: "VAR" | "SECRET"; }[]; prompt: string; }The complete adapter definition.
body.namestring-
body.description?string | null-
body.script_b64?string-
body.network_broker_channel_uuid?string | null-
body.variables?{ key: string; value?: string | null; type: "VAR" | "SECRET"; }[]-
body.prompt?string-
opts?AdapterOperationOptionsSet validate: false to save as DRAFT without re-running the script.

Returns​

Promise<objectOutputType<{ uuid: ZodString; tsg_id: ZodString; name: ZodString; script_b64: ZodString; status: ZodString; description: ZodOptional<ZodNullable<ZodString>>; network_broker_channel_uuid: ZodOptional<ZodNullable<ZodString>>; variables: ZodOptional<ZodArray<ZodObject<{ key: ZodString; value: ZodOptional<ZodNullable<ZodString>>; type: ZodEnum<["VAR", "SECRET"]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, "passthrough", ZodTypeAny, objectOutputType<{ key: ZodString; value: ZodOptional<ZodNullable<...>>; type: ZodEnum<[..., ...]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, ZodTypeAny, "passthrough">, objectInputType<{ key: ZodString; value: ZodOptional<ZodNullable<...>>; type: ZodEnum<[..., ...]>; } & { is_redacted: ZodOptional<ZodBoolean>; }, ZodTypeAny, "passthrough">>, "many">>; target_count: ZodOptional<ZodNumber>; created_at: ZodOptional<ZodNullable<ZodString>>; updated_at: ZodOptional<ZodNullable<ZodString>>; created_by_user_id: ZodOptional<ZodNullable<ZodString>>; updated_by_user_id: ZodOptional<ZodNullable<ZodString>>; }, ZodTypeAny, "passthrough">>

The updated adapter.

Example​

const updated = await rt.adapters.update('550e8400-...', {
name: 'my-keycloak-agent',
script_b64: Buffer.from(newScript).toString('base64'),
prompt: 'What is the capital of France?',
variables: [
{ key: 'endpoint', value: 'http://agent.svc:8080', type: 'VAR' },
{ key: 'client_secret', value: null, type: 'SECRET' }, // null keeps stored secret
],
});

delete()​

delete(uuid): Promise<
| objectOutputType<{
message: ZodString;
status: ZodNumber;
}, ZodTypeAny, "passthrough">
| undefined>;

Defined in: src/red-team/adapters-client.ts:245

Delete an adapter.

Parameters​

ParameterTypeDescription
uuidstringAdapter UUID.

Returns​

Promise< | objectOutputType<{ message: ZodString; status: ZodNumber; }, ZodTypeAny, "passthrough"> | undefined>

Example​

await rt.adapters.delete('550e8400-e29b-41d4-a716-446655440000');

validate()​

validate(body): Promise<objectOutputType<{
validated: ZodBoolean;
stdout: ZodOptional<ZodNullable<ZodString>>;
stderr: ZodOptional<ZodNullable<ZodString>>;
traceback: ZodOptional<ZodNullable<ZodString>>;
}, ZodTypeAny, "passthrough">>;

Defined in: src/red-team/adapters-client.ts:278

Validate an adapter script without saving anything. Runs the script end-to-end through the network broker channel using the sample prompt, and returns the execution outcome — validated plus the script's stdout / stderr / traceback — not an adapter record.

This endpoint has its own request shape: no name, network_broker_channel_uuid is required, and adapter_uuid may reference an existing adapter so null variable values are resolved from its stored secrets before the run.

Parameters​

ParameterTypeDescription
body{ script_b64: string; network_broker_channel_uuid: string; prompt: string; variables?: { key: string; value?: string | null; type: "VAR" | "SECRET"; }[]; adapter_uuid?: string | null; }Script, channel, prompt, and optionally variables / an existing adapter UUID.
body.script_b64string-
body.network_broker_channel_uuidstring-
body.promptstring-
body.variables?{ key: string; value?: string | null; type: "VAR" | "SECRET"; }[]-
body.adapter_uuid?string | nullOmit when validating a brand-new adapter.

Returns​

Promise<objectOutputType<{ validated: ZodBoolean; stdout: ZodOptional<ZodNullable<ZodString>>; stderr: ZodOptional<ZodNullable<ZodString>>; traceback: ZodOptional<ZodNullable<ZodString>>; }, ZodTypeAny, "passthrough">>

The validation outcome.

Example​

const result = await rt.adapters.validate({
script_b64: Buffer.from(script).toString('base64'),
network_broker_channel_uuid: '550e8400-...',
prompt: 'Hello',
});
if (!result.validated) console.error(result.stderr ?? result.traceback);