qati-sdk 1.0.2 → 1.0.3
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/index.cjs +259 -151
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +259 -151
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/common/exceptions.ts","../src/config.ts","../src/http/helpers.ts","../src/shared/utils/http-error-to-sdk-exception.ts","../src/http/http-client.ts","../src/shared/utils/date.utils.ts","../src/resources/advisory-resource.ts","../src/shared/utils/mutext.utils.ts","../src/shared/buffering/types.ts","../src/shared/buffering/auto-flush-batch-buffer.ts","../src/resources/event-resource.ts","../src/resources/explain-resource.ts","../src/resources/tenant-resource.ts","../src/resources/trust-state-resource.ts","../src/client/client.ts","../src/session.ts","../src/v1/schemas/_helpers.ts","../src/shared/types/signal-type.ts","../src/shared/types/provenance-mode.ts","../src/v1/schemas/provenance.ts","../src/v1/schemas/integrity.ts","../src/v1/schemas/event-principal.ts","../src/v1/schemas/raw-event.ts","../src/v1/schemas/anomaly-flag.ts","../src/v1/builders/_common.ts","../src/v1/builders/anomaly-flag-builder.ts","../src/shared/types/http-method.ts","../src/v1/schemas/api-call.ts","../src/v1/builders/api-call-builder.ts","../src/v1/schemas/auth.ts","../src/v1/builders/auth-builder.ts","../src/v1/schemas/behavior.ts","../src/v1/builders/behavior-builder.ts","../src/shared/types/context-integrity.ts","../src/v1/schemas/context-integrity.ts","../src/v1/builders/context-integrity-builder.ts","../src/v1/schemas/model-output.ts","../src/v1/builders/model-output-builder.ts","../src/v1/schemas/network-event.ts","../src/v1/builders/network-builder.ts","../src/shared/types/policy-event.ts","../src/v1/schemas/policy-event.ts","../src/v1/builders/policy-event-builder.ts","../src/v1/schemas/prompt-input.ts","../src/v1/builders/prompt-input-builder.ts","../src/v1/schemas/rag-retrieval.ts","../src/v1/builders/rag-retrieval-builder.ts","../src/shared/types/session.ts","../src/v1/schemas/session.ts","../src/v1/builders/session-builder.ts","../src/v1/schemas/system-telemetry.ts","../src/v1/builders/system-telemetry-builder.ts","../src/shared/types/tool-call.ts","../src/v1/schemas/tool-call.ts","../src/v1/builders/tool-call-builder.ts","../src/v1/schemas/transaction.ts","../src/v1/builders/transaction-builder.ts","../src/shared/types/user-feedback.ts","../src/v1/schemas/user-feedback.ts","../src/v1/builders/user-feedback-builder.ts","../src/shared/types/workflow-action.ts","../src/v1/schemas/workflow-action.ts","../src/v1/builders/workflow-action-builder.ts"],"names":["loadDotEnv","axios","z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Structured error detail parsed from failed QATI HTTP responses (and synthetic transport failures).\n */\nexport interface APIErrorDetail {\n readonly status_code: number;\n readonly message: string;\n readonly request_id: string | null;\n}\n\n/**\n * Base class for every error raised by this SDK (configuration, transport, and API errors).\n *\n * @param message - Human-readable description.\n * @param options - Optional `cause` and other `Error` options.\n */\nexport class QatiSDKError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'QatiSDKError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Generic API or transport failure with structured {@link APIErrorDetail}.\n * Prefer catching specific subclasses when handling status codes.\n *\n * @param detail - Parsed status, message, and request id.\n */\nexport class QatiAPIError extends QatiSDKError {\n readonly detail: APIErrorDetail;\n\n constructor(detail: APIErrorDetail) {\n super(\n `HTTP ${detail.status_code}: ${detail.message} (request_id=${detail.request_id})`,\n );\n this.name = 'QatiAPIError';\n this.detail = detail;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * @returns Same as `detail.status_code`.\n */\n get status_code(): number {\n return this.detail.status_code;\n }\n\n /**\n * @returns Same as `detail.request_id`.\n */\n get request_id(): string | null {\n return this.detail.request_id;\n }\n}\n\n/** Thrown for HTTP `401` / `403` — invalid, expired, or missing tenant API key. */\nexport class QatiAuthError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiAuthError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown for HTTP `404` — entity, explain payload, or route target does not exist. */\nexport class QatiNotFoundError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiNotFoundError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown for HTTP `429` — rate limited; safe to retry with backoff. */\nexport class QatiRateLimitError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiRateLimitError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown for HTTP `5xx` — server-side failure; retry may succeed after backoff. */\nexport class QatiServerError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiServerError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Raised when configuration or client setup is invalid (unknown API name, bad URL, Zod parse failure, …).\n *\n * @param message - Validation or resolution error text.\n */\nexport class QatiConfigError extends QatiSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'QatiConfigError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { config as loadDotEnv } from 'dotenv';\nimport { z } from 'zod';\n\nimport { QatiConfigError } from '@shared/common/exceptions';\n\n/**\n * Environment variable names read by {@link resolveQatiConfig} before merging explicit input.\n * Values are merged as raw keys; prefer {@link parseQatiConfig} with a camelCase object for tests.\n */\nconst EV_VARIABLES_NAMES = [\n 'QATI_TENANT_API_KEY',\n 'QATI_QUERY_API_BASE_URL',\n 'QATI_INGESTION_API_BASE_URL',\n 'QATI_TIMEOUT',\n 'QATI_MAX_RETRIES',\n 'QATI_INGESTION_BATCH_SIZE',\n 'QATI_INGESTION_FLUSH_INTERVAL_SECONDS',\n 'QATI_RETRY_BACKOFF_INITIAL_SECONDS',\n 'QATI_RETRY_BACKOFF_MAX_SECONDS',\n 'QATI_RETRY_JITTER_FRACTION',\n 'QATI_MAX_RETRIES',\n] as const;\n\n/**\n * Maps logical API names (used by {@link HttpClient}) to resolved config fields.\n *\n * @example\n * ```ts\n * const url = baseUrlFor(config, 'query_api');\n * ```\n */\nexport const API_REGISTRY: Readonly<Record<string, keyof QatiConfigOutput>> = {\n query_api: 'queryApiBaseUrl',\n ingestion_api: 'ingestionApiBaseUrl',\n};\n\n/**\n * Validated SDK configuration shape (camelCase).\n *\n * **Constraints** (Zod): `tenantApiKey` non-empty string; `queryApiBaseUrl` and\n * `ingestionApiBaseUrl` required URLs (no defaults); `timeout` ≥ 1 second;\n * `ingestionBatchSize` integer ≥ 1; `ingestionFlushIntervalSeconds` > 0;\n * `maxRetries` integer 1–10; retry backoff fields non-negative integers.\n *\n * **Defaults** when optional fields are omitted: `timeout` `30`, `ingestionBatchSize` `100`,\n * `ingestionFlushIntervalSeconds` `5`, `retryBackoffInitialSeconds` `1`,\n * `retryBackoffMaxSeconds` `30`, `retryJitterFraction` `0.1`, `maxRetries` `3`.\n */\nconst QatiConfigBase = z.object({\n tenantApiKey: z.string().min(1),\n queryApiBaseUrl: z.string().url(),\n ingestionApiBaseUrl: z.string().url(),\n timeout: z.number().min(1).optional().default(30),\n ingestionBatchSize: z.number().int().min(1).optional().default(100),\n ingestionFlushIntervalSeconds: z.number().positive().optional().default(5),\n // Retry fields\n retryBackoffInitialSeconds: z.number().nonnegative().optional().default(1),\n retryBackoffMaxSeconds: z.number().nonnegative().optional().default(30),\n retryJitterFraction: z.number().min(0).max(1).optional().default(0.1),\n maxRetries: z.number().int().min(1).max(10).optional().default(3),\n});\n\n/** Input to {@link resolveQatiConfig} / {@link parseQatiConfig} before defaults and coercion (Zod input type). */\nexport type QatiConfigInput = z.input<typeof QatiConfigBase>;\n\n/** Fully resolved, validated configuration returned by {@link resolveQatiConfig} and {@link Session#config}. */\nexport type QatiConfigOutput = z.output<typeof QatiConfigBase>;\n\nconst stripUndefined = <T extends Record<string, unknown>>(\n obj: T,\n): Partial<T> => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, v]) => v !== undefined),\n ) as Partial<T>;\n};\n\nconst readEnvOverrides = (): Partial<QatiConfigInput> => {\n const e = process.env;\n const sanitizedEnvs = EV_VARIABLES_NAMES.reduce(\n (acc, ev) => {\n acc[ev] = e[ev];\n return acc;\n },\n {} as Record<string, string | undefined>,\n );\n return sanitizedEnvs;\n};\n\n/**\n * Resolves SDK configuration: loads `.env` from the working directory, merges `QATI_*` env reads\n * (into camelCase), then explicit `input` (explicit fields win). Validates with Zod and applies\n * defaults for optional fields only (not base URLs).\n *\n * @param input - Optional partial overrides (camelCase). Omitted keys fall back to `process.env` then Zod defaults\n * for optional fields only (base URLs must come from env or this object).\n * @returns Validated {@link QatiConfigOutput}.\n * @throws {@link QatiConfigError} When validation fails.\n * @example\n * ```ts\n * const config = resolveQatiConfig({\n * tenantApiKey: process.env.QATI_TENANT_API_KEY!,\n * queryApiBaseUrl: 'http://localhost:8001',\n * ingestionApiBaseUrl: 'http://localhost:8000',\n * });\n * ```\n */\nexport const resolveQatiConfig = (\n input?: Partial<QatiConfigInput>,\n): QatiConfigOutput => {\n loadDotEnv({ path: '.env' });\n\n const merged = {\n ...readEnvOverrides(),\n ...stripUndefined(input ?? {}),\n };\n\n const parsed = QatiConfigBase.safeParse(merged);\n if (!parsed.success) {\n const msg = parsed.error.flatten().fieldErrors;\n throw new QatiConfigError(\n `Invalid QATI SDK configuration: ${JSON.stringify(msg)}`,\n );\n }\n return parsed.data;\n};\n\n/**\n * Validates a config object only (no `.env` load, no process env merge). Use in unit tests or when\n * configuration is already assembled in memory.\n *\n * @param input - Full or partial config; must include required fields (`tenantApiKey`, both base URLs) or\n * combine with Zod defaults only for optional numeric/batch fields.\n * @returns Validated {@link QatiConfigOutput}.\n * @throws {@link QatiConfigError} When validation fails.\n */\nexport const parseQatiConfig = (\n input: z.input<typeof QatiConfigBase>,\n): QatiConfigOutput => {\n const parsed = QatiConfigBase.safeParse(input);\n if (!parsed.success) {\n throw new QatiConfigError(\n `Invalid QATI SDK configuration: ${JSON.stringify(parsed.error.flatten().fieldErrors)}`,\n );\n }\n return parsed.data;\n};\n\n/**\n * Returns the normalized base URL (no trailing slash) for a logical API registered in {@link API_REGISTRY}.\n *\n * @param config - Resolved SDK configuration.\n * @param apiName - Logical name: `query_api` or `ingestion_api`.\n * @returns Absolute base URL string without a trailing `/`.\n * @throws {@link QatiConfigError} If `apiName` is unknown or the mapped URL field is missing.\n * @example\n * ```ts\n * const base = baseUrlFor(session.config, 'ingestion_api');\n * ```\n */\nexport const baseUrlFor = (\n config: QatiConfigOutput,\n apiName: string,\n): string => {\n if (!(apiName in API_REGISTRY))\n throw new QatiConfigError(\n `Unknown API \"${apiName}\". Registered APIs: ${Object.keys(API_REGISTRY)\n .map((k) => `\"${k}\"`)\n .join(', ')}.`,\n );\n\n const field = API_REGISTRY[apiName as keyof typeof API_REGISTRY];\n const url = config[field];\n\n if (typeof url !== 'string')\n throw new QatiConfigError(`Missing base URL field for API \"${apiName}\"`);\n\n return url.replace(/\\/$/, '');\n};\n","import axios from 'axios';\nimport { API_REGISTRY, type QatiConfigOutput } from '../config';\nimport type { AxiosInstances } from './http-client';\nimport { QatiConfigError } from '@shared/common/exceptions';\n\n/**\n * Called once after retries are exhausted for a retried request (`options.retry` was `true`).\n * Use for logging, DLQ, or metrics; must not throw (errors are swallowed and logged).\n *\n * @param payload - The JSON/body that was sent (same as `options.json ?? options.data`).\n * @param error - The SDK error instance thrown to the caller (typically `QatiAPIError`).\n */\nexport type DeadLetterCallback = (payload: unknown, error: unknown) => void;\n\nexport const isRetryableStatusCode = (statusCode: number): boolean =>\n statusCode === 429 || statusCode >= 500;\n\nexport const defaultHeaders = (\n config: QatiConfigOutput,\n): Record<string, string> => ({\n 'x-tenant-api-key': config.tenantApiKey,\n 'Content-Type': 'application/json',\n});\n\nexport const resolveRequestHeaders = (\n config: QatiConfigOutput,\n headers: Record<string, string> = {},\n extraHeaders: Record<string, string> = {},\n): Record<string, string> => {\n return { ...headers, ...defaultHeaders(config), ...extraHeaders };\n};\n\n/**\n * Exponential backoff with jitter, capped by `retryBackoffMaxSeconds`.\n *\n * @param attemptNumber - 1-based attempt index after a failure (first retry uses `1`).\n * @param config - Uses `retryBackoffInitialSeconds`, `retryBackoffMaxSeconds`, `retryJitterFraction`.\n * @returns Sleep duration in milliseconds before the next retry.\n */\nexport const computeBackoffMs = (\n attemptNumber: number,\n config: QatiConfigOutput,\n): number => {\n const {\n retryBackoffInitialSeconds,\n retryBackoffMaxSeconds,\n retryJitterFraction,\n } = config;\n const expBase = 2;\n const rawDelay = retryBackoffInitialSeconds * expBase ** (attemptNumber - 1);\n const base = Math.min(rawDelay, retryBackoffMaxSeconds);\n\n const jitterFactor =\n 1 + (Math.random() * 2 * retryJitterFraction - retryJitterFraction);\n const delayMs = Math.max(\n 0,\n Math.min(base * jitterFactor, retryBackoffMaxSeconds),\n );\n return delayMs * 1000;\n};\n\nexport const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nexport const isRetryableAxiosFailure = (err: unknown): boolean => {\n if (!axios.isAxiosError(err)) return false;\n if (!err.response) return true;\n return isRetryableStatusCode(err.response.status);\n};\n\nexport const validateInjectedApiNames = (instances?: AxiosInstances) => {\n if (!instances) return;\n\n const unknownApiNames = Object.keys(instances).filter(\n (name) => !(name in API_REGISTRY),\n );\n\n if (unknownApiNames?.length) {\n const badApiNames = unknownApiNames.map((name) => `\"${name}\"`).join(', ');\n throw new QatiConfigError(`Unknown API name(s): ${badApiNames}`);\n }\n};\n","import axios, { type AxiosResponse } from 'axios';\n\nimport type { APIErrorDetail } from '@shared/common/exceptions';\nimport {\n QatiAPIError,\n QatiAuthError,\n QatiNotFoundError,\n QatiRateLimitError,\n QatiServerError,\n} from '../common/exceptions';\n\n/**\n * Maps select HTTP status codes to typed SDK errors; unmapped `4xx` fall back to `QatiAPIError`, `5xx` to `QatiServerError`.\n */\nexport const STATUS_ERROR_MAP: Partial<\n Record<number, new (detail: APIErrorDetail) => QatiAPIError>\n> = {\n 401: QatiAuthError,\n 403: QatiAuthError,\n 404: QatiNotFoundError,\n 429: QatiRateLimitError,\n 500: QatiServerError,\n};\n\n/**\n * Extracts `status_code`, best-effort `message` body, and `x-request-id` from an `AxiosResponse`.\n *\n * @param response - Axios response (typically `error.response`).\n */\nexport const parseDetail = (response: AxiosResponse): APIErrorDetail => {\n const { headers, status, statusText, data } = response;\n const requestId = headers['x-request-id'] ?? headers['X-Request-Id'];\n\n let message = statusText ?? '';\n try {\n const body = data as Record<string, unknown> | string;\n if (typeof body === 'object') {\n const msg = body.detail || body.message;\n message = typeof msg === 'string' ? msg : JSON.stringify(msg);\n }\n } catch {\n message = statusText;\n }\n\n return {\n status_code: status,\n message,\n request_id: requestId,\n };\n};\n\n/**\n * Maps an Axios failure to a `QatiAPIError` (or subclass) for the caller to throw.\n *\n * @param err - Must be an `AxiosError`; otherwise a `TypeError` is thrown.\n * @returns `QatiAPIError` with HTTP `status_code` when `err.response` exists; otherwise `status_code: 0` transport error.\n * @throws `TypeError` when `err` is not Axios-shaped.\n */\nexport const qatiApiErrorFromRequestFailure = (err: unknown): QatiAPIError => {\n if (axios.isAxiosError(err)) {\n const ax = err;\n if (ax.response) {\n const resp = ax.response;\n const ErrorCls =\n STATUS_ERROR_MAP[resp.status] ??\n (resp.status >= 500 ? QatiServerError : QatiAPIError);\n return new ErrorCls(parseDetail(resp));\n }\n return new QatiAPIError({\n status_code: 0,\n message: ax.message || String(ax.code ?? 'Axios request error'),\n request_id: null,\n });\n }\n throw new TypeError(`Expected Axios error, got ${typeof err}`);\n};\n","import axios, {\n AxiosError,\n type AxiosInstance,\n type AxiosRequestConfig,\n type AxiosResponse,\n type Method,\n} from 'axios';\n\nimport { API_REGISTRY, baseUrlFor, type QatiConfigOutput } from '../config';\nimport { QatiConfigError } from '@shared/common/exceptions';\nimport {\n computeBackoffMs,\n defaultHeaders,\n isRetryableAxiosFailure,\n isRetryableStatusCode,\n resolveRequestHeaders,\n sleep,\n validateInjectedApiNames,\n type DeadLetterCallback,\n} from './helpers';\nimport { qatiApiErrorFromRequestFailure } from '@shared/utils/http-error-to-sdk-exception';\nimport type { ApiResponse } from '@shared/types/api-response';\n\ntype RegisteredApiName = keyof typeof API_REGISTRY;\nexport type AxiosInstances = Partial<Record<RegisteredApiName, AxiosInstance>>;\n\ntype RequestOptions = {\n api_name: RegisteredApiName;\n deadLetterCallback?: DeadLetterCallback;\n params?: Record<string, string | number | boolean | undefined | null>;\n headers?: Record<string, string>;\n extraHeaders?: Record<string, string>;\n retry?: boolean;\n /** JSON request body (serialized by axios). Separate from response type param {@link HttpClient.request}. */\n data?: unknown;\n};\n\n/**\n * Low-level HTTP layer: one `axios` instance per registered API, tenant header injection, and optional retries.\n * Prefer the exported `Client` class for application code.\n */\nexport class HttpClient {\n private readonly _config: QatiConfigOutput;\n private readonly _httpClients: Map<RegisteredApiName, AxiosInstance>;\n\n constructor(config: QatiConfigOutput, axiosInstances: AxiosInstances = {}) {\n validateInjectedApiNames(axiosInstances);\n this._config = config;\n this._httpClients = new Map<RegisteredApiName, AxiosInstance>();\n\n for (const apiName of Object.keys(API_REGISTRY)) {\n const existingApiInstance = axiosInstances[apiName];\n if (existingApiInstance) {\n this._httpClients.set(apiName, existingApiInstance);\n continue;\n }\n const apiInstance = this.createClient(apiName);\n this._httpClients.set(apiName, apiInstance);\n }\n }\n\n private createClient(apiName: RegisteredApiName): AxiosInstance {\n const baseURL = baseUrlFor(this._config, apiName);\n return axios.create({\n baseURL,\n timeout: this._config.timeout * 1000,\n headers: defaultHeaders(this._config),\n });\n }\n\n /**\n * @returns The same configuration used to build base URLs, timeouts, and default headers.\n */\n get config(): QatiConfigOutput {\n return this._config;\n }\n\n /**\n * Returns the underlying `axios` instance for a logical API.\n *\n * @param apiName - `query_api` or `ingestion_api`.\n * @returns Configured `AxiosInstance` for that API.\n * @throws {@link QatiConfigError} If the internal client map has no entry for `apiName`.\n */\n getClient(apiName: RegisteredApiName): AxiosInstance {\n const instance = this._httpClients.get(apiName);\n if (!instance)\n throw new QatiConfigError(`Unknown HTTP client for API \"${apiName}\"`);\n\n return instance;\n }\n\n /**\n * Performs one HTTP request and returns the **unwrapped** `data` field from the QATI `{ data: T }` envelope.\n *\n * @typeParam T - Response payload type inside the API envelope.\n * @param method - HTTP verb (e.g. `GET`, `POST`).\n * @param url - Path relative to the API base URL (may include query string; prefer `options.params` for queries).\n * @param options - `api_name` selects which base URL and client to use. Set `retry: true` to retry transient failures.\n * @returns Parsed `T` from `response.data.data` (not the full `ApiResponse` wrapper).\n * @throws `QatiAPIError` or subclasses (`QatiAuthError`, `QatiNotFoundError`, …) on HTTP failures; on transport exhaustion when `retry` is `true`, after optional dead-letter callback.\n *\n * When `options.retry` is `true`, retries `429`, `5xx`, and transport errors up to `maxRetries` from config;\n * other `4xx` are not retried. When `retry` is `false` or omitted, a single attempt is made.\n */\n async request<T>(\n method: Method,\n url: string,\n options: RequestOptions,\n ): Promise<T> {\n const instance = this.getClient(options.api_name);\n\n const resolvedHeaders = resolveRequestHeaders(\n this._config,\n options.headers,\n options.extraHeaders,\n );\n\n const req: AxiosRequestConfig = {\n method,\n url,\n params: options.params ?? undefined,\n headers: resolvedHeaders,\n data: options.data,\n };\n\n if (!options.retry) {\n const { data } = await instance.request<ApiResponse<T>>(req);\n return data.data;\n }\n\n const response = await this.retryRequest<ApiResponse<T>>(\n () => instance.request<ApiResponse<T>>(req),\n options,\n );\n return response.data.data;\n }\n\n private async retryRequest<T>(\n requestFn: () => Promise<AxiosResponse<T>>,\n options: RequestOptions,\n ): Promise<AxiosResponse<T>> {\n for (let attempt = 0; attempt <= this._config.maxRetries; attempt++) {\n try {\n const response = await requestFn();\n\n if (!isRetryableStatusCode(response.status)) return response;\n\n if (attempt >= this._config.maxRetries) {\n throw new AxiosError(\n `Retryable HTTP ${response.status}`,\n String(response.status),\n response.config,\n undefined,\n response,\n );\n }\n await sleep(computeBackoffMs(attempt + 1, this._config));\n } catch (err) {\n const shouldRetry =\n isRetryableAxiosFailure(err) && attempt < this._config.maxRetries;\n\n if (shouldRetry) {\n await sleep(computeBackoffMs(attempt + 1, this._config));\n continue;\n }\n const error = qatiApiErrorFromRequestFailure(err);\n options.deadLetterCallback?.(options.data, error);\n throw error;\n }\n }\n throw new QatiConfigError('Unreachable retry exhaustion');\n }\n}\n","/**\n * Converts `Date` or ISO string inputs to a string suitable for Query API query params.\n *\n * @param value - `Date`, ISO-8601 string, or `undefined` / omitted.\n * @returns ISO string, or `undefined` when `value` is omitted/falsy (param omitted on the wire).\n */\nexport function dateToIso8601(value?: Date | string): string | undefined {\n if (!value) return;\n if (value instanceof Date) return value.toISOString();\n return value;\n}\n","import type { HttpClient } from '@http/http-client';\nimport type { AdvisoryType } from '@shared/types/advisory-type';\nimport type { AdvisorySeverity } from '@shared/types/advisory-severity';\nimport type { AdvisoryListResponse } from '@shared/types/advisory';\nimport { dateToIso8601 } from '@shared/utils/date.utils';\n\n/**\n * Optional filters and pagination for {@link AdvisoryResource#listAdvisories}.\n *\n * **Constraints:** `limit` is forwarded to the API and should not exceed 500 unless the server contract changes.\n */\nexport type ListAdvisoriesOptions = {\n /**\n * Maximum rows to return (server may cap). Prefer ≤ 500.\n * @default When omitted, the API default applies.\n */\n limit?: number;\n /**\n * Zero-based row offset for pagination.\n * @default When omitted, the API default applies.\n */\n offset?: number;\n /**\n * Inclusive lower bound on `triggered_at` (ISO-8601 string or `Date`).\n */\n since?: Date | string;\n /**\n * Inclusive upper bound on `triggered_at` (ISO-8601 string or `Date`).\n */\n until?: Date | string;\n};\n\n/**\n * Query API: list persisted advisories for a tenant-scoped entity.\n */\nexport class AdvisoryResource {\n private readonly apiName = 'query_api';\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Lists persisted advisories for the tenant (`GET /v1/advisories`).\n *\n * @param entityKey - Scoped entity key: uppercase type, colon, opaque id (e.g. `USER:20`). Must match server expectations for entity keys.\n * @param advisoryType - Filter by advisory `type` (see {@link AdvisoryType}).\n * @param severity - Filter by `severity` tier (see {@link AdvisorySeverity}).\n * @param options - Optional time range and pagination ({@link ListAdvisoriesOptions}).\n * @returns: {@link AdvisoryListResponse} including `total_count`, `limit`, and `offset` echo from the API.\n * ```\n */\n async listAdvisories(\n entityKey: string,\n advisoryType: AdvisoryType,\n severity: AdvisorySeverity,\n options?: ListAdvisoriesOptions,\n ): Promise<AdvisoryListResponse> {\n return this._http.request<AdvisoryListResponse>('GET', '/v1/advisories', {\n api_name: this.apiName,\n params: {\n severity,\n entity_key: entityKey,\n advisory_type: advisoryType,\n since: options?.since ? dateToIso8601(options.since) : undefined,\n until: options?.until ? dateToIso8601(options.until) : undefined,\n limit: options?.limit,\n offset: options?.offset,\n },\n });\n }\n}\n","/**\n * Async mutex callback: serializes `async` work so only one `fn` runs at a time (FIFO chain).\n */\nexport type MutexCallback = <T>(fn: () => Promise<T>) => Promise<T>;\n\n/**\n * Creates a lightweight async mutex (promise chain), not an OS thread lock.\n *\n * @returns A function that queues `fn` executions strictly one-after-another.\n */\nexport const createMutex = (): MutexCallback => {\n let tail: Promise<void> = Promise.resolve();\n\n return async <T>(fn: () => Promise<T>): Promise<T> => {\n const result = tail.then(() => fn());\n\n tail = result.then(\n () => {},\n () => {},\n );\n\n return result;\n };\n};\n","import { z } from 'zod';\n\nexport type FlushBatchFn<InputType, OutputType> = (\n batch: InputType[],\n) => Promise<OutputType>;\n\nexport type PendingTimer = {\n sequence: number;\n handleTimer: ReturnType<typeof setTimeout>;\n};\n\nexport const BatchBufferOptionsSchema = z.object({\n batchSize: z.number().int().min(1).default(100),\n flushIntervalSeconds: z.number().min(0).default(5),\n});\n\nexport type BatchBufferOptions = z.input<typeof BatchBufferOptionsSchema>;\n\nexport type SDKQueueEventStatus = 'queued';\n","import { createMutex } from '@shared/utils/mutext.utils';\n\nimport type {\n BatchBufferOptions,\n FlushBatchFn,\n PendingTimer,\n SDKQueueEventStatus,\n} from './types';\nimport { BatchBufferOptionsSchema } from './types';\n\nexport class AutoFlushBatchBuffer<InputType, OutputType> {\n /**\n * Serializes buffer/timer mutations so enqueue, flush, and timer fire never overlap.\n */\n private readonly runExclusive = createMutex();\n\n private readonly queue: InputType[] = [];\n\n private readonly flushBatch: FlushBatchFn<InputType, OutputType>;\n private readonly batchSize: number;\n\n private readonly flushIntervalMs: number;\n\n private pendingTimer: PendingTimer | null = null;\n private timerSequence = 0;\n\n constructor(\n flushBatch: FlushBatchFn<InputType, OutputType>,\n options: BatchBufferOptions,\n ) {\n this.flushBatch = flushBatch;\n const validatedOptions = BatchBufferOptionsSchema.parse(options);\n\n this.batchSize = validatedOptions.batchSize;\n this.flushIntervalMs = validatedOptions.flushIntervalSeconds * 1000;\n }\n\n async enqueue(item: InputType): Promise<SDKQueueEventStatus> {\n let batchToFlush: InputType[] = [];\n\n await this.runExclusive(async () => {\n this.queue.push(item);\n\n if (this.queue.length >= this.batchSize) {\n this.cancelTimer();\n batchToFlush = this.getItemsToSend();\n }\n if (this.queue.length === 1) this.scheduleTimer();\n });\n\n if (batchToFlush.length)\n await this.executeFlush(batchToFlush).catch(() => {});\n\n return 'queued';\n }\n\n /**\n * Flush all buffered items immediately.\n * @returns The return value of {@link flushBatch}, or `{}` if the buffer was empty.\n */\n async flush(): Promise<OutputType> {\n let batch: InputType[] = [];\n await this.runExclusive(async () => {\n this.cancelTimer();\n batch = this.getItemsToSend();\n });\n if (!batch.length) return {} as OutputType;\n return this.executeFlush(batch);\n }\n\n /**\n * Best-effort flush for shutdown; logs and drops items on failure.\n */\n async shutdown(): Promise<void> {\n let batch: InputType[] = [];\n await this.runExclusive(async () => {\n this.cancelTimer();\n batch = this.getItemsToSend();\n });\n\n if (!batch.length) return;\n await this.executeFlush(batch).catch(() => {});\n }\n\n /**\n * The number of items currently in the buffer.\n */\n get pendingCount(): number {\n return this.queue.length;\n }\n\n private getItemsToSend(): InputType[] {\n if (!this.queue.length) return [];\n return this.queue.splice(0, this.queue.length);\n }\n\n private cancelTimer(): void {\n if (!this.pendingTimer) return;\n\n clearTimeout(this.pendingTimer.handleTimer);\n this.pendingTimer = null;\n }\n\n private scheduleTimer(): void {\n this.cancelTimer();\n const seq = ++this.timerSequence;\n const handleTimer = setTimeout(\n () => this.timerFire(seq),\n this.flushIntervalMs,\n );\n this.pendingTimer = { sequence: seq, handleTimer };\n }\n\n private async timerFire(seq: number): Promise<void> {\n let batch: InputType[] = [];\n\n await this.runExclusive(async () => {\n if (this.pendingTimer?.sequence !== seq) return;\n this.pendingTimer = null;\n batch = this.getItemsToSend();\n });\n\n if (!batch.length) return;\n await this.executeFlush(batch).catch(() => {});\n }\n\n private async executeFlush(batch: InputType[]): Promise<OutputType> {\n const result = await this.flushBatch(batch);\n return result ?? ({} as OutputType);\n }\n}\n","// resources/event-resource.ts\n\nimport type { DeadLetterCallback } from '@http/helpers';\nimport type { HttpClient } from '@http/http-client';\nimport type { BatchEventResponse } from 'index';\nimport { AutoFlushBatchBuffer } from '@shared/buffering/auto-flush-batch-buffer';\nimport type { RawEventRequest } from '@v1/schemas/raw-event';\nimport type { SDKQueueEventStatus } from '@shared/buffering/types';\n\n/**\n * Overrides for the in-memory ingestion buffer (defaults otherwise come from: {@link HttpClient}'s\n * resolved config: `ingestionBatchSize`, `ingestionFlushIntervalSeconds`).\n */\nexport type EventResourceOptions = {\n /**\n * Max events to hold before an automatic flush to `POST /v1/events:batch` (must be integer ≥ 1).\n */\n batchSize?: number;\n /**\n * Max seconds to wait after the first queued event before flushing a non-empty partial batch (must be ≥ 0 per buffer schema).\n */\n flushIntervalSeconds?: number;\n};\n\n/**\n * **Append-only ingestion path**: queues {@link RawEventRequest} rows locally and ships them in batches to `POST /v1/events:batch`,\n * keeping the hot path non-blocking in your service. The platform persists telemetry for downstream scoring;\n * this client does **not** enforce policies or block traffic.\n *\n * Flushes happen when the buffer hits **N** events or **T** seconds pass since the first queued item (whichever comes first).\n * Failed batches retry with backoff + jitter; after exhaustion an optional dead-letter callback can persist or alert without crashing the producer’s enqueue loop.\n */\nexport class EventResource {\n private readonly _http: HttpClient;\n private readonly _buffer: AutoFlushBatchBuffer<\n RawEventRequest,\n BatchEventResponse\n >;\n private readonly apiName = 'ingestion_api';\n private _deadLetterCallback?: DeadLetterCallback;\n\n /**\n * @param http - Shared HTTP client (supplies config defaults and axios instance for `ingestion_api`).\n * @param options - Optional buffer sizing overrides ({@link EventResourceOptions}).\n */\n constructor(http: HttpClient, options: EventResourceOptions = {}) {\n this._http = http;\n this._buffer = new AutoFlushBatchBuffer<\n RawEventRequest,\n BatchEventResponse\n >((batch) => this.postBatch(batch), {\n batchSize: options.batchSize ?? http.config.ingestionBatchSize,\n flushIntervalSeconds:\n options.flushIntervalSeconds ??\n http.config.ingestionFlushIntervalSeconds,\n });\n }\n\n /**\n * Registers a hook invoked after retries are exhausted for a failed batch POST so you can land failures on a DLQ or metric pipeline. Must stay non-throwing — swallow errors inside your handler.\n */\n onIngestionFailure(callback: DeadLetterCallback): this {\n this._deadLetterCallback = callback;\n return this;\n }\n\n /**\n * Accepts one normalized event into the in-memory buffer and returns immediately with **`queued`** — HTTP happens on flush timers or explicit `flush`, not inline with `enqueue`.\n */\n async enqueue(event: RawEventRequest): Promise<SDKQueueEventStatus> {\n return await this._buffer.enqueue(event);\n }\n\n /**\n * Sends whatever is buffered **now** as one ingestion batch (or resolves immediately with an empty-shaped result when nothing was pending).\n */\n async flush(): Promise<BatchEventResponse> {\n return this._buffer.flush();\n }\n\n /**\n * Best-effort final flush then tears down timers — typically reached via `Client.close()` during graceful shutdown so late telemetry is not dropped on SIGTERM.\n */\n async shutdown(): Promise<void> {\n await this._buffer.shutdown();\n }\n\n /**\n * Live count of rows waiting in the in-memory buffer (not yet acknowledged by the ingestion API).\n */\n get pendingCount(): number {\n return this._buffer.pendingCount;\n }\n\n private async postBatch(\n batch: RawEventRequest[],\n ): Promise<BatchEventResponse> {\n return this._http.request<BatchEventResponse>('POST', '/v1/events:batch', {\n api_name: this.apiName,\n data: { events: batch },\n retry: true,\n deadLetterCallback: this._deadLetterCallback,\n });\n }\n}\n","import type { ExplainResponse } from '@schemas/explain';\nimport type { HttpClient } from '@http/http-client';\nimport { dateToIso8601 } from '@shared/utils/date.utils';\n\n/**\n * Query API: composite explain / attribution snapshot for one entity.\n */\nexport class ExplainResource {\n private readonly apiName = 'query_api' as const;\n\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Fetches composite explain for one entity (`GET /v1/explain/{entity_key}`).\n *\n * @param entityKey - URL-encoded path segment: uppercase entity type, colon, id (e.g. `USER:user-123`). Must not contain raw `/` (caller passes logical key; SDK encodes for HTTP).\n * @param atTimestamp - Optional “as of” time (`Date` or ISO-8601 string). Omitted means server default (typically “now”).\n * @param topDominantNeighbors - Optional cap on dominant neighbor rows returned.\n * @param topEvents - Optional cap on top contributing events returned.\n * @returns {@link ExplainResponse} (closure score, risk tier, top events, neighbours, active advisories).\n * @example\n * ```ts\n * const x = await client.explain.get('USER:alice', new Date(), 5, 10);\n * ```\n */\n async get(\n entityKey: string,\n atTimestamp?: Date | string,\n topDominantNeighbors?: number,\n topEvents?: number,\n ): Promise<ExplainResponse> {\n return await this._http.request<ExplainResponse>(\n 'GET',\n `/v1/explain/${encodeURIComponent(entityKey)}`,\n {\n api_name: this.apiName,\n params: {\n at_timestamp: dateToIso8601(atTimestamp),\n top_dominant_neighbors: topDominantNeighbors,\n top_events: topEvents,\n },\n },\n );\n }\n}\n","import type { HttpClient } from '@http/http-client';\nimport type { VerifyCredentialsResponse } from '@shared/types/tenant';\n\n/**\n * Validates that the configured API key is valid.\n * Use at process startup so misconfigured keys fail fast before trust-state or ingestion traffic.\n */\nexport class TenantResource {\n private readonly apiName = 'query_api' as const;\n\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Confirms whether the **`x-tenant-api-key`** presented by this client is accepted by the platform and returns the opaqu\n * e **tenant partition id** bound to that key.\n * Use at process startup so misconfigured keys fail fast before trust-state or explain traffic.\n *\n * @returns: {@link VerifyCredentialsResponse}\n */\n async verifyCredentials(): Promise<VerifyCredentialsResponse> {\n return this._http.request<VerifyCredentialsResponse>(\n 'GET',\n '/v1/tenants/verify-credentials',\n { api_name: this.apiName },\n );\n }\n}\n","import type { HttpClient } from '@http/http-client';\nimport type { EntityTypeLowerCase } from '@shared/types/entity-type';\nimport type { TrustState } from '@shared/types/trust-state';\n\n/**\n * Optional tuning for top-contributor lists.\n */\nexport type TrustStateOptions = {\n /**\n * How many contributor rows to return per entity. Default: 5.\n */\n topContributorsLimit?: number;\n /**\n * Rolling window length (minutes) used to rank contributors. Default: 1440 (24 hours).\n */\n topContributorsWindowMinutes?: number;\n};\n\n/**\n * Reads **materialized trust snapshots** from the Query API:\n * Closure Score, momentum, risk tier, and recent contributors for principals (users, devices, sessions, models, etc.).\n * This is how applications poll “what does QATI believe about this entity **now**?”; observability only; no blocking or policy execution occurs here.\n */\nexport class TrustStateResource {\n private readonly apiName = 'query_api' as const;\n\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Fetches the latest trust state for one entity.\n *\n * @param entityType - Lowercase entity class (see {@link EntityTypeLowerCase}).\n * @param entityId - Id for the entity(Required)\n * @param options - Optional contributor limits/window.\n * @returns {@link TrustState} including `current_closure_score`, `risk_tier`, and `top_contributors`.\n */\n async getTrustState(\n entityType: EntityTypeLowerCase,\n entityId: string,\n options: TrustStateOptions = {},\n ): Promise<TrustState> {\n return await this._http.request<TrustState>(\n 'GET',\n `/v1/entities/${entityType}/${encodeURIComponent(entityId)}/trust-state`,\n {\n api_name: this.apiName,\n params: {\n top_contributors_limit: options.topContributorsLimit ?? 5,\n top_contributors_window_minutes: options.topContributorsWindowMinutes,\n },\n },\n );\n }\n\n /**\n * Fetches trust states for many entities in one request.\n *\n * @param entityType - Lowercase entity class (see {@link EntityTypeLowerCase}).\n * @param entityIds - Distinct ids to query. Prefer length ≤ 100 or the server may reject the request.\n * @param options - Optional contributor limits/window.\n * @returns Array of {@link TrustState} in server-defined order; empty array when `entityIds` is empty.\n */\n async getTrustStates(\n entityType: EntityTypeLowerCase,\n entityIds: readonly string[],\n options: TrustStateOptions = {},\n ): Promise<TrustState[]> {\n if (!entityIds.length) return [];\n\n return await this._http.request<TrustState[]>('GET', '/v1/trust-states', {\n api_name: this.apiName,\n params: {\n entity_type: entityType,\n entity_ids: entityIds.join(','),\n top_contributors_limit: options.topContributorsLimit ?? 5,\n top_contributors_window_minutes: options.topContributorsWindowMinutes,\n },\n });\n }\n}\n","import type { QatiConfigOutput } from '../config.js';\nimport { HttpClient, type AxiosInstances } from '../http/http-client';\nimport { AdvisoryResource } from '../resources/advisory-resource';\nimport { EventResource } from '../resources/event-resource';\nimport { ExplainResource } from '../resources/explain-resource';\nimport { TenantResource } from '../resources/tenant-resource';\nimport { TrustStateResource } from '../resources/trust-state-resource';\n\n/**\n * High-level QATI API client: namespaces for tenant, trust state, advisories, explain, and batched event ingestion.\n *\n * Construct via {@link Session#createClient}; do not call `new Client(...)` directly unless you already have {@link QatiConfigOutput}.\n *\n * @example\n * ```typescript\n * const session = new Session();\n * const client = session.createClient();\n * const explained = await client.explain.get('USER:user-123');\n * console.log(explained.closure_score);\n * ```\n */\nexport class Client extends HttpClient {\n private readonly _tenant: TenantResource;\n private readonly _trustState: TrustStateResource;\n private readonly _advisory: AdvisoryResource;\n private readonly _explain: ExplainResource;\n private readonly _events: EventResource;\n\n /**\n * @param config - Resolved SDK configuration (typically `session.config`).\n * @param axiosInstances - Optional per-API `axios` instances; see {@link Session#createClient}.\n * @param eventResourceOptions - Optional overrides for buffered ingestion (`onDeadLetter`, batch sizing).\n */\n constructor(config: QatiConfigOutput, axiosInstances?: AxiosInstances) {\n super(config, axiosInstances);\n\n this._tenant = new TenantResource(this);\n this._trustState = new TrustStateResource(this);\n this._advisory = new AdvisoryResource(this);\n this._explain = new ExplainResource(this);\n this._events = new EventResource(this);\n }\n\n /**\n * Tenant API surface (credentials verification).\n *\n * @returns {@link TenantResource} bound to this client’s Query API base URL and tenant key.\n */\n get tenant(): TenantResource {\n return this._tenant;\n }\n\n /**\n * Trust scores and contributors for entities.\n *\n * @returns {@link TrustStateResource} for the Query API.\n */\n get trustState(): TrustStateResource {\n return this._trustState;\n }\n\n /**\n * List persisted advisories for an entity.\n *\n * @returns {@link AdvisoryResource} for the Query API.\n */\n get advisory(): AdvisoryResource {\n return this._advisory;\n }\n\n /**\n * Composite explain / attribution for an entity key.\n *\n * @returns {@link ExplainResource} for the Query API.\n */\n get explain(): ExplainResource {\n return this._explain;\n }\n\n /**\n * Buffered ingestion of `RawEventRequest` payloads to the ingestion API (`POST /v1/events:batch`).\n *\n * @returns {@link EventResource} for the Query API.\n */\n get events(): EventResource {\n return this._events;\n }\n\n /**\n * Flushes the event ingestion buffer (best-effort), then shuts down the batch scheduler.\n * Call this on process shutdown so queued events are not lost.\n *\n * @returns Resolves when {@link EventResource#shutdown} completes.\n */\n async close(): Promise<void> {\n await this._events.shutdown();\n }\n}\n","import {\n resolveQatiConfig,\n type QatiConfigInput,\n type QatiConfigOutput,\n} from './config';\nimport { Client } from './client/client';\nimport type { AxiosInstances } from './http/http-client';\n\n/**\n * Entry point for the SDK: holds resolved {@link QatiConfigOutput} and builds {@link Client} instances.\n *\n * If `config` is omitted, calls {@link resolveQatiConfig} (loads `.env`, merges `QATI_*` env vars into camelCase,\n * applies Zod defaults for optional fields only). **Query and Ingestion base URLs are required** — set\n * `QATI_QUERY_API_BASE_URL` and `QATI_INGESTION_API_BASE_URL` (or pass `queryApiBaseUrl` / `ingestionApiBaseUrl`).\n * **Precedence** (highest first): constructor argument → environment → Zod defaults (not applied to base URLs).\n *\n * @example\n * ```ts\n * const session = new Session({\n * tenantApiKey: 'qati-...',\n * queryApiBaseUrl: 'http://localhost:8001',\n * ingestionApiBaseUrl: 'http://localhost:8000',\n * });\n * const client = session.createClient();\n * await client.tenant.verifyCredentials();\n * ```\n */\nexport class Session {\n private readonly _config: QatiConfigOutput;\n\n constructor(config?: Partial<QatiConfigInput>) {\n this._config = resolveQatiConfig(config);\n }\n\n /**\n * Resolved, validated configuration.\n */\n get config(): QatiConfigOutput {\n return this._config;\n }\n\n /**\n * Creates an API {@link Client} using this session’s resolved config.\n *\n * @param httpClients - Optional injected `axios` instances keyed by `query_api` / `ingestion_api` (testing, proxies, interceptors).\n * @returns A new {@link Client} (not a singleton).\n * @example\n * ```typescript\n * const session = new Session();\n * const client = session.createClient();\n * const explained = await client.explain.get('USER:user-123');\n * console.log(explained.closure_score);\n * ```\n */\n createClient(httpClients?: AxiosInstances): Client {\n return new Client(this._config, httpClients ?? {});\n }\n}\n","import { z } from 'zod';\n\n/** Scalar in [0, 1]. */\nexport const fraction01 = () => z.number().min(0).max(1);\n\n/** Optional scalar in [0, 1] or null. */\nexport const fraction01Nullable = () => fraction01().nullable().optional();\n\n/** Non-negative integer. */\nexport const nonNegativeInt = () => z.number().int().nonnegative();\n\n/** Non-empty string (min length 1). */\nexport const nonEmptyString = () => z.string().min(1);\n","export const SIGNAL_TYPES = [\n 'TRANSACTION',\n 'AUTH',\n 'BEHAVIOR',\n 'SYSTEM_TELEMETRY',\n 'MODEL_OUTPUT',\n 'ANOMALY_FLAG',\n 'NETWORK_EVENT',\n 'SESSION',\n 'PROMPT_INPUT',\n 'CONTEXT_INTEGRITY',\n 'TOOL_CALL',\n 'RAG_RETRIEVAL',\n 'POLICY_EVENT',\n 'USER_FEEDBACK',\n 'WORKFLOW_ACTION',\n 'API_CALL',\n] as const;\n\n/**\n * Supported `signal_type` discriminants for v1 ingestion events.\n */\nexport type SignalType = (typeof SIGNAL_TYPES)[number];\n","export const PROVENANCE_MODES = [\n 'DETERMINISTIC',\n 'EXTERNAL_RNG',\n 'ATTESTED',\n] as const;\n\n/**\n * Provenance classification modes for signal ingestion (v1 envelope).\n */\nexport type ProvenanceMode = (typeof PROVENANCE_MODES)[number];\n","import { z } from 'zod';\nimport { PROVENANCE_MODES } from '@shared/types/provenance-mode';\n\n/** Optional provenance metadata on v1 signals (mode, source, epoch, health). */\nexport const ProvenanceSchema = z.object({\n mode: z.enum(PROVENANCE_MODES).optional(),\n source_id: z.string().optional(),\n epoch_counter: z.number().int().nonnegative().optional(),\n health_summary: z.union([z.string(), z.record(z.unknown())]).optional(),\n});\n","/**\n * Optional integrity hints (hash / signature) carried on v1 signals.\n */\nimport { z } from 'zod';\n\nexport const IntegritySchema = z.object({\n hash: z.string().optional(),\n signature: z.string().optional(),\n});\n","/**\n * Optional principal dimensions on a v1 signal (at least one should be set for useful graph joins).\n */\nimport { z } from 'zod';\n\n/** Each id, when present, must be a non-empty string (opaque; UUID recommended where applicable). */\nexport const EventPrincipalSchema = z.object({\n user_id: z.string().min(1).optional(),\n account_id: z.string().min(1).optional(),\n device_id: z.string().min(1).optional(),\n session_id: z.string().min(1).optional(),\n model_id: z.string().min(1).optional(),\n service_id: z.string().min(1).optional(),\n conversation_id: z.string().min(1).optional(),\n document_id: z.string().min(1).optional(),\n tool_id: z.string().min(1).optional(),\n workflow_id: z.string().min(1).optional(),\n api_key_id: z.string().min(1).optional(),\n}).strict();\n\n/** Inferred principal bag from {@link EventPrincipalSchema}. */\nexport type EventPrincipal = z.infer<typeof EventPrincipalSchema>;\n","/**\n * Zod schemas for v1 ingestion envelopes: strongly typed `BaseEvent` and wire-format `RawEventRequest`.\n */\nimport { z } from 'zod';\nimport { SIGNAL_TYPES } from '@shared/types/signal-type';\nimport { ProvenanceSchema } from './provenance';\nimport { IntegritySchema } from './integrity';\nimport { EventPrincipalSchema } from './event-principal';\n\n/**\n * Full typed signal envelope before wrapping as a `RawEventRequest` (`signal_version`, `signal_type`, `principal`, …).\n *\n * **Constraints:** `confidence_hint` in `[0, 1]` when set; `timestamp` ISO-8601 when provided.\n */\nexport const BaseEventSchema = z.object({\n tenant_id: z.string().describe('Tenant partition key (required).'),\n signal_version: z.string().describe('Schema version (e.g. v1).'),\n signal_type: z.enum(SIGNAL_TYPES).describe('Type of signal.'),\n signal_payload: z\n .record(z.any())\n .describe('Payload validated per signal_type.'),\n principal: EventPrincipalSchema,\n timestamp: z\n .string()\n .datetime()\n .default(new Date().toISOString())\n .optional()\n .describe('Event / provenance record time when provided by the client.'),\n confidence_hint: z\n .number()\n .max(1)\n .min(0)\n .optional()\n .describe('Scalar in [0,1]; how trustworthy this event is.'),\n provenance: ProvenanceSchema.optional().describe(\n 'Optional provenance (mode, source_id, epoch_counter, health_summary).',\n ),\n integrity: IntegritySchema.optional(),\n});\n\n/**\n * HTTP / SDK ingestion body: `tenant_id` + JSON `payload` (API assigns persisted raw-event id).\n */\nexport const RawEventRequestSchema = z.object({\n tenant_id: z.string().describe('Tenant partition key (required).'),\n payload: z.record(z.any()).describe('JSON payload (stored as JSONB in DB).'),\n});\n\n/** Typed HTTP ingestion body. */\nexport type RawEventRequest = z.infer<typeof RawEventRequestSchema>;\n\n/** Typed v1 envelope inside `RawEventRequest.payload` when using signal builders. */\nexport type BaseEvent = z.infer<typeof BaseEventSchema>;\n","import { z } from 'zod';\nimport { fraction01 } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const AnomalyFlagSignalPayloadSchema = z.object({\n severity: fraction01(),\n});\n\nexport const AnomalyFlagSignalSchema = BaseEventSchema.extend({\n signal_payload: AnomalyFlagSignalPayloadSchema,\n});\n\n/** `signal_type: 'ANOMALY_FLAG'` — `severity` required in `[0, 1]`. */\nexport type AnomalyFlagSignalEvent = z.infer<typeof AnomalyFlagSignalSchema>;\n","import {\n BaseEventSchema,\n type BaseEvent,\n type RawEventRequest,\n} from '../schemas/raw-event';\nimport type { SignalType } from '@shared/types/signal-type';\n\nexport const buildRawEventPayload = (\n event: BaseEvent,\n signalPayload: Record<string, unknown>,\n signalType: SignalType,\n): BaseEvent => {\n const rawEventPayload: BaseEvent = {\n timestamp: event.timestamp,\n provenance: event.provenance,\n principal: event.principal,\n confidence_hint: event.confidence_hint,\n tenant_id: event.tenant_id,\n signal_version: 'v1',\n signal_type: signalType,\n signal_payload: signalPayload,\n integrity: event.integrity,\n };\n return BaseEventSchema.parse(rawEventPayload);\n};\n\nexport const buildRawEventRequest = (\n event: BaseEvent,\n signalPayload: Record<string, unknown>,\n signalType: SignalType,\n): RawEventRequest => {\n const rawEventPayload = buildRawEventPayload(\n event,\n signalPayload,\n signalType,\n );\n return {\n tenant_id: event.tenant_id,\n payload: rawEventPayload,\n };\n};\n","import {\n AnomalyFlagSignalPayloadSchema,\n type AnomalyFlagSignalEvent,\n} from '../schemas/anomaly-flag';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createAnomalyFlagEvent = (\n event: AnomalyFlagSignalEvent,\n): RawEventRequest => {\n const signalPayload = AnomalyFlagSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'ANOMALY_FLAG');\n};\n","export const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n","import { z } from 'zod';\nimport { HTTP_METHODS } from '@shared/types/http-method';\nimport { nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ApiCallSignalPayloadSchema = z.object({\n service_id: nonEmptyString(),\n endpoint: nonEmptyString(),\n method: z.enum(HTTP_METHODS),\n status_code: z.number().int().min(100).max(599),\n authorized: z.boolean().nullable(),\n authentication_present: z.boolean().nullable().optional(),\n rate_limited: z.boolean().nullable().optional(),\n external_side_effect: z.boolean().nullable().optional(),\n records_returned: z.number().int().nonnegative().nullable().optional(),\n records_modified: z.number().int().nonnegative().nullable().optional(),\n contains_sensitive_data: z.boolean().nullable().optional(),\n latency_ms: z.number().nonnegative().nullable().optional(),\n retry_count: z.number().int().nonnegative().nullable().optional(),\n api_key_id: z.string().nullable().optional(),\n});\n\nexport const ApiCallSignalSchema = BaseEventSchema.extend({\n signal_payload: ApiCallSignalPayloadSchema,\n});\n\n/** `signal_type: 'API_CALL'` with backend API operation metadata. */\nexport type ApiCallSignalEvent = z.infer<typeof ApiCallSignalSchema>;\n","import {\n ApiCallSignalPayloadSchema,\n type ApiCallSignalEvent,\n} from '../schemas/api-call';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createApiCallEvent = (\n event: ApiCallSignalEvent,\n): RawEventRequest => {\n const signalPayload = ApiCallSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'API_CALL');\n};\n","import { z } from 'zod';\nimport { BaseEventSchema } from './raw-event';\n\nexport const AuthSignalPayloadSchema = z.object({\n result: z.string().nullable().optional(),\n auth_method: z.string().nullable().optional(),\n mfa_used: z.boolean().nullable().optional(),\n mfa_bypassed: z.boolean().optional().default(false),\n failed_attempts: z.number().int().nonnegative().optional().default(0),\n ip: z.string().nullable().optional(),\n country: z.string().nullable().optional(),\n user_agent: z.string().nullable().optional(),\n unusual_location: z.boolean().optional().default(false),\n after_hours_login: z.boolean().optional().default(false),\n});\n\nexport const AuthSignalSchema = BaseEventSchema.extend({\n signal_payload: AuthSignalPayloadSchema,\n});\n\n/** `signal_type: 'AUTH'` with authentication outcome metadata. */\nexport type AuthSignalEvent = z.infer<typeof AuthSignalSchema>;\n","import { AuthSignalPayloadSchema, type AuthSignalEvent } from '../schemas/auth';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createAuthEvent = (event: AuthSignalEvent): RawEventRequest => {\n const signalPayload = AuthSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'AUTH');\n};\n","import { z } from 'zod';\nimport { fraction01 } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const BehaviorSignalPayloadSchema = z.object({\n deviation_score: fraction01(),\n});\n\nexport const BehaviorSignalSchema = BaseEventSchema.extend({\n signal_payload: BehaviorSignalPayloadSchema,\n});\n\n/** `signal_type: 'BEHAVIOR'` — `deviation_score` in `[0, 1]`. */\nexport type BehaviorSignalEvent = z.infer<typeof BehaviorSignalSchema>;\n","import {\n BehaviorSignalPayloadSchema,\n type BehaviorSignalEvent,\n} from '../schemas/behavior';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createBehaviorEvent = (\n event: BehaviorSignalEvent,\n): RawEventRequest => {\n const signalPayload = BehaviorSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'BEHAVIOR');\n};\n","export const CONTEXT_SOURCES = [\n 'CONVERSATION_HISTORY',\n 'RETRIEVED_DOCUMENT',\n 'TOOL_OUTPUT',\n 'SYSTEM',\n 'DEVELOPER',\n 'USER',\n] as const;\n\nexport type ContextSource = (typeof CONTEXT_SOURCES)[number];\n","import { z } from 'zod';\nimport { CONTEXT_SOURCES } from '@shared/types/context-integrity';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ContextIntegritySignalPayloadSchema = z.object({\n context_source: z.enum(CONTEXT_SOURCES),\n instruction_conflict_detected: z.boolean(),\n untrusted_instruction_detected: z.boolean(),\n context_priority_violation: z.boolean(),\n recursive_instruction_pattern: z.boolean().optional().default(false),\n context_drift_score: fraction01Nullable(),\n system_prompt_conflict_score: fraction01Nullable(),\n developer_prompt_conflict_score: fraction01Nullable(),\n retrieved_instruction_count: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0),\n hidden_instruction_score: fraction01Nullable(),\n source_document_id: z.string().nullable().optional(),\n untrusted_source_count: z.number().int().nonnegative().optional().default(0),\n source_trust_score: fraction01Nullable(),\n lowest_source_trust_score: fraction01Nullable(),\n recursive_pattern_score: fraction01Nullable(),\n prompt_injection_score: fraction01Nullable(),\n contains_instruction_override: z.boolean().optional().default(false),\n context_injection_score: fraction01Nullable(),\n});\n\nexport const ContextIntegritySignalSchema = BaseEventSchema.extend({\n signal_payload: ContextIntegritySignalPayloadSchema,\n});\n\n/** `signal_type: 'CONTEXT_INTEGRITY'` with context contamination checks. */\nexport type ContextIntegritySignalEvent = z.infer<\n typeof ContextIntegritySignalSchema\n>;\n","import {\n ContextIntegritySignalPayloadSchema,\n type ContextIntegritySignalEvent,\n} from '../schemas/context-integrity';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createContextIntegrityEvent = (\n event: ContextIntegritySignalEvent,\n): RawEventRequest => {\n const signalPayload = ContextIntegritySignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'CONTEXT_INTEGRITY');\n};\n","import { z } from 'zod';\nimport { fraction01, fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ModelOutputSignalPayloadSchema = z.object({\n missing_citations_rate: fraction01Nullable(),\n citation_rate: fraction01Nullable(),\n expected_citation_rate: fraction01Nullable(),\n policy_violations: z.number().int().nonnegative().optional().default(0),\n policy_violation_rate: fraction01Nullable(),\n tool_call_inconsistency: fraction01().optional().default(0),\n tool_inconsistency_rate: fraction01Nullable(),\n tool_miss_rate: fraction01Nullable(),\n eval_window_n: z.number().int().min(1).nullable().optional(),\n hallucination_risk_score: fraction01Nullable(),\n self_contradiction_score: fraction01Nullable(),\n grounding_score: fraction01Nullable(),\n contains_unsupported_claims: z.boolean().optional().default(false),\n});\n\nexport const ModelOutputSignalSchema = BaseEventSchema.extend({\n signal_payload: ModelOutputSignalPayloadSchema,\n});\n\n/** `signal_type: 'MODEL_OUTPUT'` with citation / tool-consistency metrics in `[0, 1]` where applicable. */\nexport type ModelOutputSignalEvent = z.infer<typeof ModelOutputSignalSchema>;\n","import {\n ModelOutputSignalPayloadSchema,\n type ModelOutputSignalEvent,\n} from '../schemas/model-output';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `MODEL_OUTPUT` signal.\n *\n * @param event - The `ModelOutputSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `MODEL_OUTPUT` signal.\n */\nexport const createModelOutputEvent = (\n event: ModelOutputSignalEvent,\n): RawEventRequest => {\n const signalPayload = ModelOutputSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'MODEL_OUTPUT');\n};\n","import { z } from 'zod';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const NetworkSignalPayloadSchema = z.object({\n ip: z.string().nullable().optional(),\n asn: z.string().nullable().optional(),\n reputation_score: fraction01Nullable(),\n threat_score: fraction01Nullable(),\n is_datacenter: z.boolean().nullable().optional(),\n is_untrusted_segment: z.boolean().optional().default(false),\n asn_reputation: fraction01Nullable(),\n});\n\nexport const NetworkSignalSchema = BaseEventSchema.extend({\n signal_payload: NetworkSignalPayloadSchema,\n});\n\n/** `signal_type: 'NETWORK_EVENT'` with ASN/IP/reputation fields. */\nexport type NetworkSignalEvent = z.infer<typeof NetworkSignalSchema>;\n","import {\n NetworkSignalPayloadSchema,\n type NetworkSignalEvent,\n} from '../schemas/network-event';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `NETWORK_EVENT` signal.\n *\n * @param event - The `NetworkSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `NETWORK_EVENT` signal.\n */\nexport const createNetworkEvent = (\n event: NetworkSignalEvent,\n): RawEventRequest => {\n const signalPayload = NetworkSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'NETWORK_EVENT');\n};\n","export const POLICY_CATEGORIES = [\n 'SAFETY',\n 'PRIVACY',\n 'SECURITY',\n 'COMPLIANCE',\n 'CONTENT',\n 'OTHER',\n] as const;\n\nexport type PolicyCategory = (typeof POLICY_CATEGORIES)[number];\n\nexport const POLICY_RESULTS = ['PASS', 'WARN', 'FAIL', 'BLOCKED'] as const;\n\nexport type PolicyResult = (typeof POLICY_RESULTS)[number];\n","import { z } from 'zod';\nimport { POLICY_CATEGORIES, POLICY_RESULTS } from '@shared/types/policy-event';\nimport { fraction01, fraction01Nullable, nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const PolicyEventSignalPayloadSchema = z.object({\n policy_check_name: nonEmptyString(),\n policy_category: z.enum(POLICY_CATEGORIES),\n policy_result: z.enum(POLICY_RESULTS),\n severity: fraction01(),\n blocked: z.boolean().optional().default(false),\n violation_count: z.number().int().nonnegative().optional().default(0),\n policy_confidence: fraction01Nullable(),\n redaction_applied: z.boolean().optional().default(false),\n});\n\nexport const PolicyEventSignalSchema = BaseEventSchema.extend({\n signal_payload: PolicyEventSignalPayloadSchema,\n});\n\n/** `signal_type: 'POLICY_EVENT'` with policy check outcome metadata. */\nexport type PolicyEventSignalEvent = z.infer<typeof PolicyEventSignalSchema>;\n","import {\n PolicyEventSignalPayloadSchema,\n type PolicyEventSignalEvent,\n} from '../schemas/policy-event';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `POLICY_EVENT` signal.\n *\n * @param event - The `PolicyEventSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `POLICY_EVENT` signal.\n */\nexport const createPolicyEvent = (\n event: PolicyEventSignalEvent,\n): RawEventRequest => {\n const signalPayload = PolicyEventSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'POLICY_EVENT');\n};\n","import { z } from 'zod';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nconst promptHashSchema = z\n .string()\n .regex(/^[a-fA-F0-9]{64}$/)\n .optional();\n\nexport const PromptInputSignalPayloadSchema = z.object({\n prompt_length_chars: z.number().int().nonnegative(),\n conversation_turn_index: z.number().int().nonnegative(),\n contains_instruction_override: z.boolean(),\n contains_tool_request: z.boolean().optional().default(false),\n contains_secret_request: z.boolean().optional().default(false),\n contains_policy_challenge: z.boolean().optional().default(false),\n recursive_pattern_score: fraction01Nullable(),\n prompt_injection_score: fraction01Nullable(),\n sensitive_domain: z.boolean().optional().default(false),\n complexity_score: fraction01Nullable(),\n prompt_hash: promptHashSchema,\n});\n\nexport const PromptInputSignalSchema = BaseEventSchema.extend({\n signal_payload: PromptInputSignalPayloadSchema,\n});\n\n/** `signal_type: 'PROMPT_INPUT'` with prompt analysis metadata (no raw text). */\nexport type PromptInputSignalEvent = z.infer<typeof PromptInputSignalSchema>;\n","import {\n PromptInputSignalPayloadSchema,\n type PromptInputSignalEvent,\n} from '../schemas/prompt-input';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `PROMPT_INPUT` signal.\n *\n * @param event - The `PromptInputSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `PROMPT_INPUT` signal.\n */\nexport const createPromptInputEvent = (\n event: PromptInputSignalEvent,\n): RawEventRequest => {\n const signalPayload = PromptInputSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'PROMPT_INPUT');\n};\n","import { z } from 'zod';\nimport { fraction01, fraction01Nullable, nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const RagRetrievalSignalPayloadSchema = z.object({\n retriever_id: nonEmptyString(),\n query_hash: z.string().nullable().optional(),\n documents_retrieved: z.number().int().nonnegative(),\n top_k: z.number().int().min(1),\n average_relevance_score: fraction01(),\n source_trust_score: fraction01(),\n lowest_source_trust_score: fraction01Nullable(),\n untrusted_source_count: z.number().int().nonnegative().optional().default(0),\n retrieved_context_tokens: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0),\n context_injection_score: fraction01().optional().default(0),\n document_ids: z.array(z.string()).optional().default([]),\n});\n\nexport const RagRetrievalSignalSchema = BaseEventSchema.extend({\n signal_payload: RagRetrievalSignalPayloadSchema,\n});\n\n/** `signal_type: 'RAG_RETRIEVAL'` with retrieval trust metadata. */\nexport type RagRetrievalSignalEvent = z.infer<typeof RagRetrievalSignalSchema>;\n","import {\n RagRetrievalSignalPayloadSchema,\n type RagRetrievalSignalEvent,\n} from '../schemas/rag-retrieval';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `RAG_RETRIEVAL` signal.\n *\n * @param event - The `RagRetrievalSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `RAG_RETRIEVAL` signal.\n */\nexport const createRagRetrievalEvent = (\n event: RagRetrievalSignalEvent,\n): RawEventRequest => {\n const signalPayload = RagRetrievalSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'RAG_RETRIEVAL');\n};\n","export const SESSION_STATUSES = [\n 'STARTED',\n 'ACTIVE',\n 'ENDED',\n 'TIMEOUT',\n 'ABANDONED',\n] as const;\n\nexport type SessionStatus = (typeof SESSION_STATUSES)[number];\n","import { z } from 'zod';\nimport { SESSION_STATUSES } from '@shared/types/session';\nimport { BaseEventSchema } from './raw-event';\n\nexport const SessionSignalPayloadSchema = z.object({\n session_status: z.enum(SESSION_STATUSES),\n session_age_seconds: z.number().nonnegative().optional().default(0),\n turn_count: z.number().int().nonnegative().optional().default(0),\n messages_last_minute: z.number().nonnegative().optional().default(0),\n avg_seconds_between_turns: z.number().nonnegative().nullable().optional(),\n restart_count_10m: z.number().int().nonnegative().optional().default(0),\n session_timeout: z.boolean().optional().default(false),\n abandoned: z.boolean().optional().default(false),\n conversation_id: z.string().nullable().optional(),\n user_id: z.string().nullable().optional(),\n});\n\nexport const SessionSignalSchema = BaseEventSchema.extend({\n signal_payload: SessionSignalPayloadSchema,\n});\n\n/** `signal_type: 'SESSION'` with conversation lifecycle metadata. */\nexport type SessionSignalEvent = z.infer<typeof SessionSignalSchema>;\n","import {\n SessionSignalPayloadSchema,\n type SessionSignalEvent,\n} from '../schemas/session';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `SESSION` signal.\n *\n * @param event - The `SessionSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `SESSION` signal.\n */\nexport const createSessionEvent = (\n event: SessionSignalEvent,\n): RawEventRequest => {\n const signalPayload = SessionSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'SESSION');\n};\n","import { z } from 'zod';\nimport { fraction01, fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const SystemTelemetrySignalPayloadSchema = z.object({\n metric_name: z.string().nullable().optional(),\n value: z.number().nullable().optional(),\n baseline: z.number().nullable().optional(),\n window_seconds: z.number().int().min(1).nullable().optional(),\n error_rate: fraction01().optional().default(0),\n baseline_error_rate: fraction01Nullable(),\n unusual_auth_rate: fraction01().optional().default(0),\n firmware_hash_changed: z.boolean().optional().default(false),\n expected_hash_match: z.boolean().nullable().optional(),\n sensor_deviation_score: fraction01Nullable(),\n});\n\nexport const SystemTelemetrySignalSchema = BaseEventSchema.extend({\n signal_payload: SystemTelemetrySignalPayloadSchema,\n});\n\n/** `signal_type: 'SYSTEM_TELEMETRY'` with metric samples and optional error-rate fractions in `[0, 1]`. */\nexport type SystemTelemetrySignalEvent = z.infer<\n typeof SystemTelemetrySignalSchema\n>;\n","import {\n SystemTelemetrySignalPayloadSchema,\n type SystemTelemetrySignalEvent,\n} from '../schemas/system-telemetry';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `SYSTEM_TELEMETRY` signal.\n *\n * @param event - The `SystemTelemetrySignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `SYSTEM_TELEMETRY` signal.\n */\nexport const createSystemTelemetryEvent = (\n event: SystemTelemetrySignalEvent,\n): RawEventRequest => {\n const signalPayload = SystemTelemetrySignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'SYSTEM_TELEMETRY');\n};\n","export const TOOL_CATEGORIES = [\n 'RETRIEVAL',\n 'DATABASE',\n 'PAYMENT',\n 'MESSAGING',\n 'CODE_EXECUTION',\n 'FILE',\n 'EXTERNAL_API',\n 'OTHER',\n] as const;\n\nexport type ToolCategory = (typeof TOOL_CATEGORIES)[number];\n","import { z } from 'zod';\nimport { TOOL_CATEGORIES } from '@shared/types/tool-call';\nimport { fraction01Nullable, nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ToolCallSignalPayloadSchema = z.object({\n tool_name: nonEmptyString(),\n tool_category: z.enum(TOOL_CATEGORIES),\n action: nonEmptyString(),\n authorized: z.boolean().nullable(),\n safety_critical: z.boolean(),\n external_side_effect: z.boolean(),\n tool_call_success: z.boolean().nullable().optional(),\n latency_ms: z.number().nonnegative().nullable().optional(),\n error_code: z.string().nullable().optional(),\n argument_risk_score: fraction01Nullable(),\n result_size_bytes: z.number().int().nonnegative().nullable().optional(),\n records_accessed: z.number().int().nonnegative().optional().default(0),\n contains_sensitive_data: z.boolean().optional().default(false),\n action_category: z.string().nullable().optional(),\n method: z.string().nullable().optional(),\n sensitive_data_involved: z.boolean().optional().default(false),\n contains_phi: z.boolean().optional().default(false),\n sensitive_domain: z.boolean().optional().default(false),\n});\n\nexport const ToolCallSignalSchema = BaseEventSchema.extend({\n signal_payload: ToolCallSignalPayloadSchema,\n});\n\n/** `signal_type: 'TOOL_CALL'` with tool invocation metadata. */\nexport type ToolCallSignalEvent = z.infer<typeof ToolCallSignalSchema>;\n","import {\n ToolCallSignalPayloadSchema,\n type ToolCallSignalEvent,\n} from '../schemas/tool-call';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `TOOL_CALL` signal.\n *\n * @param event - The `ToolCallSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `TOOL_CALL` signal.\n */\nexport const createToolCallEvent = (\n event: ToolCallSignalEvent,\n): RawEventRequest => {\n const signalPayload = ToolCallSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'TOOL_CALL');\n};\n","import { z } from 'zod';\nimport { BaseEventSchema } from './raw-event';\n\nexport const TransactionSignalPayloadSchema = z.object({\n amount: z.number().nonnegative().default(0),\n amount_minor: z.number().int().nonnegative().nullable().optional(),\n amount_usd: z.number().nonnegative().nullable().optional(),\n currency: z.string().nullable().optional(),\n merchant_category: z.string().nullable().optional(),\n merchant_id: z.string().nullable().optional(),\n channel: z.string().nullable().optional(),\n country: z.string().nullable().optional(),\n velocity: z.number().nonnegative().nullable().optional(),\n external_anomaly_score: z.number().nullable().optional(),\n geo_distance: z.number().nonnegative().nullable().optional(),\n geo_distance_km: z.number().nonnegative().nullable().optional(),\n records_accessed: z.number().int().nonnegative().nullable().optional(),\n baseline_records_accessed: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional(),\n sensitivity_level: z.string().nullable().optional(),\n export_count: z.number().int().nonnegative().nullable().optional(),\n bulk_export: z.boolean().optional().default(false),\n contains_phi: z.boolean().optional().default(false),\n control_command: z.string().nullable().optional(),\n authorized: z.boolean().nullable().optional(),\n safety_critical: z.boolean().optional().default(false),\n});\n\nexport const TransactionSignalSchema = BaseEventSchema.extend({\n signal_payload: TransactionSignalPayloadSchema,\n});\n\n/** `signal_type: 'TRANSACTION'` with typed `signal_payload`. */\nexport type TransactionSignalEvent = z.infer<typeof TransactionSignalSchema>;\n","import {\n TransactionSignalPayloadSchema,\n type TransactionSignalEvent,\n} from '../schemas/transaction';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `TRANSACTION` signal.\n *\n * @param event - The `TransactionSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `TRANSACTION` signal.\n */\nexport const createTransactionEvent = (\n event: TransactionSignalEvent,\n): RawEventRequest => {\n const signalPayload = TransactionSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'TRANSACTION');\n};\n","export const FEEDBACK_TYPES = [\n 'THUMBS_UP',\n 'THUMBS_DOWN',\n 'REPORT',\n 'CORRECTION',\n 'RATING',\n] as const;\n\nexport type FeedbackType = (typeof FEEDBACK_TYPES)[number];\n\nexport const FEEDBACK_ISSUE_TYPES = [\n 'HALLUCINATION',\n 'UNSAFE',\n 'IRRELEVANT',\n 'PRIVACY',\n 'OFFENSIVE',\n 'OTHER',\n] as const;\n\nexport type FeedbackIssueType = (typeof FEEDBACK_ISSUE_TYPES)[number];\n","import { z } from 'zod';\nimport {\n FEEDBACK_ISSUE_TYPES,\n FEEDBACK_TYPES,\n} from '@shared/types/user-feedback';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const UserFeedbackSignalPayloadSchema = z.object({\n feedback_type: z.enum(FEEDBACK_TYPES),\n rating: z.number().nullable().optional(),\n reported_issue: z.boolean().optional().default(false),\n issue_type: z.enum(FEEDBACK_ISSUE_TYPES).nullable().optional(),\n severity: fraction01Nullable(),\n response_id: z.string().nullable().optional(),\n user_comment_hash: z.string().nullable().optional(),\n});\n\nexport const UserFeedbackSignalSchema = BaseEventSchema.extend({\n signal_payload: UserFeedbackSignalPayloadSchema,\n});\n\n/** `signal_type: 'USER_FEEDBACK'` with subjective user evaluation metadata. */\nexport type UserFeedbackSignalEvent = z.infer<typeof UserFeedbackSignalSchema>;\n","import {\n UserFeedbackSignalPayloadSchema,\n type UserFeedbackSignalEvent,\n} from '../schemas/user-feedback';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `USER_FEEDBACK` signal.\n *\n * @param event - The `UserFeedbackSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `USER_FEEDBACK` signal.\n */\nexport const createUserFeedbackEvent = (\n event: UserFeedbackSignalEvent,\n): RawEventRequest => {\n const signalPayload = UserFeedbackSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'USER_FEEDBACK');\n};\n","export const WORKFLOW_ACTION_CATEGORIES = [\n 'FINANCIAL',\n 'DATA_ACCESS',\n 'COMMUNICATION',\n 'ADMIN',\n 'SECURITY',\n 'CODE',\n 'OTHER',\n] as const;\n\nexport type WorkflowActionCategory =\n (typeof WORKFLOW_ACTION_CATEGORIES)[number];\n\nexport const WORKFLOW_ACTION_STAGES = [\n 'PROPOSED',\n 'PRE_EXECUTION',\n 'EXECUTED',\n 'FAILED',\n 'ROLLED_BACK',\n] as const;\n\nexport type WorkflowActionStage = (typeof WORKFLOW_ACTION_STAGES)[number];\n\nexport const WORKFLOW_ACTOR_TYPES = ['USER', 'AI_AGENT', 'SYSTEM'] as const;\n\nexport type WorkflowActorType = (typeof WORKFLOW_ACTOR_TYPES)[number];\n","import { z } from 'zod';\nimport {\n WORKFLOW_ACTION_CATEGORIES,\n WORKFLOW_ACTION_STAGES,\n WORKFLOW_ACTOR_TYPES,\n} from '@shared/types/workflow-action';\nimport { nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const WorkflowActionSignalPayloadSchema = z.object({\n workflow_id: nonEmptyString(),\n workflow_type: nonEmptyString(),\n action_name: nonEmptyString(),\n action_category: z.enum(WORKFLOW_ACTION_CATEGORIES),\n action_stage: z.enum(WORKFLOW_ACTION_STAGES),\n actor_type: z.enum(WORKFLOW_ACTOR_TYPES),\n requires_approval: z.boolean().optional().default(false),\n approval_present: z.boolean().optional().default(false),\n external_side_effect: z.boolean().nullable().optional(),\n safety_critical: z.boolean().nullable().optional(),\n amount_usd: z.number().nonnegative().nullable().optional(),\n sensitive_data_involved: z.boolean().optional().default(false),\n new_counterparty: z.boolean().optional().default(false),\n is_new_vendor: z.boolean().optional().default(false),\n is_new_recipient: z.boolean().optional().default(false),\n is_new_endpoint: z.boolean().optional().default(false),\n});\n\nexport const WorkflowActionSignalSchema = BaseEventSchema.extend({\n signal_payload: WorkflowActionSignalPayloadSchema,\n});\n\n/** `signal_type: 'WORKFLOW_ACTION'` with workflow step metadata. */\nexport type WorkflowActionSignalEvent = z.infer<\n typeof WorkflowActionSignalSchema\n>;\n","import {\n WorkflowActionSignalPayloadSchema,\n type WorkflowActionSignalEvent,\n} from '../schemas/workflow-action';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `WORKFLOW_ACTION` signal.\n *\n * @param event - The `WorkflowActionSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `WORKFLOW_ACTION` signal.\n */\nexport const createWorkflowActionEvent = (\n event: WorkflowActionSignalEvent,\n): RawEventRequest => {\n const signalPayload = WorkflowActionSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'WORKFLOW_ACTION');\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/shared/common/exceptions.ts","../src/config.ts","../src/http/helpers.ts","../src/shared/utils/http-error-to-sdk-exception.ts","../src/http/http-client.ts","../src/shared/utils/date.utils.ts","../src/resources/advisory-resource.ts","../src/shared/utils/mutext.utils.ts","../src/shared/buffering/types.ts","../src/shared/buffering/auto-flush-batch-buffer.ts","../src/resources/event-resource.ts","../src/resources/explain-resource.ts","../src/resources/tenant-resource.ts","../src/resources/trust-state-resource.ts","../src/client/client.ts","../src/session.ts","../src/v1/schemas/_helpers.ts","../src/shared/types/signal-type.ts","../src/shared/types/provenance-mode.ts","../src/v1/schemas/provenance.ts","../src/v1/schemas/integrity.ts","../src/v1/schemas/event-principal.ts","../src/v1/schemas/raw-event.ts","../src/v1/schemas/anomaly-flag.ts","../src/v1/builders/_common.ts","../src/v1/builders/anomaly-flag-builder.ts","../src/shared/types/http-method.ts","../src/v1/schemas/api-call.ts","../src/v1/builders/api-call-builder.ts","../src/v1/schemas/auth.ts","../src/v1/builders/auth-builder.ts","../src/v1/schemas/behavior.ts","../src/v1/builders/behavior-builder.ts","../src/shared/types/context-integrity.ts","../src/v1/schemas/context-integrity.ts","../src/v1/builders/context-integrity-builder.ts","../src/v1/schemas/model-output.ts","../src/v1/builders/model-output-builder.ts","../src/v1/schemas/network-event.ts","../src/v1/builders/network-builder.ts","../src/shared/types/policy-event.ts","../src/v1/schemas/policy-event.ts","../src/v1/builders/policy-event-builder.ts","../src/v1/schemas/prompt-input.ts","../src/v1/builders/prompt-input-builder.ts","../src/v1/schemas/rag-retrieval.ts","../src/v1/builders/rag-retrieval-builder.ts","../src/shared/types/session.ts","../src/v1/schemas/session.ts","../src/v1/builders/session-builder.ts","../src/v1/schemas/system-telemetry.ts","../src/v1/builders/system-telemetry-builder.ts","../src/shared/types/tool-call.ts","../src/v1/schemas/tool-call.ts","../src/v1/builders/tool-call-builder.ts","../src/v1/schemas/transaction.ts","../src/v1/builders/transaction-builder.ts","../src/shared/types/user-feedback.ts","../src/v1/schemas/user-feedback.ts","../src/v1/builders/user-feedback-builder.ts","../src/shared/types/workflow-action.ts","../src/v1/schemas/workflow-action.ts","../src/v1/builders/workflow-action-builder.ts"],"names":["loadDotEnv","axios","z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Structured error detail parsed from failed QATI HTTP responses (and synthetic transport failures).\n */\nexport interface APIErrorDetail {\n readonly status_code: number;\n readonly message: string;\n readonly request_id: string | null;\n}\n\n/**\n * Base class for every error raised by this SDK (configuration, transport, and API errors).\n *\n * @param message - Human-readable description.\n * @param options - Optional `cause` and other `Error` options.\n */\nexport class QatiSDKError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'QatiSDKError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Generic API or transport failure with structured {@link APIErrorDetail}.\n * Prefer catching specific subclasses when handling status codes.\n *\n * @param detail - Parsed status, message, and request id.\n */\nexport class QatiAPIError extends QatiSDKError {\n readonly detail: APIErrorDetail;\n\n constructor(detail: APIErrorDetail) {\n super(\n `HTTP ${detail.status_code}: ${detail.message} (request_id=${detail.request_id})`,\n );\n this.name = 'QatiAPIError';\n this.detail = detail;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * @returns Same as `detail.status_code`.\n */\n get status_code(): number {\n return this.detail.status_code;\n }\n\n /**\n * @returns Same as `detail.request_id`.\n */\n get request_id(): string | null {\n return this.detail.request_id;\n }\n}\n\n/** Thrown for HTTP `401` / `403` — invalid, expired, or missing tenant API key. */\nexport class QatiAuthError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiAuthError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown for HTTP `404` — entity, explain payload, or route target does not exist. */\nexport class QatiNotFoundError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiNotFoundError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown for HTTP `429` — rate limited; safe to retry with backoff. */\nexport class QatiRateLimitError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiRateLimitError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Thrown for HTTP `5xx` — server-side failure; retry may succeed after backoff. */\nexport class QatiServerError extends QatiAPIError {\n constructor(detail: APIErrorDetail) {\n super(detail);\n this.name = 'QatiServerError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Raised when configuration or client setup is invalid (unknown API name, bad URL, Zod parse failure, …).\n *\n * @param message - Validation or resolution error text.\n */\nexport class QatiConfigError extends QatiSDKError {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'QatiConfigError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { config as loadDotEnv } from 'dotenv';\nimport { z } from 'zod';\n\nimport { QatiConfigError } from '@shared/common/exceptions';\n\n/**\n * Environment variable names read by {@link resolveQatiConfig} before merging explicit input.\n * Values are merged as raw keys; prefer {@link parseQatiConfig} with a camelCase object for tests.\n */\nconst EV_VARIABLES_NAMES = [\n 'QATI_TENANT_API_KEY',\n 'QATI_QUERY_API_BASE_URL',\n 'QATI_INGESTION_API_BASE_URL',\n 'QATI_TIMEOUT',\n 'QATI_MAX_RETRIES',\n 'QATI_INGESTION_BATCH_SIZE',\n 'QATI_INGESTION_FLUSH_INTERVAL_SECONDS',\n 'QATI_RETRY_BACKOFF_INITIAL_SECONDS',\n 'QATI_RETRY_BACKOFF_MAX_SECONDS',\n 'QATI_RETRY_JITTER_FRACTION',\n 'QATI_MAX_RETRIES',\n] as const;\n\n/**\n * Maps logical API names (used by {@link HttpClient}) to resolved config fields.\n *\n * @example\n * ```ts\n * const url = baseUrlFor(config, 'query_api');\n * ```\n */\nexport const API_REGISTRY: Readonly<Record<string, keyof QatiConfigOutput>> = {\n query_api: 'queryApiBaseUrl',\n ingestion_api: 'ingestionApiBaseUrl',\n};\n\n/**\n * Validated SDK configuration shape (camelCase).\n *\n * **Constraints** (Zod): `tenantApiKey` non-empty string; `queryApiBaseUrl` and\n * `ingestionApiBaseUrl` required URLs (no defaults); `timeout` ≥ 1 second;\n * `ingestionBatchSize` integer ≥ 1; `ingestionFlushIntervalSeconds` > 0;\n * `maxRetries` integer 1–10; retry backoff fields non-negative integers.\n *\n * **Defaults** when optional fields are omitted: `timeout` `30`, `ingestionBatchSize` `100`,\n * `ingestionFlushIntervalSeconds` `5`, `retryBackoffInitialSeconds` `1`,\n * `retryBackoffMaxSeconds` `30`, `retryJitterFraction` `0.1`, `maxRetries` `3`.\n */\nconst QatiConfigBase = z.object({\n tenantApiKey: z.string().min(1),\n queryApiBaseUrl: z.string().url(),\n ingestionApiBaseUrl: z.string().url(),\n timeout: z.number().min(1).optional().default(30),\n ingestionBatchSize: z.number().int().min(1).optional().default(100),\n ingestionFlushIntervalSeconds: z.number().positive().optional().default(5),\n // Retry fields\n retryBackoffInitialSeconds: z.number().nonnegative().optional().default(1),\n retryBackoffMaxSeconds: z.number().nonnegative().optional().default(30),\n retryJitterFraction: z.number().min(0).max(1).optional().default(0.1),\n maxRetries: z.number().int().min(1).max(10).optional().default(3),\n});\n\n/** Input to {@link resolveQatiConfig} / {@link parseQatiConfig} before defaults and coercion (Zod input type). */\nexport type QatiConfigInput = z.input<typeof QatiConfigBase>;\n\n/** Fully resolved, validated configuration returned by {@link resolveQatiConfig} and {@link Session#config}. */\nexport type QatiConfigOutput = z.output<typeof QatiConfigBase>;\n\nconst stripUndefined = <T extends Record<string, unknown>>(\n obj: T,\n): Partial<T> => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, v]) => v !== undefined),\n ) as Partial<T>;\n};\n\nconst readEnvOverrides = (): Partial<QatiConfigInput> => {\n const e = process.env;\n const sanitizedEnvs = EV_VARIABLES_NAMES.reduce(\n (acc, ev) => {\n acc[ev] = e[ev];\n return acc;\n },\n {} as Record<string, string | undefined>,\n );\n return sanitizedEnvs;\n};\n\n/**\n * Resolves SDK configuration: loads `.env` from the working directory, merges `QATI_*` env reads\n * (into camelCase), then explicit `input` (explicit fields win). Validates with Zod and applies\n * defaults for optional fields only (not base URLs).\n *\n * @param input - Optional partial overrides (camelCase). Omitted keys fall back to `process.env` then Zod defaults\n * for optional fields only (base URLs must come from env or this object).\n * @returns Validated {@link QatiConfigOutput}.\n * @throws {@link QatiConfigError} When validation fails.\n * @example\n * ```ts\n * const config = resolveQatiConfig({\n * tenantApiKey: process.env.QATI_TENANT_API_KEY!,\n * queryApiBaseUrl: 'http://localhost:8001',\n * ingestionApiBaseUrl: 'http://localhost:8000',\n * });\n * ```\n */\nexport const resolveQatiConfig = (\n input?: Partial<QatiConfigInput>,\n): QatiConfigOutput => {\n loadDotEnv({ path: '.env' });\n\n const merged = {\n ...readEnvOverrides(),\n ...stripUndefined(input ?? {}),\n };\n\n const parsed = QatiConfigBase.safeParse(merged);\n if (!parsed.success) {\n const msg = parsed.error.flatten().fieldErrors;\n throw new QatiConfigError(\n `Invalid QATI SDK configuration: ${JSON.stringify(msg)}`,\n );\n }\n return parsed.data;\n};\n\n/**\n * Validates a config object only (no `.env` load, no process env merge). Use in unit tests or when\n * configuration is already assembled in memory.\n *\n * @param input - Full or partial config; must include required fields (`tenantApiKey`, both base URLs) or\n * combine with Zod defaults only for optional numeric/batch fields.\n * @returns Validated {@link QatiConfigOutput}.\n * @throws {@link QatiConfigError} When validation fails.\n */\nexport const parseQatiConfig = (\n input: z.input<typeof QatiConfigBase>,\n): QatiConfigOutput => {\n const parsed = QatiConfigBase.safeParse(input);\n if (!parsed.success) {\n throw new QatiConfigError(\n `Invalid QATI SDK configuration: ${JSON.stringify(parsed.error.flatten().fieldErrors)}`,\n );\n }\n return parsed.data;\n};\n\n/**\n * Returns the normalized base URL (no trailing slash) for a logical API registered in {@link API_REGISTRY}.\n *\n * @param config - Resolved SDK configuration.\n * @param apiName - Logical name: `query_api` or `ingestion_api`.\n * @returns Absolute base URL string without a trailing `/`.\n * @throws {@link QatiConfigError} If `apiName` is unknown or the mapped URL field is missing.\n * @example\n * ```ts\n * const base = baseUrlFor(session.config, 'ingestion_api');\n * ```\n */\nexport const baseUrlFor = (\n config: QatiConfigOutput,\n apiName: string,\n): string => {\n if (!(apiName in API_REGISTRY))\n throw new QatiConfigError(\n `Unknown API \"${apiName}\". Registered APIs: ${Object.keys(API_REGISTRY)\n .map((k) => `\"${k}\"`)\n .join(', ')}.`,\n );\n\n const field = API_REGISTRY[apiName as keyof typeof API_REGISTRY];\n const url = config[field];\n\n if (typeof url !== 'string')\n throw new QatiConfigError(`Missing base URL field for API \"${apiName}\"`);\n\n return url.replace(/\\/$/, '');\n};\n","import axios from 'axios';\nimport { API_REGISTRY, type QatiConfigOutput } from '../config';\nimport type { AxiosInstances } from './http-client';\nimport { QatiConfigError } from '@shared/common/exceptions';\n\n/**\n * Called once after retries are exhausted for a retried request (`options.retry` was `true`).\n * Use for logging, DLQ, or metrics; must not throw (errors are swallowed and logged).\n *\n * @param payload - The JSON/body that was sent (same as `options.json ?? options.data`).\n * @param error - The SDK error instance thrown to the caller (typically `QatiAPIError`).\n */\nexport type DeadLetterCallback = (payload: unknown, error: unknown) => void;\n\nexport const isRetryableStatusCode = (statusCode: number): boolean =>\n statusCode === 429 || statusCode >= 500;\n\nexport const defaultHeaders = (\n config: QatiConfigOutput,\n): Record<string, string> => ({\n 'x-tenant-api-key': config.tenantApiKey,\n 'Content-Type': 'application/json',\n});\n\nexport const resolveRequestHeaders = (\n config: QatiConfigOutput,\n headers: Record<string, string> = {},\n extraHeaders: Record<string, string> = {},\n): Record<string, string> => {\n return { ...headers, ...defaultHeaders(config), ...extraHeaders };\n};\n\n/**\n * Exponential backoff with jitter, capped by `retryBackoffMaxSeconds`.\n *\n * @param attemptNumber - 1-based attempt index after a failure (first retry uses `1`).\n * @param config - Uses `retryBackoffInitialSeconds`, `retryBackoffMaxSeconds`, `retryJitterFraction`.\n * @returns Sleep duration in milliseconds before the next retry.\n */\nexport const computeBackoffMs = (\n attemptNumber: number,\n config: QatiConfigOutput,\n): number => {\n const {\n retryBackoffInitialSeconds,\n retryBackoffMaxSeconds,\n retryJitterFraction,\n } = config;\n const expBase = 2;\n const rawDelay = retryBackoffInitialSeconds * expBase ** (attemptNumber - 1);\n const base = Math.min(rawDelay, retryBackoffMaxSeconds);\n\n const jitterFactor =\n 1 + (Math.random() * 2 * retryJitterFraction - retryJitterFraction);\n const delayMs = Math.max(\n 0,\n Math.min(base * jitterFactor, retryBackoffMaxSeconds),\n );\n return delayMs * 1000;\n};\n\nexport const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nexport const isRetryableAxiosFailure = (err: unknown): boolean => {\n if (!axios.isAxiosError(err)) return false;\n if (!err.response) return true;\n return isRetryableStatusCode(err.response.status);\n};\n\nexport const validateInjectedApiNames = (instances?: AxiosInstances) => {\n if (!instances) return;\n\n const unknownApiNames = Object.keys(instances).filter(\n (name) => !(name in API_REGISTRY),\n );\n\n if (unknownApiNames?.length) {\n const badApiNames = unknownApiNames.map((name) => `\"${name}\"`).join(', ');\n throw new QatiConfigError(`Unknown API name(s): ${badApiNames}`);\n }\n};\n","import axios, { type AxiosResponse } from 'axios';\n\nimport type { APIErrorDetail } from '@shared/common/exceptions';\nimport {\n QatiAPIError,\n QatiAuthError,\n QatiNotFoundError,\n QatiRateLimitError,\n QatiServerError,\n} from '../common/exceptions';\n\n/**\n * Maps select HTTP status codes to typed SDK errors; unmapped `4xx` fall back to `QatiAPIError`, `5xx` to `QatiServerError`.\n */\nexport const STATUS_ERROR_MAP: Partial<\n Record<number, new (detail: APIErrorDetail) => QatiAPIError>\n> = {\n 401: QatiAuthError,\n 403: QatiAuthError,\n 404: QatiNotFoundError,\n 429: QatiRateLimitError,\n 500: QatiServerError,\n};\n\n/**\n * Extracts `status_code`, best-effort `message` body, and `x-request-id` from an `AxiosResponse`.\n *\n * @param response - Axios response (typically `error.response`).\n */\nexport const parseDetail = (response: AxiosResponse): APIErrorDetail => {\n const { headers, status, statusText, data } = response;\n const requestId = headers['x-request-id'] ?? headers['X-Request-Id'];\n\n let message = statusText ?? '';\n try {\n const body = data as Record<string, unknown> | string;\n if (typeof body === 'object') {\n const msg = body.detail || body.message;\n message = typeof msg === 'string' ? msg : JSON.stringify(msg);\n }\n } catch {\n message = statusText;\n }\n\n return {\n status_code: status,\n message,\n request_id: requestId,\n };\n};\n\n/**\n * Maps an Axios failure to a `QatiAPIError` (or subclass) for the caller to throw.\n *\n * @param err - Must be an `AxiosError`; otherwise a `TypeError` is thrown.\n * @returns `QatiAPIError` with HTTP `status_code` when `err.response` exists; otherwise `status_code: 0` transport error.\n * @throws `TypeError` when `err` is not Axios-shaped.\n */\nexport const qatiApiErrorFromRequestFailure = (err: unknown): QatiAPIError => {\n if (axios.isAxiosError(err)) {\n const ax = err;\n if (ax.response) {\n const resp = ax.response;\n const ErrorCls =\n STATUS_ERROR_MAP[resp.status] ??\n (resp.status >= 500 ? QatiServerError : QatiAPIError);\n return new ErrorCls(parseDetail(resp));\n }\n return new QatiAPIError({\n status_code: 0,\n message: ax.message || String(ax.code ?? 'Axios request error'),\n request_id: null,\n });\n }\n throw new TypeError(`Expected Axios error, got ${typeof err}`);\n};\n","import axios, {\n AxiosError,\n type AxiosInstance,\n type AxiosRequestConfig,\n type AxiosResponse,\n type Method,\n} from 'axios';\n\nimport { API_REGISTRY, baseUrlFor, type QatiConfigOutput } from '../config';\nimport { QatiConfigError } from '@shared/common/exceptions';\nimport {\n computeBackoffMs,\n defaultHeaders,\n isRetryableAxiosFailure,\n isRetryableStatusCode,\n resolveRequestHeaders,\n sleep,\n validateInjectedApiNames,\n type DeadLetterCallback,\n} from './helpers';\nimport { qatiApiErrorFromRequestFailure } from '@shared/utils/http-error-to-sdk-exception';\nimport type { ApiResponse } from '@shared/types/api-response';\n\ntype RegisteredApiName = keyof typeof API_REGISTRY;\nexport type AxiosInstances = Partial<Record<RegisteredApiName, AxiosInstance>>;\n\ntype RequestOptions = {\n api_name: RegisteredApiName;\n deadLetterCallback?: DeadLetterCallback;\n params?: Record<string, string | number | boolean | undefined | null>;\n headers?: Record<string, string>;\n extraHeaders?: Record<string, string>;\n retry?: boolean;\n /** JSON request body (serialized by axios). Separate from response type param {@link HttpClient.request}. */\n data?: unknown;\n};\n\n/**\n * Low-level HTTP layer: one `axios` instance per registered API, tenant header injection, and optional retries.\n * Prefer the exported `Client` class for application code.\n */\nexport class HttpClient {\n private readonly _config: QatiConfigOutput;\n private readonly _httpClients: Map<RegisteredApiName, AxiosInstance>;\n\n constructor(config: QatiConfigOutput, axiosInstances: AxiosInstances = {}) {\n validateInjectedApiNames(axiosInstances);\n this._config = config;\n this._httpClients = new Map<RegisteredApiName, AxiosInstance>();\n\n for (const apiName of Object.keys(API_REGISTRY)) {\n const existingApiInstance = axiosInstances[apiName];\n if (existingApiInstance) {\n this._httpClients.set(apiName, existingApiInstance);\n continue;\n }\n const apiInstance = this.createClient(apiName);\n this._httpClients.set(apiName, apiInstance);\n }\n }\n\n private createClient(apiName: RegisteredApiName): AxiosInstance {\n const baseURL = baseUrlFor(this._config, apiName);\n return axios.create({\n baseURL,\n timeout: this._config.timeout * 1000,\n headers: defaultHeaders(this._config),\n });\n }\n\n /**\n * @returns The same configuration used to build base URLs, timeouts, and default headers.\n */\n get config(): QatiConfigOutput {\n return this._config;\n }\n\n /**\n * Returns the underlying `axios` instance for a logical API.\n *\n * @param apiName - `query_api` or `ingestion_api`.\n * @returns Configured `AxiosInstance` for that API.\n * @throws {@link QatiConfigError} If the internal client map has no entry for `apiName`.\n */\n getClient(apiName: RegisteredApiName): AxiosInstance {\n const instance = this._httpClients.get(apiName);\n if (!instance)\n throw new QatiConfigError(`Unknown HTTP client for API \"${apiName}\"`);\n\n return instance;\n }\n\n /**\n * Performs one HTTP request and returns the **unwrapped** `data` field from the QATI `{ data: T }` envelope.\n *\n * @typeParam T - Response payload type inside the API envelope.\n * @param method - HTTP verb (e.g. `GET`, `POST`).\n * @param url - Path relative to the API base URL (may include query string; prefer `options.params` for queries).\n * @param options - `api_name` selects which base URL and client to use. Set `retry: true` to retry transient failures.\n * @returns Parsed `T` from `response.data.data` (not the full `ApiResponse` wrapper).\n * @throws `QatiAPIError` or subclasses (`QatiAuthError`, `QatiNotFoundError`, …) on HTTP failures; on transport exhaustion when `retry` is `true`, after optional dead-letter callback.\n *\n * When `options.retry` is `true`, retries `429`, `5xx`, and transport errors up to `maxRetries` from config;\n * other `4xx` are not retried. When `retry` is `false` or omitted, a single attempt is made.\n */\n async request<T>(\n method: Method,\n url: string,\n options: RequestOptions,\n ): Promise<T> {\n const instance = this.getClient(options.api_name);\n\n const resolvedHeaders = resolveRequestHeaders(\n this._config,\n options.headers,\n options.extraHeaders,\n );\n\n const req: AxiosRequestConfig = {\n method,\n url,\n params: options.params ?? undefined,\n headers: resolvedHeaders,\n data: options.data,\n };\n\n if (!options.retry) {\n const { data } = await instance.request<ApiResponse<T>>(req);\n return data.data;\n }\n\n const response = await this.retryRequest<ApiResponse<T>>(\n () => instance.request<ApiResponse<T>>(req),\n options,\n );\n return response.data.data;\n }\n\n private async retryRequest<T>(\n requestFn: () => Promise<AxiosResponse<T>>,\n options: RequestOptions,\n ): Promise<AxiosResponse<T>> {\n for (let attempt = 0; attempt <= this._config.maxRetries; attempt++) {\n try {\n const response = await requestFn();\n\n if (!isRetryableStatusCode(response.status)) return response;\n\n if (attempt >= this._config.maxRetries) {\n throw new AxiosError(\n `Retryable HTTP ${response.status}`,\n String(response.status),\n response.config,\n undefined,\n response,\n );\n }\n await sleep(computeBackoffMs(attempt + 1, this._config));\n } catch (err) {\n const shouldRetry =\n isRetryableAxiosFailure(err) && attempt < this._config.maxRetries;\n\n if (shouldRetry) {\n await sleep(computeBackoffMs(attempt + 1, this._config));\n continue;\n }\n const error = qatiApiErrorFromRequestFailure(err);\n options.deadLetterCallback?.(options.data, error);\n throw error;\n }\n }\n throw new QatiConfigError('Unreachable retry exhaustion');\n }\n}\n","/**\n * Converts `Date` or ISO string inputs to a string suitable for Query API query params.\n *\n * @param value - `Date`, ISO-8601 string, or `undefined` / omitted.\n * @returns ISO string, or `undefined` when `value` is omitted/falsy (param omitted on the wire).\n */\nexport function dateToIso8601(value?: Date | string): string | undefined {\n if (!value) return;\n if (value instanceof Date) return value.toISOString();\n return value;\n}\n","import type { HttpClient } from '@http/http-client';\nimport type { AdvisoryType } from '@shared/types/advisory-type';\nimport type { AdvisorySeverity } from '@shared/types/advisory-severity';\nimport type { AdvisoryListResponse } from '@shared/types/advisory';\nimport { dateToIso8601 } from '@shared/utils/date.utils';\n\n/**\n * Optional filters and pagination for {@link AdvisoryResource#listAdvisories}.\n *\n * **Constraints:** `limit` is forwarded to the API and should not exceed 500 unless the server contract changes.\n */\nexport type ListAdvisoriesOptions = {\n /**\n * Maximum rows to return (server may cap). Prefer ≤ 500.\n * @default When omitted, the API default applies.\n */\n limit?: number;\n /**\n * Zero-based row offset for pagination.\n * @default When omitted, the API default applies.\n */\n offset?: number;\n /**\n * Inclusive lower bound on `triggered_at` (ISO-8601 string or `Date`).\n */\n since?: Date | string;\n /**\n * Inclusive upper bound on `triggered_at` (ISO-8601 string or `Date`).\n */\n until?: Date | string;\n};\n\n/**\n * Query API: list persisted advisories for a tenant-scoped entity.\n */\nexport class AdvisoryResource {\n private readonly apiName = 'query_api';\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Lists persisted advisories for the tenant (`GET /v1/advisories`).\n *\n * @param entityKey - Scoped entity key: uppercase type, colon, opaque id (e.g. `USER:20`). Must match server expectations for entity keys.\n * @param advisoryType - Filter by advisory `type` (see {@link AdvisoryType}).\n * @param severity - Filter by `severity` tier (see {@link AdvisorySeverity}).\n * @param options - Optional time range and pagination ({@link ListAdvisoriesOptions}).\n * @returns: {@link AdvisoryListResponse} including `total_count`, `limit`, and `offset` echo from the API.\n * ```\n */\n async listAdvisories(\n entityKey: string,\n advisoryType: AdvisoryType,\n severity: AdvisorySeverity,\n options?: ListAdvisoriesOptions,\n ): Promise<AdvisoryListResponse> {\n return this._http.request<AdvisoryListResponse>('GET', '/v1/advisories', {\n api_name: this.apiName,\n params: {\n severity,\n entity_key: entityKey,\n advisory_type: advisoryType,\n since: options?.since ? dateToIso8601(options.since) : undefined,\n until: options?.until ? dateToIso8601(options.until) : undefined,\n limit: options?.limit,\n offset: options?.offset,\n },\n });\n }\n}\n","/**\n * Async mutex callback: serializes `async` work so only one `fn` runs at a time (FIFO chain).\n */\nexport type MutexCallback = <T>(fn: () => Promise<T>) => Promise<T>;\n\n/**\n * Creates a lightweight async mutex (promise chain), not an OS thread lock.\n *\n * @returns A function that queues `fn` executions strictly one-after-another.\n */\nexport const createMutex = (): MutexCallback => {\n let tail: Promise<void> = Promise.resolve();\n\n return async <T>(fn: () => Promise<T>): Promise<T> => {\n const result = tail.then(() => fn());\n\n tail = result.then(\n () => {},\n () => {},\n );\n\n return result;\n };\n};\n","import { z } from 'zod';\n\nexport type FlushBatchFn<InputType, OutputType> = (\n batch: InputType[],\n) => Promise<OutputType>;\n\nexport type PendingTimer = {\n sequence: number;\n handleTimer: ReturnType<typeof setTimeout>;\n};\n\nexport const BatchBufferOptionsSchema = z.object({\n batchSize: z.number().int().min(1).default(100),\n flushIntervalSeconds: z.number().min(0).default(5),\n});\n\nexport type BatchBufferOptions = z.input<typeof BatchBufferOptionsSchema>;\n\nexport type SDKQueueEventStatus = 'queued';\n","import { createMutex } from '@shared/utils/mutext.utils';\n\nimport type {\n BatchBufferOptions,\n FlushBatchFn,\n PendingTimer,\n SDKQueueEventStatus,\n} from './types';\nimport { BatchBufferOptionsSchema } from './types';\n\nexport class AutoFlushBatchBuffer<InputType, OutputType> {\n /**\n * Serializes buffer/timer mutations so enqueue, flush, and timer fire never overlap.\n */\n private readonly runExclusive = createMutex();\n\n private readonly queue: InputType[] = [];\n\n private readonly flushBatch: FlushBatchFn<InputType, OutputType>;\n private readonly batchSize: number;\n\n private readonly flushIntervalMs: number;\n\n private pendingTimer: PendingTimer | null = null;\n private timerSequence = 0;\n\n constructor(\n flushBatch: FlushBatchFn<InputType, OutputType>,\n options: BatchBufferOptions,\n ) {\n this.flushBatch = flushBatch;\n const validatedOptions = BatchBufferOptionsSchema.parse(options);\n\n this.batchSize = validatedOptions.batchSize;\n this.flushIntervalMs = validatedOptions.flushIntervalSeconds * 1000;\n }\n\n async enqueue(item: InputType): Promise<SDKQueueEventStatus> {\n let batchToFlush: InputType[] = [];\n\n await this.runExclusive(async () => {\n this.queue.push(item);\n\n if (this.queue.length >= this.batchSize) {\n this.cancelTimer();\n batchToFlush = this.getItemsToSend();\n }\n if (this.queue.length === 1) this.scheduleTimer();\n });\n\n if (batchToFlush.length)\n await this.executeFlush(batchToFlush).catch(() => {});\n\n return 'queued';\n }\n\n /**\n * Flush all buffered items immediately.\n * @returns The return value of {@link flushBatch}, or `{}` if the buffer was empty.\n */\n async flush(): Promise<OutputType> {\n let batch: InputType[] = [];\n await this.runExclusive(async () => {\n this.cancelTimer();\n batch = this.getItemsToSend();\n });\n if (!batch.length) return {} as OutputType;\n return this.executeFlush(batch);\n }\n\n /**\n * Best-effort flush for shutdown; logs and drops items on failure.\n */\n async shutdown(): Promise<void> {\n let batch: InputType[] = [];\n await this.runExclusive(async () => {\n this.cancelTimer();\n batch = this.getItemsToSend();\n });\n\n if (!batch.length) return;\n await this.executeFlush(batch).catch(() => {});\n }\n\n /**\n * The number of items currently in the buffer.\n */\n get pendingCount(): number {\n return this.queue.length;\n }\n\n private getItemsToSend(): InputType[] {\n if (!this.queue.length) return [];\n return this.queue.splice(0, this.queue.length);\n }\n\n private cancelTimer(): void {\n if (!this.pendingTimer) return;\n\n clearTimeout(this.pendingTimer.handleTimer);\n this.pendingTimer = null;\n }\n\n private scheduleTimer(): void {\n this.cancelTimer();\n const seq = ++this.timerSequence;\n const handleTimer = setTimeout(\n () => this.timerFire(seq),\n this.flushIntervalMs,\n );\n this.pendingTimer = { sequence: seq, handleTimer };\n }\n\n private async timerFire(seq: number): Promise<void> {\n let batch: InputType[] = [];\n\n await this.runExclusive(async () => {\n if (this.pendingTimer?.sequence !== seq) return;\n this.pendingTimer = null;\n batch = this.getItemsToSend();\n });\n\n if (!batch.length) return;\n await this.executeFlush(batch).catch(() => {});\n }\n\n private async executeFlush(batch: InputType[]): Promise<OutputType> {\n const result = await this.flushBatch(batch);\n return result ?? ({} as OutputType);\n }\n}\n","// resources/event-resource.ts\n\nimport type { DeadLetterCallback } from '@http/helpers';\nimport type { HttpClient } from '@http/http-client';\nimport type { BatchEventResponse } from 'index';\nimport { AutoFlushBatchBuffer } from '@shared/buffering/auto-flush-batch-buffer';\nimport type { RawEventRequest } from '@v1/schemas/raw-event';\nimport type { SDKQueueEventStatus } from '@shared/buffering/types';\n\n/**\n * Overrides for the in-memory ingestion buffer (defaults otherwise come from: {@link HttpClient}'s\n * resolved config: `ingestionBatchSize`, `ingestionFlushIntervalSeconds`).\n */\nexport type EventResourceOptions = {\n /**\n * Max events to hold before an automatic flush to `POST /v1/events:batch` (must be integer ≥ 1).\n */\n batchSize?: number;\n /**\n * Max seconds to wait after the first queued event before flushing a non-empty partial batch (must be ≥ 0 per buffer schema).\n */\n flushIntervalSeconds?: number;\n};\n\n/**\n * **Append-only ingestion path**: queues {@link RawEventRequest} rows locally and ships them in batches to `POST /v1/events:batch`,\n * keeping the hot path non-blocking in your service. The platform persists telemetry for downstream scoring;\n * this client does **not** enforce policies or block traffic.\n *\n * Flushes happen when the buffer hits **N** events or **T** seconds pass since the first queued item (whichever comes first).\n * Failed batches retry with backoff + jitter; after exhaustion an optional dead-letter callback can persist or alert without crashing the producer’s enqueue loop.\n */\nexport class EventResource {\n private readonly _http: HttpClient;\n private readonly _buffer: AutoFlushBatchBuffer<\n RawEventRequest,\n BatchEventResponse\n >;\n private readonly apiName = 'ingestion_api';\n private _deadLetterCallback?: DeadLetterCallback;\n\n /**\n * @param http - Shared HTTP client (supplies config defaults and axios instance for `ingestion_api`).\n * @param options - Optional buffer sizing overrides ({@link EventResourceOptions}).\n */\n constructor(http: HttpClient, options: EventResourceOptions = {}) {\n this._http = http;\n this._buffer = new AutoFlushBatchBuffer<\n RawEventRequest,\n BatchEventResponse\n >((batch) => this.postBatch(batch), {\n batchSize: options.batchSize ?? http.config.ingestionBatchSize,\n flushIntervalSeconds:\n options.flushIntervalSeconds ??\n http.config.ingestionFlushIntervalSeconds,\n });\n }\n\n /**\n * Registers a hook invoked after retries are exhausted for a failed batch POST so you can land failures on a DLQ or metric pipeline. Must stay non-throwing — swallow errors inside your handler.\n */\n onIngestionFailure(callback: DeadLetterCallback): this {\n this._deadLetterCallback = callback;\n return this;\n }\n\n /**\n * Accepts one normalized event into the in-memory buffer and returns immediately with **`queued`** — HTTP happens on flush timers or explicit `flush`, not inline with `enqueue`.\n */\n async enqueue(event: RawEventRequest): Promise<SDKQueueEventStatus> {\n return await this._buffer.enqueue(event);\n }\n\n /**\n * Sends whatever is buffered **now** as one ingestion batch (or resolves immediately with an empty-shaped result when nothing was pending).\n */\n async flush(): Promise<BatchEventResponse> {\n return this._buffer.flush();\n }\n\n /**\n * Best-effort final flush then tears down timers — typically reached via `Client.close()` during graceful shutdown so late telemetry is not dropped on SIGTERM.\n */\n async shutdown(): Promise<void> {\n await this._buffer.shutdown();\n }\n\n /**\n * Live count of rows waiting in the in-memory buffer (not yet acknowledged by the ingestion API).\n */\n get pendingCount(): number {\n return this._buffer.pendingCount;\n }\n\n private async postBatch(\n batch: RawEventRequest[],\n ): Promise<BatchEventResponse> {\n return this._http.request<BatchEventResponse>('POST', '/v1/events:batch', {\n api_name: this.apiName,\n data: { events: batch },\n retry: true,\n deadLetterCallback: this._deadLetterCallback,\n });\n }\n}\n","import type { ExplainResponse } from '@schemas/explain';\nimport type { HttpClient } from '@http/http-client';\nimport { dateToIso8601 } from '@shared/utils/date.utils';\n\n/**\n * Query API: composite explain / attribution snapshot for one entity.\n */\nexport class ExplainResource {\n private readonly apiName = 'query_api' as const;\n\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Fetches composite explain for one entity (`GET /v1/explain/{entity_key}`).\n *\n * @param entityKey - URL-encoded path segment: uppercase entity type, colon, id (e.g. `USER:user-123`). Must not contain raw `/` (caller passes logical key; SDK encodes for HTTP).\n * @param atTimestamp - Optional “as of” time (`Date` or ISO-8601 string). Omitted means server default (typically “now”).\n * @param topDominantNeighbors - Optional cap on dominant neighbor rows returned.\n * @param topEvents - Optional cap on top contributing events returned.\n * @returns {@link ExplainResponse} (closure score, risk tier, top events, neighbours, active advisories).\n * @example\n * ```ts\n * const x = await client.explain.get('USER:alice', new Date(), 5, 10);\n * ```\n */\n async get(\n entityKey: string,\n atTimestamp?: Date | string,\n topDominantNeighbors?: number,\n topEvents?: number,\n ): Promise<ExplainResponse> {\n return await this._http.request<ExplainResponse>(\n 'GET',\n `/v1/explain/${encodeURIComponent(entityKey)}`,\n {\n api_name: this.apiName,\n params: {\n at_timestamp: dateToIso8601(atTimestamp),\n top_dominant_neighbors: topDominantNeighbors,\n top_events: topEvents,\n },\n },\n );\n }\n}\n","import type { HttpClient } from '@http/http-client';\nimport type { VerifyCredentialsResponse } from '@shared/types/tenant';\n\n/**\n * Validates that the configured API key is valid.\n * Use at process startup so misconfigured keys fail fast before trust-state or ingestion traffic.\n */\nexport class TenantResource {\n private readonly apiName = 'query_api' as const;\n\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Confirms whether the **`x-tenant-api-key`** presented by this client is accepted by the platform and returns the opaqu\n * e **tenant partition id** bound to that key.\n * Use at process startup so misconfigured keys fail fast before trust-state or explain traffic.\n *\n * @returns: {@link VerifyCredentialsResponse}\n */\n async verifyCredentials(): Promise<VerifyCredentialsResponse> {\n return this._http.request<VerifyCredentialsResponse>(\n 'GET',\n '/v1/tenants/verify-credentials',\n { api_name: this.apiName },\n );\n }\n}\n","import type { HttpClient } from '@http/http-client';\nimport type { EntityTypeLowerCase } from '@shared/types/entity-type';\nimport type { TrustState } from '@shared/types/trust-state';\n\n/**\n * Optional tuning for top-contributor lists.\n */\nexport type TrustStateOptions = {\n /**\n * How many contributor rows to return per entity. Default: 5.\n */\n topContributorsLimit?: number;\n /**\n * Rolling window length (minutes) used to rank contributors. Default: 1440 (24 hours).\n */\n topContributorsWindowMinutes?: number;\n};\n\n/**\n * Reads **materialized trust snapshots** from the Query API:\n * Closure Score, momentum, risk tier, and recent contributors for principals (users, devices, sessions, models, etc.).\n * This is how applications poll “what does QATI believe about this entity **now**?”; observability only; no blocking or policy execution occurs here.\n */\nexport class TrustStateResource {\n private readonly apiName = 'query_api' as const;\n\n constructor(private readonly _http: HttpClient) {}\n\n /**\n * Fetches the latest trust state for one entity.\n *\n * @param entityType - Lowercase entity class (see {@link EntityTypeLowerCase}).\n * @param entityId - Id for the entity(Required)\n * @param options - Optional contributor limits/window.\n * @returns {@link TrustState} including `current_closure_score`, `risk_tier`, and `top_contributors`.\n */\n async getTrustState(\n entityType: EntityTypeLowerCase,\n entityId: string,\n options: TrustStateOptions = {},\n ): Promise<TrustState> {\n return await this._http.request<TrustState>(\n 'GET',\n `/v1/entities/${entityType}/${encodeURIComponent(entityId)}/trust-state`,\n {\n api_name: this.apiName,\n params: {\n top_contributors_limit: options.topContributorsLimit ?? 5,\n top_contributors_window_minutes: options.topContributorsWindowMinutes,\n },\n },\n );\n }\n\n /**\n * Fetches trust states for many entities in one request.\n *\n * @param entityType - Lowercase entity class (see {@link EntityTypeLowerCase}).\n * @param entityIds - Distinct ids to query. Prefer length ≤ 100 or the server may reject the request.\n * @param options - Optional contributor limits/window.\n * @returns Array of {@link TrustState} in server-defined order; empty array when `entityIds` is empty.\n */\n async getTrustStates(\n entityType: EntityTypeLowerCase,\n entityIds: readonly string[],\n options: TrustStateOptions = {},\n ): Promise<TrustState[]> {\n if (!entityIds.length) return [];\n\n return await this._http.request<TrustState[]>('GET', '/v1/trust-states', {\n api_name: this.apiName,\n params: {\n entity_type: entityType,\n entity_ids: entityIds.join(','),\n top_contributors_limit: options.topContributorsLimit ?? 5,\n top_contributors_window_minutes: options.topContributorsWindowMinutes,\n },\n });\n }\n}\n","import type { QatiConfigOutput } from '../config.js';\nimport { HttpClient, type AxiosInstances } from '../http/http-client';\nimport { AdvisoryResource } from '../resources/advisory-resource';\nimport { EventResource } from '../resources/event-resource';\nimport { ExplainResource } from '../resources/explain-resource';\nimport { TenantResource } from '../resources/tenant-resource';\nimport { TrustStateResource } from '../resources/trust-state-resource';\n\n/**\n * High-level QATI API client: namespaces for tenant, trust state, advisories, explain, and batched event ingestion.\n *\n * Construct via {@link Session#createClient}; do not call `new Client(...)` directly unless you already have {@link QatiConfigOutput}.\n *\n * @example\n * ```typescript\n * const session = new Session();\n * const client = session.createClient();\n * const explained = await client.explain.get('USER:user-123');\n * console.log(explained.closure_score);\n * ```\n */\nexport class Client extends HttpClient {\n private readonly _tenant: TenantResource;\n private readonly _trustState: TrustStateResource;\n private readonly _advisory: AdvisoryResource;\n private readonly _explain: ExplainResource;\n private readonly _events: EventResource;\n\n /**\n * @param config - Resolved SDK configuration (typically `session.config`).\n * @param axiosInstances - Optional per-API `axios` instances; see {@link Session#createClient}.\n * @param eventResourceOptions - Optional overrides for buffered ingestion (`onDeadLetter`, batch sizing).\n */\n constructor(config: QatiConfigOutput, axiosInstances?: AxiosInstances) {\n super(config, axiosInstances);\n\n this._tenant = new TenantResource(this);\n this._trustState = new TrustStateResource(this);\n this._advisory = new AdvisoryResource(this);\n this._explain = new ExplainResource(this);\n this._events = new EventResource(this);\n }\n\n /**\n * Tenant API surface (credentials verification).\n *\n * @returns {@link TenantResource} bound to this client’s Query API base URL and tenant key.\n */\n get tenant(): TenantResource {\n return this._tenant;\n }\n\n /**\n * Trust scores and contributors for entities.\n *\n * @returns {@link TrustStateResource} for the Query API.\n */\n get trustState(): TrustStateResource {\n return this._trustState;\n }\n\n /**\n * List persisted advisories for an entity.\n *\n * @returns {@link AdvisoryResource} for the Query API.\n */\n get advisory(): AdvisoryResource {\n return this._advisory;\n }\n\n /**\n * Composite explain / attribution for an entity key.\n *\n * @returns {@link ExplainResource} for the Query API.\n */\n get explain(): ExplainResource {\n return this._explain;\n }\n\n /**\n * Buffered ingestion of `RawEventRequest` payloads to the ingestion API (`POST /v1/events:batch`).\n *\n * @returns {@link EventResource} for the Query API.\n */\n get events(): EventResource {\n return this._events;\n }\n\n /**\n * Flushes the event ingestion buffer (best-effort), then shuts down the batch scheduler.\n * Call this on process shutdown so queued events are not lost.\n *\n * @returns Resolves when {@link EventResource#shutdown} completes.\n */\n async close(): Promise<void> {\n await this._events.shutdown();\n }\n}\n","import {\n resolveQatiConfig,\n type QatiConfigInput,\n type QatiConfigOutput,\n} from './config';\nimport { Client } from './client/client';\nimport type { AxiosInstances } from './http/http-client';\n\n/**\n * Entry point for the SDK: holds resolved {@link QatiConfigOutput} and builds {@link Client} instances.\n *\n * If `config` is omitted, calls {@link resolveQatiConfig} (loads `.env`, merges `QATI_*` env vars into camelCase,\n * applies Zod defaults for optional fields only). **Query and Ingestion base URLs are required** — set\n * `QATI_QUERY_API_BASE_URL` and `QATI_INGESTION_API_BASE_URL` (or pass `queryApiBaseUrl` / `ingestionApiBaseUrl`).\n * **Precedence** (highest first): constructor argument → environment → Zod defaults (not applied to base URLs).\n *\n * @example\n * ```ts\n * const session = new Session({\n * tenantApiKey: 'qati-...',\n * queryApiBaseUrl: 'http://localhost:8001',\n * ingestionApiBaseUrl: 'http://localhost:8000',\n * });\n * const client = session.createClient();\n * await client.tenant.verifyCredentials();\n * ```\n */\nexport class Session {\n private readonly _config: QatiConfigOutput;\n\n constructor(config?: Partial<QatiConfigInput>) {\n this._config = resolveQatiConfig(config);\n }\n\n /**\n * Resolved, validated configuration.\n */\n get config(): QatiConfigOutput {\n return this._config;\n }\n\n /**\n * Creates an API {@link Client} using this session’s resolved config.\n *\n * @param httpClients - Optional injected `axios` instances keyed by `query_api` / `ingestion_api` (testing, proxies, interceptors).\n * @returns A new {@link Client} (not a singleton).\n * @example\n * ```typescript\n * const session = new Session();\n * const client = session.createClient();\n * const explained = await client.explain.get('USER:user-123');\n * console.log(explained.closure_score);\n * ```\n */\n createClient(httpClients?: AxiosInstances): Client {\n return new Client(this._config, httpClients ?? {});\n }\n}\n","import { z } from 'zod';\n\n/** Scalar in [0, 1]. */\nexport const fraction01 = () => z.number().min(0).max(1);\n\n/** Optional scalar in [0, 1] or null. */\nexport const fraction01Nullable = () => fraction01().nullable().optional();\n\n/** Non-negative integer. */\nexport const nonNegativeInt = () => z.number().int().nonnegative();\n\n/** Non-empty string (min length 1). */\nexport const nonEmptyString = () => z.string().min(1);\n","export const SIGNAL_TYPES = [\n 'TRANSACTION',\n 'AUTH',\n 'BEHAVIOR',\n 'SYSTEM_TELEMETRY',\n 'MODEL_OUTPUT',\n 'ANOMALY_FLAG',\n 'NETWORK_EVENT',\n 'SESSION',\n 'PROMPT_INPUT',\n 'CONTEXT_INTEGRITY',\n 'TOOL_CALL',\n 'RAG_RETRIEVAL',\n 'POLICY_EVENT',\n 'USER_FEEDBACK',\n 'WORKFLOW_ACTION',\n 'API_CALL',\n] as const;\n\n/**\n * Supported `signal_type` discriminants for v1 ingestion events.\n */\nexport type SignalType = (typeof SIGNAL_TYPES)[number];\n","export const PROVENANCE_MODES = [\n 'DETERMINISTIC',\n 'EXTERNAL_RNG',\n 'ATTESTED',\n] as const;\n\n/**\n * Provenance classification modes for signal ingestion (v1 envelope).\n */\nexport type ProvenanceMode = (typeof PROVENANCE_MODES)[number];\n","import { z } from 'zod';\nimport { PROVENANCE_MODES } from '@shared/types/provenance-mode';\n\n/** Optional provenance metadata on v1 signals (mode, source, epoch, health). */\nexport const ProvenanceSchema = z.object({\n mode: z.enum(PROVENANCE_MODES).optional(),\n source_id: z.string().optional(),\n epoch_counter: z.number().int().nonnegative().optional(),\n health_summary: z.union([z.string(), z.record(z.unknown())]).optional(),\n});\n","/**\n * Optional integrity hints (hash / signature) carried on v1 signals.\n */\nimport { z } from 'zod';\n\nexport const IntegritySchema = z.object({\n hash: z.string().optional(),\n signature: z.string().optional(),\n});\n","/**\n * Optional principal dimensions on a v1 signal (at least one should be set for useful graph joins).\n */\nimport { z } from 'zod';\n\n/** Each id, when present, must be a non-empty string (opaque; UUID recommended where applicable). */\nexport const EventPrincipalSchema = z.object({\n user_id: z.string().min(1).optional(),\n account_id: z.string().min(1).optional(),\n device_id: z.string().min(1).optional(),\n session_id: z.string().min(1).optional(),\n model_id: z.string().min(1).optional(),\n service_id: z.string().min(1).optional(),\n conversation_id: z.string().min(1).optional(),\n document_id: z.string().min(1).optional(),\n tool_id: z.string().min(1).optional(),\n workflow_id: z.string().min(1).optional(),\n api_key_id: z.string().min(1).optional(),\n}).strict();\n\n/** Inferred principal bag from {@link EventPrincipalSchema}. */\nexport type EventPrincipal = z.infer<typeof EventPrincipalSchema>;\n","/**\n * Zod schemas for v1 ingestion envelopes: strongly typed `BaseEvent` and wire-format `RawEventRequest`.\n */\nimport { z } from 'zod';\nimport { SIGNAL_TYPES } from '@shared/types/signal-type';\nimport { ProvenanceSchema } from './provenance';\nimport { IntegritySchema } from './integrity';\nimport { EventPrincipalSchema } from './event-principal';\n\n/**\n * Full typed signal envelope before wrapping as a `RawEventRequest` (`signal_version`, `signal_type`, `principal`, …).\n *\n * **Constraints:** `confidence_hint` in `[0, 1]` when set; `timestamp` ISO-8601 when provided.\n */\nexport const BaseEventSchema = z.object({\n tenant_id: z.string().describe('Tenant partition key (required).'),\n signal_version: z.string().describe('Schema version (e.g. v1).'),\n signal_type: z.enum(SIGNAL_TYPES).describe('Type of signal.'),\n signal_payload: z\n .record(z.any())\n .describe('Payload validated per signal_type.'),\n principal: EventPrincipalSchema,\n timestamp: z\n .string()\n .datetime()\n .default(new Date().toISOString())\n .optional()\n .describe('Event / provenance record time when provided by the client.'),\n confidence_hint: z\n .number()\n .max(1)\n .min(0)\n .optional()\n .describe('Scalar in [0,1]; how trustworthy this event is.'),\n provenance: ProvenanceSchema.optional().describe(\n 'Optional provenance (mode, source_id, epoch_counter, health_summary).',\n ),\n integrity: IntegritySchema.optional(),\n});\n\n/**\n * HTTP / SDK ingestion body: `tenant_id` + JSON `payload` (API assigns persisted raw-event id).\n */\nexport const RawEventRequestSchema = z.object({\n tenant_id: z.string().describe('Tenant partition key (required).'),\n payload: z.record(z.any()).describe('JSON payload (stored as JSONB in DB).'),\n});\n\n/** Typed HTTP ingestion body. */\nexport type RawEventRequest = z.infer<typeof RawEventRequestSchema>;\n\n/** Typed v1 envelope inside `RawEventRequest.payload` when using signal builders. */\nexport type BaseEvent = z.infer<typeof BaseEventSchema>;\n","import { z } from 'zod';\nimport { fraction01 } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const AnomalyFlagSignalPayloadSchema = z.object({\n severity: fraction01(),\n});\n\nexport const AnomalyFlagSignalSchema = BaseEventSchema.extend({\n signal_payload: AnomalyFlagSignalPayloadSchema,\n});\n\n/** `signal_type: 'ANOMALY_FLAG'` — `severity` required in `[0, 1]`. */\nexport type AnomalyFlagSignalEvent = z.infer<typeof AnomalyFlagSignalSchema>;\n","import {\n BaseEventSchema,\n type BaseEvent,\n type RawEventRequest,\n} from '../schemas/raw-event';\nimport type { SignalType } from '@shared/types/signal-type';\n\nexport const buildRawEventPayload = (\n event: BaseEvent,\n signalPayload: Record<string, unknown>,\n signalType: SignalType,\n): BaseEvent => {\n const rawEventPayload: BaseEvent = {\n timestamp: event.timestamp,\n provenance: event.provenance,\n principal: event.principal,\n confidence_hint: event.confidence_hint,\n tenant_id: event.tenant_id,\n signal_version: 'v1',\n signal_type: signalType,\n signal_payload: signalPayload,\n integrity: event.integrity,\n };\n return BaseEventSchema.parse(rawEventPayload);\n};\n\nexport const buildRawEventRequest = (\n event: BaseEvent,\n signalPayload: Record<string, unknown>,\n signalType: SignalType,\n): RawEventRequest => {\n const rawEventPayload = buildRawEventPayload(\n event,\n signalPayload,\n signalType,\n );\n return {\n tenant_id: event.tenant_id,\n payload: rawEventPayload,\n };\n};\n","import {\n AnomalyFlagSignalPayloadSchema,\n type AnomalyFlagSignalEvent,\n} from '../schemas/anomaly-flag';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createAnomalyFlagEvent = (\n event: AnomalyFlagSignalEvent,\n): RawEventRequest => {\n const signalPayload = AnomalyFlagSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'ANOMALY_FLAG');\n};\n","export const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n","import { z } from 'zod';\nimport { HTTP_METHODS } from '@shared/types/http-method';\nimport { nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ApiCallSignalPayloadSchema = z.object({\n service_id: nonEmptyString().describe('Target service identifier.'),\n endpoint: nonEmptyString().describe('API route path.'),\n method: z\n .enum(HTTP_METHODS)\n .describe('HTTP method: GET, POST, PUT, PATCH, or DELETE.'),\n status_code: z\n .number()\n .int()\n .min(100)\n .max(599)\n .describe('HTTP response status code.'),\n authorized: z\n .boolean()\n .nullable()\n .describe(\n 'Whether the call was authorized; null means authorization is unknown.',\n ),\n authentication_present: z\n .boolean()\n .nullable()\n .optional()\n .describe(\n 'Whether authentication credentials were present when known.',\n ),\n rate_limited: z\n .boolean()\n .nullable()\n .optional()\n .describe('Whether the call was rate limited when known.'),\n external_side_effect: z\n .boolean()\n .nullable()\n .optional()\n .describe(\n 'Whether the call modifies state outside the caller context when known.',\n ),\n records_returned: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Number of records returned when available.'),\n records_modified: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Number of records modified when available.'),\n contains_sensitive_data: z\n .boolean()\n .nullable()\n .optional()\n .describe('Whether sensitive data was involved when known.'),\n latency_ms: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('API latency in milliseconds when available.'),\n retry_count: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Number of retry attempts when available.'),\n api_key_id: z\n .string()\n .nullable()\n .optional()\n .describe('API key identifier used for the call when applicable.'),\n});\n\nexport const ApiCallSignalSchema = BaseEventSchema.extend({\n signal_payload: ApiCallSignalPayloadSchema,\n});\n\n/** `signal_type: 'API_CALL'` with backend API operation metadata. */\nexport type ApiCallSignalEvent = z.infer<typeof ApiCallSignalSchema>;\n","import {\n ApiCallSignalPayloadSchema,\n type ApiCallSignalEvent,\n} from '../schemas/api-call';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createApiCallEvent = (\n event: ApiCallSignalEvent,\n): RawEventRequest => {\n const signalPayload = ApiCallSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'API_CALL');\n};\n","import { z } from 'zod';\nimport { BaseEventSchema } from './raw-event';\n\nexport const AuthSignalPayloadSchema = z.object({\n result: z\n .string()\n .nullable()\n .optional()\n .describe('Auth result (SUCCESS, FAILURE)'),\n auth_method: z\n .string()\n .nullable()\n .optional()\n .describe('Auth method (PASSWORD, MFA_TOTP, etc.)'),\n mfa_used: z.boolean().nullable().optional().describe('Whether MFA was used'),\n mfa_bypassed: z.boolean().optional().default(false),\n failed_attempts: z.number().int().nonnegative().optional().default(0),\n ip: z.string().nullable().optional(),\n country: z\n .string()\n .nullable()\n .optional()\n .describe('ISO 3166-1 alpha-2 country code'),\n user_agent: z.string().nullable().optional(),\n unusual_location: z.boolean().optional().default(false),\n after_hours_login: z\n .boolean()\n .optional()\n .default(false)\n .describe('Login outside normal business hours'),\n});\n\nexport const AuthSignalSchema = BaseEventSchema.extend({\n signal_payload: AuthSignalPayloadSchema,\n});\n\n/** `signal_type: 'AUTH'` with authentication outcome metadata. */\nexport type AuthSignalEvent = z.infer<typeof AuthSignalSchema>;\n","import { AuthSignalPayloadSchema, type AuthSignalEvent } from '../schemas/auth';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createAuthEvent = (event: AuthSignalEvent): RawEventRequest => {\n const signalPayload = AuthSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'AUTH');\n};\n","import { z } from 'zod';\nimport { fraction01 } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const BehaviorSignalPayloadSchema = z.object({\n deviation_score: fraction01(),\n});\n\nexport const BehaviorSignalSchema = BaseEventSchema.extend({\n signal_payload: BehaviorSignalPayloadSchema,\n});\n\n/** `signal_type: 'BEHAVIOR'` — `deviation_score` in `[0, 1]`. */\nexport type BehaviorSignalEvent = z.infer<typeof BehaviorSignalSchema>;\n","import {\n BehaviorSignalPayloadSchema,\n type BehaviorSignalEvent,\n} from '../schemas/behavior';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createBehaviorEvent = (\n event: BehaviorSignalEvent,\n): RawEventRequest => {\n const signalPayload = BehaviorSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'BEHAVIOR');\n};\n","export const CONTEXT_SOURCES = [\n 'CONVERSATION_HISTORY',\n 'RETRIEVED_DOCUMENT',\n 'TOOL_OUTPUT',\n 'SYSTEM',\n 'DEVELOPER',\n 'USER',\n] as const;\n\nexport type ContextSource = (typeof CONTEXT_SOURCES)[number];\n","import { z } from 'zod';\nimport { CONTEXT_SOURCES } from '@shared/types/context-integrity';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ContextIntegritySignalPayloadSchema = z.object({\n context_source: z\n .enum(CONTEXT_SOURCES)\n .describe(\n 'Origin of the evaluated context: CONVERSATION_HISTORY, RETRIEVED_DOCUMENT, TOOL_OUTPUT, SYSTEM, DEVELOPER, or USER.',\n ),\n instruction_conflict_detected: z\n .boolean()\n .describe('Whether conflicting instructions were detected in context.'),\n untrusted_instruction_detected: z\n .boolean()\n .describe(\n 'Whether an untrusted source contains instruction-like text.',\n ),\n context_priority_violation: z\n .boolean()\n .describe(\n 'Whether lower-priority context attempts to override higher-priority context.',\n ),\n recursive_instruction_pattern: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the context contains a loop or recursive instruction.'),\n context_drift_score: fraction01Nullable().describe(\n '0–1 context drift score when available.',\n ),\n system_prompt_conflict_score: fraction01Nullable().describe(\n '0–1 conflict with system prompt intent when available.',\n ),\n developer_prompt_conflict_score: fraction01Nullable().describe(\n '0–1 conflict with developer prompt intent when available.',\n ),\n retrieved_instruction_count: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Count of instruction-like snippets in retrieved context.'),\n hidden_instruction_score: fraction01Nullable().describe(\n '0–1 likelihood of hidden instructions when available.',\n ),\n source_document_id: z\n .string()\n .nullable()\n .optional()\n .describe('Related document identifier when applicable.'),\n untrusted_source_count: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe(\n 'Count of untrusted sources; contributes to untrusted-instruction detection.',\n ),\n source_trust_score: fraction01Nullable().describe(\n '0–1 trust score for the context source when available.',\n ),\n lowest_source_trust_score: fraction01Nullable().describe(\n '0–1 lowest trust score among sources when available.',\n ),\n recursive_pattern_score: fraction01Nullable().describe(\n '0–1 recursive pattern score when available.',\n ),\n prompt_injection_score: fraction01Nullable().describe(\n '0–1 prompt injection score when available; omit if unknown.',\n ),\n contains_instruction_override: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the context contains an instruction override.'),\n context_injection_score: fraction01Nullable().describe(\n '0–1 context injection score when available; omit if unknown.',\n ),\n});\n\nexport const ContextIntegritySignalSchema = BaseEventSchema.extend({\n signal_payload: ContextIntegritySignalPayloadSchema,\n});\n\n/** `signal_type: 'CONTEXT_INTEGRITY'` with context contamination checks. */\nexport type ContextIntegritySignalEvent = z.infer<\n typeof ContextIntegritySignalSchema\n>;\n","import {\n ContextIntegritySignalPayloadSchema,\n type ContextIntegritySignalEvent,\n} from '../schemas/context-integrity';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\nexport const createContextIntegrityEvent = (\n event: ContextIntegritySignalEvent,\n): RawEventRequest => {\n const signalPayload = ContextIntegritySignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'CONTEXT_INTEGRITY');\n};\n","import { z } from 'zod';\nimport { fraction01, fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ModelOutputSignalPayloadSchema = z.object({\n missing_citations_rate: fraction01Nullable(),\n citation_rate: fraction01Nullable(),\n expected_citation_rate: fraction01Nullable().describe(\n 'Baseline or policy-expected citation rate (use with citation_rate)',\n ),\n policy_violations: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Count of policy violations when available.'),\n policy_violation_rate: fraction01Nullable(),\n tool_call_inconsistency: fraction01().optional().default(0),\n tool_inconsistency_rate: fraction01Nullable().describe(\n 'Rate of inconsistent tool calls in the eval window',\n ),\n tool_miss_rate: fraction01Nullable(),\n eval_window_n: z\n .number()\n .int()\n .min(1)\n .nullable()\n .optional()\n .describe('Evaluation window size'),\n hallucination_risk_score: fraction01Nullable().describe(\n '0–1 hallucination risk when available; omit if unknown.',\n ),\n self_contradiction_score: fraction01Nullable().describe(\n '0–1 self-contradiction score when available; omit if unknown.',\n ),\n grounding_score: fraction01Nullable().describe(\n '0–1 grounding score when available; omit if unknown.',\n ),\n contains_unsupported_claims: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Whether the output contains unsupported claims; confirm with clients.',\n ),\n});\n\nexport const ModelOutputSignalSchema = BaseEventSchema.extend({\n signal_payload: ModelOutputSignalPayloadSchema,\n});\n\n/** `signal_type: 'MODEL_OUTPUT'` with citation / tool-consistency metrics in `[0, 1]` where applicable. */\nexport type ModelOutputSignalEvent = z.infer<typeof ModelOutputSignalSchema>;\n","import {\n ModelOutputSignalPayloadSchema,\n type ModelOutputSignalEvent,\n} from '../schemas/model-output';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `MODEL_OUTPUT` signal.\n *\n * @param event - The `ModelOutputSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `MODEL_OUTPUT` signal.\n */\nexport const createModelOutputEvent = (\n event: ModelOutputSignalEvent,\n): RawEventRequest => {\n const signalPayload = ModelOutputSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'MODEL_OUTPUT');\n};\n","import { z } from 'zod';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const NetworkSignalPayloadSchema = z.object({\n ip: z.string().nullable().optional(),\n asn: z.string().nullable().optional(),\n reputation_score: fraction01Nullable(),\n threat_score: fraction01Nullable(),\n is_datacenter: z.boolean().nullable().optional(),\n is_untrusted_segment: z\n .boolean()\n .optional()\n .default(false)\n .describe('Traffic originated from an untrusted network segment'),\n asn_reputation: fraction01Nullable().describe(\n 'Reputation score for the origin ASN (0–1, higher is more trusted)',\n ),\n});\n\nexport const NetworkSignalSchema = BaseEventSchema.extend({\n signal_payload: NetworkSignalPayloadSchema,\n});\n\n/** `signal_type: 'NETWORK_EVENT'` with ASN/IP/reputation fields. */\nexport type NetworkSignalEvent = z.infer<typeof NetworkSignalSchema>;\n","import {\n NetworkSignalPayloadSchema,\n type NetworkSignalEvent,\n} from '../schemas/network-event';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `NETWORK_EVENT` signal.\n *\n * @param event - The `NetworkSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `NETWORK_EVENT` signal.\n */\nexport const createNetworkEvent = (\n event: NetworkSignalEvent,\n): RawEventRequest => {\n const signalPayload = NetworkSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'NETWORK_EVENT');\n};\n","export const POLICY_CATEGORIES = [\n 'SAFETY',\n 'PRIVACY',\n 'SECURITY',\n 'COMPLIANCE',\n 'CONTENT',\n 'OTHER',\n] as const;\n\nexport type PolicyCategory = (typeof POLICY_CATEGORIES)[number];\n\nexport const POLICY_RESULTS = ['PASS', 'WARN', 'FAIL', 'BLOCKED'] as const;\n\nexport type PolicyResult = (typeof POLICY_RESULTS)[number];\n","import { z } from 'zod';\nimport { POLICY_CATEGORIES, POLICY_RESULTS } from '@shared/types/policy-event';\nimport { fraction01, fraction01Nullable, nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const PolicyEventSignalPayloadSchema = z.object({\n policy_check_name: nonEmptyString().describe('Name of the policy check.'),\n policy_category: z\n .enum(POLICY_CATEGORIES)\n .describe(\n 'Policy domain: SAFETY, PRIVACY, SECURITY, COMPLIANCE, CONTENT, or OTHER.',\n ),\n policy_result: z\n .enum(POLICY_RESULTS)\n .describe('Policy check result: PASS, WARN, FAIL, or BLOCKED.'),\n severity: fraction01().describe('0–1 policy event severity.'),\n blocked: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the action or output was blocked.'),\n violation_count: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Count of policy violations when available.'),\n policy_confidence: fraction01Nullable().describe(\n '0–1 policy classifier confidence when available.',\n ),\n redaction_applied: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether content was redacted.'),\n});\n\nexport const PolicyEventSignalSchema = BaseEventSchema.extend({\n signal_payload: PolicyEventSignalPayloadSchema,\n});\n\n/** `signal_type: 'POLICY_EVENT'` with policy check outcome metadata. */\nexport type PolicyEventSignalEvent = z.infer<typeof PolicyEventSignalSchema>;\n","import {\n PolicyEventSignalPayloadSchema,\n type PolicyEventSignalEvent,\n} from '../schemas/policy-event';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `POLICY_EVENT` signal.\n *\n * @param event - The `PolicyEventSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `POLICY_EVENT` signal.\n */\nexport const createPolicyEvent = (\n event: PolicyEventSignalEvent,\n): RawEventRequest => {\n const signalPayload = PolicyEventSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'POLICY_EVENT');\n};\n","import { z } from 'zod';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nconst promptHashSchema = z\n .string()\n .regex(/^[a-fA-F0-9]{64}$/)\n .optional()\n .describe('Optional SHA-256 hash of prompt text (64 hex characters).');\n\nexport const PromptInputSignalPayloadSchema = z.object({\n prompt_length_chars: z\n .number()\n .int()\n .nonnegative()\n .describe('Prompt size in characters.'),\n conversation_turn_index: z\n .number()\n .int()\n .nonnegative()\n .describe('Turn number in the conversation.'),\n contains_instruction_override: z\n .boolean()\n .describe(\n 'Whether the prompt tries to override prior rules or instructions.',\n ),\n contains_tool_request: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the prompt requests tool or API execution.'),\n contains_secret_request: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Whether the prompt requests hidden or confidential information.',\n ),\n contains_policy_challenge: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the prompt challenges rules, safety, or policy.'),\n recursive_pattern_score: fraction01Nullable().describe(\n '0–1 recursive or looping structure score; omit or null to treat as 0.0.',\n ),\n prompt_injection_score: fraction01Nullable().describe(\n '0–1 prompt-injection likelihood score; omit or null to treat as 0.0.',\n ),\n sensitive_domain: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Whether the prompt targets a sensitive domain (finance, health, legal, cybersecurity, etc.).',\n ),\n complexity_score: fraction01Nullable().describe(\n '0–1 prompt complexity or ambiguity score; omit or null to treat as 0.0.',\n ),\n prompt_hash: promptHashSchema,\n});\n\nexport const PromptInputSignalSchema = BaseEventSchema.extend({\n signal_payload: PromptInputSignalPayloadSchema,\n});\n\n/** `signal_type: 'PROMPT_INPUT'` with prompt analysis metadata (no raw text). */\nexport type PromptInputSignalEvent = z.infer<typeof PromptInputSignalSchema>;\n","import {\n PromptInputSignalPayloadSchema,\n type PromptInputSignalEvent,\n} from '../schemas/prompt-input';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `PROMPT_INPUT` signal.\n *\n * @param event - The `PromptInputSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `PROMPT_INPUT` signal.\n */\nexport const createPromptInputEvent = (\n event: PromptInputSignalEvent,\n): RawEventRequest => {\n const signalPayload = PromptInputSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'PROMPT_INPUT');\n};\n","import { z } from 'zod';\nimport { fraction01, fraction01Nullable, nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const RagRetrievalSignalPayloadSchema = z.object({\n retriever_id: nonEmptyString().describe('Retriever service identifier.'),\n query_hash: z\n .string()\n .nullable()\n .optional()\n .describe('Hash of the retrieval query when available.'),\n documents_retrieved: z\n .number()\n .int()\n .nonnegative()\n .describe('Number of documents retrieved.'),\n top_k: z\n .number()\n .int()\n .min(1)\n .describe('Requested top-k document count.'),\n average_relevance_score: fraction01().describe(\n '0–1 average relevance score across retrieved documents.',\n ),\n source_trust_score: fraction01().describe(\n '0–1 average trust score across retrieved sources.',\n ),\n lowest_source_trust_score: fraction01Nullable().describe(\n '0–1 weakest source trust score when available.',\n ),\n untrusted_source_count: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Count of low-trust or untrusted retrieved sources.'),\n retrieved_context_tokens: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Total retrieved context token count when available.'),\n context_injection_score: fraction01()\n .optional()\n .default(0)\n .describe(\n '0–1 context injection risk score; use 0.0 when unavailable.',\n ),\n document_ids: z\n .array(z.string())\n .optional()\n .default([])\n .describe('Identifiers for retrieved documents when available.'),\n});\n\nexport const RagRetrievalSignalSchema = BaseEventSchema.extend({\n signal_payload: RagRetrievalSignalPayloadSchema,\n});\n\n/** `signal_type: 'RAG_RETRIEVAL'` with retrieval trust metadata. */\nexport type RagRetrievalSignalEvent = z.infer<typeof RagRetrievalSignalSchema>;\n","import {\n RagRetrievalSignalPayloadSchema,\n type RagRetrievalSignalEvent,\n} from '../schemas/rag-retrieval';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `RAG_RETRIEVAL` signal.\n *\n * @param event - The `RagRetrievalSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `RAG_RETRIEVAL` signal.\n */\nexport const createRagRetrievalEvent = (\n event: RagRetrievalSignalEvent,\n): RawEventRequest => {\n const signalPayload = RagRetrievalSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'RAG_RETRIEVAL');\n};\n","export const SESSION_STATUSES = [\n 'STARTED',\n 'ACTIVE',\n 'ENDED',\n 'TIMEOUT',\n 'ABANDONED',\n] as const;\n\nexport type SessionStatus = (typeof SESSION_STATUSES)[number];\n","import { z } from 'zod';\nimport { SESSION_STATUSES } from '@shared/types/session';\nimport { BaseEventSchema } from './raw-event';\n\nexport const SessionSignalPayloadSchema = z.object({\n session_status: z\n .enum(SESSION_STATUSES)\n .describe(\n 'Session lifecycle status: STARTED, ACTIVE, ENDED, TIMEOUT, or ABANDONED.',\n ),\n session_age_seconds: z\n .number()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Current duration of the session in seconds.'),\n turn_count: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Number of user/model turns in the session.'),\n messages_last_minute: z\n .number()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Prompt or message rate over the last minute.'),\n avg_seconds_between_turns: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Average interaction cadence between turns in seconds.'),\n restart_count_10m: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('How often the user restarted sessions in the last 10 minutes.'),\n session_timeout: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the session ended due to a timeout.'),\n abandoned: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the session ended abruptly without a clean close.'),\n conversation_id: z\n .string()\n .nullable()\n .optional()\n .describe('Related conversation identifier when available.'),\n user_id: z\n .string()\n .nullable()\n .optional()\n .describe('Related user identifier when available.'),\n});\n\nexport const SessionSignalSchema = BaseEventSchema.extend({\n signal_payload: SessionSignalPayloadSchema,\n});\n\n/** `signal_type: 'SESSION'` with conversation lifecycle metadata. */\nexport type SessionSignalEvent = z.infer<typeof SessionSignalSchema>;\n","import {\n SessionSignalPayloadSchema,\n type SessionSignalEvent,\n} from '../schemas/session';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `SESSION` signal.\n *\n * @param event - The `SessionSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `SESSION` signal.\n */\nexport const createSessionEvent = (\n event: SessionSignalEvent,\n): RawEventRequest => {\n const signalPayload = SessionSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'SESSION');\n};\n","import { z } from 'zod';\nimport { fraction01, fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const SystemTelemetrySignalPayloadSchema = z.object({\n metric_name: z.string().nullable().optional(),\n value: z.number().nullable().optional(),\n baseline: z.number().nullable().optional(),\n window_seconds: z.number().int().min(1).nullable().optional(),\n error_rate: fraction01().optional().default(0),\n baseline_error_rate: fraction01Nullable().describe(\n 'Expected or steady-state error rate (excess over this drives impact)',\n ),\n unusual_auth_rate: fraction01().optional().default(0),\n firmware_hash_changed: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Device or component firmware hash differs from prior observation',\n ),\n expected_hash_match: z\n .boolean()\n .nullable()\n .optional()\n .describe(\n 'True if hash matched expected; False if mismatch; omit if unknown',\n ),\n sensor_deviation_score: fraction01Nullable().describe(\n 'Normalized deviation of sensor readings from baseline',\n ),\n});\n\nexport const SystemTelemetrySignalSchema = BaseEventSchema.extend({\n signal_payload: SystemTelemetrySignalPayloadSchema,\n});\n\n/** `signal_type: 'SYSTEM_TELEMETRY'` with metric samples and optional error-rate fractions in `[0, 1]`. */\nexport type SystemTelemetrySignalEvent = z.infer<\n typeof SystemTelemetrySignalSchema\n>;\n","import {\n SystemTelemetrySignalPayloadSchema,\n type SystemTelemetrySignalEvent,\n} from '../schemas/system-telemetry';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `SYSTEM_TELEMETRY` signal.\n *\n * @param event - The `SystemTelemetrySignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `SYSTEM_TELEMETRY` signal.\n */\nexport const createSystemTelemetryEvent = (\n event: SystemTelemetrySignalEvent,\n): RawEventRequest => {\n const signalPayload = SystemTelemetrySignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'SYSTEM_TELEMETRY');\n};\n","export const TOOL_CATEGORIES = [\n 'RETRIEVAL',\n 'DATABASE',\n 'PAYMENT',\n 'MESSAGING',\n 'CODE_EXECUTION',\n 'FILE',\n 'EXTERNAL_API',\n 'OTHER',\n] as const;\n\nexport type ToolCategory = (typeof TOOL_CATEGORIES)[number];\n","import { z } from 'zod';\nimport { TOOL_CATEGORIES } from '@shared/types/tool-call';\nimport { fraction01Nullable, nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const ToolCallSignalPayloadSchema = z.object({\n tool_name: nonEmptyString().describe('Tool identifier.'),\n tool_category: z\n .enum(TOOL_CATEGORIES)\n .describe(\n 'Tool category: RETRIEVAL, DATABASE, PAYMENT, MESSAGING, CODE_EXECUTION, FILE, EXTERNAL_API, or OTHER.',\n ),\n action: nonEmptyString().describe('Action attempted by the tool call.'),\n authorized: z\n .boolean()\n .nullable()\n .describe(\n 'Whether policy allowed the tool call; null means authorization is unknown.',\n ),\n safety_critical: z\n .boolean()\n .describe('Whether the call can create serious consequences.'),\n external_side_effect: z\n .boolean()\n .describe(\n 'Whether the action changes state outside the model context.',\n ),\n tool_call_success: z\n .boolean()\n .nullable()\n .optional()\n .describe('Whether the tool call succeeded when known.'),\n latency_ms: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Tool latency in milliseconds when available.'),\n error_code: z\n .string()\n .nullable()\n .optional()\n .describe('Error code when the tool call failed.'),\n argument_risk_score: fraction01Nullable().describe(\n '0–1 risk score for tool call arguments when available.',\n ),\n result_size_bytes: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Size of returned data in bytes when available.'),\n records_accessed: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .default(0)\n .describe('Number of records touched by the call when available.'),\n contains_sensitive_data: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether sensitive data was returned or touched.'),\n action_category: z\n .string()\n .nullable()\n .optional()\n .describe(\n 'Risk category for the attempted action (e.g. SECURITY, CODE, FINANCIAL, ADMIN) when available.',\n ),\n method: z\n .string()\n .nullable()\n .optional()\n .describe('HTTP or RPC method for the tool call when applicable.'),\n sensitive_data_involved: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Whether sensitive data was involved in the request or result.',\n ),\n contains_phi: z\n .boolean()\n .optional()\n .default(false)\n .describe(\n 'Whether protected health information was returned or touched.',\n ),\n sensitive_domain: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the tool call applies to a sensitive domain.'),\n});\n\nexport const ToolCallSignalSchema = BaseEventSchema.extend({\n signal_payload: ToolCallSignalPayloadSchema,\n});\n\n/** `signal_type: 'TOOL_CALL'` with tool invocation metadata. */\nexport type ToolCallSignalEvent = z.infer<typeof ToolCallSignalSchema>;\n","import {\n ToolCallSignalPayloadSchema,\n type ToolCallSignalEvent,\n} from '../schemas/tool-call';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `TOOL_CALL` signal.\n *\n * @param event - The `ToolCallSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `TOOL_CALL` signal.\n */\nexport const createToolCallEvent = (\n event: ToolCallSignalEvent,\n): RawEventRequest => {\n const signalPayload = ToolCallSignalPayloadSchema.parse(event.signal_payload);\n return buildRawEventRequest(event, signalPayload, 'TOOL_CALL');\n};\n","import { z } from 'zod';\nimport { BaseEventSchema } from './raw-event';\n\nexport const TransactionSignalPayloadSchema = z.object({\n amount: z\n .number()\n .nonnegative()\n .default(0)\n .describe('Transaction amount in base currency'),\n amount_minor: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Transaction amount in minor units (e.g. cents)'),\n amount_usd: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Transaction amount normalized to USD'),\n currency: z\n .string()\n .nullable()\n .optional()\n .describe('ISO 4217 currency code'),\n merchant_category: z.string().nullable().optional(),\n merchant_id: z.string().nullable().optional(),\n channel: z\n .string()\n .nullable()\n .optional()\n .describe('Transaction channel (WEB, MOBILE, ECOM)'),\n country: z\n .string()\n .nullable()\n .optional()\n .describe('ISO 3166-1 alpha-2 country code'),\n velocity: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Transactions per minute'),\n external_anomaly_score: z\n .number()\n .nullable()\n .optional()\n .describe(\n 'Externally supplied anomaly score. When present, bypasses the internal extraction formula and is used directly as raw_value.',\n ),\n geo_distance: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Distance in km from usual location'),\n geo_distance_km: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Distance in km from usual location'),\n records_accessed: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Count of records touched in this transaction'),\n baseline_records_accessed: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Typical or policy baseline record count for comparison'),\n sensitivity_level: z\n .string()\n .nullable()\n .optional()\n .describe('Data sensitivity (e.g. LOW, MEDIUM, HIGH)'),\n export_count: z\n .number()\n .int()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Number of export operations'),\n bulk_export: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether this is a bulk export'),\n contains_phi: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether exported or accessed data includes PHI'),\n control_command: z\n .string()\n .nullable()\n .optional()\n .describe('Issued control or OT command (e.g. VALVE_OPEN)'),\n authorized: z\n .boolean()\n .nullable()\n .optional()\n .describe('Whether the action was authorized; omit if unknown'),\n safety_critical: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the transaction affects safety-critical systems'),\n});\n\nexport const TransactionSignalSchema = BaseEventSchema.extend({\n signal_payload: TransactionSignalPayloadSchema,\n});\n\n/** `signal_type: 'TRANSACTION'` with typed `signal_payload`. */\nexport type TransactionSignalEvent = z.infer<typeof TransactionSignalSchema>;\n","import {\n TransactionSignalPayloadSchema,\n type TransactionSignalEvent,\n} from '../schemas/transaction';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `TRANSACTION` signal.\n *\n * @param event - The `TransactionSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `TRANSACTION` signal.\n */\nexport const createTransactionEvent = (\n event: TransactionSignalEvent,\n): RawEventRequest => {\n const signalPayload = TransactionSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'TRANSACTION');\n};\n","export const FEEDBACK_TYPES = [\n 'THUMBS_UP',\n 'THUMBS_DOWN',\n 'REPORT',\n 'CORRECTION',\n 'RATING',\n] as const;\n\nexport type FeedbackType = (typeof FEEDBACK_TYPES)[number];\n\nexport const FEEDBACK_ISSUE_TYPES = [\n 'HALLUCINATION',\n 'UNSAFE',\n 'IRRELEVANT',\n 'PRIVACY',\n 'OFFENSIVE',\n 'OTHER',\n] as const;\n\nexport type FeedbackIssueType = (typeof FEEDBACK_ISSUE_TYPES)[number];\n","import { z } from 'zod';\nimport {\n FEEDBACK_ISSUE_TYPES,\n FEEDBACK_TYPES,\n} from '@shared/types/user-feedback';\nimport { fraction01Nullable } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const UserFeedbackSignalPayloadSchema = z.object({\n feedback_type: z\n .enum(FEEDBACK_TYPES)\n .describe(\n 'User feedback category: THUMBS_UP, THUMBS_DOWN, REPORT, CORRECTION, or RATING.',\n ),\n rating: z\n .number()\n .nullable()\n .optional()\n .describe('Optional rating in [-1, 1] or on a 1–5 scale.'),\n reported_issue: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the user reported a problem.'),\n issue_type: z\n .enum(FEEDBACK_ISSUE_TYPES)\n .nullable()\n .optional()\n .describe(\n 'Category of the reported issue: hallucination, unsafe, irrelevant, privacy, offensive, or other.',\n ),\n severity: fraction01Nullable().describe(\n '0–1 user-reported severity when available.',\n ),\n response_id: z\n .string()\n .nullable()\n .optional()\n .describe('Identifier of the response being evaluated.'),\n user_comment_hash: z\n .string()\n .nullable()\n .optional()\n .describe('Hash of optional user comment when available.'),\n});\n\nexport const UserFeedbackSignalSchema = BaseEventSchema.extend({\n signal_payload: UserFeedbackSignalPayloadSchema,\n});\n\n/** `signal_type: 'USER_FEEDBACK'` with subjective user evaluation metadata. */\nexport type UserFeedbackSignalEvent = z.infer<typeof UserFeedbackSignalSchema>;\n","import {\n UserFeedbackSignalPayloadSchema,\n type UserFeedbackSignalEvent,\n} from '../schemas/user-feedback';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `USER_FEEDBACK` signal.\n *\n * @param event - The `UserFeedbackSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `USER_FEEDBACK` signal.\n */\nexport const createUserFeedbackEvent = (\n event: UserFeedbackSignalEvent,\n): RawEventRequest => {\n const signalPayload = UserFeedbackSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'USER_FEEDBACK');\n};\n","export const WORKFLOW_ACTION_CATEGORIES = [\n 'FINANCIAL',\n 'DATA_ACCESS',\n 'COMMUNICATION',\n 'ADMIN',\n 'SECURITY',\n 'CODE',\n 'OTHER',\n] as const;\n\nexport type WorkflowActionCategory =\n (typeof WORKFLOW_ACTION_CATEGORIES)[number];\n\nexport const WORKFLOW_ACTION_STAGES = [\n 'PROPOSED',\n 'PRE_EXECUTION',\n 'EXECUTED',\n 'FAILED',\n 'ROLLED_BACK',\n] as const;\n\nexport type WorkflowActionStage = (typeof WORKFLOW_ACTION_STAGES)[number];\n\nexport const WORKFLOW_ACTOR_TYPES = ['USER', 'AI_AGENT', 'SYSTEM'] as const;\n\nexport type WorkflowActorType = (typeof WORKFLOW_ACTOR_TYPES)[number];\n","import { z } from 'zod';\nimport {\n WORKFLOW_ACTION_CATEGORIES,\n WORKFLOW_ACTION_STAGES,\n WORKFLOW_ACTOR_TYPES,\n} from '@shared/types/workflow-action';\nimport { nonEmptyString } from './_helpers';\nimport { BaseEventSchema } from './raw-event';\n\nexport const WorkflowActionSignalPayloadSchema = z.object({\n workflow_id: nonEmptyString().describe('Workflow identifier.'),\n workflow_type: nonEmptyString().describe('Type of workflow.'),\n action_name: nonEmptyString().describe('Workflow action attempted.'),\n action_category: z\n .enum(WORKFLOW_ACTION_CATEGORIES)\n .describe(\n 'Risk category: FINANCIAL, DATA_ACCESS, COMMUNICATION, ADMIN, SECURITY, CODE, or OTHER.',\n ),\n action_stage: z\n .enum(WORKFLOW_ACTION_STAGES)\n .describe(\n 'Lifecycle stage: PROPOSED, PRE_EXECUTION, EXECUTED, FAILED, or ROLLED_BACK.',\n ),\n actor_type: z\n .enum(WORKFLOW_ACTOR_TYPES)\n .describe('Who initiated the action: USER, AI_AGENT, or SYSTEM.'),\n requires_approval: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether approval is required before execution.'),\n approval_present: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether required approval is present.'),\n external_side_effect: z\n .boolean()\n .nullable()\n .optional()\n .describe('Whether the action changes external state when known.'),\n safety_critical: z\n .boolean()\n .nullable()\n .optional()\n .describe(\n 'Whether the action is safety, security, or business critical when known.',\n ),\n amount_usd: z\n .number()\n .nonnegative()\n .nullable()\n .optional()\n .describe('Financial magnitude in USD when applicable.'),\n sensitive_data_involved: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether sensitive data was touched.'),\n new_counterparty: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether a new vendor, customer, or recipient is involved.'),\n is_new_vendor: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the action involves a new vendor.'),\n is_new_recipient: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the action involves a new recipient.'),\n is_new_endpoint: z\n .boolean()\n .optional()\n .default(false)\n .describe('Whether the action targets a new endpoint.'),\n});\n\nexport const WorkflowActionSignalSchema = BaseEventSchema.extend({\n signal_payload: WorkflowActionSignalPayloadSchema,\n});\n\n/** `signal_type: 'WORKFLOW_ACTION'` with workflow step metadata. */\nexport type WorkflowActionSignalEvent = z.infer<\n typeof WorkflowActionSignalSchema\n>;\n","import {\n WorkflowActionSignalPayloadSchema,\n type WorkflowActionSignalEvent,\n} from '../schemas/workflow-action';\nimport type { RawEventRequest } from '../schemas/raw-event';\nimport { buildRawEventRequest } from './_common';\n\n/**\n * Builds a `RawEventRequest` for a `WORKFLOW_ACTION` signal.\n *\n * @param event - The `WorkflowActionSignalEvent` to build a `RawEventRequest` for.\n * @returns A `RawEventRequest` for a `WORKFLOW_ACTION` signal.\n */\nexport const createWorkflowActionEvent = (\n event: WorkflowActionSignalEvent,\n): RawEventRequest => {\n const signalPayload = WorkflowActionSignalPayloadSchema.parse(\n event.signal_payload,\n );\n return buildRawEventRequest(event, signalPayload, 'WORKFLOW_ACTION');\n};\n"]}
|