veto-sdk 2.5.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/compile.js +1 -1
- package/dist/cli/compile.js.map +1 -1
- package/dist/cli/templates.js +1 -1
- package/dist/core/veto.d.ts +1 -0
- package/dist/core/veto.d.ts.map +1 -1
- package/dist/core/veto.js +24 -11
- package/dist/core/veto.js.map +1 -1
- package/dist/custom/providers/anthropic.d.ts +0 -13
- package/dist/custom/providers/anthropic.d.ts.map +1 -1
- package/dist/custom/providers/anthropic.js +39 -40
- package/dist/custom/providers/anthropic.js.map +1 -1
- package/dist/custom/providers/openai.d.ts +0 -13
- package/dist/custom/providers/openai.d.ts.map +1 -1
- package/dist/custom/providers/openai.js +40 -41
- package/dist/custom/providers/openai.js.map +1 -1
- package/dist/custom/providers/utils.d.ts +10 -0
- package/dist/custom/providers/utils.d.ts.map +1 -0
- package/dist/custom/providers/utils.js +130 -0
- package/dist/custom/providers/utils.js.map +1 -0
- package/dist/custom/types.d.ts +11 -18
- package/dist/custom/types.d.ts.map +1 -1
- package/dist/custom/types.js +70 -28
- package/dist/custom/types.js.map +1 -1
- package/dist/rules/feed-provider.d.ts +39 -0
- package/dist/rules/feed-provider.d.ts.map +1 -0
- package/dist/rules/feed-provider.js +65 -0
- package/dist/rules/feed-provider.js.map +1 -0
- package/dist/rules/index.d.ts +3 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +6 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/local-evaluator.d.ts +14 -3
- package/dist/rules/local-evaluator.d.ts.map +1 -1
- package/dist/rules/local-evaluator.js +20 -5
- package/dist/rules/local-evaluator.js.map +1 -1
- package/dist/rules/pipeline-dsl.d.ts +802 -0
- package/dist/rules/pipeline-dsl.d.ts.map +1 -0
- package/dist/rules/pipeline-dsl.js +198 -0
- package/dist/rules/pipeline-dsl.js.map +1 -0
- package/dist/rules/policy-ir-schema.d.ts +62 -0
- package/dist/rules/policy-ir-schema.d.ts.map +1 -1
- package/dist/rules/policy-ir-schema.js +58 -0
- package/dist/rules/policy-ir-schema.js.map +1 -1
- package/dist/rules/policy-packs.d.ts.map +1 -1
- package/dist/rules/policy-packs.js +3 -0
- package/dist/rules/policy-packs.js.map +1 -1
- package/dist/rules/types.d.ts +78 -0
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/rules/types.js +13 -0
- package/dist/rules/types.js.map +1 -1
- package/package.json +5 -1
- package/packs/eu-ai-act-starter.yaml +155 -0
- package/packs/hipaa-lite.yaml +154 -0
- package/packs/soc2-lite.yaml +136 -0
|
@@ -1,47 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* @module custom/providers/openai
|
|
5
|
-
*/
|
|
6
|
-
import { CustomError } from '../types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Call OpenAI API with the given prompt.
|
|
9
|
-
*
|
|
10
|
-
* @param messages - Provider-specific message structure
|
|
11
|
-
* @param config - Resolved custom configuration
|
|
12
|
-
* @param logger - Logger instance
|
|
13
|
-
* @returns Raw text response from OpenAI
|
|
14
|
-
*/
|
|
15
|
-
export async function callOpenAI(messages, config, logger) {
|
|
1
|
+
import { CustomError, CustomProviderPackageError } from '../types.js';
|
|
2
|
+
import { withProviderRetry } from './utils.js';
|
|
3
|
+
async function loadOpenAI() {
|
|
16
4
|
try {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
apiKey: config.apiKey,
|
|
20
|
-
baseURL: config.baseUrl,
|
|
21
|
-
});
|
|
22
|
-
logger.debug('Calling OpenAI API', {
|
|
23
|
-
model: config.model,
|
|
24
|
-
temperature: config.temperature,
|
|
25
|
-
maxTokens: config.maxTokens,
|
|
26
|
-
});
|
|
27
|
-
const response = await client.chat.completions.create({
|
|
28
|
-
model: config.model,
|
|
29
|
-
messages: messages.messages,
|
|
30
|
-
temperature: config.temperature,
|
|
31
|
-
max_tokens: config.maxTokens,
|
|
32
|
-
response_format: { type: 'json_object' }, // Force JSON output
|
|
33
|
-
});
|
|
34
|
-
const content = response.choices[0]?.message?.content;
|
|
35
|
-
if (!content) {
|
|
36
|
-
throw new CustomError('Empty response from OpenAI');
|
|
37
|
-
}
|
|
38
|
-
return content;
|
|
5
|
+
const module = await import('openai');
|
|
6
|
+
return module.default;
|
|
39
7
|
}
|
|
40
8
|
catch (error) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
9
|
+
throw new CustomProviderPackageError('openai', 'openai', error instanceof Error ? error : undefined);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export async function callOpenAI(messages, config, logger) {
|
|
13
|
+
const OpenAI = await loadOpenAI();
|
|
14
|
+
const client = new OpenAI({
|
|
15
|
+
apiKey: config.apiKey,
|
|
16
|
+
baseURL: config.baseUrl,
|
|
17
|
+
timeout: config.timeout,
|
|
18
|
+
maxRetries: 0,
|
|
19
|
+
});
|
|
20
|
+
logger.debug('Calling OpenAI API', {
|
|
21
|
+
model: config.model,
|
|
22
|
+
temperature: config.temperature,
|
|
23
|
+
maxTokens: config.maxTokens,
|
|
24
|
+
timeout: config.timeout,
|
|
25
|
+
});
|
|
26
|
+
const response = await withProviderRetry(() => client.chat.completions.create({
|
|
27
|
+
model: config.model,
|
|
28
|
+
messages: messages.messages ?? [],
|
|
29
|
+
temperature: config.temperature,
|
|
30
|
+
max_tokens: config.maxTokens,
|
|
31
|
+
response_format: { type: 'json_object' },
|
|
32
|
+
}, {
|
|
33
|
+
timeout: config.timeout,
|
|
34
|
+
maxRetries: 0,
|
|
35
|
+
}), {
|
|
36
|
+
providerLabel: 'OpenAI',
|
|
37
|
+
timeoutMs: config.timeout,
|
|
38
|
+
logger,
|
|
39
|
+
});
|
|
40
|
+
const content = response.choices[0]?.message?.content;
|
|
41
|
+
if (!content) {
|
|
42
|
+
throw new CustomError('Empty response from OpenAI');
|
|
45
43
|
}
|
|
44
|
+
return content;
|
|
46
45
|
}
|
|
47
46
|
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/custom/providers/openai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/custom/providers/openai.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA4B/C,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAA8C,CAAC;QACnF,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,0BAA0B,CAClC,QAAQ,EACR,QAAQ,EACR,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAA0B,EAC1B,MAA4B,EAC5B,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAClC;QACE,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;QACjC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;KACzC,EACD;QACE,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,CAAC;KACd,CACF,EACD;QACE,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,MAAM,CAAC,OAAO;QACzB,MAAM;KACP,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CAAC,4BAA4B,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Logger } from '../../utils/logger.js';
|
|
2
|
+
export interface ProviderRetryOptions {
|
|
3
|
+
providerLabel: string;
|
|
4
|
+
timeoutMs: number;
|
|
5
|
+
logger: Logger;
|
|
6
|
+
maxRetries?: number;
|
|
7
|
+
retryDelayMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function withProviderRetry<T>(operation: () => Promise<T>, options: ProviderRetryOptions): Promise<T>;
|
|
10
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/custom/providers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAyBpD,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwID,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,CAAC,CAAC,CAgCZ"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { CustomError } from '../types.js';
|
|
2
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
3
|
+
const DEFAULT_RETRY_DELAY_MS = 100;
|
|
4
|
+
const TRANSIENT_NETWORK_CODES = new Set([
|
|
5
|
+
'ETIMEDOUT',
|
|
6
|
+
'ECONNRESET',
|
|
7
|
+
'ECONNREFUSED',
|
|
8
|
+
'EAI_AGAIN',
|
|
9
|
+
'ENOTFOUND',
|
|
10
|
+
'UND_ERR_CONNECT_TIMEOUT',
|
|
11
|
+
'APIConnectionError',
|
|
12
|
+
'APIConnectionTimeoutError',
|
|
13
|
+
]);
|
|
14
|
+
function getErrorRecord(error) {
|
|
15
|
+
if (!error || typeof error !== 'object') {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
return error;
|
|
19
|
+
}
|
|
20
|
+
function getStatus(error) {
|
|
21
|
+
const record = getErrorRecord(error);
|
|
22
|
+
const status = record.status ?? record.statusCode;
|
|
23
|
+
if (typeof status === 'number') {
|
|
24
|
+
return status;
|
|
25
|
+
}
|
|
26
|
+
const response = record.response;
|
|
27
|
+
if (response && typeof response === 'object') {
|
|
28
|
+
const responseStatus = response.status;
|
|
29
|
+
if (typeof responseStatus === 'number') {
|
|
30
|
+
return responseStatus;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
function getCode(error) {
|
|
36
|
+
const record = getErrorRecord(error);
|
|
37
|
+
const code = record.code ?? record.name ?? record.type;
|
|
38
|
+
return typeof code === 'string' ? code : undefined;
|
|
39
|
+
}
|
|
40
|
+
function getMessage(error) {
|
|
41
|
+
return error instanceof Error ? error.message : String(error);
|
|
42
|
+
}
|
|
43
|
+
function isTimeoutError(error, code) {
|
|
44
|
+
const message = getMessage(error).toLowerCase();
|
|
45
|
+
const normalizedCode = code?.toLowerCase() ?? '';
|
|
46
|
+
return normalizedCode.includes('timeout')
|
|
47
|
+
|| normalizedCode === 'etimedout'
|
|
48
|
+
|| normalizedCode === 'aborterror'
|
|
49
|
+
|| message.includes('timed out')
|
|
50
|
+
|| message.includes('timeout');
|
|
51
|
+
}
|
|
52
|
+
function isNetworkError(error, code) {
|
|
53
|
+
if (code && TRANSIENT_NETWORK_CODES.has(code)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
const message = getMessage(error).toLowerCase();
|
|
57
|
+
return message.includes('fetch failed')
|
|
58
|
+
|| message.includes('network')
|
|
59
|
+
|| message.includes('socket hang up')
|
|
60
|
+
|| message.includes('connection reset');
|
|
61
|
+
}
|
|
62
|
+
function classifyProviderError(error) {
|
|
63
|
+
const status = getStatus(error);
|
|
64
|
+
const code = getCode(error);
|
|
65
|
+
if (isTimeoutError(error, code)) {
|
|
66
|
+
return { kind: 'timeout', retryable: true, status, code };
|
|
67
|
+
}
|
|
68
|
+
if (status === 401 || status === 403) {
|
|
69
|
+
return { kind: 'auth', retryable: false, status, code };
|
|
70
|
+
}
|
|
71
|
+
if (status === 429) {
|
|
72
|
+
return { kind: 'rate_limit', retryable: true, status, code };
|
|
73
|
+
}
|
|
74
|
+
if (status !== undefined && status >= 500) {
|
|
75
|
+
return { kind: 'server', retryable: true, status, code };
|
|
76
|
+
}
|
|
77
|
+
if (isNetworkError(error, code)) {
|
|
78
|
+
return { kind: 'network', retryable: true, status, code };
|
|
79
|
+
}
|
|
80
|
+
return { kind: 'other', retryable: false, status, code };
|
|
81
|
+
}
|
|
82
|
+
function buildProviderError(error, classification, providerLabel, timeoutMs, attempts) {
|
|
83
|
+
const cause = error instanceof Error ? error : undefined;
|
|
84
|
+
const attemptSuffix = attempts > 1 ? ` after ${attempts} attempts` : '';
|
|
85
|
+
switch (classification.kind) {
|
|
86
|
+
case 'timeout':
|
|
87
|
+
return new CustomError(`${providerLabel} request timed out after ${timeoutMs}ms${attemptSuffix}.`, cause);
|
|
88
|
+
case 'auth':
|
|
89
|
+
return new CustomError(`${providerLabel} authentication failed with status ${classification.status}. Check the configured API key and provider permissions.`, cause);
|
|
90
|
+
case 'rate_limit':
|
|
91
|
+
return new CustomError(`${providerLabel} rate limited the request with status 429${attemptSuffix}.`, cause);
|
|
92
|
+
case 'server':
|
|
93
|
+
return new CustomError(`${providerLabel} provider server error with status ${classification.status}${attemptSuffix}.`, cause);
|
|
94
|
+
case 'network':
|
|
95
|
+
return new CustomError(`${providerLabel} transient network error${attemptSuffix}: ${getMessage(error)}`, cause);
|
|
96
|
+
case 'other':
|
|
97
|
+
return new CustomError(`${providerLabel} API call failed: ${getMessage(error)}`, cause);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function delay(milliseconds) {
|
|
101
|
+
return new Promise((resolve) => {
|
|
102
|
+
setTimeout(resolve, milliseconds);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export async function withProviderRetry(operation, options) {
|
|
106
|
+
const maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
107
|
+
const retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
|
|
108
|
+
let attempt = 0;
|
|
109
|
+
while (true) {
|
|
110
|
+
try {
|
|
111
|
+
return await operation();
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const classification = classifyProviderError(error);
|
|
115
|
+
const attempts = attempt + 1;
|
|
116
|
+
if (!classification.retryable || attempt >= maxRetries) {
|
|
117
|
+
throw buildProviderError(error, classification, options.providerLabel, options.timeoutMs, attempts);
|
|
118
|
+
}
|
|
119
|
+
options.logger.warn(`${options.providerLabel} request failed, retrying`, {
|
|
120
|
+
attempt: attempts,
|
|
121
|
+
maxRetries,
|
|
122
|
+
status: classification.status,
|
|
123
|
+
code: classification.code,
|
|
124
|
+
});
|
|
125
|
+
attempt += 1;
|
|
126
|
+
await delay(retryDelayMs);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/custom/providers/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/custom/types.d.ts
CHANGED
|
@@ -71,33 +71,26 @@ export declare const CUSTOM_DEFAULTS: {
|
|
|
71
71
|
readonly maxTokens: 500;
|
|
72
72
|
readonly timeout: 30000;
|
|
73
73
|
};
|
|
74
|
-
/**
|
|
75
|
-
* Base error class for custom provider errors.
|
|
76
|
-
*/
|
|
77
74
|
export declare class CustomError extends Error {
|
|
78
75
|
readonly cause?: Error;
|
|
79
76
|
constructor(message: string, cause?: Error);
|
|
80
77
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
export declare class CustomConfigError extends CustomError {
|
|
79
|
+
constructor(message: string);
|
|
80
|
+
}
|
|
84
81
|
export declare class CustomParseError extends CustomError {
|
|
85
82
|
readonly rawResponse: string;
|
|
86
83
|
constructor(message: string, rawResponse: string);
|
|
87
84
|
}
|
|
88
|
-
|
|
89
|
-
* Error thrown when API key is missing.
|
|
90
|
-
*/
|
|
91
|
-
export declare class CustomAPIKeyError extends CustomError {
|
|
85
|
+
export declare class CustomAPIKeyError extends CustomConfigError {
|
|
92
86
|
readonly provider: CustomProvider;
|
|
93
|
-
|
|
87
|
+
readonly envVar: string;
|
|
88
|
+
constructor(provider: CustomProvider, envVar: string, configuredEnvVar?: boolean);
|
|
89
|
+
}
|
|
90
|
+
export declare class CustomProviderPackageError extends CustomError {
|
|
91
|
+
readonly provider: CustomProvider;
|
|
92
|
+
readonly packageName: string;
|
|
93
|
+
constructor(provider: CustomProvider, packageName: string, cause?: Error);
|
|
94
94
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Resolve custom configuration with defaults and validation.
|
|
97
|
-
*
|
|
98
|
-
* @param config - User-provided configuration
|
|
99
|
-
* @returns Resolved configuration with all required fields
|
|
100
|
-
* @throws {CustomAPIKeyError} If API key is not found
|
|
101
|
-
*/
|
|
102
95
|
export declare function resolveCustomConfig(config: CustomConfig): ResolvedCustomConfig;
|
|
103
96
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/custom/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAK5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAKzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/custom/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAK5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAKzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAK3C;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAKjD;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,UAAQ;CAS/E;AAED,qBAAa,0BAA2B,SAAQ,WAAW;IACzD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CASzE;AA0CD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,oBAAoB,CA8B9E"}
|
package/dist/custom/types.js
CHANGED
|
@@ -29,9 +29,6 @@ export const CUSTOM_DEFAULTS = {
|
|
|
29
29
|
maxTokens: 500,
|
|
30
30
|
timeout: 30000,
|
|
31
31
|
};
|
|
32
|
-
/**
|
|
33
|
-
* Base error class for custom provider errors.
|
|
34
|
-
*/
|
|
35
32
|
export class CustomError extends Error {
|
|
36
33
|
cause;
|
|
37
34
|
constructor(message, cause) {
|
|
@@ -40,9 +37,12 @@ export class CustomError extends Error {
|
|
|
40
37
|
this.cause = cause;
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
export class CustomConfigError extends CustomError {
|
|
41
|
+
constructor(message) {
|
|
42
|
+
super(message);
|
|
43
|
+
this.name = 'CustomConfigError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
46
|
export class CustomParseError extends CustomError {
|
|
47
47
|
rawResponse;
|
|
48
48
|
constructor(message, rawResponse) {
|
|
@@ -51,39 +51,81 @@ export class CustomParseError extends CustomError {
|
|
|
51
51
|
this.rawResponse = rawResponse;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
* Error thrown when API key is missing.
|
|
56
|
-
*/
|
|
57
|
-
export class CustomAPIKeyError extends CustomError {
|
|
54
|
+
export class CustomAPIKeyError extends CustomConfigError {
|
|
58
55
|
provider;
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
envVar;
|
|
57
|
+
constructor(provider, envVar, configuredEnvVar = false) {
|
|
58
|
+
const message = configuredEnvVar
|
|
59
|
+
? `API key env var ${envVar} for custom provider ${provider} is not set or empty. Set ${envVar} or configure custom.apiKey with a literal secret.`
|
|
60
|
+
: `Missing API key for custom provider ${provider}. Set ${envVar} environment variable or configure custom.apiKey.`;
|
|
61
|
+
super(message);
|
|
61
62
|
this.name = 'CustomAPIKeyError';
|
|
62
63
|
this.provider = provider;
|
|
64
|
+
this.envVar = envVar;
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
export class CustomProviderPackageError extends CustomError {
|
|
68
|
+
provider;
|
|
69
|
+
packageName;
|
|
70
|
+
constructor(provider, packageName, cause) {
|
|
71
|
+
super(`Custom provider package "${packageName}" is not installed. Install ${packageName} to use custom.provider="${provider}".`, cause);
|
|
72
|
+
this.name = 'CustomProviderPackageError';
|
|
73
|
+
this.provider = provider;
|
|
74
|
+
this.packageName = packageName;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const ENV_VAR_NAME_PATTERN = /^[A-Z_][A-Z0-9_]*$/;
|
|
78
|
+
const SUPPORTED_PROVIDERS = new Set([
|
|
79
|
+
'gemini',
|
|
80
|
+
'openrouter',
|
|
81
|
+
'openai',
|
|
82
|
+
'anthropic',
|
|
83
|
+
]);
|
|
84
|
+
function isSupportedProvider(provider) {
|
|
85
|
+
return typeof provider === 'string' && SUPPORTED_PROVIDERS.has(provider);
|
|
86
|
+
}
|
|
87
|
+
function looksLikeEnvVarName(value) {
|
|
88
|
+
return ENV_VAR_NAME_PATTERN.test(value);
|
|
89
|
+
}
|
|
90
|
+
function resolveApiKey(provider, configuredApiKey) {
|
|
91
|
+
const trimmedApiKey = configuredApiKey?.trim();
|
|
92
|
+
if (trimmedApiKey) {
|
|
93
|
+
if (looksLikeEnvVarName(trimmedApiKey)) {
|
|
94
|
+
const resolvedApiKey = process.env[trimmedApiKey];
|
|
95
|
+
if (!resolvedApiKey) {
|
|
96
|
+
throw new CustomAPIKeyError(provider, trimmedApiKey, true);
|
|
97
|
+
}
|
|
98
|
+
return resolvedApiKey;
|
|
99
|
+
}
|
|
100
|
+
return trimmedApiKey;
|
|
101
|
+
}
|
|
102
|
+
const envVar = PROVIDER_ENV_VARS[provider];
|
|
103
|
+
const apiKey = process.env[envVar];
|
|
76
104
|
if (!apiKey) {
|
|
77
|
-
throw new CustomAPIKeyError(
|
|
105
|
+
throw new CustomAPIKeyError(provider, envVar);
|
|
106
|
+
}
|
|
107
|
+
return apiKey;
|
|
108
|
+
}
|
|
109
|
+
export function resolveCustomConfig(config) {
|
|
110
|
+
const provider = config.provider;
|
|
111
|
+
if (!provider) {
|
|
112
|
+
throw new CustomConfigError('Missing custom.provider for custom validation. Set custom.provider to one of: openai, anthropic, gemini, openrouter.');
|
|
113
|
+
}
|
|
114
|
+
if (!isSupportedProvider(provider)) {
|
|
115
|
+
throw new CustomConfigError(`Unsupported custom.provider "${String(provider)}". Supported providers: openai, anthropic, gemini, openrouter.`);
|
|
116
|
+
}
|
|
117
|
+
const model = config.model;
|
|
118
|
+
if (!model || model.trim() === '') {
|
|
119
|
+
throw new CustomConfigError(`Missing custom.model for custom provider ${provider}. Set custom.model in veto.config.yaml.`);
|
|
78
120
|
}
|
|
79
121
|
return {
|
|
80
|
-
provider
|
|
81
|
-
model
|
|
82
|
-
apiKey,
|
|
122
|
+
provider,
|
|
123
|
+
model,
|
|
124
|
+
apiKey: resolveApiKey(provider, config.apiKey),
|
|
83
125
|
temperature: config.temperature ?? CUSTOM_DEFAULTS.temperature,
|
|
84
126
|
maxTokens: config.maxTokens ?? CUSTOM_DEFAULTS.maxTokens,
|
|
85
127
|
timeout: config.timeout ?? CUSTOM_DEFAULTS.timeout,
|
|
86
|
-
baseUrl: config.baseUrl ?? PROVIDER_BASE_URLS[
|
|
128
|
+
baseUrl: config.baseUrl ?? PROVIDER_BASE_URLS[provider],
|
|
87
129
|
};
|
|
88
130
|
}
|
|
89
131
|
//# sourceMappingURL=types.js.map
|
package/dist/custom/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/custom/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2DH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAmC;IAC/D,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;IACxB,UAAU,EAAE,oBAAoB;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA+C;IAC5E,MAAM,EAAE,2BAA2B;IACnC,SAAS,EAAE,SAAS,EAAE,mBAAmB;IACzC,MAAM,EAAE,SAAS,EAAE,mBAAmB;IACtC,UAAU,EAAE,8BAA8B;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,KAAK;CACN,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/custom/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feed provider utilities for the local evaluator.
|
|
3
|
+
*
|
|
4
|
+
* The evaluator itself is sync and accepts any object implementing the
|
|
5
|
+
* FeedProvider interface declared in `./types.ts`. This module ships an
|
|
6
|
+
* in-memory reference provider suitable for tests, the CLI, and SDK
|
|
7
|
+
* consumers who manage refreshes externally.
|
|
8
|
+
*
|
|
9
|
+
* @module rules/feed-provider
|
|
10
|
+
*/
|
|
11
|
+
import type { FeedConditionValue, FeedProvider, FeedSnapshot, PipelineConditionValue } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Trivial in-memory provider. Caller `put()`s snapshots; evaluator `get()`s them.
|
|
14
|
+
*
|
|
15
|
+
* Not thread-safe. Not persistent. Intended for tests and single-process
|
|
16
|
+
* SDK usage. Platform code should provide its own Redis/KV-backed
|
|
17
|
+
* implementation.
|
|
18
|
+
*/
|
|
19
|
+
export declare class InMemoryFeedProvider implements FeedProvider {
|
|
20
|
+
private readonly store;
|
|
21
|
+
put(feedId: string, snapshot: FeedSnapshot): void;
|
|
22
|
+
get(feedId: string, _version?: string): FeedSnapshot | undefined;
|
|
23
|
+
clear(): void;
|
|
24
|
+
size(): number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve a FeedRef / PipelineRef to an array comparand suitable for
|
|
28
|
+
* set-membership operators.
|
|
29
|
+
*
|
|
30
|
+
* Returns `{ resolved: unknown[] }` on hit, `{ fallback: "fail_open" | "fail_closed" }`
|
|
31
|
+
* on miss/stale. Caller decides enforcement semantics per the ref's
|
|
32
|
+
* `fallback` field.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveFeedRef(ref: FeedConditionValue | PipelineConditionValue, provider: FeedProvider | undefined, now_ms?: number): {
|
|
35
|
+
resolved: unknown[];
|
|
36
|
+
} | {
|
|
37
|
+
fallback: 'fail_open' | 'fail_closed';
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=feed-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed-provider.d.ts","sourceRoot":"","sources":["../../src/rules/feed-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IAEzD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIjD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIhE,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,MAAM;CAGf;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,kBAAkB,GAAG,sBAAsB,EAChD,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,MAAM,GAAE,MAAmB,GAC1B;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAA;CAAE,CA2BrE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feed provider utilities for the local evaluator.
|
|
3
|
+
*
|
|
4
|
+
* The evaluator itself is sync and accepts any object implementing the
|
|
5
|
+
* FeedProvider interface declared in `./types.ts`. This module ships an
|
|
6
|
+
* in-memory reference provider suitable for tests, the CLI, and SDK
|
|
7
|
+
* consumers who manage refreshes externally.
|
|
8
|
+
*
|
|
9
|
+
* @module rules/feed-provider
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Trivial in-memory provider. Caller `put()`s snapshots; evaluator `get()`s them.
|
|
13
|
+
*
|
|
14
|
+
* Not thread-safe. Not persistent. Intended for tests and single-process
|
|
15
|
+
* SDK usage. Platform code should provide its own Redis/KV-backed
|
|
16
|
+
* implementation.
|
|
17
|
+
*/
|
|
18
|
+
export class InMemoryFeedProvider {
|
|
19
|
+
store = new Map();
|
|
20
|
+
put(feedId, snapshot) {
|
|
21
|
+
this.store.set(feedId, snapshot);
|
|
22
|
+
}
|
|
23
|
+
get(feedId, _version) {
|
|
24
|
+
return this.store.get(feedId);
|
|
25
|
+
}
|
|
26
|
+
clear() {
|
|
27
|
+
this.store.clear();
|
|
28
|
+
}
|
|
29
|
+
size() {
|
|
30
|
+
return this.store.size;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve a FeedRef / PipelineRef to an array comparand suitable for
|
|
35
|
+
* set-membership operators.
|
|
36
|
+
*
|
|
37
|
+
* Returns `{ resolved: unknown[] }` on hit, `{ fallback: "fail_open" | "fail_closed" }`
|
|
38
|
+
* on miss/stale. Caller decides enforcement semantics per the ref's
|
|
39
|
+
* `fallback` field.
|
|
40
|
+
*/
|
|
41
|
+
export function resolveFeedRef(ref, provider, now_ms = Date.now()) {
|
|
42
|
+
const fallbackRoute = () => ({
|
|
43
|
+
fallback: ref.fallback === 'fail_closed' ? 'fail_closed' : 'fail_open',
|
|
44
|
+
});
|
|
45
|
+
if (provider === undefined)
|
|
46
|
+
return fallbackRoute();
|
|
47
|
+
const id = ref.kind === 'feed' ? ref.feed_id : ref.pipeline_id;
|
|
48
|
+
const snapshot = provider.get(id, ref.version);
|
|
49
|
+
if (snapshot === undefined)
|
|
50
|
+
return fallbackRoute();
|
|
51
|
+
// Defensive: a non-finite clock (NaN/Infinity) would make the staleness
|
|
52
|
+
// check meaningless and could let a stale snapshot through silently.
|
|
53
|
+
if (!Number.isFinite(now_ms) || !Number.isFinite(snapshot.refreshed_at_ms)) {
|
|
54
|
+
return ref.fallback === 'last_known_good'
|
|
55
|
+
? { resolved: snapshot.data }
|
|
56
|
+
: fallbackRoute();
|
|
57
|
+
}
|
|
58
|
+
const age_sec = Math.max(0, Math.floor((now_ms - snapshot.refreshed_at_ms) / 1000));
|
|
59
|
+
const stale = age_sec > ref.max_staleness_sec;
|
|
60
|
+
// last_known_good explicitly opts into stale snapshots.
|
|
61
|
+
if (stale && ref.fallback !== 'last_known_good')
|
|
62
|
+
return fallbackRoute();
|
|
63
|
+
return { resolved: snapshot.data };
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=feed-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed-provider.js","sourceRoot":"","sources":["../../src/rules/feed-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IACd,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEzD,GAAG,CAAC,MAAc,EAAE,QAAsB;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,QAAiB;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAgD,EAChD,QAAkC,EAClC,SAAiB,IAAI,CAAC,GAAG,EAAE;IAE3B,MAAM,aAAa,GAAG,GAA8C,EAAE,CAAC,CAAC;QACtE,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW;KACvE,CAAC,CAAC;IAEH,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,aAAa,EAAE,CAAC;IAEnD,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,aAAa,EAAE,CAAC;IAEnD,wEAAwE;IACxE,qEAAqE;IACrE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3E,OAAO,GAAG,CAAC,QAAQ,KAAK,iBAAiB;YACvC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;YAC7B,CAAC,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC;IAE9C,wDAAwD;IACxD,IAAI,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,iBAAiB;QAAE,OAAO,aAAa,EAAE,CAAC;IAExE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -12,5 +12,7 @@ export * from './schema-validator.js';
|
|
|
12
12
|
export * from './policy-ir-schema.js';
|
|
13
13
|
export * from './condition-evaluator.js';
|
|
14
14
|
export * from './patterns.js';
|
|
15
|
-
export {
|
|
15
|
+
export { InMemoryFeedProvider, resolveFeedRef } from './feed-provider.js';
|
|
16
|
+
export { evaluateRulesLocally, evaluateCondition as evaluateConditionLocally, resolveFieldPath as resolveLocalFieldPath, type LocalEvalResult, type LocalEvalOptions, } from './local-evaluator.js';
|
|
17
|
+
export { getBuiltInPolicyPackNames, normalizePolicyPackName, resolveBuiltInPolicyPackPath, } from './policy-packs.js';
|
|
16
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAK9B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,oBAAoB,EACpB,iBAAiB,IAAI,wBAAwB,EAC7C,gBAAgB,IAAI,qBAAqB,EACzC,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC"}
|
package/dist/rules/index.js
CHANGED
|
@@ -12,5 +12,11 @@ export * from './schema-validator.js';
|
|
|
12
12
|
export * from './policy-ir-schema.js';
|
|
13
13
|
export * from './condition-evaluator.js';
|
|
14
14
|
export * from './patterns.js';
|
|
15
|
+
// NOTE: `./pipeline-dsl.js` is deliberately NOT re-exported here. It depends
|
|
16
|
+
// on `zod` (optional peerDep) and `node:crypto`. Consumers import it via the
|
|
17
|
+
// dedicated `veto-sdk/rules/pipeline-dsl` subpath so that the rules barrel
|
|
18
|
+
// remains zod-free for existing callers.
|
|
19
|
+
export { InMemoryFeedProvider, resolveFeedRef } from './feed-provider.js';
|
|
15
20
|
export { evaluateRulesLocally, evaluateCondition as evaluateConditionLocally, resolveFieldPath as resolveLocalFieldPath, } from './local-evaluator.js';
|
|
21
|
+
export { getBuiltInPolicyPackNames, normalizePolicyPackName, resolveBuiltInPolicyPackPath, } from './policy-packs.js';
|
|
16
22
|
//# sourceMappingURL=index.js.map
|
package/dist/rules/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,IAAI,wBAAwB,EAC7C,gBAAgB,IAAI,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,yCAAyC;AACzC,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,oBAAoB,EACpB,iBAAiB,IAAI,wBAAwB,EAC7C,gBAAgB,IAAI,qBAAqB,GAG1C,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC"}
|