@crowdstrike/aidr 1.0.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/.editorconfig +9 -0
- package/.github/CODEOWNERS +1 -0
- package/.github/workflows/ci.yml +128 -0
- package/.pnpmfile.cjs +17 -0
- package/.releaserc.json +21 -0
- package/LICENSE.txt +21 -0
- package/README.md +3 -0
- package/biome.json +67 -0
- package/dist/chunk.cjs +34 -0
- package/dist/index.cjs +356 -0
- package/dist/index.d.cts +2347 -0
- package/dist/index.d.mts +2347 -0
- package/dist/index.mjs +354 -0
- package/dist/schemas/ai-guard.cjs +1000 -0
- package/dist/schemas/ai-guard.d.cts +1232 -0
- package/dist/schemas/ai-guard.d.mts +1232 -0
- package/dist/schemas/ai-guard.mjs +907 -0
- package/dist/schemas/index.cjs +7 -0
- package/dist/schemas/index.d.cts +64 -0
- package/dist/schemas/index.d.mts +64 -0
- package/dist/schemas/index.mjs +3 -0
- package/dist/schemas.cjs +139 -0
- package/dist/schemas.mjs +108 -0
- package/flake.lock +59 -0
- package/flake.nix +26 -0
- package/openapi-ts.config.ts +15 -0
- package/package.json +55 -0
- package/pnpm-workspace.yaml +3 -0
- package/scripts/generate-models +15 -0
- package/scripts/test +10 -0
- package/specs/ai-guard.openapi.json +3721 -0
- package/src/client.ts +441 -0
- package/src/core/error.ts +78 -0
- package/src/index.ts +2 -0
- package/src/internal/builtin-types.ts +18 -0
- package/src/internal/errors.ts +34 -0
- package/src/internal/headers.ts +100 -0
- package/src/internal/parse.ts +30 -0
- package/src/internal/request-options.ts +57 -0
- package/src/internal/types.ts +3 -0
- package/src/internal/utils/sleep.ts +3 -0
- package/src/internal/utils/values.ts +38 -0
- package/src/schemas/ai-guard.ts +1215 -0
- package/src/schemas/index.ts +114 -0
- package/src/services/ai-guard.ts +27 -0
- package/src/types/ai-guard.ts +2276 -0
- package/src/types/index.ts +161 -0
- package/tests/ai-guard.test.ts +29 -0
- package/tsconfig.json +26 -0
- package/tsdown.config.mts +14 -0
- package/vitest.config.mts +4 -0
|
@@ -0,0 +1,907 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
|
|
3
|
+
//#region src/schemas/ai-guard.ts
|
|
4
|
+
/**
|
|
5
|
+
* Response Schema
|
|
6
|
+
*
|
|
7
|
+
* Pangea standard response schema
|
|
8
|
+
*/
|
|
9
|
+
const PangeaResponseSchema = v.object({
|
|
10
|
+
request_id: v.string(),
|
|
11
|
+
request_time: v.pipe(v.string(), v.isoTimestamp()),
|
|
12
|
+
response_time: v.pipe(v.string(), v.isoTimestamp()),
|
|
13
|
+
status: v.string(),
|
|
14
|
+
summary: v.optional(v.string()),
|
|
15
|
+
result: v.optional(v.record(v.string(), v.unknown()))
|
|
16
|
+
});
|
|
17
|
+
const PangeaValidationErrorsSchema = PangeaResponseSchema;
|
|
18
|
+
/**
|
|
19
|
+
* Device status. Allowed values are active, pending, disabled
|
|
20
|
+
*/
|
|
21
|
+
const AidrDeviceStatusSchema = v.picklist([
|
|
22
|
+
"pending",
|
|
23
|
+
"active",
|
|
24
|
+
"disabled"
|
|
25
|
+
]);
|
|
26
|
+
const AidrIpv4OrV6Schema = v.union([v.pipe(v.string(), v.ip()), v.pipe(v.string(), v.ip())]);
|
|
27
|
+
const AidrDeviceSchema = v.strictObject({
|
|
28
|
+
id: v.pipe(v.string(), v.minLength(1), v.maxLength(32)),
|
|
29
|
+
name: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(255))),
|
|
30
|
+
status: v.optional(AidrDeviceStatusSchema),
|
|
31
|
+
metadata: v.optional(v.record(v.string(), v.unknown())),
|
|
32
|
+
user_id: v.optional(v.string()),
|
|
33
|
+
last_used_ip: v.optional(AidrIpv4OrV6Schema)
|
|
34
|
+
});
|
|
35
|
+
const AidrDeviceTokenInfoSchema = v.object({
|
|
36
|
+
token: v.optional(v.string()),
|
|
37
|
+
expires_in: v.optional(v.pipe(v.number(), v.integer())),
|
|
38
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
|
|
39
|
+
});
|
|
40
|
+
const AidrDeviceResultSchema = v.strictObject({
|
|
41
|
+
id: v.pipe(v.string(), v.minLength(1), v.maxLength(32)),
|
|
42
|
+
name: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(255))),
|
|
43
|
+
status: AidrDeviceStatusSchema,
|
|
44
|
+
metadata: v.optional(v.record(v.string(), v.unknown())),
|
|
45
|
+
user_id: v.optional(v.string()),
|
|
46
|
+
last_used_ip: v.optional(AidrIpv4OrV6Schema),
|
|
47
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
48
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* client generated unique ID.
|
|
52
|
+
*/
|
|
53
|
+
const AidrDeviceIdSchema = v.pipe(v.string(), v.minLength(1), v.maxLength(32));
|
|
54
|
+
/**
|
|
55
|
+
* List or filter/search device records.
|
|
56
|
+
*/
|
|
57
|
+
const AidrDeviceSearchSchema = v.strictObject({
|
|
58
|
+
filter: v.optional(v.object({
|
|
59
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
60
|
+
created_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
61
|
+
created_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
62
|
+
created_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
63
|
+
created_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
64
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
65
|
+
updated_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
66
|
+
updated_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
67
|
+
updated_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
68
|
+
updated_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
69
|
+
id: v.optional(v.string()),
|
|
70
|
+
id__contains: v.optional(v.array(v.string())),
|
|
71
|
+
id__in: v.optional(v.array(v.string())),
|
|
72
|
+
name: v.optional(v.string()),
|
|
73
|
+
name__contains: v.optional(v.array(v.string())),
|
|
74
|
+
name__in: v.optional(v.array(v.string())),
|
|
75
|
+
status: v.optional(AidrDeviceStatusSchema),
|
|
76
|
+
status__contains: v.optional(v.array(AidrDeviceStatusSchema)),
|
|
77
|
+
status__in: v.optional(v.array(AidrDeviceStatusSchema))
|
|
78
|
+
})),
|
|
79
|
+
last: v.optional(v.string()),
|
|
80
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
81
|
+
order_by: v.optional(v.picklist([
|
|
82
|
+
"name",
|
|
83
|
+
"created_at",
|
|
84
|
+
"updated_at"
|
|
85
|
+
])),
|
|
86
|
+
size: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
|
|
87
|
+
});
|
|
88
|
+
const AidrDeviceSearchResultSchema = v.object({
|
|
89
|
+
count: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
90
|
+
last: v.optional(v.string()),
|
|
91
|
+
devices: v.optional(v.array(AidrDeviceResultSchema))
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* MetricEvent data
|
|
95
|
+
*/
|
|
96
|
+
const AidrMetricOnlyDataSchema = v.strictObject({
|
|
97
|
+
app_id: v.optional(v.string()),
|
|
98
|
+
actor_id: v.optional(v.string()),
|
|
99
|
+
llm_provider: v.optional(v.string()),
|
|
100
|
+
model: v.optional(v.string()),
|
|
101
|
+
model_version: v.optional(v.string()),
|
|
102
|
+
request_token_count: v.optional(v.pipe(v.number(), v.integer())),
|
|
103
|
+
response_token_count: v.optional(v.pipe(v.number(), v.integer())),
|
|
104
|
+
source_ip: v.optional(v.pipe(v.string(), v.ip())),
|
|
105
|
+
source_location: v.optional(v.string()),
|
|
106
|
+
event_type: v.optional(v.string()),
|
|
107
|
+
collector_instance_id: v.optional(v.string()),
|
|
108
|
+
extra_info: v.optional(v.record(v.string(), v.unknown()))
|
|
109
|
+
});
|
|
110
|
+
/**
|
|
111
|
+
* List or filter/search saved filter records.
|
|
112
|
+
*/
|
|
113
|
+
const AidrSavedFilterSearchSchema = v.strictObject({
|
|
114
|
+
filter: v.optional(v.object({
|
|
115
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
116
|
+
created_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
117
|
+
created_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
118
|
+
created_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
119
|
+
created_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
120
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
121
|
+
updated_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
122
|
+
updated_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
123
|
+
updated_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
124
|
+
updated_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
125
|
+
id: v.optional(v.string()),
|
|
126
|
+
id__contains: v.optional(v.array(v.string())),
|
|
127
|
+
id__in: v.optional(v.array(v.string())),
|
|
128
|
+
name: v.optional(v.string()),
|
|
129
|
+
name__contains: v.optional(v.array(v.string())),
|
|
130
|
+
name__in: v.optional(v.array(v.string()))
|
|
131
|
+
})),
|
|
132
|
+
last: v.optional(v.string()),
|
|
133
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
134
|
+
order_by: v.optional(v.picklist([
|
|
135
|
+
"name",
|
|
136
|
+
"created_at",
|
|
137
|
+
"updated_at"
|
|
138
|
+
])),
|
|
139
|
+
size: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
|
|
140
|
+
});
|
|
141
|
+
const AidrSavedFilterSchema = v.strictObject({
|
|
142
|
+
name: v.string(),
|
|
143
|
+
filter: v.record(v.string(), v.unknown())
|
|
144
|
+
});
|
|
145
|
+
const AidrSavedFilterResultSchema = v.strictObject({
|
|
146
|
+
name: v.string(),
|
|
147
|
+
filter: v.record(v.string(), v.unknown()),
|
|
148
|
+
created_at: v.pipe(v.string(), v.isoTimestamp()),
|
|
149
|
+
updated_at: v.pipe(v.string(), v.isoTimestamp())
|
|
150
|
+
});
|
|
151
|
+
const AidrSavedFilterSearchResultSchema = v.object({
|
|
152
|
+
count: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
153
|
+
last: v.optional(v.string()),
|
|
154
|
+
saved_filters: v.optional(v.array(AidrSavedFilterResultSchema))
|
|
155
|
+
});
|
|
156
|
+
/**
|
|
157
|
+
* List or filter/search field alias records.
|
|
158
|
+
*/
|
|
159
|
+
const AidrFieldAliasSearchSchema = v.strictObject({
|
|
160
|
+
filter: v.optional(v.object({
|
|
161
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
162
|
+
created_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
163
|
+
created_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
164
|
+
created_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
165
|
+
created_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
166
|
+
field_name: v.optional(v.string()),
|
|
167
|
+
field_name__contains: v.optional(v.array(v.string())),
|
|
168
|
+
field_name__in: v.optional(v.array(v.string())),
|
|
169
|
+
field_type: v.optional(v.string()),
|
|
170
|
+
field_type__contains: v.optional(v.array(v.string())),
|
|
171
|
+
field_type__in: v.optional(v.array(v.string())),
|
|
172
|
+
field_alias: v.optional(v.string()),
|
|
173
|
+
field_alias__contains: v.optional(v.array(v.string())),
|
|
174
|
+
field_alias__in: v.optional(v.array(v.string())),
|
|
175
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
176
|
+
updated_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
177
|
+
updated_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
178
|
+
updated_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
179
|
+
updated_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp()))
|
|
180
|
+
})),
|
|
181
|
+
last: v.optional(v.string()),
|
|
182
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
183
|
+
order_by: v.optional(v.picklist([
|
|
184
|
+
"field_name",
|
|
185
|
+
"field_type",
|
|
186
|
+
"created_at",
|
|
187
|
+
"updated_at",
|
|
188
|
+
"published_at",
|
|
189
|
+
"field_alias"
|
|
190
|
+
])),
|
|
191
|
+
size: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
|
|
192
|
+
});
|
|
193
|
+
const AidrCustomlistSchema = v.object({
|
|
194
|
+
name: v.optional(v.string()),
|
|
195
|
+
type: v.optional(v.picklist(["site"])),
|
|
196
|
+
content: v.optional(v.array(v.unknown()))
|
|
197
|
+
});
|
|
198
|
+
const ChatCompletionsGuardSchema = v.strictObject({
|
|
199
|
+
guard_input: v.record(v.string(), v.unknown()),
|
|
200
|
+
app_id: v.optional(v.string()),
|
|
201
|
+
user_id: v.optional(v.string()),
|
|
202
|
+
llm_provider: v.optional(v.string()),
|
|
203
|
+
model: v.optional(v.string()),
|
|
204
|
+
model_version: v.optional(v.string()),
|
|
205
|
+
source_ip: v.optional(v.string()),
|
|
206
|
+
source_location: v.optional(v.string()),
|
|
207
|
+
tenant_id: v.optional(v.string()),
|
|
208
|
+
event_type: v.optional(v.picklist([
|
|
209
|
+
"input",
|
|
210
|
+
"output",
|
|
211
|
+
"tool_input",
|
|
212
|
+
"tool_output",
|
|
213
|
+
"tool_listing"
|
|
214
|
+
])),
|
|
215
|
+
collector_instance_id: v.optional(v.string()),
|
|
216
|
+
extra_info: v.optional(v.objectWithRest({
|
|
217
|
+
app_name: v.optional(v.string()),
|
|
218
|
+
app_group: v.optional(v.string()),
|
|
219
|
+
app_version: v.optional(v.string()),
|
|
220
|
+
actor_name: v.optional(v.string()),
|
|
221
|
+
actor_group: v.optional(v.string()),
|
|
222
|
+
source_region: v.optional(v.string()),
|
|
223
|
+
sub_tenant: v.optional(v.string()),
|
|
224
|
+
mcp_tools: v.optional(v.array(v.strictObject({
|
|
225
|
+
server_name: v.pipe(v.string(), v.minLength(1)),
|
|
226
|
+
tools: v.pipe(v.array(v.pipe(v.string(), v.minLength(1))), v.minLength(1))
|
|
227
|
+
})))
|
|
228
|
+
}, v.unknown()))
|
|
229
|
+
});
|
|
230
|
+
const AidrPromptInjectionResultSchema = v.object({
|
|
231
|
+
action: v.optional(v.string()),
|
|
232
|
+
analyzer_responses: v.optional(v.array(v.object({
|
|
233
|
+
analyzer: v.string(),
|
|
234
|
+
confidence: v.number()
|
|
235
|
+
})))
|
|
236
|
+
});
|
|
237
|
+
const AidrRedactEntityResultSchema = v.object({ entities: v.optional(v.array(v.object({
|
|
238
|
+
action: v.string(),
|
|
239
|
+
type: v.string(),
|
|
240
|
+
value: v.string(),
|
|
241
|
+
start_pos: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0)))
|
|
242
|
+
}))) });
|
|
243
|
+
const AidrMaliciousEntityResultSchema = v.object({ entities: v.optional(v.array(v.object({
|
|
244
|
+
type: v.string(),
|
|
245
|
+
value: v.string(),
|
|
246
|
+
start_pos: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0))),
|
|
247
|
+
raw: v.optional(v.record(v.string(), v.unknown()))
|
|
248
|
+
}))) });
|
|
249
|
+
const AidrSingleEntityResultSchema = v.object({
|
|
250
|
+
action: v.optional(v.string()),
|
|
251
|
+
entities: v.optional(v.array(v.string()))
|
|
252
|
+
});
|
|
253
|
+
const AidrLanguageResultSchema = v.object({
|
|
254
|
+
action: v.optional(v.string()),
|
|
255
|
+
language: v.optional(v.string())
|
|
256
|
+
});
|
|
257
|
+
const AidrTopicResultSchema = v.object({
|
|
258
|
+
action: v.optional(v.string()),
|
|
259
|
+
topics: v.optional(v.array(v.object({
|
|
260
|
+
topic: v.string(),
|
|
261
|
+
confidence: v.number()
|
|
262
|
+
})))
|
|
263
|
+
});
|
|
264
|
+
const AidrCustomlistResultSchema = v.object({
|
|
265
|
+
id: v.optional(v.string()),
|
|
266
|
+
name: v.optional(v.string()),
|
|
267
|
+
type: v.optional(v.picklist(["site"])),
|
|
268
|
+
content: v.optional(v.array(v.record(v.string(), v.unknown()))),
|
|
269
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
270
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
|
|
271
|
+
});
|
|
272
|
+
/**
|
|
273
|
+
* List or filter/search policy records.
|
|
274
|
+
*/
|
|
275
|
+
const AidrPolicySearchSchema = v.strictObject({
|
|
276
|
+
filter: v.optional(v.object({
|
|
277
|
+
key: v.optional(v.string()),
|
|
278
|
+
key__contains: v.optional(v.array(v.string())),
|
|
279
|
+
name__in: v.optional(v.array(v.string())),
|
|
280
|
+
status: v.optional(v.string())
|
|
281
|
+
})),
|
|
282
|
+
last: v.optional(v.string()),
|
|
283
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
284
|
+
order_by: v.optional(v.picklist([
|
|
285
|
+
"key",
|
|
286
|
+
"name",
|
|
287
|
+
"created_at",
|
|
288
|
+
"updated_at"
|
|
289
|
+
])),
|
|
290
|
+
size: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
|
|
291
|
+
});
|
|
292
|
+
const AidrPromptItemSchema = v.object({
|
|
293
|
+
id: v.optional(v.string()),
|
|
294
|
+
type: v.optional(v.string()),
|
|
295
|
+
content: v.optional(v.string())
|
|
296
|
+
});
|
|
297
|
+
const AidrPromptItemListResultSchema = v.object({ policies: v.optional(v.array(AidrPromptItemSchema)) });
|
|
298
|
+
const AidrFieldAliasSchema = v.strictObject({
|
|
299
|
+
field_name: v.string(),
|
|
300
|
+
field_type: v.string(),
|
|
301
|
+
field_alias: v.string(),
|
|
302
|
+
field_tags: v.optional(v.array(v.string()))
|
|
303
|
+
});
|
|
304
|
+
const AidrFieldAliasResultSchema = v.strictObject({
|
|
305
|
+
field_name: v.string(),
|
|
306
|
+
field_type: v.string(),
|
|
307
|
+
field_alias: v.string(),
|
|
308
|
+
field_tags: v.optional(v.array(v.string())),
|
|
309
|
+
created_at: v.pipe(v.string(), v.isoTimestamp()),
|
|
310
|
+
updated_at: v.pipe(v.string(), v.isoTimestamp())
|
|
311
|
+
});
|
|
312
|
+
const AidrFieldAliasSearchResultSchema = v.object({
|
|
313
|
+
count: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
314
|
+
last: v.optional(v.string()),
|
|
315
|
+
items: v.optional(v.array(AidrFieldAliasResultSchema))
|
|
316
|
+
});
|
|
317
|
+
const AidrPolicycollectionResultSchema = v.object({
|
|
318
|
+
key: v.optional(v.string()),
|
|
319
|
+
name: v.optional(v.string()),
|
|
320
|
+
type: v.optional(v.picklist([
|
|
321
|
+
"logging",
|
|
322
|
+
"gateway",
|
|
323
|
+
"browser",
|
|
324
|
+
"application",
|
|
325
|
+
"agentic"
|
|
326
|
+
])),
|
|
327
|
+
settings: v.optional(v.record(v.string(), v.unknown())),
|
|
328
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
329
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
|
|
330
|
+
});
|
|
331
|
+
/**
|
|
332
|
+
* List or filter/search policy collection records.
|
|
333
|
+
*/
|
|
334
|
+
const AidrPolicycollectionSearchSchema = v.strictObject({
|
|
335
|
+
filter: v.optional(v.object({
|
|
336
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
337
|
+
created_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
338
|
+
created_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
339
|
+
created_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
340
|
+
created_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
341
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
342
|
+
updated_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
343
|
+
updated_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
344
|
+
updated_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
345
|
+
updated_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
346
|
+
type: v.optional(v.picklist([
|
|
347
|
+
"logging",
|
|
348
|
+
"gateway",
|
|
349
|
+
"browser",
|
|
350
|
+
"application",
|
|
351
|
+
"agentic"
|
|
352
|
+
])),
|
|
353
|
+
type__in: v.optional(v.array(v.picklist([
|
|
354
|
+
"logging",
|
|
355
|
+
"gateway",
|
|
356
|
+
"browser",
|
|
357
|
+
"application",
|
|
358
|
+
"agentic"
|
|
359
|
+
]))),
|
|
360
|
+
key: v.optional(v.string()),
|
|
361
|
+
key__contains: v.optional(v.array(v.string())),
|
|
362
|
+
key__in: v.optional(v.array(v.string())),
|
|
363
|
+
name: v.optional(v.string()),
|
|
364
|
+
name__contains: v.optional(v.array(v.string())),
|
|
365
|
+
name__in: v.optional(v.array(v.string()))
|
|
366
|
+
})),
|
|
367
|
+
last: v.optional(v.string()),
|
|
368
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
369
|
+
order_by: v.optional(v.picklist([
|
|
370
|
+
"key",
|
|
371
|
+
"name",
|
|
372
|
+
"type",
|
|
373
|
+
"created_at",
|
|
374
|
+
"updated_at"
|
|
375
|
+
])),
|
|
376
|
+
size: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
|
|
377
|
+
});
|
|
378
|
+
const AidrPolicycollectionSearchResultSchema = v.object({
|
|
379
|
+
collections: v.optional(v.array(AidrPolicycollectionResultSchema)),
|
|
380
|
+
count: v.optional(v.pipe(v.number(), v.integer())),
|
|
381
|
+
last: v.optional(v.string())
|
|
382
|
+
});
|
|
383
|
+
/**
|
|
384
|
+
* List or filter/search list records.
|
|
385
|
+
*/
|
|
386
|
+
const AidrCustomlistSearchSchema = v.strictObject({
|
|
387
|
+
filter: v.optional(v.object({
|
|
388
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
389
|
+
created_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
390
|
+
created_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
391
|
+
created_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
392
|
+
created_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
393
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
394
|
+
updated_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
395
|
+
updated_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
396
|
+
updated_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
397
|
+
updated_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
398
|
+
type: v.optional(v.string()),
|
|
399
|
+
name: v.optional(v.string()),
|
|
400
|
+
name__contains: v.optional(v.array(v.string())),
|
|
401
|
+
name__in: v.optional(v.array(v.string()))
|
|
402
|
+
})),
|
|
403
|
+
last: v.optional(v.string()),
|
|
404
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
405
|
+
order_by: v.optional(v.picklist([
|
|
406
|
+
"id",
|
|
407
|
+
"name",
|
|
408
|
+
"created_at",
|
|
409
|
+
"updated_at"
|
|
410
|
+
])),
|
|
411
|
+
size: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
|
|
412
|
+
});
|
|
413
|
+
const AidrCustomlistSearchResultSchema = v.object({
|
|
414
|
+
lists: v.optional(v.array(AidrCustomlistResultSchema)),
|
|
415
|
+
count: v.optional(v.pipe(v.number(), v.integer())),
|
|
416
|
+
last: v.optional(v.string())
|
|
417
|
+
});
|
|
418
|
+
/**
|
|
419
|
+
* AIDR Collector Summary list
|
|
420
|
+
*/
|
|
421
|
+
const AidrSensorInsightsSchema = v.strictObject({
|
|
422
|
+
is_instance_data: v.optional(v.boolean()),
|
|
423
|
+
filters: v.optional(v.strictObject({
|
|
424
|
+
collector_id: v.optional(v.string()),
|
|
425
|
+
collector_id__contains: v.optional(v.array(v.string())),
|
|
426
|
+
collector_id__in: v.optional(v.array(v.string())),
|
|
427
|
+
instance_id: v.optional(v.string()),
|
|
428
|
+
instance_id__contains: v.optional(v.array(v.string())),
|
|
429
|
+
instance_id__in: v.optional(v.array(v.string())),
|
|
430
|
+
collector_type: v.optional(v.string()),
|
|
431
|
+
collector_type_contains: v.optional(v.array(v.string())),
|
|
432
|
+
collector_type__in: v.optional(v.array(v.string()))
|
|
433
|
+
})),
|
|
434
|
+
order_by: v.optional(v.string()),
|
|
435
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
436
|
+
count: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
437
|
+
last: v.optional(v.string())
|
|
438
|
+
});
|
|
439
|
+
/**
|
|
440
|
+
* Duration string (e.g., '100ms', '2h')
|
|
441
|
+
*/
|
|
442
|
+
const AidrGolangDurationSchema = v.union([v.unknown(), v.unknown()]);
|
|
443
|
+
/**
|
|
444
|
+
* List or filter/config records.
|
|
445
|
+
*/
|
|
446
|
+
const AidrServiceConfigListSchema = v.strictObject({
|
|
447
|
+
filter: v.optional(v.strictObject({
|
|
448
|
+
name: v.optional(v.string()),
|
|
449
|
+
name__contains: v.optional(v.array(v.string())),
|
|
450
|
+
name__in: v.optional(v.array(v.string())),
|
|
451
|
+
collector_type: v.optional(v.string()),
|
|
452
|
+
collector_type__contains: v.optional(v.array(v.string())),
|
|
453
|
+
collector_type__in: v.optional(v.array(v.string())),
|
|
454
|
+
id: v.optional(v.string()),
|
|
455
|
+
id__contains: v.optional(v.array(v.string())),
|
|
456
|
+
id__in: v.optional(v.array(v.string())),
|
|
457
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
458
|
+
created_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
459
|
+
created_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
460
|
+
created_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
461
|
+
created_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
462
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
463
|
+
updated_at__gt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
464
|
+
updated_at__gte: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
465
|
+
updated_at__lt: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
466
|
+
updated_at__lte: v.optional(v.pipe(v.string(), v.isoTimestamp()))
|
|
467
|
+
})),
|
|
468
|
+
last: v.optional(v.string()),
|
|
469
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
470
|
+
order_by: v.optional(v.picklist([
|
|
471
|
+
"id",
|
|
472
|
+
"created_at",
|
|
473
|
+
"updated_at"
|
|
474
|
+
])),
|
|
475
|
+
size: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
|
|
476
|
+
});
|
|
477
|
+
/**
|
|
478
|
+
* A service config ID
|
|
479
|
+
*/
|
|
480
|
+
const AidrMetricpoolIdSchema = v.pipe(v.string(), v.regex(/^pro_[a-z2-7]{32}$/));
|
|
481
|
+
const AidrLogSchema = v.strictObject({ event: v.record(v.string(), v.unknown()) });
|
|
482
|
+
const AidrLogsSchema = v.strictObject({ events: v.pipe(v.array(v.record(v.string(), v.unknown())), v.minLength(1), v.maxLength(100)) });
|
|
483
|
+
/**
|
|
484
|
+
* An empty object
|
|
485
|
+
*/
|
|
486
|
+
const AidrEmptySchema = v.strictObject({});
|
|
487
|
+
/**
|
|
488
|
+
* Collector health endpoint object
|
|
489
|
+
*/
|
|
490
|
+
const AidrSensorHealthSchema = v.strictObject({ collector_instance_id: v.string() });
|
|
491
|
+
/**
|
|
492
|
+
* A service config ID
|
|
493
|
+
*/
|
|
494
|
+
const ServiceConfigIdSchema = v.pipe(v.string(), v.regex(/^pci_[a-z2-7]{32}$/));
|
|
495
|
+
/**
|
|
496
|
+
* AIDR Collector Summary Result Data
|
|
497
|
+
*/
|
|
498
|
+
const AidrSensorInsightsItemSchema = v.strictObject({
|
|
499
|
+
updated_at: v.pipe(v.string(), v.isoTimestamp()),
|
|
500
|
+
created_at: v.pipe(v.string(), v.isoTimestamp()),
|
|
501
|
+
count: v.pipe(v.number(), v.integer(), v.minValue(0)),
|
|
502
|
+
collector_id: ServiceConfigIdSchema,
|
|
503
|
+
instance_id: v.optional(v.string()),
|
|
504
|
+
collector_type: v.string()
|
|
505
|
+
});
|
|
506
|
+
/**
|
|
507
|
+
* AIDR Collector Summary Result Data
|
|
508
|
+
*/
|
|
509
|
+
const AidrSensorInsightsResultSchema = v.object({
|
|
510
|
+
count: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
511
|
+
last: v.optional(v.string()),
|
|
512
|
+
items: v.optional(v.array(AidrSensorInsightsItemSchema))
|
|
513
|
+
});
|
|
514
|
+
/**
|
|
515
|
+
* audit data activity configuration
|
|
516
|
+
*/
|
|
517
|
+
const AidrAuditDataActivitySchema = v.object({
|
|
518
|
+
audit_config_id: v.optional(ServiceConfigIdSchema),
|
|
519
|
+
enabled: v.optional(v.boolean())
|
|
520
|
+
});
|
|
521
|
+
/**
|
|
522
|
+
* A filter ID
|
|
523
|
+
*/
|
|
524
|
+
const FilterIdSchema = v.pipe(v.string(), v.regex(/^paf_[a-z2-7]{32}$/));
|
|
525
|
+
/**
|
|
526
|
+
* A Policy ID
|
|
527
|
+
*/
|
|
528
|
+
const PolicyIdSchema = v.pipe(v.string(), v.regex(/^pap_[a-z2-7]{32}$/));
|
|
529
|
+
/**
|
|
530
|
+
* A time in ISO-8601 format
|
|
531
|
+
*/
|
|
532
|
+
const AidrTimestampSchema = v.pipe(v.string(), v.isoTimestamp());
|
|
533
|
+
/**
|
|
534
|
+
* AIDR Service Config Settings
|
|
535
|
+
*/
|
|
536
|
+
const AidrServiceConfigSchema = v.objectWithRest({
|
|
537
|
+
id: v.optional(ServiceConfigIdSchema),
|
|
538
|
+
name: v.optional(v.string()),
|
|
539
|
+
version: v.optional(v.string()),
|
|
540
|
+
metric_pool_rid: v.optional(AidrMetricpoolIdSchema),
|
|
541
|
+
updated_at: v.optional(AidrTimestampSchema),
|
|
542
|
+
collector_type: v.optional(v.string()),
|
|
543
|
+
settings: v.optional(v.record(v.string(), v.unknown())),
|
|
544
|
+
warning_threshold: v.optional(AidrGolangDurationSchema),
|
|
545
|
+
in_active_threshold: v.optional(AidrGolangDurationSchema)
|
|
546
|
+
}, v.unknown());
|
|
547
|
+
const AidrServiceConfigResultSchema = AidrServiceConfigSchema;
|
|
548
|
+
const AidrDeviceCheckResultSchema = v.strictObject({
|
|
549
|
+
device: v.optional(AidrDeviceResultSchema),
|
|
550
|
+
config: v.optional(AidrServiceConfigResultSchema),
|
|
551
|
+
access_token: v.optional(AidrDeviceTokenInfoSchema)
|
|
552
|
+
});
|
|
553
|
+
/**
|
|
554
|
+
* Define field name and path mapping to extract from the log
|
|
555
|
+
*/
|
|
556
|
+
const AidrResourceFieldMappingSchema = v.record(v.string(), v.strictObject({
|
|
557
|
+
path: v.pipe(v.string(), v.regex(/^([\w]+|\*)(\.(\*|[\w]+|#(\(\w+(==|!=|=~|>|<)[^)]*\))?|\d+))*$/)),
|
|
558
|
+
type: v.picklist([
|
|
559
|
+
"string",
|
|
560
|
+
"int",
|
|
561
|
+
"bool"
|
|
562
|
+
]),
|
|
563
|
+
disabled: v.optional(v.boolean())
|
|
564
|
+
}));
|
|
565
|
+
/**
|
|
566
|
+
* AIDR metric pool settings
|
|
567
|
+
*/
|
|
568
|
+
const AidrMetricpoolResourceSchema = v.object({
|
|
569
|
+
id: v.optional(AidrMetricpoolIdSchema),
|
|
570
|
+
updated_at: v.optional(AidrTimestampSchema),
|
|
571
|
+
field_mappings: v.optional(AidrResourceFieldMappingSchema)
|
|
572
|
+
});
|
|
573
|
+
const AidrOtelInstrumentationScopeSchema = v.objectWithRest({
|
|
574
|
+
name: v.optional(v.string()),
|
|
575
|
+
version: v.optional(v.string())
|
|
576
|
+
}, v.unknown());
|
|
577
|
+
/**
|
|
578
|
+
* AIDR Search Request
|
|
579
|
+
*/
|
|
580
|
+
const AidrMetricSchema = v.strictObject({
|
|
581
|
+
start_time: v.pipe(v.string(), v.isoTimestamp()),
|
|
582
|
+
end_time: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
583
|
+
interval: v.optional(v.picklist([
|
|
584
|
+
"hourly",
|
|
585
|
+
"daily",
|
|
586
|
+
"weekly",
|
|
587
|
+
"monthly",
|
|
588
|
+
"yearly"
|
|
589
|
+
])),
|
|
590
|
+
filters: v.optional(v.strictObject({})),
|
|
591
|
+
tag_filters: v.optional(v.strictObject({})),
|
|
592
|
+
detector_filters: v.optional(v.strictObject({})),
|
|
593
|
+
group_by: v.optional(v.array(v.pipe(v.string(), v.regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}$/)))),
|
|
594
|
+
order_by: v.optional(v.string()),
|
|
595
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
596
|
+
limit: v.optional(v.pipe(v.number(), v.integer())),
|
|
597
|
+
offset: v.optional(v.pipe(v.number(), v.integer()))
|
|
598
|
+
});
|
|
599
|
+
/**
|
|
600
|
+
* AIDR Aggregate Search Request
|
|
601
|
+
*/
|
|
602
|
+
const AidrMetricAggregatesSearchParamsSchema = v.strictObject({
|
|
603
|
+
start_time: v.pipe(v.string(), v.isoTimestamp()),
|
|
604
|
+
end_time: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
605
|
+
interval: v.optional(v.picklist([
|
|
606
|
+
"hourly",
|
|
607
|
+
"daily",
|
|
608
|
+
"weekly",
|
|
609
|
+
"monthly",
|
|
610
|
+
"yearly"
|
|
611
|
+
])),
|
|
612
|
+
aggregate_fields: v.optional(v.array(v.pipe(v.string(), v.regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}$/)))),
|
|
613
|
+
filters: v.optional(v.strictObject({})),
|
|
614
|
+
detector_filters: v.optional(v.strictObject({})),
|
|
615
|
+
tag_filters: v.optional(v.strictObject({})),
|
|
616
|
+
group_by: v.optional(v.array(v.pipe(v.string(), v.regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}$/)))),
|
|
617
|
+
order_by: v.optional(v.string()),
|
|
618
|
+
order: v.optional(v.picklist(["asc", "desc"])),
|
|
619
|
+
limit: v.optional(v.pipe(v.number(), v.integer())),
|
|
620
|
+
offset: v.optional(v.pipe(v.number(), v.integer()))
|
|
621
|
+
});
|
|
622
|
+
const AidrMetricAggregateItemSchema = v.array(v.object({
|
|
623
|
+
bucket_time: v.optional(v.union([v.pipe(v.string(), v.isoTimestamp()), v.null()])),
|
|
624
|
+
counts: v.record(v.string(), v.pipe(v.number(), v.integer()))
|
|
625
|
+
}));
|
|
626
|
+
/**
|
|
627
|
+
* AIDR Metric Search Aggregate Result Data
|
|
628
|
+
*/
|
|
629
|
+
const AidrMetricAggregatesResultSchema = v.object({ items: v.optional(v.array(AidrMetricAggregateItemSchema)) });
|
|
630
|
+
const AidrMetricResultDetectorItemSchema = v.optional(v.record(v.string(), v.unknown()), {});
|
|
631
|
+
const AidrMetricItemSchema = v.array(v.object({
|
|
632
|
+
bucket_time: v.optional(v.union([v.pipe(v.string(), v.isoTimestamp()), v.null()])),
|
|
633
|
+
tags: v.optional(v.record(v.string(), v.string())),
|
|
634
|
+
count: v.pipe(v.number(), v.integer()),
|
|
635
|
+
detectors_count: v.pipe(v.number(), v.integer()),
|
|
636
|
+
is_blocked: v.boolean(),
|
|
637
|
+
request_token_count: v.pipe(v.number(), v.integer()),
|
|
638
|
+
response_token_count: v.pipe(v.number(), v.integer()),
|
|
639
|
+
detectors: AidrMetricResultDetectorItemSchema
|
|
640
|
+
}));
|
|
641
|
+
/**
|
|
642
|
+
* AIDR Metric Search Result Data
|
|
643
|
+
*/
|
|
644
|
+
const AidrMetricResultSchema = v.object({ items: v.optional(v.array(AidrMetricItemSchema)) });
|
|
645
|
+
/**
|
|
646
|
+
* A time in ISO-8601 format
|
|
647
|
+
*/
|
|
648
|
+
const AuthnTimestampSchema = v.pipe(v.string(), v.isoTimestamp());
|
|
649
|
+
/**
|
|
650
|
+
* A time in ISO-8601 format or null
|
|
651
|
+
*/
|
|
652
|
+
const AirdTimestampNullableSchema = v.union([AuthnTimestampSchema, v.null()]);
|
|
653
|
+
/**
|
|
654
|
+
* Details about the evaluation of a single rule, including whether it matched, the action to take, the rule name, and optional debugging information.
|
|
655
|
+
*/
|
|
656
|
+
const AccessRuleResultSchema = v.strictObject({
|
|
657
|
+
matched: v.boolean(),
|
|
658
|
+
action: v.string(),
|
|
659
|
+
name: v.string(),
|
|
660
|
+
logic: v.optional(v.record(v.string(), v.unknown())),
|
|
661
|
+
attributes: v.optional(v.record(v.string(), v.unknown()))
|
|
662
|
+
});
|
|
663
|
+
/**
|
|
664
|
+
* Result of the recipe evaluating configured rules
|
|
665
|
+
*/
|
|
666
|
+
const AidrAccessRulesResponseSchema = v.record(v.string(), v.unknown());
|
|
667
|
+
const RuleRedactionConfigSchema = v.intersect([v.union([
|
|
668
|
+
v.object({ redaction_type: v.optional(v.picklist(["mask", "detect_only"])) }),
|
|
669
|
+
v.object({ redaction_type: v.optional(v.literal("replacement")) }),
|
|
670
|
+
v.object({ redaction_type: v.optional(v.literal("partial_masking")) }),
|
|
671
|
+
v.object({ redaction_type: v.optional(v.literal("hash")) }),
|
|
672
|
+
v.object({ redaction_type: v.optional(v.literal("fpe")) })
|
|
673
|
+
]), v.strictObject({
|
|
674
|
+
redaction_type: v.picklist([
|
|
675
|
+
"mask",
|
|
676
|
+
"partial_masking",
|
|
677
|
+
"replacement",
|
|
678
|
+
"hash",
|
|
679
|
+
"detect_only",
|
|
680
|
+
"fpe"
|
|
681
|
+
]),
|
|
682
|
+
redaction_value: v.optional(v.string()),
|
|
683
|
+
partial_masking: v.optional(v.object({
|
|
684
|
+
masking_type: v.optional(v.picklist(["unmask", "mask"])),
|
|
685
|
+
unmasked_from_left: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0))),
|
|
686
|
+
unmasked_from_right: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0))),
|
|
687
|
+
masked_from_left: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0))),
|
|
688
|
+
masked_from_right: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0))),
|
|
689
|
+
chars_to_ignore: v.optional(v.array(v.pipe(v.string(), v.length(1)))),
|
|
690
|
+
masking_char: v.optional(v.pipe(v.string(), v.length(1)), "*")
|
|
691
|
+
})),
|
|
692
|
+
hash: v.optional(v.union([v.object({ hash_type: v.picklist(["md5", "sha256"]) }), v.null()])),
|
|
693
|
+
fpe_alphabet: v.optional(v.union([
|
|
694
|
+
v.literal("numeric"),
|
|
695
|
+
v.literal("alphalower"),
|
|
696
|
+
v.literal("alphaupper"),
|
|
697
|
+
v.literal("alpha"),
|
|
698
|
+
v.literal("alphanumericlower"),
|
|
699
|
+
v.literal("alphanumericupper"),
|
|
700
|
+
v.literal("alphanumeric"),
|
|
701
|
+
v.null()
|
|
702
|
+
]))
|
|
703
|
+
})]);
|
|
704
|
+
/**
|
|
705
|
+
* Configuration for individual detectors used in an AI Guard recipe. Each entry specifies the detector to use, its enabled state, detector-specific settings, and the [action](https://pangea.cloud/docs/ai-guard/recipes#actions) to apply when detections occur.
|
|
706
|
+
*/
|
|
707
|
+
const DetectorSettingsSchema = v.array(v.strictObject({
|
|
708
|
+
detector_name: v.string(),
|
|
709
|
+
state: v.picklist(["disabled", "enabled"]),
|
|
710
|
+
settings: v.object({ rules: v.optional(v.array(v.strictObject({
|
|
711
|
+
redact_rule_id: v.string(),
|
|
712
|
+
redaction: RuleRedactionConfigSchema,
|
|
713
|
+
block: v.optional(v.boolean()),
|
|
714
|
+
disabled: v.optional(v.boolean()),
|
|
715
|
+
reputation_check: v.optional(v.boolean()),
|
|
716
|
+
transform_if_malicious: v.optional(v.boolean())
|
|
717
|
+
}))) })
|
|
718
|
+
}));
|
|
719
|
+
/**
|
|
720
|
+
* Configuration for an individual access rule used in an AI Guard recipe. Each rule defines its matching logic and the action to apply when the logic evaluates to true.
|
|
721
|
+
*/
|
|
722
|
+
const AccessRuleSettingsSchema = v.strictObject({
|
|
723
|
+
rule_key: v.pipe(v.string(), v.regex(/^([a-zA-Z0-9_][a-zA-Z0-9/|_]*)$/)),
|
|
724
|
+
name: v.string(),
|
|
725
|
+
state: v.picklist(["block", "report"]),
|
|
726
|
+
logic: v.record(v.string(), v.unknown())
|
|
727
|
+
});
|
|
728
|
+
const AidrPolicySchema = v.strictObject({
|
|
729
|
+
key: v.string(),
|
|
730
|
+
name: v.string(),
|
|
731
|
+
description: v.optional(v.string()),
|
|
732
|
+
schema_version: v.picklist(["v1.1"]),
|
|
733
|
+
detector_settings: v.optional(DetectorSettingsSchema),
|
|
734
|
+
access_rules: v.optional(v.array(AccessRuleSettingsSchema)),
|
|
735
|
+
connector_settings: v.optional(v.object({ redact: v.optional(v.object({ fpe_tweak_vault_secret_id: v.optional(v.string()) })) }))
|
|
736
|
+
});
|
|
737
|
+
const AidrPolicyResultSchema = v.strictObject({
|
|
738
|
+
id: PolicyIdSchema,
|
|
739
|
+
key: v.string(),
|
|
740
|
+
name: v.string(),
|
|
741
|
+
description: v.optional(v.string()),
|
|
742
|
+
schema_version: v.picklist(["v1.1"]),
|
|
743
|
+
revision: v.number(),
|
|
744
|
+
detector_settings: v.optional(DetectorSettingsSchema),
|
|
745
|
+
access_rules: v.optional(v.array(AccessRuleSettingsSchema)),
|
|
746
|
+
connector_settings: v.optional(v.object({ redact: v.optional(v.object({ fpe_tweak_vault_secret_id: v.optional(v.string()) })) })),
|
|
747
|
+
created_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
|
|
748
|
+
updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
|
|
749
|
+
});
|
|
750
|
+
const AidrPolicySearchResultSchema = v.object({
|
|
751
|
+
count: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1))),
|
|
752
|
+
last: v.optional(v.string()),
|
|
753
|
+
policies: v.optional(v.array(AidrPolicyResultSchema))
|
|
754
|
+
});
|
|
755
|
+
/**
|
|
756
|
+
* Defines an AI Guard recipe - a named configuration of detectors and redaction settings used to analyze and protect data flows in AI-powered applications.
|
|
757
|
+
*
|
|
758
|
+
* Recipes specify which detectors are active, how they behave, and may include reusable settings such as FPE tweaks.
|
|
759
|
+
*
|
|
760
|
+
* For details, see the [AI Guard Recipes](https://pangea.cloud/docs/ai-guard/recipes) documentation.
|
|
761
|
+
*/
|
|
762
|
+
const RecipeConfigSchema = v.strictObject({
|
|
763
|
+
name: v.string(),
|
|
764
|
+
description: v.string(),
|
|
765
|
+
version: v.optional(v.string(), "v1"),
|
|
766
|
+
detectors: v.optional(DetectorSettingsSchema),
|
|
767
|
+
access_rules: v.optional(v.array(AccessRuleSettingsSchema)),
|
|
768
|
+
connector_settings: v.optional(v.object({ redact: v.optional(v.object({ fpe_tweak_vault_secret_id: v.optional(v.string()) })) }))
|
|
769
|
+
});
|
|
770
|
+
const AidrPolicyDefaultsSchema = v.object({ default_policies: v.record(v.string(), v.unknown()) });
|
|
771
|
+
const LanguageResultSchema = v.object({
|
|
772
|
+
action: v.optional(v.string()),
|
|
773
|
+
language: v.optional(v.string())
|
|
774
|
+
});
|
|
775
|
+
const RedactEntityResultSchema = v.object({ entities: v.optional(v.array(v.object({
|
|
776
|
+
action: v.string(),
|
|
777
|
+
type: v.string(),
|
|
778
|
+
value: v.string(),
|
|
779
|
+
redacted: v.boolean(),
|
|
780
|
+
start_pos: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0)))
|
|
781
|
+
}))) });
|
|
782
|
+
const MaliciousEntityActionSchema = v.picklist([
|
|
783
|
+
"report",
|
|
784
|
+
"defang",
|
|
785
|
+
"disabled",
|
|
786
|
+
"block"
|
|
787
|
+
]);
|
|
788
|
+
const PiiEntityActionSchema = v.picklist([
|
|
789
|
+
"disabled",
|
|
790
|
+
"report",
|
|
791
|
+
"block",
|
|
792
|
+
"mask",
|
|
793
|
+
"partial_masking",
|
|
794
|
+
"replacement",
|
|
795
|
+
"hash",
|
|
796
|
+
"fpe"
|
|
797
|
+
]);
|
|
798
|
+
const AidrOtelResourceLogsSchema = v.objectWithRest({
|
|
799
|
+
resource: v.optional(v.lazy(() => AidrOtelResourceSchema)),
|
|
800
|
+
scopeLogs: v.array(v.lazy(() => AidrOtelScopeLogsSchema))
|
|
801
|
+
}, v.unknown());
|
|
802
|
+
const AidrOtelResourceSchema = v.objectWithRest({ attributes: v.optional(v.array(v.lazy(() => AidrOtelKeyValueSchema))) }, v.unknown());
|
|
803
|
+
const AidrOtelScopeLogsSchema = v.objectWithRest({
|
|
804
|
+
scope: v.optional(AidrOtelInstrumentationScopeSchema),
|
|
805
|
+
logRecords: v.array(v.lazy(() => AidrOtelLogRecordSchema))
|
|
806
|
+
}, v.unknown());
|
|
807
|
+
const AidrOtelLogRecordSchema = v.objectWithRest({
|
|
808
|
+
timeUnixNano: v.optional(v.pipe(v.string(), v.regex(/^[0-9]+$/))),
|
|
809
|
+
observedTimeUnixNano: v.optional(v.pipe(v.string(), v.regex(/^[0-9]+$/))),
|
|
810
|
+
severityNumber: v.optional(v.pipe(v.number(), v.integer())),
|
|
811
|
+
severityText: v.optional(v.string()),
|
|
812
|
+
name: v.optional(v.string()),
|
|
813
|
+
body: v.lazy(() => AidrOtelAnyValueSchema),
|
|
814
|
+
attributes: v.optional(v.array(v.lazy(() => AidrOtelKeyValueSchema))),
|
|
815
|
+
flags: v.optional(v.pipe(v.number(), v.integer())),
|
|
816
|
+
traceId: v.optional(v.string()),
|
|
817
|
+
spanId: v.optional(v.string()),
|
|
818
|
+
traceFlags: v.optional(v.string())
|
|
819
|
+
}, v.unknown());
|
|
820
|
+
const AidrOtelKeyValueSchema = v.objectWithRest({
|
|
821
|
+
key: v.string(),
|
|
822
|
+
value: v.lazy(() => AidrOtelAnyValueSchema)
|
|
823
|
+
}, v.unknown());
|
|
824
|
+
const AidrOtelAnyValueSchema = v.union([
|
|
825
|
+
v.object({ stringValue: v.string() }),
|
|
826
|
+
v.object({ boolValue: v.union([
|
|
827
|
+
v.boolean(),
|
|
828
|
+
v.literal("true"),
|
|
829
|
+
v.literal("false"),
|
|
830
|
+
v.literal("True"),
|
|
831
|
+
v.literal("False")
|
|
832
|
+
]) }),
|
|
833
|
+
v.object({ intValue: v.union([v.pipe(v.number(), v.integer()), v.pipe(v.string(), v.regex(/^-?\d+$/))]) }),
|
|
834
|
+
v.object({ doubleValue: v.union([v.number(), v.pipe(v.string(), v.regex(/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/))]) }),
|
|
835
|
+
v.object({ arrayValue: v.lazy(() => AidrOtelArrayValueSchema) }),
|
|
836
|
+
v.object({ kvlistValue: v.lazy(() => AidrOtelKeyValueListSchema) }),
|
|
837
|
+
v.object({ bytesValue: v.string() })
|
|
838
|
+
]);
|
|
839
|
+
const AidrOtelArrayValueSchema = v.objectWithRest({ values: v.array(AidrOtelAnyValueSchema) }, v.unknown());
|
|
840
|
+
const AidrOtelKeyValueListSchema = v.objectWithRest({ values: v.array(AidrOtelKeyValueSchema) }, v.unknown());
|
|
841
|
+
const AidrPostV1GuardChatCompletionsRequestSchema = v.object({
|
|
842
|
+
body: v.optional(ChatCompletionsGuardSchema),
|
|
843
|
+
path: v.optional(v.never()),
|
|
844
|
+
query: v.optional(v.never())
|
|
845
|
+
});
|
|
846
|
+
/**
|
|
847
|
+
* No description provided
|
|
848
|
+
*/
|
|
849
|
+
const AidrPostV1GuardChatCompletionsResponseSchema = v.intersect([PangeaResponseSchema, v.object({ result: v.optional(v.object({
|
|
850
|
+
guard_output: v.optional(v.record(v.string(), v.unknown())),
|
|
851
|
+
blocked: v.optional(v.boolean()),
|
|
852
|
+
transformed: v.optional(v.boolean()),
|
|
853
|
+
policy: v.optional(v.string()),
|
|
854
|
+
detectors: v.object({
|
|
855
|
+
malicious_prompt: v.optional(v.object({
|
|
856
|
+
detected: v.optional(v.boolean()),
|
|
857
|
+
data: v.optional(AidrPromptInjectionResultSchema)
|
|
858
|
+
})),
|
|
859
|
+
confidential_and_pii_entity: v.optional(v.object({
|
|
860
|
+
detected: v.optional(v.boolean()),
|
|
861
|
+
data: v.optional(AidrRedactEntityResultSchema)
|
|
862
|
+
})),
|
|
863
|
+
malicious_entity: v.optional(v.object({
|
|
864
|
+
detected: v.optional(v.boolean()),
|
|
865
|
+
data: v.optional(AidrMaliciousEntityResultSchema)
|
|
866
|
+
})),
|
|
867
|
+
custom_entity: v.optional(v.object({
|
|
868
|
+
detected: v.optional(v.boolean()),
|
|
869
|
+
data: v.optional(AidrRedactEntityResultSchema)
|
|
870
|
+
})),
|
|
871
|
+
secret_and_key_entity: v.optional(v.object({
|
|
872
|
+
detected: v.optional(v.boolean()),
|
|
873
|
+
data: v.optional(AidrRedactEntityResultSchema)
|
|
874
|
+
})),
|
|
875
|
+
competitors: v.optional(v.object({
|
|
876
|
+
detected: v.optional(v.boolean()),
|
|
877
|
+
data: v.optional(AidrSingleEntityResultSchema)
|
|
878
|
+
})),
|
|
879
|
+
language: v.optional(v.object({
|
|
880
|
+
detected: v.optional(v.boolean()),
|
|
881
|
+
data: v.optional(AidrLanguageResultSchema)
|
|
882
|
+
})),
|
|
883
|
+
topic: v.optional(v.object({
|
|
884
|
+
detected: v.optional(v.boolean()),
|
|
885
|
+
data: v.optional(AidrTopicResultSchema)
|
|
886
|
+
})),
|
|
887
|
+
code: v.optional(v.object({
|
|
888
|
+
detected: v.optional(v.boolean()),
|
|
889
|
+
data: v.optional(AidrLanguageResultSchema)
|
|
890
|
+
}))
|
|
891
|
+
}),
|
|
892
|
+
access_rules: v.optional(AidrAccessRulesResponseSchema),
|
|
893
|
+
fpe_context: v.optional(v.string())
|
|
894
|
+
})) })]);
|
|
895
|
+
const GetAsyncRequestRequestSchema = v.object({
|
|
896
|
+
body: v.optional(v.never()),
|
|
897
|
+
path: v.object({ requestId: v.string() }),
|
|
898
|
+
query: v.optional(v.never())
|
|
899
|
+
});
|
|
900
|
+
const GetAsyncRequestResponseSchema = v.union([PangeaResponseSchema, v.intersect([PangeaResponseSchema, v.object({ result: v.optional(v.object({
|
|
901
|
+
ttl_mins: v.optional(v.pipe(v.number(), v.integer())),
|
|
902
|
+
retry_counter: v.optional(v.pipe(v.number(), v.integer())),
|
|
903
|
+
location: v.optional(v.string())
|
|
904
|
+
})) })])]);
|
|
905
|
+
|
|
906
|
+
//#endregion
|
|
907
|
+
export { AccessRuleResultSchema, AccessRuleSettingsSchema, AidrAccessRulesResponseSchema, AidrAuditDataActivitySchema, AidrCustomlistResultSchema, AidrCustomlistSchema, AidrCustomlistSearchResultSchema, AidrCustomlistSearchSchema, AidrDeviceCheckResultSchema, AidrDeviceIdSchema, AidrDeviceResultSchema, AidrDeviceSchema, AidrDeviceSearchResultSchema, AidrDeviceSearchSchema, AidrDeviceStatusSchema, AidrDeviceTokenInfoSchema, AidrEmptySchema, AidrFieldAliasResultSchema, AidrFieldAliasSchema, AidrFieldAliasSearchResultSchema, AidrFieldAliasSearchSchema, AidrGolangDurationSchema, AidrIpv4OrV6Schema, AidrLanguageResultSchema, AidrLogSchema, AidrLogsSchema, AidrMaliciousEntityResultSchema, AidrMetricAggregateItemSchema, AidrMetricAggregatesResultSchema, AidrMetricAggregatesSearchParamsSchema, AidrMetricItemSchema, AidrMetricOnlyDataSchema, AidrMetricResultDetectorItemSchema, AidrMetricResultSchema, AidrMetricSchema, AidrMetricpoolIdSchema, AidrMetricpoolResourceSchema, AidrOtelAnyValueSchema, AidrOtelArrayValueSchema, AidrOtelInstrumentationScopeSchema, AidrOtelKeyValueListSchema, AidrOtelKeyValueSchema, AidrOtelLogRecordSchema, AidrOtelResourceLogsSchema, AidrOtelResourceSchema, AidrOtelScopeLogsSchema, AidrPolicyDefaultsSchema, AidrPolicyResultSchema, AidrPolicySchema, AidrPolicySearchResultSchema, AidrPolicySearchSchema, AidrPolicycollectionResultSchema, AidrPolicycollectionSearchResultSchema, AidrPolicycollectionSearchSchema, AidrPostV1GuardChatCompletionsRequestSchema, AidrPostV1GuardChatCompletionsResponseSchema, AidrPromptInjectionResultSchema, AidrPromptItemListResultSchema, AidrPromptItemSchema, AidrRedactEntityResultSchema, AidrResourceFieldMappingSchema, AidrSavedFilterResultSchema, AidrSavedFilterSchema, AidrSavedFilterSearchResultSchema, AidrSavedFilterSearchSchema, AidrSensorHealthSchema, AidrSensorInsightsItemSchema, AidrSensorInsightsResultSchema, AidrSensorInsightsSchema, AidrServiceConfigListSchema, AidrServiceConfigResultSchema, AidrServiceConfigSchema, AidrSingleEntityResultSchema, AidrTimestampSchema, AidrTopicResultSchema, AirdTimestampNullableSchema, AuthnTimestampSchema, ChatCompletionsGuardSchema, DetectorSettingsSchema, FilterIdSchema, GetAsyncRequestRequestSchema, GetAsyncRequestResponseSchema, LanguageResultSchema, MaliciousEntityActionSchema, PangeaResponseSchema, PangeaValidationErrorsSchema, PiiEntityActionSchema, PolicyIdSchema, RecipeConfigSchema, RedactEntityResultSchema, RuleRedactionConfigSchema, ServiceConfigIdSchema };
|