Skip to content

SK-3295 Flowvault release/26.11.1 - #355

Open
skyflow-bharti wants to merge 13 commits into
mainfrom
flowvault-release/26.11.1
Open

skyflow-bharti wants to merge 13 commits into
mainfrom
flowvault-release/26.11.1

Conversation

@skyflow-bharti

Copy link
Copy Markdown
Collaborator

Detect support and vault api in flowvault sdk

saileshwar-skyflow and others added 13 commits October 23, 2026 15:34
…Node SDK (#348)

* SK-3225: Split SDK into common/skyvault/flowvault; add FlowVault Node SDK

Restructure the single `skyflow-node` package into an npm-workspaces monorepo
mirroring the Java SDK split (common / skyvault / flowvault).

- common (private, bundled into each published package): the contract-agnostic
  core — errors, utils, jwt, logging, service-account auth, config/credentials,
  generic validations, mutable SDK identity, Base* request/response/options
  classes, the BaseSkyflow facade base, and the generated auth client. Builds
  and tests in isolation.
- skyvault -> skyflow-node (2.x): the existing contract, public API unchanged
  (74 exports, byte-for-byte). Its Skyflow/models extend the common Base*
  classes; keeps connections, detect and its data-plane generated client.
- flowvault -> skyflow-flowvault-node (1.x): new unary v2 contract
  (insert/get/update/delete/query/detokenize/getTokens/uploadFiles/deleteFiles)
  wired to the generated v2 client; reconciled with the Java/Python flowvault
  SDKs.

Each layer re-exports common and bundles it (tsup) into a self-contained
tarball (verified via npm pack); the mutable SDK identity makes each product
self-report its own name@version. Independent versioning: plain-semver tags
publish skyflow-node, flowvault/* tags publish skyflow-flowvault-node.

Tests: common 232, skyvault 878 (backward compatibility preserved), flowvault
132 (~99.85% coverage). Per-package api-extractor contract snapshots gate the
public API of both SDKs. PR CI builds and tests both SDKs with one command.

Docs: docs/sdk-split-plan.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: fix PR CI (eslint ignores + gitleaks allowlist for generated/dist)

- eslint.config.mjs: ignore all generated dirs (**/_generated_/**, legacy
  leading-space ** / _generated_/**), all workspace test dirs (**/test/**),
  and build output across workspaces — the old ignores only matched the
  single-package paths.
- Replace three banned magic-string comparisons in hand-written code
  (typeof === "symbol"/"function") with equivalent non-literal checks.
- Rule/gitleaks.toml: allowlist the maintainer-owned generated dirs (example
  JWTs) and the bundled dist/ output.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: fix skyvault jest — don't babel-transform compiled common/lib

CI resolves the skyflow-common symlink to its realpath (outside node_modules),
so babel-jest was transforming the compiled common/lib and injecting core-js
(an undeclared dep) -> suites failed to run. Add `common/lib` to
transformIgnorePatterns so the already-CJS common package is loaded as-is.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: add flowvault branch-coverage tests to clear codecov/project

Covers the defensive edge branches the codecov/project gate flagged
(net-new flowvault code dipped overall coverage 0.44% vs base):
- empty/absent `records`/`response` bodies map to [] across all ops
- per-record errors with no x-request-id header -> requestId null
- getRequestId with an absent raw response
- uploadFiles: non-Error PUT rejection, no-name/trailing-dot content-type,
  response record with no matching prepared columns
- VaultClient: default log level, unrecognized cached auth type

flowvault branches 92.51% -> 96.89% (statements/lines 100%); 132 -> 153 tests.
No source/generated/config changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: flowvault insert/update — per-record table + separate tokens/data

Aligns the Node flowvault insert/update contract with the Java/Python SDKs:
- InsertRecord/UpdateRecord gain an optional per-record `table`; when any
  record sets it, a single insert/update call targets multiple tables (the
  generated InsertRecordData/UpdateRecordData already carry tableName).
- Insert/Update response records now expose `tokens` and `data` separately
  instead of a single merged `fields`.

Updated unit tests (incl. multi-table coverage) and the api-report snapshot.
flowvault 156 tests pass (100% lines, branches 96.97%); common 232, skyvault
878 unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: add flowvault README + samples (parity with python flowvault)

Expand flowvault/README.md into a full SDK guide (overview, install, auth,
client init, all 9 operations, custom headers, error handling) and add
flowvault/samples/ — one runnable TypeScript example per operation under
vault-api/, plus service-account token-generation samples — mirroring the
skyflow-flowvault-python samples. All samples type-check in strict mode against
the built SDK types.

flowvault-only; skyvault and common untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: flowvault timeout/retry config + wire custom request headers

Config (parity with python flowvault, limited to what the Node generated client
can honor):
- VaultConfig gains optional timeout (seconds), maxRetries, and vaultUrl;
  the flowvault VaultClient forwards timeout/maxRetries as the generated
  request's timeoutInSeconds/maxRetries, and vaultUrl overrides the derived URL.
  (connect/read/write timeouts and retry-delay knobs are fixed in generated code.)

Custom headers:
- options.setRequestHeaders(...) is now actually wired — merged into every
  operation's request headers. Added the missing options params to delete,
  query, getTokens, uploadFiles, deleteFiles so headers work on all 9 ops.

Samples/README updated; added tests (162 pass, 100% stmts/lines). flowvault +
the shared VaultConfig only; skyvault untouched; api-report unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: flowvault parity — per-record insert upsert + multi-table get fields

Closes two parity gaps vs the Java/Python flowvault SDKs (generated client
already supports both; hand-written layer only):
- InsertRecord gains optional per-record `upsert`; when any record sets it, each
  record sends its own upsert (falling back to the request-level one) and the
  request-level upsert is dropped.
- GetRecord (multi-table get) gains optional `columns` / `columnRedactions` /
  `uniqueValues`, wired per record.

Added tests (164 pass, 100% lines); api-report regenerated. flowvault-only;
skyvault and common untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: flowvault update updateType + align README/samples with python

- UpdateRequest gains an optional request-level `updateType` ("UPDATE" |
  "REPLACE"), wired to the generated UpdateRequest.updateType (no generated
  change needed). Closes the last parity gap vs Java/Python flowvault.
- README + samples updated to match the python flowvault SDK: per-record
  `upsert` on insert, multi-table get per-record columns/redactions/uniqueValues,
  and update `updateType`.

166 tests pass (100% lines); api-report regenerated; samples type-check.
flowvault-only; skyvault/common untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: fix flowvault vault URL — use skyvault.* host, not vault.*

FlowVault (v3) is served from {clusterId}.skyvault.skyflowapis.{dev|com|
-preview.com|tech}, a different subdomain than the shared getVaultURL
(vault.*, used by skyvault/v2). The facade was reusing getVaultURL, so every
call 404'd. Added a flowvault-local getFlowVaultURL with the four confirmed
skyvault.* hosts and used it in buildVaultEntry.

flowvault-only; skyvault/common untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: fix flowvault insert/update table placement + per-record error extraction

Two bugs surfaced running the e2e against the live vault:
- Insert/update sent tableName at BOTH the request level and per-record when any
  record carried its own table, which the API rejects (400 "table name ... at
  one place"). Now the request-level tableName is omitted whenever per-record
  tables are used (table lives in exactly one place), matching Java/Python.
- A per-record failure returned with a 4xx HTTP status (e.g. delete/get/update
  of a non-existent id -> 404 whose body carries a records/response array) was
  thrown as a whole-call error. Now those per-record records are surfaced as a
  normal response (via unaryError), and genuine whole-call errors still throw.

Added error-extraction tests for insert/get/update/delete/detokenize/getTokens/
deleteFiles. 174 tests pass (99.4% lines). flowvault-only; skyvault/common untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: flowvault get — allow empty ids when uniqueValues are set

validateGetRequest rejected empty ids even for a get-by-unique-value, where the
lookup is by GetOptions.setUniqueValues (not ids). It now accepts a single-table
get with empty ids as long as uniqueValues are provided on the options
("ids OR uniqueValues", matching Java/Python flowvault).

175 tests pass. flowvault-only; skyvault/common untouched; api-report unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: flowvault custom headers — typed interceptor + CustomHeaderKey

Replace the arbitrary setRequestHeaders(Record<string,string>) on options
with the same typed mechanism the Python and Java FlowVault SDKs expose: a
RequestInterceptor set via options.setInterceptor(), which receives a
RequestContext and may attach only the supported headers in CustomHeaderKey
(x-skyflow-account-id, x-skyflow-account-name, x-request-id). The context
carries the operation name (INSERT, GET, ...) so headers can vary per call.

- New: CustomHeaderKey enum, RequestContext (+ RequestInterceptor type),
  FlowVaultOptions base carrying the interceptor.
- All 9 *Options now extend FlowVaultOptions; controller.requestOptions runs
  the interceptor per operation and maps CustomHeaderKey -> wire header.
- README, sample, and tests updated; contract snapshot regenerated.

common and skyvault are untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* SK-3225: flowvault docs — vaultUrl override uses the skyvault.* host

The vaultUrl config overrides the URL the SDK actually calls, and FlowVault is
served from the skyvault.* subdomain (getFlowVaultURL), not vault.*. Fix the
two override examples so a user who copies them points at the right host. The
clusterId derivation comments keep vault.skyflowapis.com to match the Python
SDK (that is where the clusterId is read from).
The internal (JFrog) build's 'Commit Changes' step force-pushed the version
bump to the release branch, which failed with a permission denial (the
PAT_ACTIONS owner lacks push access) and killed the job before Publish. The
push-back is also unnecessary — Publish uses the already-bumped working tree —
and harmful, since src/version.ts is not path-ignored so the push would
re-trigger this workflow in a loop.

Restrict the version-bump commit to public/beta releases; internal builds now
bump, build, and publish to JFrog without mutating the branch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…nfig

npm config set cannot run from inside a workspace package directory: npm
detects the implicit workspace and aborts with ENOWORKSPACES, which killed the
internal Publish step. Write the JFrog registry + auth to a local .npmrc in the
package dir instead (npm publish itself supports workspaces and runs fine).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A workspace member's own .npmrc is ignored by npm (it read the root config and
defaulted to registry.npmjs.org, so publish 404'd on public npm). Pass the
JFrog registry with --registry on the publish command (highest precedence) and
put its auth in the workspace-root .npmrc that npm actually reads.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
samples-local/ holds real creds in .env and is for manual local testing;
it must never be committed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add a typed Token { token?, tokenGroupName?, path? } and surface response
  tokens as Record<column, Token[]> on insert/get/update, parsing the wire
  token map (list / bare value / multiple groups) the same way the Java and
  Python flowvault SDKs do. Export Token; regenerate the api-report snapshot.
- Normalize the query data plane's system key skyflowID -> skyflowId in rows
  and metadata.columns, so query matches every other operation's response.
- Update unit tests and the README accordingly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ntegration-in-flowdb-and-skyvault-sdks

SK-3076 added detect support
@github-actions

Copy link
Copy Markdown

✅ Gitleaks Findings: No secrets detected. Safe to proceed!

@github-actions

Copy link
Copy Markdown

Semgrep Findings: Issues with Error level severity are found (Error is Highest severity in Semgrep), Please resolve the issues before merging.

@github-actions

Copy link
Copy Markdown

Public API surface changes

Compared with main. In the diffs, - lines were removed
from the public API and + lines were added. Removals and signature
changes are breaking for consumers.

skyflow-node: 728 added, 381 removed (base report read from its old location api-report/skyflow-node.api.md)

Show diff
--- base/skyflow-node.api.md
+++ pr/skyflow-node.api.md
@@ -13,6 +13,17 @@
     apiKey: string;
 }
 
+// @public
+interface Audio_2 {
+    // (undocumented)
+    bleep?: Bleep;
+    // (undocumented)
+    outputProcessedAudio?: boolean;
+    // (undocumented)
+    outputTranscription?: OutputTranscriptionType;
+}
+export { Audio_2 as Audio }
+
 // @public (undocumented)
 export type BearerTokenOptions = {
     ctx?: string | Record<string, any>;
@@ -22,24 +33,49 @@
     tokenUri?: string;
 };
 
-// @public (undocumented)
-export class Bleep {
+// @public
+export interface Bleep {
     // (undocumented)
-    getFrequency(): number | undefined;
+    frequency?: number;
     // (undocumented)
-    getGain(): number | undefined;
+    gain?: number;
     // (undocumented)
-    getStartPadding(): number | undefined;
+    startPadding?: number;
     // (undocumented)
-    getStopPadding(): number | undefined;
-    // (undocumented)
-    setFrequency(frequency: number): void;
-    // (undocumented)
-    setGain(gain: number): void;
+    stopPadding?: number;
+}
+
+// @public
+export class CheckGuardrailsRequest {
+    constructor(text: string, fields?: CheckGuardrailsRequestFields);
     // (undocumented)
-    setStartPadding(startPadding: number): void;
+    get checkToxicity(): boolean | undefined;
+    set checkToxicity(value: boolean | undefined);
     // (undocumented)
-    setStopPadding(stopPadding: number): void;
+    get denyTopics(): string[] | undefined;
+    set denyTopics(value: string[] | undefined);
+    get text(): string;
+    set text(value: string);
+}
+
+// @public
+export interface CheckGuardrailsRequestFields {
+    checkToxicity?: boolean;
+    denyTopics?: string[];
+}
+
+// @public
+export class CheckGuardrailsResponse {
+    constructor(input: {
+        text: string | null;
+        validation: GuardrailsValidation;
+        toxic: boolean | null;
+        deniedTopic: boolean | null;
+    });
+    readonly deniedTopic: boolean | null;
+    readonly text: string | null;
+    readonly toxic: boolean | null;
+    readonly validation: GuardrailsValidation;
 }
 
 // @public (undocumented)
@@ -55,203 +91,191 @@
 // @public (undocumented)
 export type Credentials = TokenCredentials | PathCredentials | StringCredentials | ApiKeyCredentials;
 
-// @public (undocumented)
-export class DeidentifyFileOptions {
-    constructor();
+// @public
+export interface CustomType {
+    deidentificationType?: DeidentificationType;
+    destination?: string;
+    includePrefix?: IncludePrefix;
     // (undocumented)
-    getAllowRegexList(): string[] | undefined;
+    label?: string;
     // (undocumented)
-    getBleep(): Bleep | undefined;
+    match?: string[];
+    prefixOverride?: string;
+}
+
+// @public
+export enum DeidentificationType {
     // (undocumented)
-    getEntities(): string[] | undefined;
+    ENTITY_ONLY = "ENTITY_ONLY",
     // (undocumented)
-    getMaskingMethod(): MaskingMethod | undefined;
+    ENTITY_UNIQUE_COUNTER = "ENTITY_UNIQUE_COUNTER",
     // (undocumented)
-    getMaxResolution(): number | undefined;
+    MASK = "MASK",
     // (undocumented)
-    getOutputDirectory(): string | undefined;
+    UNKNOWN = "UNKNOWN",
     // (undocumented)
-    getOutputOcrText(): boolean | undefined;
+    VAULT_TOKEN = "VAULT_TOKEN"
+}
+
+// @public
+export enum DeidentifyFileDataFormat {
     // (undocumented)
-    getOutputProcessedAudio(): boolean | undefined;
+    BMP = "BMP",
     // (undocumented)
-    getOutputProcessedImage(): boolean | undefined;
+    CSV = "CSV",
     // (undocumented)
-    getOutputTranscription(): DetectOutputTranscription | undefined;
+    DCM = "DCM",
     // (undocumented)
-    getPixelDensity(): number | undefined;
+    DOC = "DOC",
     // (undocumented)
-    getRestrictRegexList(): string[] | undefined;
+    DOCX = "DOCX",
     // (undocumented)
-    getTokenFormat(): TokenFormat | undefined;
+    GIF = "GIF",
     // (undocumented)
-    getTransformations(): Transformations | undefined;
+    JPEG = "JPEG",
     // (undocumented)
-    getWaitTime(): number | undefined;
+    JPG = "JPG",
     // (undocumented)
-    setAllowRegexList(allowRegexList: string[]): void;
+    JSON = "JSON",
     // (undocumented)
-    setBleep(bleep: Bleep | undefined): void;
+    JSONL = "JSONL",
     // (undocumented)
-    setEntities(entities: DetectEntities[]): void;
+    MP3 = "MP3",
     // (undocumented)
-    setMaskingMethod(maskingMethod: MaskingMethod | undefined): void;
+    PDF = "PDF",
     // (undocumented)
-    setMaxResolution(maxResolution: number | undefined): void;
+    PNG = "PNG",
     // (undocumented)
-    setOutputDirectory(outputDirectory: string | undefined): void;
+    PPT = "PPT",
     // (undocumented)
-    setOutputOcrText(outputOcrText: boolean | undefined): void;
+    PPTX = "PPTX",
     // (undocumented)
-    setOutputProcessedAudio(outputProcessedAudio: boolean | undefined): void;
+    TIF = "TIF",
     // (undocumented)
-    setOutputProcessedImage(value: boolean | undefined): void;
+    TIFF = "TIFF",
     // (undocumented)
-    setOutputTranscription(outputTranscription: DetectOutputTranscription | undefined): void;
+    TXT = "TXT",
     // (undocumented)
-    setPixelDensity(pixelDensity: number | undefined): void;
+    WAV = "WAV",
     // (undocumented)
-    setRestrictRegexList(restrictRegexList: string[]): void;
+    XLS = "XLS",
     // (undocumented)
-    setTokenFormat(tokenFormat: TokenFormat): void;
+    XLSX = "XLSX",
     // (undocumented)
-    setTransformations(transformations: Transformations): void;
+    XML = "XML",
     // (undocumented)
-    setWaitTime(waitTime: number | undefined): void;
+    ZIP = "ZIP"
 }
 
-// @public (undocumented)
+// @public
 export class DeidentifyFileRequest {
-    constructor(file: FileInput);
-    // (undocumented)
-    getFile(): FileInput;
-    // (undocumented)
-    setFile(file: FileInput): void;
-}
-
-// @public (undocumented)
-export class DeidentifyFileResponse {
-    constructor(input: {
-        fileBase64?: string;
-        file?: File;
-        type?: string;
-        extension?: string;
-        wordCount?: number;
-        charCount?: number;
-        sizeInKb?: number;
-        durationInSeconds?: number;
-        pageCount?: number;
-        slideCount?: number;
-        entities?: Array<{
-            file: string;
-            extension: string;
-        }>;
-        runId?: string;
-        status?: string;
-        errors?: Array<SkyflowRecordError> | null;
-    });
-    // (undocumented)
-    charCount?: number;
+    constructor(fields?: DeidentifyFileRequestFields);
     // (undocumented)
-    durationInSeconds?: number;
+    get configuration(): DetectConfiguration | undefined;
+    set configuration(value: DetectConfiguration | undefined);
     // (undocumented)
-    entities?: Array<{
-        file: string;
-        extension: string;
-    }>;
+    get configurationId(): string | undefined;
+    set configurationId(value: string | undefined);
     // (undocumented)
-    errors: Array<SkyflowRecordError> | null;
-    // (undocumented)
-    extension?: string;
-    // (undocumented)
-    file?: File;
-    // (undocumented)
-    fileBase64?: string;
-    // (undocumented)
-    pageCount?: number;
+    get dataFormat(): DeidentifyFileDataFormat | undefined;
+    set dataFormat(value: DeidentifyFileDataFormat | undefined);
+    // Warning: (ae-forgotten-export) The symbol "DeidentifyFileSource" needs to be exported by the entry point index.d.ts
+    //
     // (undocumented)
-    runId?: string;
+    get dataSource(): DeidentifyFileSource | undefined;
+    set dataSource(value: DeidentifyFileSource | undefined);
     // (undocumented)
-    sizeInKb?: number;
+    get file(): File | undefined;
+    set file(value: File | undefined);
     // (undocumented)
-    slideCount?: number;
+    get filePath(): string | undefined;
+    set filePath(value: string | undefined);
     // (undocumented)
-    status?: string;
+    get outputDirectory(): string | undefined;
+    set outputDirectory(value: string | undefined);
     // (undocumented)
-    type?: string;
+    get pollOptions(): PollOptions | undefined;
+    set pollOptions(value: PollOptions | undefined);
     // (undocumented)
-    wordCount?: number;
+    get value(): string | undefined;
+    set value(value: string | undefined);
 }
 
-// @public (undocumented)
-export class DeidentifyTextOptions {
-    // (undocumented)
-    getAllowRegexList(): string[] | undefined;
+// @public
+export interface DeidentifyFileRequestFields {
+    configuration?: DetectConfiguration;
+    configurationId?: string;
+    dataFormat?: DeidentifyFileDataFormat;
+    dataSource?: DeidentifyFileSource;
+    file?: File;
+    filePath?: string;
+    outputDirectory?: string;
+    pollOptions?: PollOptions;
+    value?: string;
+}
+
+// @public
+export class DeidentifyFileResponse implements DetectRunFields {
+    constructor(input: DetectRunFields);
     // (undocumented)
-    getEntities(): DetectEntities[] | undefined;
+    readonly message: string | null;
     // (undocumented)
-    getRestrictRegexList(): string[] | undefined;
+    readonly metrics: Metrics | null;
     // (undocumented)
-    getTokenFormat(): TokenFormat | undefined;
+    readonly output: FileOutput[];
     // (undocumented)
-    getTransformations(): Transformations | undefined;
+    readonly outputType: DeidentifyFileSource | null;
     // (undocumented)
-    setAllowRegexList(allowRegexList: string[]): void;
+    readonly runId: string | null;
     // (undocumented)
-    setEntities(entities: DetectEntities[]): void;
+    readonly status: DetectRunStatus | null;
+}
+
+// @public
+export enum DeidentifySourceType {
     // (undocumented)
-    setRestrictRegexList(restrictRegexList: string[]): void;
+    BASE64 = "BASE64",
     // (undocumented)
-    setTokenFormat(tokenFormat: TokenFormat): void;
+    PRESIGNED_URL = "PRESIGNED_URL",
     // (undocumented)
-    setTransformations(transformations: Transformations): void;
+    SKYFLOW_ID = "SKYFLOW_ID"
 }
 
-// @public (undocumented)
-export class DeidentifyTextRequest {
-    constructor(text: string);
+// @public
+export class DeidentifyStringRequest {
+    constructor(text: string, fields?: DeidentifyStringRequestFields);
+    // (undocumented)
+    get configuration(): DetectConfiguration | undefined;
+    set configuration(value: DetectConfiguration | undefined);
     // (undocumented)
+    get configurationId(): string | undefined;
+    set configurationId(value: string | undefined);
     get text(): string;
     set text(value: string);
 }
 
-// @public (undocumented)

... 1190 more lines. The full reports are in the `api-surface-reports` workflow artifact.

skyflow-flowvault-node: 2591 added, 0 removed (no report on the base branch, so every line is new)

Show diff
--- base/skyflow-flowvault-node.api.md
+++ pr/skyflow-flowvault-node.api.md
@@ -0,0 +1,2591 @@
+## API Report File for "skyflow-flowvault-node"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+
+// @public (undocumented)
+export const API_KEY: {
+    readonly PREFIX: "sky-";
+};
+
+// @public (undocumented)
+export interface ApiKeyCredentials {
+    // (undocumented)
+    apiKey: string;
+}
+
+// @public
+interface Audio_2 {
+    // (undocumented)
+    bleep?: Bleep;
+    // (undocumented)
+    outputProcessedAudio?: boolean;
+    // (undocumented)
+    outputTranscription?: OutputTranscriptionType;
+}
+export { Audio_2 as Audio }
+
+// @public (undocumented)
+export interface AuthInfo {
+    // (undocumented)
+    key: string;
+    // (undocumented)
+    type: AuthType;
+}
+
+// @public (undocumented)
+export enum AuthType {
+    // (undocumented)
+    API_KEY = "API_KEY",
+    // (undocumented)
+    TOKEN = "TOKEN"
+}
+
+// @public (undocumented)
+export const BAD_REQUEST = "Bad Request";
+
+// @public (undocumented)
+export class BaseDeleteFilesRequest {
+}
+
+// @public (undocumented)
+export class BaseDeleteFilesResponse {
+}
+
+// @public (undocumented)
+export class BaseDeleteRequest {
+}
+
+// @public (undocumented)
+export class BaseDeleteResponse {
+}
+
+// @public (undocumented)
+export abstract class BaseDetectController<TClient extends DetectClientLike = DetectClientLike> {
+    constructor(client: TClient);
+    checkGuardrails(request: CheckGuardrailsRequest): Promise<CheckGuardrailsResponse>;
+    // (undocumented)
+    protected readonly client: TClient;
+    deidentifyFile(request: DeidentifyFileRequest): Promise<DeidentifyFileResponse>;
+    deidentifyString(request: DeidentifyStringRequest): Promise<DeidentifyStringResponse>;
+    protected static enumOrNull<E extends string>(values: Record<string, E>, value: string | null | undefined): E | null;
+    // Warning: (ae-forgotten-export) The symbol "FilesV2" needs to be exported by the entry point index.d.ts
+    protected files(): FilesV2;
+    getRun(request: GetRunRequest): Promise<GetRunResponse>;
+    // Warning: (ae-forgotten-export) The symbol "GuardrailsV2" needs to be exported by the entry point index.d.ts
+    protected guardrails(): GuardrailsV2;
+    // (undocumented)
+    protected get logLevel(): LogLevel;
+    reidentifyFile(request: ReidentifyFileRequest): Promise<ReidentifyFileResponse>;
+    reidentifyString(request: ReidentifyStringRequest): Promise<ReidentifyStringResponse>;
+    protected sleeper(): ((millis: number) => Promise<void>) | undefined;
+    // Warning: (ae-forgotten-export) The symbol "StringsV2" needs to be exported by the entry point index.d.ts
+    protected strings(): StringsV2;
+    protected abstract toDeidentifySource(value: string | null | undefined): DeidentifyFileSource | null;
+    protected abstract toReidentifySource(value: string | null | undefined): ReidentifyFileSource | null;
+}
+
+// @public (undocumented)
+export class BaseDetokenizeRequest {
+}
+
+// @public (undocumented)
+export class BaseDetokenizeResponse {
+}
+
+// @public (undocumented)
+export class BaseFileUploadRequest {
+}
+
+// @public (undocumented)
+export class BaseFileUploadResponse {
+}
+
+// @public (undocumented)
+export class BaseGetRequest {
+}
+
+// @public (undocumented)
+export class BaseGetResponse {
+}
+
+// @public (undocumented)
+export class BaseGetTokensRequest {
+}
+
+// @public (undocumented)
+export class BaseGetTokensResponse {
+}
+
+// @public (undocumented)
+export class BaseInsertRequest {
+}
+
+// @public (undocumented)
+export class BaseInsertResponse {
+}
+
+// @public (undocumented)
+export class BaseInvokeConnectionRequest {
+}
+
+// @public (undocumented)
+export class BaseInvokeConnectionResponse {
+}
+
+// @public (undocumented)
+export class BaseOptions {
+    // (undocumented)
+    getRequestHeaders(): Record<string, string> | undefined;
+    // (undocumented)
+    setRequestHeaders(h: Record<string, string>): void;
+}
+
+// @public (undocumented)
+export class BaseQueryRequest {
+}
+
+// @public (undocumented)
+export class BaseQueryResponse {
+}
+
+// @public (undocumented)
+export abstract class BaseSkyflow<TEntry extends BaseVaultEntry> {
+    // (undocumented)
+    addVaultConfig(config: VaultConfig): void;
+    protected applyCredentials(): void;
+    protected applyLogLevel(): void;
+    protected abstract buildVaultEntry(config: VaultConfig): TEntry;
+    // (undocumented)
+    protected commonCredentials?: Credentials;
+    // (undocumented)
+    getLogLevel(): LogLevel;
+    // (undocumented)
+    getSkyflowCredentials(): Credentials | undefined;
+    // (undocumented)
+    getVaultConfig(vaultId: string): VaultConfig;
+    protected initializeSkyflow(config: SkyflowConfig): void;
+    // (undocumented)
+    protected logLevel: LogLevel;
+    // (undocumented)
+    removeVaultConfig(vaultId: string): void;
+    protected resolveVaultEntry(vaultId?: string): TEntry;
+    // (undocumented)
+    setLogLevel(logLevel: LogLevel): void;
+    // (undocumented)
+    protected throwErrorForUnknownVaultId(id: string): void;
+    // (undocumented)
+    protected throwErrorIfVaultIdExists(id: string): void;
+    // (undocumented)
+    updateLogLevel(logLevel: LogLevel): this;
+    // (undocumented)
+    updateSkyflowCredentials(credentials: Credentials): void;
+    // (undocumented)
+    updateVaultConfig(config: VaultConfig): void;
+    // (undocumented)
+    protected vaultClients: {
+        [vaultId: string]: TEntry;
+    };
+}
+
+// @public (undocumented)
+export class BaseTokenizeRequest {
+}
+
+// @public (undocumented)
+export class BaseTokenizeResponse {
+}
+
+// @public (undocumented)
+export class BaseUpdateRequest {
+}
+
+// @public (undocumented)
+export class BaseUpdateResponse {
+}
+
+// @public (undocumented)
+export class BaseUploadFilesRequest {
+}
+
+// @public (undocumented)
+export class BaseUploadFilesResponse {
+}
+
+// @public
+export interface BaseVaultClientLike {
+    // (undocumented)
+    setLogLevel(logLevel: LogLevel): void;
+    // (undocumented)
+    updateClientConfig(url: string, vaultId: string, individualCredentials?: Credentials, skyflowCredentials?: Credentials, logLevel?: LogLevel): void;
+    // (undocumented)
+    updateSkyflowCredentials(credentials?: Credentials): void;
+}
+
+// @public
+export interface BaseVaultEntry<TClient extends BaseVaultClientLike = BaseVaultClientLike> {
+    // (undocumented)
+    client: TClient;
+    // (undocumented)
+    config: VaultConfig;
+}
+
+// @public (undocumented)
+export type BearerTokenOptions = {
+    ctx?: string | Record<string, any>;
+    roleIDs?: string[];
+    roleIds?: string[];
+    logLevel?: LogLevel;
+    tokenUri?: string;
+};
+
+// @public
+export interface Bleep {
+    // (undocumented)
+    frequency?: number;
+    // (undocumented)
+    gain?: number;
+    // (undocumented)
+    startPadding?: number;
+    // (undocumented)
+    stopPadding?: number;
+}
+
+// @public (undocumented)
+export const BOOLEAN_STRING: {
+    readonly TRUE: "true";
+};
+
+// @public
+export class CheckGuardrailsRequest {
+    constructor(text: string, fields?: CheckGuardrailsRequestFields);
+    // (undocumented)
+    get checkToxicity(): boolean | undefined;
+    set checkToxicity(value: boolean | undefined);
+    // (undocumented)
+    get denyTopics(): string[] | undefined;
+    set denyTopics(value: string[] | undefined);
+    get text(): string;
+    set text(value: string);
+}
+
+// @public
+export interface CheckGuardrailsRequestFields {
+    checkToxicity?: boolean;
+    denyTopics?: string[];
+}
+
+// @public
+export class CheckGuardrailsResponse {
+    constructor(input: {
+        text: string | null;
+        validation: GuardrailsValidation;
+        toxic: boolean | null;
+        deniedTopic: boolean | null;
+    });
+    readonly deniedTopic: boolean | null;
+    readonly text: string | null;
+    readonly toxic: boolean | null;
+    readonly validation: GuardrailsValidation;
+}
+
+// @public
+export interface ColumnRedaction {
+    // (undocumented)
+    columnName: string;
+    // (undocumented)
+    redaction: string;
+}
+
+// @public (undocumented)
+export const CONFIG: {
+    readonly LOGLEVEL: "loglevel";
+    readonly CREDENTIALS: "credentials";
+    readonly VAULT_ID: "vaultId";
+    readonly CONNECTION_ID: "connectionId";
+    readonly VAULT: "vault";
+    readonly CONNECTION: "connection";
+};
+
+// @public (undocumented)
+export interface ConnectionConfig {
+    // (undocumented)
+    connectionId: string;
+    // (undocumented)
+    connectionUrl: string;
+    // (undocumented)
+    credentials?: Credentials;
+}
+
+// @public (undocumented)
+export const CONTENT_TYPE: {
+    readonly APPLICATION_JSON: "application/json";
+    readonly APPLICATION_X_WWW_FORM_URLENCODED: "application/x-www-form-urlencoded";
+    readonly TEXT_PLAIN: "text/plain";
+    readonly MULTIPART_FORM_DATA: "multipart/form-data";
+    readonly TEXT_XML: "text/xml";
+    readonly APPLICATION_XML: "application/xml";
+    readonly TEXT_HTML: "text/html";
+};
+
+// @public (undocumented)
+export const CONTROLLER_TYPES: {
+    DETECT: string;
+    VAULT: string;
+    CONNECTION: string;
+};
+
+// @public (undocumented)
+export type Credentials = TokenCredentials | PathCredentials | StringCredentials | ApiKeyCredentials;
+
+// @public
+export enum CustomHeaderKey {
+    // (undocumented)
+    REQUEST_ID_HEADER = "x-request-id",
+    // (undocumented)
+    SKYFLOW_ACCOUNT_ID = "x-skyflow-account-id",

... 2244 more lines. The full reports are in the `api-surface-reports` workflow artifact.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants