diff --git a/.github/workflows/contract-tests.yml b/.github/workflows/contract-tests.yml index f50424b6..bdc19096 100644 --- a/.github/workflows/contract-tests.yml +++ b/.github/workflows/contract-tests.yml @@ -29,23 +29,23 @@ jobs: cache: 'maven' - name: Verify API surface snapshot - run: mvn -B install -pl common,v2 -am -DskipTests -Dmaven.javadoc.skip=true -Dgpg.skip=true + run: mvn -B install -pl common,skyvault -am -DskipTests -Dmaven.javadoc.skip=true -Dgpg.skip=true - name: Show API surface diff if: failure() run: | echo "### API surface changes detected ###" - echo "See v2/target/japicmp/default-cli.diff for the full comparison against v2/api-report/skyflow-java.baseline.jar." + echo "See skyvault/target/japicmp/default-cli.diff for the full comparison against skyvault/api-report/skyflow-java.baseline.jar." echo "If this change is intentional, run scripts/contract-snapshot-update.sh and commit the updated baseline jar." echo "" - cat v2/target/japicmp/default-cli.diff || true + cat skyvault/target/japicmp/default-cli.diff || true - name: Upload API surface diff on failure if: failure() uses: actions/upload-artifact@v4 with: name: api-surface-diff - path: v2/target/japicmp/** + path: skyvault/target/japicmp/** retention-days: 7 # The step above only shows a diff when the CURRENT build differs from the @@ -61,7 +61,7 @@ jobs: if: always() && github.event.pull_request run: | git fetch origin "${{ github.event.pull_request.base.ref }}" --depth=1 - if git diff --name-only "origin/${{ github.event.pull_request.base.ref }}" HEAD -- v2/api-report/skyflow-java.baseline.jar | grep -q .; then + if git diff --name-only "origin/${{ github.event.pull_request.base.ref }}" HEAD -- skyvault/api-report/skyflow-java.baseline.jar | grep -q .; then echo "changed=true" >> "$GITHUB_OUTPUT" else echo "changed=false" >> "$GITHUB_OUTPUT" @@ -71,16 +71,16 @@ jobs: if: always() && steps.baseline-diff-check.outputs.changed == 'true' run: | curl -sL -o /tmp/japicmp-cli.jar "https://repo.maven.apache.org/maven2/com/github/siom79/japicmp/japicmp/0.26.0/japicmp-0.26.0-jar-with-dependencies.jar" - mvn -q -B dependency:build-classpath -pl v2 -Dmdep.outputFile=/tmp/v2-classpath.txt -Dmaven.javadoc.skip=true -Dgpg.skip=true - git show "origin/${{ github.event.pull_request.base.ref }}:v2/api-report/skyflow-java.baseline.jar" > /tmp/old-baseline.jar + mvn -q -B dependency:build-classpath -pl skyvault -Dmdep.outputFile=/tmp/skyvault-classpath.txt -Dmaven.javadoc.skip=true -Dgpg.skip=true + git show "origin/${{ github.event.pull_request.base.ref }}:skyvault/api-report/skyflow-java.baseline.jar" > /tmp/old-baseline.jar java -jar /tmp/japicmp-cli.jar \ -o /tmp/old-baseline.jar \ - -n v2/api-report/skyflow-java.baseline.jar \ + -n skyvault/api-report/skyflow-java.baseline.jar \ -a protected \ -e "com.skyflow.generated.*;com.skyflow.utils.*" \ - --old-classpath "$(cat /tmp/v2-classpath.txt)" \ - --new-classpath "$(cat /tmp/v2-classpath.txt)" \ + --old-classpath "$(cat /tmp/skyvault-classpath.txt)" \ + --new-classpath "$(cat /tmp/skyvault-classpath.txt)" \ -m \ --markdown > /tmp/contract-baseline-diff.md || true @@ -94,7 +94,7 @@ jobs: const fs = require('fs'); const summary = fs.readFileSync('/tmp/contract-baseline-diff.md', 'utf8'); const marker = ''; - const body = `${marker}\n## Contract baseline change detected\n\nThis PR updates \`v2/api-report/skyflow-java.baseline.jar\` (the approved public API contract). Here is exactly what it changes, comparing the baseline on \`${{ github.event.pull_request.base.ref }}\` against the baseline committed in this PR:\n\n${summary}`; + const body = `${marker}\n## Contract baseline change detected\n\nThis PR updates \`skyvault/api-report/skyflow-java.baseline.jar\` (the approved public API contract). Here is exactly what it changes, comparing the baseline on \`${{ github.event.pull_request.base.ref }}\` against the baseline committed in this PR:\n\n${summary}`; const { data: comments } = await github.rest.issues.listComments({ owner: context.repo.owner, repo: context.repo.repo, diff --git a/.github/workflows/endorlabsScan.yml b/.github/workflows/endorlabsScan.yml index 927009fe..762b742e 100644 --- a/.github/workflows/endorlabsScan.yml +++ b/.github/workflows/endorlabsScan.yml @@ -40,7 +40,7 @@ jobs: run: | # Surefire runs each module's tests with the module directory as the working # directory, so dotenv and ./credentials.json lookups miss the repo-root copies. - for module in common v2 flowvault; do + for module in common skyvault flowvault; do cp .env "$module/.env" cp credentials.json "$module/credentials.json" done diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index a246a6e3..0fea51db 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -21,7 +21,7 @@ jobs: if [[ "${{ github.ref_name }}" == flowvault-release/* ]]; then echo "module=flowvault" >> "$GITHUB_OUTPUT" else - echo "module=v2" >> "$GITHUB_OUTPUT" + echo "module=skyvault" >> "$GITHUB_OUTPUT" fi build-and-deploy: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c7360ea3..5489eeea 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,7 +34,7 @@ jobs: run: | # Surefire runs each module's tests with the module directory as the working # directory, so dotenv and ./credentials.json lookups miss the repo-root copies. - for module in common v2 flowvault; do + for module in common skyvault flowvault; do cp .env "$module/.env" cp credentials.json "$module/credentials.json" done @@ -42,10 +42,53 @@ jobs: - name: Build & Run tests with Maven run: mvn -B package -f pom.xml -Dmaven.javadoc.skip=true - - name: Codecov - uses: codecov/codecov-action@v2.1.0 + # JaCoCo records packages as "com/skyflow/..." with no module prefix, and all three + # modules share the com.skyflow package (deliberate split-package convention). So + # "com/skyflow/config/VaultConfig.java" matches BOTH skyvault and flowvault, Codecov + # resolves it to one of them, and the other module's file silently reports no data. + # Prefixing each report with its own source root makes every path unique and match the + # repo exactly, so all three modules' files are attributed correctly. + - name: Qualify JaCoCo report paths with their module + run: | + for module in common skyvault flowvault; do + report="$module/target/site/jacoco/jacoco.xml" + if [ ! -f "$report" ]; then + echo "Error: expected $report to exist after the build." + exit 1 + fi + tmp="$(mktemp)" + sed "s| "$tmp" + mv "$tmp" "$report" + done + + # One upload per module, each with its own flag, so Codecov reports per-module + # coverage instead of merging three same-named package trees into one number. + - name: Codecov (common) + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_REPO_UPLOAD_TOKEN }} + files: common/target/site/jacoco/jacoco.xml + flags: common + name: codecov-common + verbose: true + fail_ci_if_error: true + + - name: Codecov (skyvault) + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_REPO_UPLOAD_TOKEN }} + files: skyvault/target/site/jacoco/jacoco.xml + flags: skyvault + name: codecov-skyvault + verbose: true + fail_ci_if_error: true + + - name: Codecov (flowvault) + uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_REPO_UPLOAD_TOKEN }} - files: target/site/jacoco/jacoco.xml - name: codecov-skyflow-java + files: flowvault/target/site/jacoco/jacoco.xml + flags: flowvault + name: codecov-flowvault verbose: true + fail_ci_if_error: true diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 0002d3eb..822b1288 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -43,7 +43,7 @@ jobs: run: | # Surefire runs each module's tests with the module directory as the working # directory, so dotenv and ./credentials.json lookups miss the repo-root copies. - for module in common v2 flowvault; do + for module in common skyvault flowvault; do cp .env "$module/.env" cp credentials.json "$module/credentials.json" done @@ -51,17 +51,56 @@ jobs: - name: Build & Run tests with Maven run: mvn -B package -f pom.xml -Dmaven.javadoc.skip=true - # JaCoCo writes one report per module. The root pom is pom - # with no sources, so target/site/jacoco/jacoco.xml - correct when this was a - # single-module build - is never generated post common/v2/flowvault split, and - # codecov was silently uploading nothing. - - name: Codecov - uses: codecov/codecov-action@v2.1.0 + # JaCoCo records packages as "com/skyflow/..." with no module prefix, and all three + # modules share the com.skyflow package (deliberate split-package convention). So + # "com/skyflow/config/VaultConfig.java" matches BOTH skyvault and flowvault, Codecov + # resolves it to one of them, and the other module's file silently reports no data. + # Prefixing each report with its own source root makes every path unique and match the + # repo exactly, so all three modules' files are attributed correctly. + - name: Qualify JaCoCo report paths with their module + run: | + for module in common skyvault flowvault; do + report="$module/target/site/jacoco/jacoco.xml" + if [ ! -f "$report" ]; then + echo "Error: expected $report to exist after the build." + exit 1 + fi + tmp="$(mktemp)" + sed "s| "$tmp" + mv "$tmp" "$report" + done + + # One upload per module, each with its own flag, so Codecov reports per-module + # coverage instead of merging three same-named package trees into one number. + - name: Codecov (common) + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_REPO_UPLOAD_TOKEN }} + files: common/target/site/jacoco/jacoco.xml + flags: common + name: codecov-common + verbose: true + fail_ci_if_error: true + + - name: Codecov (skyvault) + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_REPO_UPLOAD_TOKEN }} + files: skyvault/target/site/jacoco/jacoco.xml + flags: skyvault + name: codecov-skyvault + verbose: true + fail_ci_if_error: true + + - name: Codecov (flowvault) + uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_REPO_UPLOAD_TOKEN }} - files: common/target/site/jacoco/jacoco.xml,v2/target/site/jacoco/jacoco.xml,flowvault/target/site/jacoco/jacoco.xml - name: codecov-skyflow-java + files: flowvault/target/site/jacoco/jacoco.xml + flags: flowvault + name: codecov-flowvault verbose: true + fail_ci_if_error: true spellcheck: name: Run spellcheck diff --git a/.github/workflows/shared-build-and-deploy.yml b/.github/workflows/shared-build-and-deploy.yml index 5cdfca73..842dbc58 100644 --- a/.github/workflows/shared-build-and-deploy.yml +++ b/.github/workflows/shared-build-and-deploy.yml @@ -135,7 +135,7 @@ jobs: run: | # Surefire runs each module's tests with the module directory as the working # directory, so dotenv and ./credentials.json lookups miss the repo-root copies. - for module in common v2 flowvault; do + for module in common skyvault flowvault; do cp .env "$module/.env" cp credentials.json "$module/credentials.json" done diff --git a/codecov.yml b/codecov.yml index 2a9a1108..0191c11b 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,16 +1,90 @@ -comment: false +# Post a summary on every PR, broken down by flag (module) and component so all three of +# common / skyvault / flowvault are visible at a glance. require_changes: false keeps the +# comment on PRs that touch only one module, so the other two still report their coverage. +comment: + layout: "header, diff, flags, components, files, footer" + behavior: default + require_changes: false -# Component paths are prefixed with **/ (quoted - a bare leading * is a YAML -# alias) so they match every Maven module. Before the common/v2/flowvault -# split sources lived at src/main/java/...; they are now -# /src/main/java/..., so the unprefixed globs matched zero files and -# every component reported no coverage data. +# A project + patch status per module, so each of the three gets its own PR check rather +# than being averaged into one repo-wide number. informational keeps them advisory - they +# report the delta without blocking the merge. +coverage: + status: + project: + default: + target: auto + threshold: 1% + common: + flags: + - common + target: auto + threshold: 1% + informational: true + skyvault: + flags: + - skyvault + target: auto + threshold: 1% + informational: true + flowvault: + flags: + - flowvault + target: auto + threshold: 1% + informational: true + patch: + default: + target: auto + threshold: 1% + informational: true + +# One flag per Maven module. Each module is uploaded separately in CI so its coverage is +# reported on its own rather than merged into a single repo-wide number. carryforward keeps +# the last known coverage for a module when a run does not upload it (e.g. a partial build). +flags: + common: + paths: + - common/src/main/java/ + carryforward: true + skyvault: + paths: + - skyvault/src/main/java/ + carryforward: true + flowvault: + paths: + - flowvault/src/main/java/ + carryforward: true + +# Components give two independent breakdowns of the same coverage data: +# - one per module, so a drop can be traced to common / skyvault / flowvault +# - one per package, so a drop can be traced to controllers / data / utils / ... +# +# Package paths are prefixed with **/ (quoted - a bare leading * is a YAML alias) so they +# match every module. All three modules share the com.skyflow package name, so the JaCoCo +# reports are rewritten in CI to carry their module's source root; without that, a path like +# com/skyflow/config/VaultConfig.java is ambiguous and Codecov attributes it to a single +# module while the others report no data. See the "Qualify JaCoCo report paths" CI step. component_management: default_rules: statuses: - type: project target: auto individual_components: + # -- per module ------------------------------------------------------------ + - component_id: module_common + name: "Module: common" + paths: + - "common/src/main/java/**" + - component_id: module_skyvault + name: "Module: skyvault" + paths: + - "skyvault/src/main/java/**" + - component_id: module_flowvault + name: "Module: flowvault" + paths: + - "flowvault/src/main/java/**" + # -- per package, across all modules --------------------------------------- - component_id: service_account name: Service Account paths: @@ -55,3 +129,18 @@ component_management: name: Errors paths: - "**/src/main/java/com/skyflow/errors/**" + - component_id: enums + name: Enums + paths: + - "**/src/main/java/com/skyflow/enums/**" + - component_id: logs + name: Logs + paths: + - "**/src/main/java/com/skyflow/logs/**" + +# Generated REST/auth clients and sample code are not hand-written and are already excluded +# from the JaCoCo reports by the root pom; ignore them here too so they never skew a target. +ignore: + - "**/src/main/java/com/skyflow/generated/**" + - "**/samples/**" + - "**/src/test/**" diff --git a/flowvault/pom.xml b/flowvault/pom.xml index 18a6966f..baa12ea2 100644 --- a/flowvault/pom.xml +++ b/flowvault/pom.xml @@ -11,7 +11,7 @@ skyflow-flowvault-java - 3.0.0-beta.13-dev.6577fa70 + 3.0.0-beta.13-dev.5e368050 jar ${project.groupId}:${project.artifactId} Skyflow V3 SDK for the Java programming language diff --git a/flowvault/src/main/java/com/skyflow/Skyflow.java b/flowvault/src/main/java/com/skyflow/Skyflow.java index ef62ce66..64551cb9 100644 --- a/flowvault/src/main/java/com/skyflow/Skyflow.java +++ b/flowvault/src/main/java/com/skyflow/Skyflow.java @@ -55,6 +55,8 @@ public static final class SkyflowClientBuilder extends BaseSkyflowClientBuilder< private Integer readTimeout; private Integer writeTimeout; private Integer maxRetries; + private Long initialRetryDelayMillis; + private Long maxRetryDelayMillis; @Override protected void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowException { @@ -65,7 +67,8 @@ protected void validateVaultConfig(VaultConfig vaultConfig) throws SkyflowExcept protected void onVaultConfigAdded(VaultConfig vaultConfig) throws SkyflowException { VaultController controller = new VaultController(vaultConfig, this.skyflowCredentials); controller.setCommonHttpConfig(this.timeout, this.connectTimeout, this.readTimeout, - this.writeTimeout, this.maxRetries); + this.writeTimeout, this.maxRetries, this.initialRetryDelayMillis, + this.maxRetryDelayMillis); this.vaultClientsMap.put(vaultConfig.getVaultId(), controller); LogUtil.printInfoLog(Utils.parameterizedString(InfoLogs.VAULT_CONTROLLER_INITIALIZED.getLog(), vaultConfig.getVaultId())); } @@ -82,7 +85,8 @@ protected void onVaultConfigUpdated(VaultConfig updatedConfig) throws SkyflowExc updated.setVaultConfig(updatedConfig); } updated.setCommonHttpConfig(this.timeout, this.connectTimeout, this.readTimeout, - this.writeTimeout, this.maxRetries); + this.writeTimeout, this.maxRetries, this.initialRetryDelayMillis, + this.maxRetryDelayMillis); } @Override @@ -142,6 +146,12 @@ private void carryVaultOverrides(VaultConfig incoming) throws SkyflowException { if (incoming.getMaxRetries() != null) { merged.setMaxRetries(incoming.getMaxRetries()); } + if (incoming.getInitialRetryDelayMillis() != null) { + merged.setInitialRetryDelayMillis(incoming.getInitialRetryDelayMillis()); + } + if (incoming.getMaxRetryDelayMillis() != null) { + merged.setMaxRetryDelayMillis(incoming.getMaxRetryDelayMillis()); + } // The HTTP settings above are resolved lazily on the next request, but the URL is // resolved once in the VaultClient constructor — which already ran with the old value. if (incoming.getVaultUrl() != null) { @@ -232,11 +242,38 @@ public SkyflowClientBuilder maxRetries(int maxRetries) { return this; } + /** + * Backoff before the first retry, in milliseconds. Default 500. Only applies when + * {@code maxRetries} is greater than zero. + *

+ * Precedence: a vault that sets {@link VaultConfig#setInitialRetryDelayMillis(Long)} + * wins; this value applies only to vaults that leave it unset. + */ + public SkyflowClientBuilder initialRetryDelayMillis(long initialRetryDelayMillis) { + this.initialRetryDelayMillis = initialRetryDelayMillis; + propagateHttpConfig(); + return this; + } + + /** + * Ceiling the exponential backoff grows to, in milliseconds. Default 2000. Only applies + * when {@code maxRetries} is greater than zero. + *

+ * Precedence: a vault that sets {@link VaultConfig#setMaxRetryDelayMillis(Long)} + * wins; this value applies only to vaults that leave it unset. + */ + public SkyflowClientBuilder maxRetryDelayMillis(long maxRetryDelayMillis) { + this.maxRetryDelayMillis = maxRetryDelayMillis; + propagateHttpConfig(); + return this; + } + /** Push the current client-wide HTTP settings onto every vault controller built so far. */ private void propagateHttpConfig() { for (VaultController vault : this.vaultClientsMap.values()) { vault.setCommonHttpConfig(this.timeout, this.connectTimeout, this.readTimeout, - this.writeTimeout, this.maxRetries); + this.writeTimeout, this.maxRetries, this.initialRetryDelayMillis, + this.maxRetryDelayMillis); } } diff --git a/flowvault/src/main/java/com/skyflow/VaultClient.java b/flowvault/src/main/java/com/skyflow/VaultClient.java index a8a2e2d7..d45d50fc 100644 --- a/flowvault/src/main/java/com/skyflow/VaultClient.java +++ b/flowvault/src/main/java/com/skyflow/VaultClient.java @@ -5,9 +5,9 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.ApiClientBuilder; -import com.skyflow.generated.rest.core.RetryInterceptor; import com.skyflow.generated.rest.resources.flowservice.FlowserviceClient; import com.skyflow.generated.rest.resources.records.RecordsClient; +import com.skyflow.utils.SkyflowRetryInterceptor; import com.skyflow.utils.Utils; import java.util.concurrent.TimeUnit; @@ -25,10 +25,14 @@ public class VaultClient extends BaseVaultClient { private Integer commonReadTimeout; private Integer commonWriteTimeout; private Integer commonMaxRetries; + private Long commonInitialRetryDelayMillis; + private Long commonMaxRetryDelayMillis; // SDK defaults, used when neither the vault-level nor the client-wide value is set. private static final int DEFAULT_TIMEOUT_SECONDS = 60; // Retries OFF by default (opt-in) so non-idempotent bulk writes aren't replayed automatically. private static final int DEFAULT_MAX_RETRIES = 0; + private static final long DEFAULT_INITIAL_RETRY_DELAY_MILLIS = 500L; + private static final long DEFAULT_MAX_RETRY_DELAY_MILLIS = 2000L; protected VaultClient(VaultConfig vaultConfig, Credentials credentials) throws SkyflowException { super(vaultConfig, credentials); @@ -42,12 +46,15 @@ protected VaultClient(VaultConfig vaultConfig, Credentials credentials) throws S * client and ApiClient so the next call rebuilds them with the new values. */ protected void setCommonHttpConfig(Integer timeout, Integer connectTimeout, Integer readTimeout, - Integer writeTimeout, Integer maxRetries) { + Integer writeTimeout, Integer maxRetries, + Long initialRetryDelayMillis, Long maxRetryDelayMillis) { this.commonTimeout = timeout; this.commonConnectTimeout = connectTimeout; this.commonReadTimeout = readTimeout; this.commonWriteTimeout = writeTimeout; this.commonMaxRetries = maxRetries; + this.commonInitialRetryDelayMillis = initialRetryDelayMillis; + this.commonMaxRetryDelayMillis = maxRetryDelayMillis; this.sharedHttpClient = null; this.apiClient = null; } @@ -60,6 +67,14 @@ private static int resolveInt(Integer vaultLevel, Integer clientLevel, int defau return clientLevel != null ? clientLevel : defaultValue; } + /** Resolve a long setting: vault-level override, else client-wide default, else the SDK default. */ + private static long resolveLong(Long vaultLevel, Long clientLevel, long defaultValue) { + if (vaultLevel != null) { + return vaultLevel; + } + return clientLevel != null ? clientLevel : defaultValue; + } + /** * Resolve an optional setting: vault-level override, else client-wide default, else null. * Null means "not configured" — the caller leaves the underlying HTTP client default in place. @@ -134,6 +149,10 @@ protected void updateExecutorInHTTP() { if (sharedHttpClient == null) { int timeoutSeconds = resolveInt(vaultConfig.getTimeout(), commonTimeout, DEFAULT_TIMEOUT_SECONDS); int maxRetries = resolveInt(vaultConfig.getMaxRetries(), commonMaxRetries, DEFAULT_MAX_RETRIES); + long initialRetryDelayMillis = resolveLong(vaultConfig.getInitialRetryDelayMillis(), + commonInitialRetryDelayMillis, DEFAULT_INITIAL_RETRY_DELAY_MILLIS); + long maxRetryDelayMillis = resolveLong(vaultConfig.getMaxRetryDelayMillis(), + commonMaxRetryDelayMillis, DEFAULT_MAX_RETRY_DELAY_MILLIS); // Per-attempt timeouts: null => leave OkHttp's built-in default (backward compatible). Integer connectTimeout = resolveNullableInt(vaultConfig.getConnectTimeout(), commonConnectTimeout); Integer readTimeout = resolveNullableInt(vaultConfig.getReadTimeout(), commonReadTimeout); @@ -145,7 +164,7 @@ protected void updateExecutorInHTTP() { .callTimeout(timeoutSeconds, TimeUnit.SECONDS) // OUTER: retries. Must wrap the auth interceptor so each attempt re-reads the // (possibly refreshed) bearer token rather than replaying a stale one. - .addInterceptor(new RetryInterceptor(maxRetries)) + .addInterceptor(new SkyflowRetryInterceptor(maxRetries, initialRetryDelayMillis, maxRetryDelayMillis)) .addInterceptor(chain -> { // INNER: auth Request requestWithAuth = chain.request().newBuilder() .header("Authorization", "Bearer " + this.token) diff --git a/flowvault/src/main/java/com/skyflow/config/VaultConfig.java b/flowvault/src/main/java/com/skyflow/config/VaultConfig.java index b14ed6b5..3369abc7 100644 --- a/flowvault/src/main/java/com/skyflow/config/VaultConfig.java +++ b/flowvault/src/main/java/com/skyflow/config/VaultConfig.java @@ -21,6 +21,8 @@ public class VaultConfig extends BaseVaultConfig { private Integer readTimeout; // per-attempt response-read timeout, in seconds private Integer writeTimeout; // per-attempt request-write timeout, in seconds private Integer maxRetries; // retry attempts after the first failure + private Long initialRetryDelayMillis; // backoff before the first retry, in milliseconds + private Long maxRetryDelayMillis; // ceiling the exponential backoff grows to, in milliseconds public VaultConfig() { super(); @@ -30,6 +32,8 @@ public VaultConfig() { this.readTimeout = null; this.writeTimeout = null; this.maxRetries = null; + this.initialRetryDelayMillis = null; + this.maxRetryDelayMillis = null; } public String getVaultUrl() { @@ -114,4 +118,35 @@ public void setMaxRetries(Integer maxRetries) { this.maxRetries = maxRetries; } + + public Long getInitialRetryDelayMillis() { + return initialRetryDelayMillis; + } + + /** + * Backoff before the first retry, in milliseconds, for this vault. + *

+ * Takes precedence over the client-wide {@code Skyflow.builder().initialRetryDelayMillis(...)}. + * Leave unset (null) to inherit that value, or the SDK default of 500 ms if it is also unset. + * Only applies when {@code maxRetries} is greater than zero. + */ + public void setInitialRetryDelayMillis(Long initialRetryDelayMillis) { + this.initialRetryDelayMillis = initialRetryDelayMillis; + } + + public Long getMaxRetryDelayMillis() { + return maxRetryDelayMillis; + } + + /** + * Ceiling the exponential backoff grows to, in milliseconds, for this vault. + *

+ * Takes precedence over the client-wide {@code Skyflow.builder().maxRetryDelayMillis(...)}. + * Leave unset (null) to inherit that value, or the SDK default of 2000 ms if it is also unset. + * Only applies when {@code maxRetries} is greater than zero. + */ + public void setMaxRetryDelayMillis(Long maxRetryDelayMillis) { + this.maxRetryDelayMillis = maxRetryDelayMillis; + } + } diff --git a/flowvault/src/main/java/com/skyflow/utils/SkyflowRetryInterceptor.java b/flowvault/src/main/java/com/skyflow/utils/SkyflowRetryInterceptor.java new file mode 100644 index 00000000..703c698e --- /dev/null +++ b/flowvault/src/main/java/com/skyflow/utils/SkyflowRetryInterceptor.java @@ -0,0 +1,97 @@ +package com.skyflow.utils; + +import okhttp3.Interceptor; +import okhttp3.Response; + +import java.io.IOException; +import java.util.Random; + +/** + * Retries failed requests with exponential backoff and jitter. + *

+ * This exists as hand-written code rather than using the generated + * {@code com.skyflow.generated.rest.core.RetryInterceptor} because that one only accepts a retry + * count — it has no way to configure the backoff delays that {@code VaultConfig} exposes. It also + * keeps its backoff counter on the interceptor instance, so a single shared instance exhausts its + * retry budget once for the whole client rather than once per request; this implementation keeps + * that state per call. + *

+ * Retries the same statuses the generated interceptor does: 408, 429, and any 5xx. + */ +public final class SkyflowRetryInterceptor implements Interceptor { + + /** Fraction of the computed delay applied as random jitter, so retries do not align. */ + private static final double JITTER_FACTOR = 0.2; + + private final int maxRetries; + private final long initialRetryDelayMillis; + private final long maxRetryDelayMillis; + private final Random random = new Random(); + + public SkyflowRetryInterceptor(int maxRetries, long initialRetryDelayMillis, long maxRetryDelayMillis) { + if (maxRetries < 0) { + throw new IllegalArgumentException("maxRetries must be non-negative"); + } + if (initialRetryDelayMillis < 0) { + throw new IllegalArgumentException("initialRetryDelayMillis must be non-negative"); + } + if (maxRetryDelayMillis < 0) { + throw new IllegalArgumentException("maxRetryDelayMillis must be non-negative"); + } + this.maxRetries = maxRetries; + this.initialRetryDelayMillis = initialRetryDelayMillis; + this.maxRetryDelayMillis = maxRetryDelayMillis; + } + + @Override + public Response intercept(Chain chain) throws IOException { + Response response = chain.proceed(chain.request()); + // Retry budget is scoped to this call, not to the interceptor instance. + for (int attempt = 1; attempt <= maxRetries && shouldRetry(response.code()); attempt++) { + sleep(backoffMillis(attempt)); + response.close(); + response = chain.proceed(chain.request()); + } + return response; + } + + /** Exponential growth from the initial delay, capped at the maximum, then jittered. */ + long backoffMillis(int attempt) { + long delay = initialRetryDelayMillis; + for (int i = 1; i < attempt && delay < maxRetryDelayMillis; i++) { + delay = delay > maxRetryDelayMillis / 2 ? maxRetryDelayMillis : delay * 2; + } + delay = Math.min(delay, maxRetryDelayMillis); + long jitter = (long) (delay * JITTER_FACTOR); + if (jitter <= 0) { + return delay; + } + // delay +/- up to JITTER_FACTOR, never negative. + return Math.max(0, delay - jitter + random.nextInt((int) Math.min(2 * jitter + 1, Integer.MAX_VALUE))); + } + + static boolean shouldRetry(int statusCode) { + return statusCode == 408 || statusCode == 429 || statusCode >= 500; + } + + private static void sleep(long millis) throws IOException { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IOException("Interrupted while waiting to retry request", e); + } + } + + public int getMaxRetries() { + return maxRetries; + } + + public long getInitialRetryDelayMillis() { + return initialRetryDelayMillis; + } + + public long getMaxRetryDelayMillis() { + return maxRetryDelayMillis; + } +} diff --git a/flowvault/src/main/java/com/skyflow/vault/controller/VaultController.java b/flowvault/src/main/java/com/skyflow/vault/controller/VaultController.java index 68314ec3..d405e1b4 100644 --- a/flowvault/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/flowvault/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -644,20 +644,8 @@ private BatchConfig configureTokenizeConcurrencyAndBatchSize(int totalRequests) int batchSize = Constants.TOKENIZE_BATCH_SIZE; int concurrencyLimit; try { - String userProvidedBatchSize = System.getenv("TOKENIZE_BATCH_SIZE"); - String userProvidedConcurrencyLimit = System.getenv("TOKENIZE_CONCURRENCY_LIMIT"); - - Dotenv dotenv = null; - try { - dotenv = Dotenv.load(); - } catch (DotenvException ignored) {} - - if (userProvidedBatchSize == null && dotenv != null) { - userProvidedBatchSize = dotenv.get("TOKENIZE_BATCH_SIZE"); - } - if (userProvidedConcurrencyLimit == null && dotenv != null) { - userProvidedConcurrencyLimit = dotenv.get("TOKENIZE_CONCURRENCY_LIMIT"); - } + String userProvidedBatchSize = settingResolver.apply("TOKENIZE_BATCH_SIZE"); + String userProvidedConcurrencyLimit = settingResolver.apply("TOKENIZE_CONCURRENCY_LIMIT"); if (userProvidedBatchSize != null) { try { @@ -712,22 +700,8 @@ private BatchConfig configureDetokenizeConcurrencyAndBatchSize(int totalRequests int batchSize = Constants.DETOKENIZE_BATCH_SIZE; int concurrencyLimit; try { - String userProvidedBatchSize = System.getenv("DETOKENIZE_BATCH_SIZE"); - String userProvidedConcurrencyLimit = System.getenv("DETOKENIZE_CONCURRENCY_LIMIT"); - - Dotenv dotenv = null; - try { - dotenv = Dotenv.load(); - } catch (DotenvException ignored) { - // ignore the case if .env file is not found - } - - if (userProvidedBatchSize == null && dotenv != null) { - userProvidedBatchSize = dotenv.get("DETOKENIZE_BATCH_SIZE"); - } - if (userProvidedConcurrencyLimit == null && dotenv != null) { - userProvidedConcurrencyLimit = dotenv.get("DETOKENIZE_CONCURRENCY_LIMIT"); - } + String userProvidedBatchSize = settingResolver.apply("DETOKENIZE_BATCH_SIZE"); + String userProvidedConcurrencyLimit = settingResolver.apply("DETOKENIZE_CONCURRENCY_LIMIT"); if (userProvidedBatchSize != null) { try { @@ -929,22 +903,8 @@ private BatchConfig configureInsertConcurrencyAndBatchSize(int totalRequests) { int batchSize = Constants.INSERT_BATCH_SIZE; int concurrencyLimit; try { - String userProvidedBatchSize = System.getenv("INSERT_BATCH_SIZE"); - String userProvidedConcurrencyLimit = System.getenv("INSERT_CONCURRENCY_LIMIT"); - - Dotenv dotenv = null; - try { - dotenv = Dotenv.load(); - } catch (DotenvException ignored) { - // ignore the case if .env file is not found - } - - if (userProvidedBatchSize == null && dotenv != null) { - userProvidedBatchSize = dotenv.get("INSERT_BATCH_SIZE"); - } - if (userProvidedConcurrencyLimit == null && dotenv != null) { - userProvidedConcurrencyLimit = dotenv.get("INSERT_CONCURRENCY_LIMIT"); - } + String userProvidedBatchSize = settingResolver.apply("INSERT_BATCH_SIZE"); + String userProvidedConcurrencyLimit = settingResolver.apply("INSERT_CONCURRENCY_LIMIT"); if (userProvidedBatchSize != null) { try { diff --git a/flowvault/src/test/java/com/skyflow/AuthInterceptorTests.java b/flowvault/src/test/java/com/skyflow/AuthInterceptorTests.java new file mode 100644 index 00000000..a0f91dbb --- /dev/null +++ b/flowvault/src/test/java/com/skyflow/AuthInterceptorTests.java @@ -0,0 +1,115 @@ +package com.skyflow; + +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.SkyflowException; +import com.skyflow.generated.rest.core.RetryInterceptor; +import com.skyflow.utils.FakeChain; +import com.skyflow.utils.SkyflowRetryInterceptor; +import okhttp3.Interceptor; +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; +import java.util.List; + +/** + * The auth interceptor installed by {@link VaultClient#updateExecutorInHTTP()}. + * + *

It is a lambda, so the only way to reach it is to pull it back off the built OkHttpClient and + * drive it with a fake chain. The property that matters is that it reads {@code this.token} on every + * request rather than capturing it once — that is why retry is registered outside auth, so a replayed + * attempt picks up a refreshed token instead of resending an expired one. + */ +public class AuthInterceptorTests { + + private static final String API_KEY = "sky-ab123-abcd1234cdef1234abcd4321cdef4321"; + + private static VaultConfig config() { + VaultConfig config = new VaultConfig(); + config.setVaultId("vault1"); + config.setClusterId("cluster1"); + config.setEnv(Env.DEV); + return config; + } + + private static Interceptor authInterceptorOf(VaultClient client) { + client.updateExecutorInHTTP(); + List interceptors = client.sharedHttpClient.interceptors(); + for (Interceptor interceptor : interceptors) { + if (!(interceptor instanceof SkyflowRetryInterceptor) && !(interceptor instanceof RetryInterceptor)) { + return interceptor; + } + } + throw new AssertionError("no auth interceptor installed"); + } + + @Test + public void testAuthInterceptor_addsBearerAuthorizationHeader() throws SkyflowException, IOException { + Credentials credentials = new Credentials(); + credentials.setApiKey(API_KEY); + VaultConfig config = config(); + config.setCredentials(credentials); + VaultClient client = new VaultClient(config, null); + client.setBearerToken(); + + FakeChain chain = new FakeChain(200); + authInterceptorOf(client).intercept(chain); + + Assert.assertEquals("Bearer " + API_KEY, chain.lastProceeded().header("Authorization")); + } + + @Test + public void testAuthInterceptor_readsTheTokenFreshOnEveryRequest() throws SkyflowException, IOException { + VaultClient client = new VaultClient(config(), null); + Interceptor auth = authInterceptorOf(client); + + client.token = "first-token"; + FakeChain first = new FakeChain(200); + auth.intercept(first); + + client.token = "second-token"; + FakeChain second = new FakeChain(200); + auth.intercept(second); + + Assert.assertEquals("Bearer first-token", first.lastProceeded().header("Authorization")); + Assert.assertEquals("A captured token would resend the stale value after a refresh", + "Bearer second-token", second.lastProceeded().header("Authorization")); + } + + @Test + public void testAuthInterceptor_leavesTheRestOfTheRequestAlone() throws SkyflowException, IOException { + VaultClient client = new VaultClient(config(), null); + client.token = "t"; + FakeChain chain = new FakeChain(200); + + authInterceptorOf(client).intercept(chain); + + Assert.assertEquals(chain.request().url(), chain.lastProceeded().url()); + Assert.assertEquals(chain.request().method(), chain.lastProceeded().method()); + } + + @Test + public void testAuthInterceptor_returnsTheChainResponseUntouched() throws SkyflowException, IOException { + VaultClient client = new VaultClient(config(), null); + client.token = "t"; + FakeChain chain = new FakeChain(503); + + Assert.assertEquals(503, authInterceptorOf(client).intercept(chain).code()); + Assert.assertEquals("auth must not retry - that is the outer interceptor's job", 1, chain.calls()); + } + + @Test + public void testGetQueryApi_availableAfterSetBearerToken() throws SkyflowException { + Credentials credentials = new Credentials(); + credentials.setApiKey(API_KEY); + VaultConfig config = config(); + config.setCredentials(credentials); + + VaultClient client = new VaultClient(config, null); + client.setBearerToken(); + + Assert.assertNotNull(client.getQueryApi()); + } +} diff --git a/flowvault/src/test/java/com/skyflow/HttpConfigTests.java b/flowvault/src/test/java/com/skyflow/HttpConfigTests.java index 49ce259c..3e0e4f7f 100644 --- a/flowvault/src/test/java/com/skyflow/HttpConfigTests.java +++ b/flowvault/src/test/java/com/skyflow/HttpConfigTests.java @@ -3,14 +3,13 @@ import com.skyflow.config.VaultConfig; import com.skyflow.enums.Env; import com.skyflow.errors.SkyflowException; -import com.skyflow.generated.rest.core.RetryInterceptor; +import com.skyflow.utils.SkyflowRetryInterceptor; import com.skyflow.vault.controller.VaultController; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import org.junit.Assert; import org.junit.Test; -import java.lang.reflect.Field; import java.util.List; /** @@ -37,30 +36,17 @@ private static OkHttpClient httpClientOf(VaultClient client) { return client.sharedHttpClient; } - /** - * Reads the retry budget back out of the generated RetryInterceptor, which exposes no getter. - * If regeneration changes its internals this fails loudly — which is the point. - */ - private static int maxRetriesOf(RetryInterceptor interceptor) { - try { - Field backoffField = RetryInterceptor.class.getDeclaredField("backoff"); - backoffField.setAccessible(true); - Object backoff = backoffField.get(interceptor); - Field maxField = backoff.getClass().getDeclaredField("maxNumRetries"); - maxField.setAccessible(true); - return (int) maxField.get(backoff); - } catch (ReflectiveOperationException e) { - throw new AssertionError("RetryInterceptor internals changed: " + e.getMessage(), e); - } + private static int maxRetriesOf(SkyflowRetryInterceptor interceptor) { + return interceptor.getMaxRetries(); } - private static RetryInterceptor retryInterceptorOf(OkHttpClient http) { + private static SkyflowRetryInterceptor retryInterceptorOf(OkHttpClient http) { for (Interceptor interceptor : http.interceptors()) { - if (interceptor instanceof RetryInterceptor) { - return (RetryInterceptor) interceptor; + if (interceptor instanceof SkyflowRetryInterceptor) { + return (SkyflowRetryInterceptor) interceptor; } } - throw new AssertionError("No RetryInterceptor installed on the HTTP client"); + throw new AssertionError("No SkyflowRetryInterceptor installed on the HTTP client"); } // ── SDK defaults (neither level configured) ─────────────────────────────── @@ -93,7 +79,7 @@ public void testDefaults_perAttemptTimeoutsLeftAtOkHttpDefaults() throws Skyflow @Test public void testClientWideConfig_appliesWhenVaultLevelUnset() throws SkyflowException { VaultClient client = new VaultClient(buildConfig(), null); - client.setCommonHttpConfig(30, 5, 6, 7, 2); + client.setCommonHttpConfig(30, 5, 6, 7, 2, null, null); OkHttpClient http = httpClientOf(client); @@ -136,7 +122,7 @@ public void testPrecedence_vaultLevelBeatsClientWideForEverySetting() throws Sky config.setMaxRetries(4); VaultClient client = new VaultClient(config, null); - client.setCommonHttpConfig(30, 5, 6, 7, 2); + client.setCommonHttpConfig(30, 5, 6, 7, 2, null, null); OkHttpClient http = httpClientOf(client); @@ -154,7 +140,7 @@ public void testPrecedence_settingsResolveIndependently() throws SkyflowExceptio config.setReadTimeout(12); VaultClient client = new VaultClient(config, null); - client.setCommonHttpConfig(30, 5, 6, 7, 2); + client.setCommonHttpConfig(30, 5, 6, 7, 2, null, null); OkHttpClient http = httpClientOf(client); @@ -168,7 +154,7 @@ public void testPrecedence_settingsResolveIndependently() throws SkyflowExceptio @Test public void testPrecedence_sdkDefaultUsedWhenBothLevelsNull() throws SkyflowException { VaultClient client = new VaultClient(buildConfig(), null); - client.setCommonHttpConfig(null, null, null, null, null); + client.setCommonHttpConfig(null, null, null, null, null, null, null); OkHttpClient http = httpClientOf(client); @@ -185,7 +171,7 @@ public void testSetCommonHttpConfig_rebuildsHttpClientWithNewValues() throws Sky OkHttpClient first = httpClientOf(client); Assert.assertEquals(SDK_DEFAULT_CALL_TIMEOUT_MILLIS, first.callTimeoutMillis()); - client.setCommonHttpConfig(30, null, null, null, 2); + client.setCommonHttpConfig(30, null, null, null, 2, null, null); OkHttpClient second = httpClientOf(client); Assert.assertNotSame(first, second); @@ -212,8 +198,8 @@ public void testInterceptors_retryIsOuterSoEachAttemptRereadsTheToken() throws S List interceptors = http.interceptors(); Assert.assertEquals(2, interceptors.size()); Assert.assertTrue("Retry must be registered first so it wraps the auth interceptor", - interceptors.get(0) instanceof RetryInterceptor); - Assert.assertFalse(interceptors.get(1) instanceof RetryInterceptor); + interceptors.get(0) instanceof SkyflowRetryInterceptor); + Assert.assertFalse(interceptors.get(1) instanceof SkyflowRetryInterceptor); } @Test @@ -233,7 +219,7 @@ public void testExplicitZeroTimeout_isAValueNotAnInheritSignal() throws SkyflowE config.setTimeout(0); VaultClient client = new VaultClient(config, null); - client.setCommonHttpConfig(30, null, null, null, null); + client.setCommonHttpConfig(30, null, null, null, null, null, null); Assert.assertEquals(0, httpClientOf(client).callTimeoutMillis()); } @@ -244,11 +230,114 @@ public void testExplicitZeroMaxRetries_overridesClientWideRetries() throws Skyfl config.setMaxRetries(0); VaultClient client = new VaultClient(config, null); - client.setCommonHttpConfig(null, null, null, null, 5); + client.setCommonHttpConfig(null, null, null, null, 5, null, null); Assert.assertEquals(0, maxRetriesOf(retryInterceptorOf(httpClientOf(client)))); } + // ── Retry delays ────────────────────────────────────────────────────────── + + @Test + public void testDefaults_retryDelaysAre500And2000Millis() throws SkyflowException { + SkyflowRetryInterceptor retry = retryInterceptorOf(httpClientOf(new VaultClient(buildConfig(), null))); + + Assert.assertEquals(500L, retry.getInitialRetryDelayMillis()); + Assert.assertEquals(2000L, retry.getMaxRetryDelayMillis()); + } + + @Test + public void testRetryDelays_clientWideValuesApply() throws SkyflowException { + VaultClient client = new VaultClient(buildConfig(), null); + client.setCommonHttpConfig(null, null, null, null, 3, 100L, 900L); + + SkyflowRetryInterceptor retry = retryInterceptorOf(httpClientOf(client)); + + Assert.assertEquals(100L, retry.getInitialRetryDelayMillis()); + Assert.assertEquals(900L, retry.getMaxRetryDelayMillis()); + } + + @Test + public void testRetryDelays_vaultLevelBeatsClientWide() throws SkyflowException { + VaultConfig config = buildConfig(); + config.setInitialRetryDelayMillis(250L); + config.setMaxRetryDelayMillis(4000L); + + VaultClient client = new VaultClient(config, null); + client.setCommonHttpConfig(null, null, null, null, 3, 100L, 900L); + + SkyflowRetryInterceptor retry = retryInterceptorOf(httpClientOf(client)); + + Assert.assertEquals(250L, retry.getInitialRetryDelayMillis()); + Assert.assertEquals(4000L, retry.getMaxRetryDelayMillis()); + } + + @Test + public void testRetryDelays_resolveIndependentlyOfEachOther() throws SkyflowException { + VaultConfig config = buildConfig(); + config.setMaxRetryDelayMillis(4000L); + + VaultClient client = new VaultClient(config, null); + client.setCommonHttpConfig(null, null, null, null, 3, 100L, 900L); + + SkyflowRetryInterceptor retry = retryInterceptorOf(httpClientOf(client)); + + Assert.assertEquals(100L, retry.getInitialRetryDelayMillis()); // client-wide + Assert.assertEquals(4000L, retry.getMaxRetryDelayMillis()); // vault + } + + @Test + public void testRetryDelays_endToEndThroughTheBuilder() throws SkyflowException { + Skyflow client = Skyflow.builder() + .maxRetries(3) + .initialRetryDelayMillis(100) + .maxRetryDelayMillis(900) + .addVaultConfig(buildConfig()) + .build(); + + SkyflowRetryInterceptor retry = retryInterceptorOf(httpClientOf(client.vault())); + + Assert.assertEquals(3, retry.getMaxRetries()); + Assert.assertEquals(100L, retry.getInitialRetryDelayMillis()); + Assert.assertEquals(900L, retry.getMaxRetryDelayMillis()); + } + + @Test + public void testRetryDelays_vaultConfigBeatsBuilderEndToEnd() throws SkyflowException { + VaultConfig config = buildConfig(); + config.setInitialRetryDelayMillis(250L); + + Skyflow client = Skyflow.builder() + .initialRetryDelayMillis(100) + .addVaultConfig(config) + .build(); + + Assert.assertEquals(250L, + retryInterceptorOf(httpClientOf(client.vault())).getInitialRetryDelayMillis()); + } + + @Test + public void testRetryDelays_survivedUpdateVaultConfig() throws SkyflowException { + Skyflow.SkyflowClientBuilder builder = Skyflow.builder().addVaultConfig(buildConfig()); + + VaultConfig update = buildConfig(); + update.setInitialRetryDelayMillis(250L); + update.setMaxRetryDelayMillis(4000L); + + SkyflowRetryInterceptor retry = + retryInterceptorOf(httpClientOf(builder.updateVaultConfig(update).build().vault())); + + Assert.assertEquals(250L, retry.getInitialRetryDelayMillis()); + Assert.assertEquals(4000L, retry.getMaxRetryDelayMillis()); + } + + @Test + public void testRetryDelays_builderMethodsAreFluent() { + Skyflow.SkyflowClientBuilder builder = Skyflow.builder(); + + Assert.assertSame(builder, builder.initialRetryDelayMillis(100)); + Assert.assertSame(builder, builder.maxRetryDelayMillis(900)); + } + // ── VaultConfig accessors ───────────────────────────────────────────────── @Test diff --git a/flowvault/src/test/java/com/skyflow/utils/FakeChain.java b/flowvault/src/test/java/com/skyflow/utils/FakeChain.java new file mode 100644 index 00000000..97012f13 --- /dev/null +++ b/flowvault/src/test/java/com/skyflow/utils/FakeChain.java @@ -0,0 +1,136 @@ +package com.skyflow.utils; + +import okhttp3.Call; +import okhttp3.Connection; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.Protocol; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okio.Buffer; +import okio.BufferedSource; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * Minimal Interceptor.Chain that replays a scripted list of status codes, so the retry loop can + * be driven without a network or a mock-server dependency. Records how many times it was called + * and which responses were closed. + */ +public final class FakeChain implements Interceptor.Chain { + + private final Request request = + new Request.Builder().url("https://cluster1.example.com/v1/flows").build(); + private final int[] statusCodes; + private final List bodies = new ArrayList<>(); + private int calls; + private Request lastProceeded; + + public FakeChain(int... statusCodes) { + this.statusCodes = statusCodes; + } + + public int calls() { + return calls; + } + + /** Responses the interceptor superseded and should have closed. */ + public List bodies() { + return bodies; + } + + /** The request as it reached the next interceptor, i.e. after any rewriting. */ + public Request lastProceeded() { + return lastProceeded; + } + + @Override + public Request request() { + return request; + } + + @Override + public Response proceed(Request request) throws IOException { + this.lastProceeded = request; + // Past the end of the script, keep returning the last code. + int code = statusCodes[Math.min(calls, statusCodes.length - 1)]; + calls++; + TrackingBody body = new TrackingBody(); + bodies.add(body); + return new Response.Builder() + .request(request) + .protocol(Protocol.HTTP_1_1) + .code(code) + .message("status " + code) + .body(body) + .build(); + } + + @Override + public Connection connection() { + return null; + } + + @Override + public Call call() { + throw new UnsupportedOperationException(); + } + + @Override + public int connectTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withConnectTimeout(int timeout, TimeUnit unit) { + return this; + } + + @Override + public int readTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withReadTimeout(int timeout, TimeUnit unit) { + return this; + } + + @Override + public int writeTimeoutMillis() { + return 0; + } + + @Override + public Interceptor.Chain withWriteTimeout(int timeout, TimeUnit unit) { + return this; + } + + public static final class TrackingBody extends ResponseBody { + boolean closed; + + @Override + public MediaType contentType() { + return null; + } + + @Override + public long contentLength() { + return 0; + } + + @Override + public BufferedSource source() { + return new Buffer(); + } + + @Override + public void close() { + closed = true; + } + } +} diff --git a/flowvault/src/test/java/com/skyflow/utils/SkyflowRetryInterceptorTests.java b/flowvault/src/test/java/com/skyflow/utils/SkyflowRetryInterceptorTests.java new file mode 100644 index 00000000..aae9a6f9 --- /dev/null +++ b/flowvault/src/test/java/com/skyflow/utils/SkyflowRetryInterceptorTests.java @@ -0,0 +1,254 @@ +package com.skyflow.utils; + +import okhttp3.Response; +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; + +/** + * Internals of the retry interceptor. Lives in com.skyflow.utils so the package-private + * backoff/should-retry helpers stay off the public API surface. + */ +public class SkyflowRetryInterceptorTests { + + @Test + public void testConstructor_rejectsNegativeMaxRetries() { + try { + new SkyflowRetryInterceptor(-1, 500L, 2000L); + Assert.fail("negative maxRetries should be rejected"); + } catch (IllegalArgumentException expected) { + Assert.assertTrue(expected.getMessage().contains("maxRetries")); + } + } + + @Test + public void testConstructor_rejectsNegativeInitialDelay() { + try { + new SkyflowRetryInterceptor(1, -1L, 2000L); + Assert.fail("negative initialRetryDelayMillis should be rejected"); + } catch (IllegalArgumentException expected) { + Assert.assertTrue(expected.getMessage().contains("initialRetryDelayMillis")); + } + } + + @Test + public void testConstructor_rejectsNegativeMaxDelay() { + try { + new SkyflowRetryInterceptor(1, 500L, -1L); + Assert.fail("negative maxRetryDelayMillis should be rejected"); + } catch (IllegalArgumentException expected) { + Assert.assertTrue(expected.getMessage().contains("maxRetryDelayMillis")); + } + } + + @Test + public void testBackoff_growsExponentiallyThenCaps() { + // Jitter is +/-20%, so assert bands rather than exact values. + SkyflowRetryInterceptor retry = new SkyflowRetryInterceptor(5, 100L, 400L); + + assertWithinJitter(100L, retry.backoffMillis(1)); + assertWithinJitter(200L, retry.backoffMillis(2)); + assertWithinJitter(400L, retry.backoffMillis(3)); + assertWithinJitter(400L, retry.backoffMillis(4)); + assertWithinJitter(400L, retry.backoffMillis(10)); + } + + @Test + public void testBackoff_neverExceedsTheCapAcrossManyDraws() { + SkyflowRetryInterceptor retry = new SkyflowRetryInterceptor(5, 100L, 400L); + + for (int i = 0; i < 200; i++) { + long delay = retry.backoffMillis(3); + Assert.assertTrue("jittered delay went negative: " + delay, delay >= 0); + Assert.assertTrue("jittered delay exceeded cap + jitter: " + delay, delay <= 480L); + } + } + + @Test + public void testBackoff_zeroDelayStaysZero() { + SkyflowRetryInterceptor retry = new SkyflowRetryInterceptor(3, 0L, 0L); + + Assert.assertEquals(0L, retry.backoffMillis(1)); + Assert.assertEquals(0L, retry.backoffMillis(5)); + } + + @Test + public void testBackoff_initialDelayAboveCapIsClampedToCap() { + SkyflowRetryInterceptor retry = new SkyflowRetryInterceptor(3, 5000L, 1000L); + + assertWithinJitter(1000L, retry.backoffMillis(1)); + assertWithinJitter(1000L, retry.backoffMillis(3)); + } + + @Test + public void testShouldRetry_retryableStatuses() { + Assert.assertTrue(SkyflowRetryInterceptor.shouldRetry(408)); + Assert.assertTrue(SkyflowRetryInterceptor.shouldRetry(429)); + Assert.assertTrue(SkyflowRetryInterceptor.shouldRetry(500)); + Assert.assertTrue(SkyflowRetryInterceptor.shouldRetry(502)); + Assert.assertTrue(SkyflowRetryInterceptor.shouldRetry(503)); + } + + @Test + public void testShouldRetry_nonRetryableStatuses() { + Assert.assertFalse(SkyflowRetryInterceptor.shouldRetry(200)); + Assert.assertFalse(SkyflowRetryInterceptor.shouldRetry(201)); + Assert.assertFalse(SkyflowRetryInterceptor.shouldRetry(400)); + Assert.assertFalse(SkyflowRetryInterceptor.shouldRetry(401)); + Assert.assertFalse(SkyflowRetryInterceptor.shouldRetry(404)); + Assert.assertFalse(SkyflowRetryInterceptor.shouldRetry(409)); + } + + @Test + public void testAccessors_reportWhatWasConfigured() { + SkyflowRetryInterceptor retry = new SkyflowRetryInterceptor(3, 100L, 900L); + + Assert.assertEquals(3, retry.getMaxRetries()); + Assert.assertEquals(100L, retry.getInitialRetryDelayMillis()); + Assert.assertEquals(900L, retry.getMaxRetryDelayMillis()); + } + + // ── intercept(): the retry loop ─────────────────────────────────────────── + // Delays are set to 0 so these do not actually sleep. + + private static SkyflowRetryInterceptor retrying(int maxRetries) { + return new SkyflowRetryInterceptor(maxRetries, 0L, 0L); + } + + @Test + public void testIntercept_successFirstTimeIsNotRetried() throws IOException { + FakeChain chain = new FakeChain(200); + + Response response = retrying(3).intercept(chain); + + Assert.assertEquals(1, chain.calls()); + Assert.assertEquals(200, response.code()); + } + + @Test + public void testIntercept_nonRetryableFailureIsNotRetried() throws IOException { + FakeChain chain = new FakeChain(400); + + Response response = retrying(3).intercept(chain); + + Assert.assertEquals("a 400 must not be replayed", 1, chain.calls()); + Assert.assertEquals(400, response.code()); + } + + @Test + public void testIntercept_retriesUpToTheBudgetThenReturnsTheLastFailure() throws IOException { + FakeChain chain = new FakeChain(500); + + Response response = retrying(2).intercept(chain); + + Assert.assertEquals("1 initial attempt + 2 retries", 3, chain.calls()); + Assert.assertEquals(500, response.code()); + } + + @Test + public void testIntercept_stopsAsSoonAsAnAttemptSucceeds() throws IOException { + FakeChain chain = new FakeChain(503, 200, 200); + + Response response = retrying(5).intercept(chain); + + Assert.assertEquals("must not keep retrying after success", 2, chain.calls()); + Assert.assertEquals(200, response.code()); + } + + @Test + public void testIntercept_stopsOnANonRetryableStatusMidWay() throws IOException { + FakeChain chain = new FakeChain(500, 404, 200); + + Response response = retrying(5).intercept(chain); + + Assert.assertEquals(2, chain.calls()); + Assert.assertEquals(404, response.code()); + } + + @Test + public void testIntercept_zeroBudgetMeansNoRetryAtAll() throws IOException { + FakeChain chain = new FakeChain(500); + + Response response = retrying(0).intercept(chain); + + Assert.assertEquals(1, chain.calls()); + Assert.assertEquals(500, response.code()); + } + + @Test + public void testIntercept_retriesEachRetryableStatus() throws IOException { + for (int code : new int[] {408, 429, 500, 502, 503}) { + FakeChain chain = new FakeChain(code, 200); + + Response response = retrying(1).intercept(chain); + + Assert.assertEquals("should have retried a " + code, 2, chain.calls()); + Assert.assertEquals(200, response.code()); + } + } + + @Test + public void testIntercept_closesEverySupersededResponse() throws IOException { + // Leaking the body of a response we are about to discard would leak the connection. + FakeChain chain = new FakeChain(500, 500, 200); + + retrying(2).intercept(chain); + + Assert.assertEquals(3, chain.bodies().size()); + Assert.assertTrue("first failed response not closed", chain.bodies().get(0).closed); + Assert.assertTrue("second failed response not closed", chain.bodies().get(1).closed); + Assert.assertFalse("the returned response must stay open", chain.bodies().get(2).closed); + } + + @Test + public void testIntercept_retryBudgetIsPerCallNotPerInterceptorInstance() throws IOException { + // The generated RetryInterceptor keeps its backoff counter on the instance, so one shared + // instance exhausts the budget once for the whole client. A single interceptor is installed + // on a shared OkHttpClient, so every call must get its own full budget. + SkyflowRetryInterceptor retry = retrying(2); + + FakeChain first = new FakeChain(500); + retry.intercept(first); + FakeChain second = new FakeChain(500); + retry.intercept(second); + FakeChain third = new FakeChain(500); + retry.intercept(third); + + Assert.assertEquals(3, first.calls()); + Assert.assertEquals("second call lost its retry budget", 3, second.calls()); + Assert.assertEquals("third call lost its retry budget", 3, third.calls()); + } + + @Test + public void testIntercept_interruptionSurfacesAsIOException() { + SkyflowRetryInterceptor retry = new SkyflowRetryInterceptor(2, 5_000L, 5_000L); + FakeChain chain = new FakeChain(500); + + Thread.currentThread().interrupt(); + try { + retry.intercept(chain); + Assert.fail("an interrupt while backing off should surface as IOException"); + } catch (IOException e) { + Assert.assertTrue(e.getMessage().contains("Interrupted")); + Assert.assertTrue("the interrupt flag must be restored", Thread.currentThread().isInterrupted()); + } finally { + Thread.interrupted(); // clear the flag so it cannot leak into another test + } + } + + @Test + public void testBackoff_growsPastHalfTheCapInOneStep() { + // initial > max/2, so the next step clamps straight to the cap instead of doubling past it. + SkyflowRetryInterceptor retry = new SkyflowRetryInterceptor(3, 300L, 400L); + + assertWithinJitter(300L, retry.backoffMillis(1)); + assertWithinJitter(400L, retry.backoffMillis(2)); + } + + private static void assertWithinJitter(long expected, long actual) { + long jitter = (long) (expected * 0.2); + Assert.assertTrue("expected ~" + expected + " (+/-" + jitter + ") but got " + actual, + actual >= expected - jitter && actual <= expected + jitter); + } +} diff --git a/flowvault/src/test/java/com/skyflow/vault/controller/BatchConfigResolutionTests.java b/flowvault/src/test/java/com/skyflow/vault/controller/BatchConfigResolutionTests.java new file mode 100644 index 00000000..e75b9e1e --- /dev/null +++ b/flowvault/src/test/java/com/skyflow/vault/controller/BatchConfigResolutionTests.java @@ -0,0 +1,264 @@ +package com.skyflow.vault.controller; + +import com.skyflow.VaultClient; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.Constants; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +/** + * Batch size and concurrency resolution for all four bulk operations. + * + *

These settings are user-tunable only through the environment, so the tests swap + * {@link VaultController#settingResolver} rather than mutating the JVM environment. Each operation + * has its own near-identical resolver, so every case runs against all four to stop one drifting. + */ +public class BatchConfigResolutionTests { + + private final Function originalResolver = VaultController.settingResolver; + + @After + public void restoreResolver() { + VaultController.settingResolver = originalResolver; + } + + /** Operation name, its env-var prefix, and its default/max constants. */ + private static final String[][] OPS = { + {"Insert", "INSERT"}, + {"Detokenize", "DETOKENIZE"}, + {"Tokenize", "TOKENIZE"}, + {"DeleteTokens", "DELETE_TOKENS"}, + }; + + private static void useSettings(Map settings) { + VaultController.settingResolver = settings::get; + } + + private static Map settings(String prefix, String batchSize, String concurrency) { + Map map = new HashMap<>(); + if (batchSize != null) { + map.put(prefix + "_BATCH_SIZE", batchSize); + } + if (concurrency != null) { + map.put(prefix + "_CONCURRENCY_LIMIT", concurrency); + } + return map; + } + + private static VaultController controller() throws SkyflowException { + VaultConfig config = new VaultConfig(); + config.setVaultId("vault1"); + config.setClusterId("cluster1"); + config.setEnv(Env.DEV); + return new VaultController(config, null); + } + + /** Invokes the private configure<Op>ConcurrencyAndBatchSize and reads the result. */ + private static int[] resolve(String op, int totalRequests) throws Exception { + Method method = VaultController.class.getDeclaredMethod( + "configure" + op + "ConcurrencyAndBatchSize", int.class); + method.setAccessible(true); + Object cfg; + try { + cfg = method.invoke(controller(), totalRequests); + } catch (InvocationTargetException e) { + throw (Exception) e.getCause(); + } + Field batchSize = cfg.getClass().getDeclaredField("batchSize"); + Field concurrency = cfg.getClass().getDeclaredField("concurrencyLimit"); + batchSize.setAccessible(true); + concurrency.setAccessible(true); + return new int[] {(int) batchSize.get(cfg), (int) concurrency.get(cfg)}; + } + + private static int defaultBatchSize(String prefix) { + switch (prefix) { + case "INSERT": return Constants.INSERT_BATCH_SIZE; + case "DETOKENIZE": return Constants.DETOKENIZE_BATCH_SIZE; + case "TOKENIZE": return Constants.TOKENIZE_BATCH_SIZE; + default: return Constants.DELETE_TOKENS_BATCH_SIZE; + } + } + + private static int maxBatchSize(String prefix) { + switch (prefix) { + case "INSERT": return Constants.MAX_INSERT_BATCH_SIZE; + case "DETOKENIZE": return Constants.MAX_DETOKENIZE_BATCH_SIZE; + case "TOKENIZE": return Constants.MAX_TOKENIZE_BATCH_SIZE; + default: return Constants.MAX_DELETE_TOKENS_BATCH_SIZE; + } + } + + private static int maxConcurrency(String prefix) { + switch (prefix) { + case "INSERT": return Constants.MAX_INSERT_CONCURRENCY_LIMIT; + case "DETOKENIZE": return Constants.MAX_DETOKENIZE_CONCURRENCY_LIMIT; + case "TOKENIZE": return Constants.MAX_TOKENIZE_CONCURRENCY_LIMIT; + default: return Constants.MAX_DELETE_TOKENS_CONCURRENCY_LIMIT; + } + } + + // ── batch size ──────────────────────────────────────────────────────────── + + @Test + public void testBatchSize_defaultsWhenNothingIsConfigured() throws Exception { + for (String[] op : OPS) { + useSettings(new HashMap<>()); + Assert.assertEquals(op[0], defaultBatchSize(op[1]), resolve(op[0], 10_000)[0]); + } + } + + @Test + public void testBatchSize_honoursAValidSetting() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "200", null)); + Assert.assertEquals(op[0], 200, resolve(op[0], 10_000)[0]); + } + } + + @Test + public void testBatchSize_isCappedAtTheMaximum() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "999999", null)); + Assert.assertEquals(op[0], maxBatchSize(op[1]), resolve(op[0], 10_000)[0]); + } + } + + @Test + public void testBatchSize_exactlyAtTheMaximumIsAccepted() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], String.valueOf(maxBatchSize(op[1])), null)); + Assert.assertEquals(op[0], maxBatchSize(op[1]), resolve(op[0], 10_000)[0]); + } + } + + @Test + public void testBatchSize_zeroFallsBackToTheDefault() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "0", null)); + Assert.assertEquals(op[0], defaultBatchSize(op[1]), resolve(op[0], 10_000)[0]); + } + } + + @Test + public void testBatchSize_negativeFallsBackToTheDefault() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "-5", null)); + Assert.assertEquals(op[0], defaultBatchSize(op[1]), resolve(op[0], 10_000)[0]); + } + } + + @Test + public void testBatchSize_nonNumericFallsBackToTheDefault() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "not-a-number", null)); + Assert.assertEquals(op[0], defaultBatchSize(op[1]), resolve(op[0], 10_000)[0]); + } + } + + @Test + public void testBatchSize_emptyStringFallsBackToTheDefault() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "", null)); + Assert.assertEquals(op[0], defaultBatchSize(op[1]), resolve(op[0], 10_000)[0]); + } + } + + // ── concurrency limit ───────────────────────────────────────────────────── + + @Test + public void testConcurrency_defaultsToOneWhenNothingIsConfigured() throws Exception { + for (String[] op : OPS) { + useSettings(new HashMap<>()); + Assert.assertEquals(op[0], 1, resolve(op[0], 10_000)[1]); + } + } + + @Test + public void testConcurrency_honoursAValidSetting() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "1", "5")); + Assert.assertEquals(op[0], 5, resolve(op[0], 10_000)[1]); + } + } + + @Test + public void testConcurrency_isCappedAtTheMaximum() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "1", "999")); + Assert.assertEquals(op[0], maxConcurrency(op[1]), resolve(op[0], 10_000)[1]); + } + } + + @Test + public void testConcurrency_zeroFallsBackToTheDefault() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "1", "0")); + Assert.assertEquals(op[0], 1, resolve(op[0], 10_000)[1]); + } + } + + @Test + public void testConcurrency_negativeFallsBackToTheDefault() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "1", "-3")); + Assert.assertEquals(op[0], 1, resolve(op[0], 10_000)[1]); + } + } + + @Test + public void testConcurrency_nonNumericFallsBackToTheDefault() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "1", "lots")); + Assert.assertEquals(op[0], 1, resolve(op[0], 10_000)[1]); + } + } + + // ── concurrency is further capped by how many batches there actually are ── + + @Test + public void testConcurrency_neverExceedsTheNumberOfBatches() throws Exception { + for (String[] op : OPS) { + // 25 records at batch size 10 is 3 batches, so 10 threads would leave 7 idle. + useSettings(settings(op[1], "10", "10")); + Assert.assertEquals(op[0], 3, resolve(op[0], 25)[1]); + } + } + + @Test + public void testConcurrency_singleBatchUsesASingleThread() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "100", "10")); + Assert.assertEquals(op[0], 1, resolve(op[0], 5)[1]); + } + } + + @Test + public void testConcurrency_exactBatchMultipleDoesNotRoundUp() throws Exception { + for (String[] op : OPS) { + useSettings(settings(op[1], "10", "10")); + Assert.assertEquals(op[0], 2, resolve(op[0], 20)[1]); + } + } + + @Test + public void testBatchSizeAndConcurrency_resolveIndependently() throws Exception { + for (String[] op : OPS) { + // batch size invalid (falls back), concurrency valid + useSettings(settings(op[1], "oops", "4")); + int[] cfg = resolve(op[0], 10_000); + Assert.assertEquals(op[0], defaultBatchSize(op[1]), cfg[0]); + Assert.assertEquals(op[0], 4, cfg[1]); + } + } +} diff --git a/flowvault/src/test/java/com/skyflow/vault/data/BulkRetryAndSummaryTests.java b/flowvault/src/test/java/com/skyflow/vault/data/BulkRetryAndSummaryTests.java new file mode 100644 index 00000000..d8a1437a --- /dev/null +++ b/flowvault/src/test/java/com/skyflow/vault/data/BulkRetryAndSummaryTests.java @@ -0,0 +1,322 @@ +package com.skyflow.vault.data; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * Summary classification and retry-list derivation on the bulk responses. + * + *

Retryable is defined as "has an error AND a 5xx status other than 529", so each conjunct is + * exercised separately — a 4xx failure, a 5xx with no error, a null status, and the 529 carve-out + * must all stay out of the retry list. + */ +public class BulkRetryAndSummaryTests { + + private static TokenizeResponseToken token(String group, String value, Integer httpCode, String error) { + return new TokenizeResponseToken(group, value, httpCode, error); + } + + private static BulkTokenizeResponseRecord tokenizeRecord(int index, TokenizeResponseToken... tokens) { + return new BulkTokenizeResponseRecord(index, "value" + index, Arrays.asList(tokens)); + } + + private static BulkTokenizeRequestRecord requestRecord(String value) { + return (BulkTokenizeRequestRecord) BulkTokenizeRequestRecord.builder().value(value).build(); + } + + // ── BulkTokenizeResponse.buildSummary ───────────────────────────────────── + + @Test + public void testTokenizeSummary_allGroupsSucceededCountsAsTokenized() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g1", "t1", 200, null), token("g2", "t2", 200, null))); + + TokenizeSummary summary = new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getSummary(); + + Assert.assertEquals(1, summary.getTotalTokens()); + Assert.assertEquals(1, summary.getTotalTokenized()); + Assert.assertEquals(0, summary.getTotalPartial()); + Assert.assertEquals(0, summary.getTotalFailed()); + } + + @Test + public void testTokenizeSummary_someGroupsFailedCountsAsPartial() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g1", "t1", 200, null), token("g2", null, 400, "bad group"))); + + TokenizeSummary summary = new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getSummary(); + + Assert.assertEquals(0, summary.getTotalTokenized()); + Assert.assertEquals(1, summary.getTotalPartial()); + Assert.assertEquals(0, summary.getTotalFailed()); + } + + @Test + public void testTokenizeSummary_everyGroupFailedCountsAsFailed() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g1", null, 500, "boom"), token("g2", null, 500, "boom"))); + + TokenizeSummary summary = new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getSummary(); + + Assert.assertEquals(0, summary.getTotalTokenized()); + Assert.assertEquals(0, summary.getTotalPartial()); + Assert.assertEquals(1, summary.getTotalFailed()); + } + + @Test + public void testTokenizeSummary_noTokensAtAllCountsAsFailed() { + // A record that came back with no token groups is a failure, not a success. + List records = Collections.singletonList( + new BulkTokenizeResponseRecord(0, "value0", null)); + + TokenizeSummary summary = new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getSummary(); + + Assert.assertEquals(1, summary.getTotalFailed()); + } + + @Test + public void testTokenizeSummary_emptyTokenListCountsAsFailed() { + List records = Collections.singletonList( + new BulkTokenizeResponseRecord(0, "value0", new ArrayList<>())); + + Assert.assertEquals(1, new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getSummary().getTotalFailed()); + } + + @Test + public void testTokenizeSummary_totalTokensComesFromTheSubmittedPayload() { + // Two values submitted, only one came back — totalTokens must reflect what was sent. + List records = Collections.singletonList( + tokenizeRecord(0, token("g1", "t1", 200, null))); + + TokenizeSummary summary = new BulkTokenizeResponse( + records, Arrays.asList(requestRecord("a"), requestRecord("b"))).getSummary(); + + Assert.assertEquals(2, summary.getTotalTokens()); + Assert.assertEquals(1, summary.getTotalTokenized()); + } + + @Test + public void testTokenizeSummary_nullRecordsYieldsZeroes() { + TokenizeSummary summary = new BulkTokenizeResponse(null, new ArrayList<>()).getSummary(); + + Assert.assertEquals(0, summary.getTotalTokens()); + Assert.assertEquals(0, summary.getTotalTokenized()); + Assert.assertEquals(0, summary.getTotalPartial()); + Assert.assertEquals(0, summary.getTotalFailed()); + } + + @Test + public void testTokenizeSummary_isNullWhenNoPayloadWasSupplied() { + // The single-arg constructor is the "no summary" path used before batching completes. + Assert.assertNull(new BulkTokenizeResponse(new ArrayList<>()).getSummary()); + } + + // ── BulkTokenizeResponse.getRecordsToRetry ──────────────────────────────── + + @Test + public void testTokenizeRetry_only5xxFailuresAreReturned() { + List records = Arrays.asList( + tokenizeRecord(0, token("g", null, 500, "server")), + tokenizeRecord(1, token("g", null, 400, "client")), + tokenizeRecord(2, token("g", "t", 200, null))); + List payload = + Arrays.asList(requestRecord("a"), requestRecord("b"), requestRecord("c")); + + List retry = new BulkTokenizeResponse(records, payload).getRecordsToRetry(); + + Assert.assertEquals(1, retry.size()); + Assert.assertSame("must return the caller's own record object", payload.get(0), retry.get(0)); + } + + @Test + public void testTokenizeRetry_529IsNotRetried() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g", null, 529, "site frozen"))); + + Assert.assertTrue(new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getRecordsToRetry().isEmpty()); + } + + @Test + public void testTokenizeRetry_599IsRetriedAnd600IsNot() { + Assert.assertEquals(1, new BulkTokenizeResponse( + Collections.singletonList(tokenizeRecord(0, token("g", null, 599, "edge"))), + Collections.singletonList(requestRecord("a"))).getRecordsToRetry().size()); + Assert.assertEquals(0, new BulkTokenizeResponse( + Collections.singletonList(tokenizeRecord(0, token("g", null, 600, "edge"))), + Collections.singletonList(requestRecord("a"))).getRecordsToRetry().size()); + } + + @Test + public void testTokenizeRetry_5xxWithoutAnErrorIsNotRetried() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g", "t", 500, null))); + + Assert.assertTrue(new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getRecordsToRetry().isEmpty()); + } + + @Test + public void testTokenizeRetry_nullHttpCodeIsNotRetried() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g", null, null, "no status"))); + + Assert.assertTrue(new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getRecordsToRetry().isEmpty()); + } + + @Test + public void testTokenizeRetry_partialFailureRetriesTheWholeRecord() { + // One group failed retryably, another succeeded — the value still needs resubmitting. + List records = Collections.singletonList( + tokenizeRecord(0, token("g1", "t1", 200, null), token("g2", null, 503, "down"))); + + Assert.assertEquals(1, new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getRecordsToRetry().size()); + } + + @Test + public void testTokenizeRetry_recordWithNullTokensIsNotRetried() { + List records = Collections.singletonList( + new BulkTokenizeResponseRecord(0, "value0", null)); + + Assert.assertTrue(new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getRecordsToRetry().isEmpty()); + } + + @Test + public void testTokenizeRetry_outOfRangeIndexIsSkippedRatherThanThrowing() { + List records = Arrays.asList( + tokenizeRecord(5, token("g", null, 500, "server")), + tokenizeRecord(-1, token("g", null, 500, "server"))); + + Assert.assertTrue(new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))) + .getRecordsToRetry().isEmpty()); + } + + @Test + public void testTokenizeRetry_withoutOriginalPayloadReturnsEmpty() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g", null, 500, "server"))); + + Assert.assertTrue(new BulkTokenizeResponse(records).getRecordsToRetry().isEmpty()); + } + + @Test + public void testTokenizeRetry_isMemoisedAcrossCalls() { + List records = Collections.singletonList( + tokenizeRecord(0, token("g", null, 500, "server"))); + BulkTokenizeResponse response = + new BulkTokenizeResponse(records, Collections.singletonList(requestRecord("a"))); + + Assert.assertSame(response.getRecordsToRetry(), response.getRecordsToRetry()); + } + + // ── BulkDeleteTokensResponse ────────────────────────────────────────────── + + private static BulkDeleteTokensResponseRecord deleteRecord(int index, String token, Integer code, String error) { + return new BulkDeleteTokensResponseRecord(index, token, code, error); + } + + @Test + public void testDeleteTokensSummary_countsDeletedAndFailed() { + List records = Arrays.asList( + deleteRecord(0, "t1", 200, null), + deleteRecord(1, "t2", 404, "not found")); + + DeleteTokensSummary summary = + new BulkDeleteTokensResponse(records, Arrays.asList("t1", "t2")).getSummary(); + + Assert.assertEquals(2, summary.getTotalTokens()); + Assert.assertEquals(1, summary.getTotalDeleted()); + Assert.assertEquals(1, summary.getTotalFailed()); + } + + @Test + public void testDeleteTokensSummary_totalFallsBackToRecordCountWithoutPayload() { + List records = Arrays.asList( + deleteRecord(0, "t1", 200, null), + deleteRecord(1, "t2", 500, "boom")); + + DeleteTokensSummary summary = new BulkDeleteTokensResponse(records, null).getSummary(); + + Assert.assertEquals(2, summary.getTotalTokens()); + } + + @Test + public void testDeleteTokensSummary_nullRecordsYieldsZeroes() { + DeleteTokensSummary summary = new BulkDeleteTokensResponse(null, new ArrayList<>()).getSummary(); + + Assert.assertEquals(0, summary.getTotalTokens()); + Assert.assertEquals(0, summary.getTotalDeleted()); + Assert.assertEquals(0, summary.getTotalFailed()); + } + + @Test + public void testDeleteTokensRetry_only5xxFailuresAreReturned() { + List records = Arrays.asList( + deleteRecord(0, "t1", 500, "server"), + deleteRecord(1, "t2", 400, "client"), + deleteRecord(2, "t3", 200, null)); + + List retry = new BulkDeleteTokensResponse(records, Arrays.asList("t1", "t2", "t3")) + .getTokensToRetry(); + + Assert.assertEquals(Collections.singletonList("t1"), retry); + } + + @Test + public void testDeleteTokensRetry_529IsNotRetried() { + List records = + Collections.singletonList(deleteRecord(0, "t1", 529, "site frozen")); + + Assert.assertTrue(new BulkDeleteTokensResponse(records, Collections.singletonList("t1")) + .getTokensToRetry().isEmpty()); + } + + @Test + public void testDeleteTokensRetry_5xxWithoutErrorOrNullCodeIsNotRetried() { + Assert.assertTrue(new BulkDeleteTokensResponse( + Collections.singletonList(deleteRecord(0, "t1", 500, null)), + Collections.singletonList("t1")).getTokensToRetry().isEmpty()); + Assert.assertTrue(new BulkDeleteTokensResponse( + Collections.singletonList(deleteRecord(0, "t1", null, "no status")), + Collections.singletonList("t1")).getTokensToRetry().isEmpty()); + } + + @Test + public void testDeleteTokensRetry_nullTokenIsSkipped() { + // A failed record with no token echoed back cannot be resubmitted. + List records = + Collections.singletonList(deleteRecord(0, null, 500, "server")); + + Assert.assertTrue(new BulkDeleteTokensResponse(records, Collections.singletonList("t1")) + .getTokensToRetry().isEmpty()); + } + + @Test + public void testDeleteTokensRetry_isMemoisedAcrossCalls() { + List records = + Collections.singletonList(deleteRecord(0, "t1", 500, "server")); + BulkDeleteTokensResponse response = + new BulkDeleteTokensResponse(records, Collections.singletonList("t1")); + + Assert.assertSame(response.getTokensToRetry(), response.getTokensToRetry()); + } + + @Test + public void testDeleteTokensRetry_withNullRecordsReturnsEmpty() { + Assert.assertTrue(new BulkDeleteTokensResponse(null, Collections.singletonList("t1")) + .getTokensToRetry().isEmpty()); + } +} diff --git a/pom.xml b/pom.xml index 5261ad1d..50d2382e 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ common - v2 + skyvault flowvault @@ -149,7 +149,7 @@ Tests read secrets through Dotenv, which resolves .env against the JVM's working directory - for Surefire that is the module's basedir. CI writes a single .env at the repo root, which every module could see before the build was split into - common/v2/flowvault, and none can see since. Copy it into each module before tests + common/skyvault/flowvault, and none can see since. Copy it into each module before tests run rather than moving Surefire's working directory, because other tests locate fixtures by module-relative paths such as ./src/test/resources/notJson.txt and would break if that moved. Silently does nothing when no root .env exists, which is the diff --git a/scripts/contract-snapshot-update.sh b/scripts/contract-snapshot-update.sh index 95201b9a..bd33397b 100755 --- a/scripts/contract-snapshot-update.sh +++ b/scripts/contract-snapshot-update.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Regenerates the v2 contract-testing baseline (api-report/skyflow-java.baseline.jar) +# Regenerates the skyvault contract-testing baseline (api-report/skyflow-java.baseline.jar) # from the CURRENT working tree and overwrites the committed snapshot. # # Run this after an intentional public API change to v2, review the resulting @@ -12,16 +12,16 @@ cd "$(dirname "$0")/.." mvn -B package -pl common,v2 -am -DskipTests -Dmaven.javadoc.skip=true -Dgpg.skip=true -SHADED_JAR=$(ls v2/target/skyflow-java-*-with-common.jar | head -n1) +SHADED_JAR=$(ls skyvault/target/skyflow-java-*-with-common.jar | head -n1) if [ -z "$SHADED_JAR" ]; then - echo "Error: could not find a built v2/target/skyflow-java-*-with-common.jar. Did the build succeed?" + echo "Error: could not find a built skyvault/target/skyflow-java-*-with-common.jar. Did the build succeed?" exit 1 fi -mkdir -p v2/api-report -cp "$SHADED_JAR" v2/api-report/skyflow-java.baseline.jar +mkdir -p skyvault/api-report +cp "$SHADED_JAR" skyvault/api-report/skyflow-java.baseline.jar echo "--------------------------" -echo "Updated v2/api-report/skyflow-java.baseline.jar from $SHADED_JAR" +echo "Updated skyvault/api-report/skyflow-java.baseline.jar from $SHADED_JAR" echo "Review the diff and commit this file alongside your API change." diff --git a/skyvault/api-report/skyflow-java.baseline.jar b/skyvault/api-report/skyflow-java.baseline.jar new file mode 100644 index 00000000..6911c011 Binary files /dev/null and b/skyvault/api-report/skyflow-java.baseline.jar differ diff --git a/v2/pom.xml b/skyvault/pom.xml similarity index 100% rename from v2/pom.xml rename to skyvault/pom.xml diff --git a/v2/samples/README.md b/skyvault/samples/README.md similarity index 100% rename from v2/samples/README.md rename to skyvault/samples/README.md diff --git a/v2/samples/pom.xml b/skyvault/samples/pom.xml similarity index 100% rename from v2/samples/pom.xml rename to skyvault/samples/pom.xml diff --git a/v2/samples/src/main/java/com/example/connection/InvokeConnectionExample.java b/skyvault/samples/src/main/java/com/example/connection/InvokeConnectionExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/connection/InvokeConnectionExample.java rename to skyvault/samples/src/main/java/com/example/connection/InvokeConnectionExample.java diff --git a/v2/samples/src/main/java/com/example/detect/DeidentifyFileExample.java b/skyvault/samples/src/main/java/com/example/detect/DeidentifyFileExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/detect/DeidentifyFileExample.java rename to skyvault/samples/src/main/java/com/example/detect/DeidentifyFileExample.java diff --git a/v2/samples/src/main/java/com/example/detect/DeidentifyFileExampleAsync.java b/skyvault/samples/src/main/java/com/example/detect/DeidentifyFileExampleAsync.java similarity index 100% rename from v2/samples/src/main/java/com/example/detect/DeidentifyFileExampleAsync.java rename to skyvault/samples/src/main/java/com/example/detect/DeidentifyFileExampleAsync.java diff --git a/v2/samples/src/main/java/com/example/detect/DeidentifyTextExample.java b/skyvault/samples/src/main/java/com/example/detect/DeidentifyTextExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/detect/DeidentifyTextExample.java rename to skyvault/samples/src/main/java/com/example/detect/DeidentifyTextExample.java diff --git a/v2/samples/src/main/java/com/example/detect/GetDetectRunExample.java b/skyvault/samples/src/main/java/com/example/detect/GetDetectRunExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/detect/GetDetectRunExample.java rename to skyvault/samples/src/main/java/com/example/detect/GetDetectRunExample.java diff --git a/v2/samples/src/main/java/com/example/detect/ReidentifyTextExample.java b/skyvault/samples/src/main/java/com/example/detect/ReidentifyTextExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/detect/ReidentifyTextExample.java rename to skyvault/samples/src/main/java/com/example/detect/ReidentifyTextExample.java diff --git a/v2/samples/src/main/java/com/example/serviceaccount/BearerTokenExpiryExample.java b/skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenExpiryExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/serviceaccount/BearerTokenExpiryExample.java rename to skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenExpiryExample.java diff --git a/v2/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java b/skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java rename to skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationExample.java diff --git a/v2/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java b/skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java rename to skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationUsingThreadsExample.java diff --git a/v2/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java b/skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java rename to skyvault/samples/src/main/java/com/example/serviceaccount/BearerTokenGenerationWithContextExample.java diff --git a/v2/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java b/skyvault/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java rename to skyvault/samples/src/main/java/com/example/serviceaccount/ScopedTokenGenerationExample.java diff --git a/v2/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java b/skyvault/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java rename to skyvault/samples/src/main/java/com/example/serviceaccount/SignedTokenGenerationExample.java diff --git a/v2/samples/src/main/java/com/example/vault/ClientOperations.java b/skyvault/samples/src/main/java/com/example/vault/ClientOperations.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/ClientOperations.java rename to skyvault/samples/src/main/java/com/example/vault/ClientOperations.java diff --git a/v2/samples/src/main/java/com/example/vault/CredentialsOptions.java b/skyvault/samples/src/main/java/com/example/vault/CredentialsOptions.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/CredentialsOptions.java rename to skyvault/samples/src/main/java/com/example/vault/CredentialsOptions.java diff --git a/v2/samples/src/main/java/com/example/vault/DeleteExample.java b/skyvault/samples/src/main/java/com/example/vault/DeleteExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/DeleteExample.java rename to skyvault/samples/src/main/java/com/example/vault/DeleteExample.java diff --git a/v2/samples/src/main/java/com/example/vault/DetokenizeExample.java b/skyvault/samples/src/main/java/com/example/vault/DetokenizeExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/DetokenizeExample.java rename to skyvault/samples/src/main/java/com/example/vault/DetokenizeExample.java diff --git a/v2/samples/src/main/java/com/example/vault/FileUploadExample.java b/skyvault/samples/src/main/java/com/example/vault/FileUploadExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/FileUploadExample.java rename to skyvault/samples/src/main/java/com/example/vault/FileUploadExample.java diff --git a/v2/samples/src/main/java/com/example/vault/GetExample.java b/skyvault/samples/src/main/java/com/example/vault/GetExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/GetExample.java rename to skyvault/samples/src/main/java/com/example/vault/GetExample.java diff --git a/v2/samples/src/main/java/com/example/vault/InsertExample.java b/skyvault/samples/src/main/java/com/example/vault/InsertExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/InsertExample.java rename to skyvault/samples/src/main/java/com/example/vault/InsertExample.java diff --git a/v2/samples/src/main/java/com/example/vault/QueryExample.java b/skyvault/samples/src/main/java/com/example/vault/QueryExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/QueryExample.java rename to skyvault/samples/src/main/java/com/example/vault/QueryExample.java diff --git a/v2/samples/src/main/java/com/example/vault/TokenizeExample.java b/skyvault/samples/src/main/java/com/example/vault/TokenizeExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/TokenizeExample.java rename to skyvault/samples/src/main/java/com/example/vault/TokenizeExample.java diff --git a/v2/samples/src/main/java/com/example/vault/UpdateExample.java b/skyvault/samples/src/main/java/com/example/vault/UpdateExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/UpdateExample.java rename to skyvault/samples/src/main/java/com/example/vault/UpdateExample.java diff --git a/v2/samples/src/main/java/com/example/vault/deprecated/DetokenizeExample.java b/skyvault/samples/src/main/java/com/example/vault/deprecated/DetokenizeExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/deprecated/DetokenizeExample.java rename to skyvault/samples/src/main/java/com/example/vault/deprecated/DetokenizeExample.java diff --git a/v2/samples/src/main/java/com/example/vault/deprecated/GetExample.java b/skyvault/samples/src/main/java/com/example/vault/deprecated/GetExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/deprecated/GetExample.java rename to skyvault/samples/src/main/java/com/example/vault/deprecated/GetExample.java diff --git a/v2/samples/src/main/java/com/example/vault/deprecated/UpdateExample.java b/skyvault/samples/src/main/java/com/example/vault/deprecated/UpdateExample.java similarity index 100% rename from v2/samples/src/main/java/com/example/vault/deprecated/UpdateExample.java rename to skyvault/samples/src/main/java/com/example/vault/deprecated/UpdateExample.java diff --git a/v2/src/main/java/com/skyflow/ConnectionClient.java b/skyvault/src/main/java/com/skyflow/ConnectionClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/ConnectionClient.java rename to skyvault/src/main/java/com/skyflow/ConnectionClient.java diff --git a/v2/src/main/java/com/skyflow/Skyflow.java b/skyvault/src/main/java/com/skyflow/Skyflow.java similarity index 100% rename from v2/src/main/java/com/skyflow/Skyflow.java rename to skyvault/src/main/java/com/skyflow/Skyflow.java diff --git a/v2/src/main/java/com/skyflow/VaultClient.java b/skyvault/src/main/java/com/skyflow/VaultClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/VaultClient.java rename to skyvault/src/main/java/com/skyflow/VaultClient.java diff --git a/v2/src/main/java/com/skyflow/config/ConnectionConfig.java b/skyvault/src/main/java/com/skyflow/config/ConnectionConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/config/ConnectionConfig.java rename to skyvault/src/main/java/com/skyflow/config/ConnectionConfig.java diff --git a/v2/src/main/java/com/skyflow/config/ManagementConfig.java b/skyvault/src/main/java/com/skyflow/config/ManagementConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/config/ManagementConfig.java rename to skyvault/src/main/java/com/skyflow/config/ManagementConfig.java diff --git a/v2/src/main/java/com/skyflow/config/VaultConfig.java b/skyvault/src/main/java/com/skyflow/config/VaultConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/config/VaultConfig.java rename to skyvault/src/main/java/com/skyflow/config/VaultConfig.java diff --git a/v2/src/main/java/com/skyflow/enums/DeidentifyFileStatus.java b/skyvault/src/main/java/com/skyflow/enums/DeidentifyFileStatus.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/DeidentifyFileStatus.java rename to skyvault/src/main/java/com/skyflow/enums/DeidentifyFileStatus.java diff --git a/v2/src/main/java/com/skyflow/enums/DetectEntities.java b/skyvault/src/main/java/com/skyflow/enums/DetectEntities.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/DetectEntities.java rename to skyvault/src/main/java/com/skyflow/enums/DetectEntities.java diff --git a/v2/src/main/java/com/skyflow/enums/DetectOutputTranscriptions.java b/skyvault/src/main/java/com/skyflow/enums/DetectOutputTranscriptions.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/DetectOutputTranscriptions.java rename to skyvault/src/main/java/com/skyflow/enums/DetectOutputTranscriptions.java diff --git a/v2/src/main/java/com/skyflow/enums/Env.java b/skyvault/src/main/java/com/skyflow/enums/Env.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/Env.java rename to skyvault/src/main/java/com/skyflow/enums/Env.java diff --git a/v2/src/main/java/com/skyflow/enums/InterfaceName.java b/skyvault/src/main/java/com/skyflow/enums/InterfaceName.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/InterfaceName.java rename to skyvault/src/main/java/com/skyflow/enums/InterfaceName.java diff --git a/v2/src/main/java/com/skyflow/enums/LogLevel.java b/skyvault/src/main/java/com/skyflow/enums/LogLevel.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/LogLevel.java rename to skyvault/src/main/java/com/skyflow/enums/LogLevel.java diff --git a/v2/src/main/java/com/skyflow/enums/MaskingMethod.java b/skyvault/src/main/java/com/skyflow/enums/MaskingMethod.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/MaskingMethod.java rename to skyvault/src/main/java/com/skyflow/enums/MaskingMethod.java diff --git a/v2/src/main/java/com/skyflow/enums/RedactionType.java b/skyvault/src/main/java/com/skyflow/enums/RedactionType.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/RedactionType.java rename to skyvault/src/main/java/com/skyflow/enums/RedactionType.java diff --git a/v2/src/main/java/com/skyflow/enums/RequestMethod.java b/skyvault/src/main/java/com/skyflow/enums/RequestMethod.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/RequestMethod.java rename to skyvault/src/main/java/com/skyflow/enums/RequestMethod.java diff --git a/v2/src/main/java/com/skyflow/enums/TokenMode.java b/skyvault/src/main/java/com/skyflow/enums/TokenMode.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/TokenMode.java rename to skyvault/src/main/java/com/skyflow/enums/TokenMode.java diff --git a/v2/src/main/java/com/skyflow/enums/TokenType.java b/skyvault/src/main/java/com/skyflow/enums/TokenType.java similarity index 100% rename from v2/src/main/java/com/skyflow/enums/TokenType.java rename to skyvault/src/main/java/com/skyflow/enums/TokenType.java diff --git a/v2/src/main/java/com/skyflow/errors/ErrorMessage.java b/skyvault/src/main/java/com/skyflow/errors/ErrorMessage.java similarity index 100% rename from v2/src/main/java/com/skyflow/errors/ErrorMessage.java rename to skyvault/src/main/java/com/skyflow/errors/ErrorMessage.java diff --git a/v2/src/main/java/com/skyflow/errors/SkyflowException.java b/skyvault/src/main/java/com/skyflow/errors/SkyflowException.java similarity index 100% rename from v2/src/main/java/com/skyflow/errors/SkyflowException.java rename to skyvault/src/main/java/com/skyflow/errors/SkyflowException.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/ApiClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ApiClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/ApiClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/ApiClientBuilder.java b/skyvault/src/main/java/com/skyflow/generated/rest/ApiClientBuilder.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/ApiClientBuilder.java rename to skyvault/src/main/java/com/skyflow/generated/rest/ApiClientBuilder.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/AsyncApiClientBuilder.java b/skyvault/src/main/java/com/skyflow/generated/rest/AsyncApiClientBuilder.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/AsyncApiClientBuilder.java rename to skyvault/src/main/java/com/skyflow/generated/rest/AsyncApiClientBuilder.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/ApiClientException.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/ApiClientException.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/ApiClientException.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/ApiClientException.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/Environment.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/Environment.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/Environment.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/Environment.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/FileStream.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/FileStream.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/FileStream.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/FileStream.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/MediaTypes.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/MediaTypes.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/MediaTypes.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/MediaTypes.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/Nullable.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/Nullable.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/Nullable.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/Nullable.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/NullableNonemptyFilter.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/NullableNonemptyFilter.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/NullableNonemptyFilter.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/NullableNonemptyFilter.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/RequestOptions.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/RequestOptions.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/RequestOptions.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/RequestOptions.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/Stream.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/Stream.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/Stream.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/Stream.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/core/Suppliers.java b/skyvault/src/main/java/com/skyflow/generated/rest/core/Suppliers.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/core/Suppliers.java rename to skyvault/src/main/java/com/skyflow/generated/rest/core/Suppliers.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/errors/BadRequestError.java b/skyvault/src/main/java/com/skyflow/generated/rest/errors/BadRequestError.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/errors/BadRequestError.java rename to skyvault/src/main/java/com/skyflow/generated/rest/errors/BadRequestError.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/errors/InternalServerError.java b/skyvault/src/main/java/com/skyflow/generated/rest/errors/InternalServerError.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/errors/InternalServerError.java rename to skyvault/src/main/java/com/skyflow/generated/rest/errors/InternalServerError.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/errors/NotFoundError.java b/skyvault/src/main/java/com/skyflow/generated/rest/errors/NotFoundError.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/errors/NotFoundError.java rename to skyvault/src/main/java/com/skyflow/generated/rest/errors/NotFoundError.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/errors/UnauthorizedError.java b/skyvault/src/main/java/com/skyflow/generated/rest/errors/UnauthorizedError.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/errors/UnauthorizedError.java rename to skyvault/src/main/java/com/skyflow/generated/rest/errors/UnauthorizedError.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncAuditClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncAuditClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncAuditClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncAuditClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncRawAuditClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncRawAuditClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncRawAuditClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/AsyncRawAuditClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/AuditClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/AuditClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/AuditClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/AuditClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/RawAuditClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/RawAuditClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/RawAuditClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/RawAuditClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/requests/AuditServiceListAuditEventsRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/requests/AuditServiceListAuditEventsRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/requests/AuditServiceListAuditEventsRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/requests/AuditServiceListAuditEventsRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncBinLookupClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncBinLookupClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncBinLookupClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncBinLookupClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncRawBinLookupClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncRawBinLookupClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncRawBinLookupClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/AsyncRawBinLookupClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/BinLookupClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/BinLookupClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/BinLookupClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/BinLookupClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/RawBinLookupClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/RawBinLookupClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/RawBinLookupClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/RawBinLookupClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/requests/V1BinListRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/requests/V1BinListRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/binlookup/requests/V1BinListRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/binlookup/requests/V1BinListRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/AsyncFilesClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/AsyncFilesClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/AsyncFilesClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/AsyncFilesClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/AsyncRawFilesClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/AsyncRawFilesClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/AsyncRawFilesClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/AsyncRawFilesClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/FilesClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/FilesClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/FilesClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/FilesClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/RawFilesClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/RawFilesClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/RawFilesClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/RawFilesClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileAudioRequestDeidentifyAudio.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileAudioRequestDeidentifyAudio.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileAudioRequestDeidentifyAudio.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileAudioRequestDeidentifyAudio.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileDocumentPdfRequestDeidentifyPdf.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileDocumentPdfRequestDeidentifyPdf.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileDocumentPdfRequestDeidentifyPdf.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileDocumentPdfRequestDeidentifyPdf.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileImageRequestDeidentifyImage.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileImageRequestDeidentifyImage.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileImageRequestDeidentifyImage.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileImageRequestDeidentifyImage.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyDocument.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyDocument.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyDocument.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyDocument.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyPresentation.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyPresentation.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyPresentation.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyPresentation.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifySpreadsheet.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifySpreadsheet.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifySpreadsheet.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifySpreadsheet.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyStructuredText.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyStructuredText.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyStructuredText.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyStructuredText.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyText.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyText.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyText.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/DeidentifyFileRequestDeidentifyText.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/GetRunRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/GetRunRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/GetRunRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/GetRunRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/ReidentifyFileRequestReidentifyFile.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/ReidentifyFileRequestReidentifyFile.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/requests/ReidentifyFileRequestReidentifyFile.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/requests/ReidentifyFileRequestReidentifyFile.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioOutputTranscription.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioOutputTranscription.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioOutputTranscription.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileAudioRequestDeidentifyAudioOutputTranscription.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileDocumentPdfRequestDeidentifyPdfEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileDocumentPdfRequestDeidentifyPdfEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileDocumentPdfRequestDeidentifyPdfEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileDocumentPdfRequestDeidentifyPdfEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageMaskingMethod.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageMaskingMethod.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageMaskingMethod.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileImageRequestDeidentifyImageMaskingMethod.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyDocumentEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyDocumentEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyDocumentEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyDocumentEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyPresentationEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyPresentationEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyPresentationEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyPresentationEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifySpreadsheetEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifySpreadsheetEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifySpreadsheetEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifySpreadsheetEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyStructuredTextEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyStructuredTextEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyStructuredTextEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyStructuredTextEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyTextEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyTextEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyTextEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestDeidentifyTextEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/files/types/DeidentifyFileRequestEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncGuardrailsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncGuardrailsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncGuardrailsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncGuardrailsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncRawGuardrailsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncRawGuardrailsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncRawGuardrailsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/AsyncRawGuardrailsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/GuardrailsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/GuardrailsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/GuardrailsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/GuardrailsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/RawGuardrailsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/RawGuardrailsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/RawGuardrailsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/RawGuardrailsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/requests/DetectGuardrailsRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/requests/DetectGuardrailsRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/guardrails/requests/DetectGuardrailsRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/guardrails/requests/DetectGuardrailsRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/query/AsyncQueryClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/query/AsyncQueryClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/query/AsyncQueryClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/query/AsyncQueryClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/query/AsyncRawQueryClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/query/AsyncRawQueryClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/query/AsyncRawQueryClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/query/AsyncRawQueryClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/query/QueryClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/query/QueryClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/query/QueryClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/query/QueryClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/query/RawQueryClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/query/RawQueryClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/query/RawQueryClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/query/RawQueryClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/query/requests/QueryServiceExecuteQueryBody.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/query/requests/QueryServiceExecuteQueryBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/query/requests/QueryServiceExecuteQueryBody.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/query/requests/QueryServiceExecuteQueryBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/FileServiceUploadFileRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/FileServiceUploadFileRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/FileServiceUploadFileRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/FileServiceUploadFileRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBatchOperationBody.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBatchOperationBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBatchOperationBody.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBatchOperationBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkDeleteRecordBody.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkDeleteRecordBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkDeleteRecordBody.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkDeleteRecordBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkGetRecordRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkGetRecordRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkGetRecordRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceBulkGetRecordRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceGetRecordRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceGetRecordRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceGetRecordRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceGetRecordRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceInsertRecordBody.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceInsertRecordBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceInsertRecordBody.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceInsertRecordBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceUpdateRecordBody.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceUpdateRecordBody.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceUpdateRecordBody.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/RecordServiceUpdateRecordBody.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/UploadFileV2Request.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/UploadFileV2Request.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/requests/UploadFileV2Request.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/requests/UploadFileV2Request.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceGetRecordRequestRedaction.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceGetRecordRequestRedaction.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceGetRecordRequestRedaction.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/records/types/RecordServiceGetRecordRequestRedaction.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncRawStringsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncRawStringsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncRawStringsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncRawStringsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncStringsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncStringsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncStringsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/AsyncStringsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/strings/RawStringsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/RawStringsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/strings/RawStringsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/RawStringsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/strings/StringsClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/StringsClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/strings/StringsClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/StringsClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/strings/requests/DeidentifyStringRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/requests/DeidentifyStringRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/strings/requests/DeidentifyStringRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/requests/DeidentifyStringRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/strings/requests/ReidentifyStringRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/requests/ReidentifyStringRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/strings/requests/ReidentifyStringRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/requests/ReidentifyStringRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/strings/types/DeidentifyStringRequestEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/types/DeidentifyStringRequestEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/strings/types/DeidentifyStringRequestEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/strings/types/DeidentifyStringRequestEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncRawTokensClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncRawTokensClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncRawTokensClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncRawTokensClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncTokensClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncTokensClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncTokensClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/AsyncTokensClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/tokens/RawTokensClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/RawTokensClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/tokens/RawTokensClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/RawTokensClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/tokens/TokensClient.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/TokensClient.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/tokens/TokensClient.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/TokensClient.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1DetokenizePayload.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1DetokenizePayload.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1DetokenizePayload.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1DetokenizePayload.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1TokenizePayload.java b/skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1TokenizePayload.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1TokenizePayload.java rename to skyvault/src/main/java/com/skyflow/generated/rest/resources/tokens/requests/V1TokenizePayload.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/AuditEventAuditResourceType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventAuditResourceType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/AuditEventAuditResourceType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventAuditResourceType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/AuditEventContext.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventContext.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/AuditEventContext.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventContext.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/AuditEventData.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventData.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/AuditEventData.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventData.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/AuditEventHttpInfo.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventHttpInfo.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/AuditEventHttpInfo.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/AuditEventHttpInfo.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/BatchRecordMethod.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/BatchRecordMethod.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/BatchRecordMethod.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/BatchRecordMethod.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ContextAccessType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ContextAccessType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ContextAccessType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ContextAccessType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ContextAuthMode.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ContextAuthMode.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ContextAuthMode.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ContextAuthMode.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutput.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutput.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutput.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutput.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileExtension.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileExtension.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileExtension.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileExtension.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifiedFileOutputProcessedFileType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DeidentifyFileResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifyFileResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DeidentifyFileResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifyFileResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DeidentifyStringResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifyStringResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DeidentifyStringResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DeidentifyStringResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponseValidation.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponseValidation.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponseValidation.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DetectGuardrailsResponseValidation.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseOutputType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseOutputType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseOutputType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseOutputType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseStatus.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseStatus.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseStatus.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DetectRunsResponseStatus.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/DetokenizeRecordResponseValueType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/DetokenizeRecordResponseValueType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/DetokenizeRecordResponseValueType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/DetokenizeRecordResponseValueType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ErrorResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ErrorResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ErrorResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ErrorResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ErrorResponseError.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ErrorResponseError.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ErrorResponseError.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ErrorResponseError.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileData.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileData.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileData.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileData.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudio.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudio.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudio.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudio.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudioDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudioDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudioDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyAudioDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocument.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocument.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocument.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocument.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocumentDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocumentDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocumentDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyDocumentDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImage.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImage.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImage.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImage.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImageDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImageDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImageDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyImageDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPdf.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPdf.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPdf.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPdf.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentation.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentation.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentation.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentation.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentationDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentationDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentationDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyPresentationDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheet.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheet.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheet.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheet.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheetDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheetDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheetDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifySpreadsheetDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredText.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredText.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredText.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredText.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredTextDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredTextDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredTextDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyStructuredTextDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyText.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyText.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyText.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataDeidentifyText.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFile.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFile.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFile.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFile.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFileDataFormat.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFileDataFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFileDataFormat.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FileDataReidentifyFileDataFormat.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/Format.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/Format.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/Format.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/Format.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FormatMaskedItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FormatMaskedItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FormatMaskedItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FormatMaskedItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FormatPlaintextItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FormatPlaintextItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FormatPlaintextItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FormatPlaintextItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/FormatRedactedItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/FormatRedactedItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/FormatRedactedItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/FormatRedactedItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/GooglerpcStatus.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/GooglerpcStatus.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/GooglerpcStatus.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/GooglerpcStatus.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/IdentifyResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/IdentifyResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/IdentifyResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/IdentifyResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/Locations.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/Locations.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/Locations.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/Locations.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/RedactionEnumRedaction.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/RedactionEnumRedaction.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/RedactionEnumRedaction.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/RedactionEnumRedaction.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutput.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutput.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutput.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutput.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutputProcessedFileExtension.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutputProcessedFileExtension.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutputProcessedFileExtension.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifiedFileOutputProcessedFileExtension.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseOutputType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseOutputType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseOutputType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseOutputType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseStatus.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseStatus.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseStatus.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ReidentifyFileResponseStatus.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/RequestActionType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/RequestActionType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/RequestActionType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/RequestActionType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ShiftDates.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ShiftDates.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ShiftDates.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ShiftDates.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/ShiftDatesEntityTypesItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/ShiftDatesEntityTypesItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/ShiftDatesEntityTypesItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/ShiftDatesEntityTypesItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/StringResponseEntities.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/StringResponseEntities.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/StringResponseEntities.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/StringResponseEntities.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMapping.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMapping.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMapping.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMapping.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingDefault.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingDefault.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingDefault.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingDefault.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityOnlyItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityOnlyItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityOnlyItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityOnlyItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityUnqCounterItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityUnqCounterItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityUnqCounterItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingEntityUnqCounterItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingVaultTokenItem.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingVaultTokenItem.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingVaultTokenItem.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/TokenTypeMappingVaultTokenItem.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/Transformations.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/Transformations.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/Transformations.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/Transformations.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/UploadFileV2Response.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/UploadFileV2Response.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/UploadFileV2Response.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/UploadFileV2Response.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1AuditAfterOptions.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditAfterOptions.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1AuditAfterOptions.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditAfterOptions.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1AuditEventResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditEventResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1AuditEventResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditEventResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1AuditResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1AuditResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEvent.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEvent.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEvent.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEvent.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEventRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEventRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEventRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1AuditResponseEventRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1BatchOperationResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1BatchOperationResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1BatchOperationResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1BatchOperationResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1BatchRecord.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1BatchRecord.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1BatchRecord.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1BatchRecord.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1BinListResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1BinListResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1BinListResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1BinListResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1BulkDeleteRecordResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1BulkDeleteRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1BulkDeleteRecordResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1BulkDeleteRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1BulkGetRecordResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1BulkGetRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1BulkGetRecordResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1BulkGetRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1Byot.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1Byot.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1Byot.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1Byot.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1Card.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1Card.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1Card.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1Card.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1DeleteFileResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1DeleteFileResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1DeleteFileResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1DeleteFileResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1DeleteRecordResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1DeleteRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1DeleteRecordResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1DeleteRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1DetokenizeResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1FieldRecords.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1FieldRecords.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1FieldRecords.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1FieldRecords.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1FileAvScanStatus.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1FileAvScanStatus.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1FileAvScanStatus.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1FileAvScanStatus.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1GetAuthTokenResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1GetAuthTokenResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1GetAuthTokenResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1GetAuthTokenResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1GetFileScanStatusResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1GetFileScanStatusResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1GetFileScanStatusResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1GetFileScanStatusResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1GetQueryResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1GetQueryResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1GetQueryResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1GetQueryResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1InsertRecordResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1InsertRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1InsertRecordResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1InsertRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1MemberType.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1MemberType.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1MemberType.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1MemberType.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1RecordMetaProperties.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1RecordMetaProperties.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1RecordMetaProperties.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1RecordMetaProperties.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordRequest.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordRequest.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordRequest.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1TokenizeRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1TokenizeResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1TokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1TokenizeResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1TokenizeResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1UpdateRecordResponse.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1UpdateRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1UpdateRecordResponse.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1UpdateRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1VaultFieldMapping.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1VaultFieldMapping.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1VaultFieldMapping.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1VaultFieldMapping.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/V1VaultSchemaConfig.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/V1VaultSchemaConfig.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/V1VaultSchemaConfig.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/V1VaultSchemaConfig.java diff --git a/v2/src/main/java/com/skyflow/generated/rest/types/WordCharacterCount.java b/skyvault/src/main/java/com/skyflow/generated/rest/types/WordCharacterCount.java similarity index 100% rename from v2/src/main/java/com/skyflow/generated/rest/types/WordCharacterCount.java rename to skyvault/src/main/java/com/skyflow/generated/rest/types/WordCharacterCount.java diff --git a/v2/src/main/java/com/skyflow/utils/Constants.java b/skyvault/src/main/java/com/skyflow/utils/Constants.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/Constants.java rename to skyvault/src/main/java/com/skyflow/utils/Constants.java diff --git a/v2/src/main/java/com/skyflow/utils/HttpUtility.java b/skyvault/src/main/java/com/skyflow/utils/HttpUtility.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/HttpUtility.java rename to skyvault/src/main/java/com/skyflow/utils/HttpUtility.java diff --git a/v2/src/main/java/com/skyflow/utils/Utils.java b/skyvault/src/main/java/com/skyflow/utils/Utils.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/Utils.java rename to skyvault/src/main/java/com/skyflow/utils/Utils.java diff --git a/v2/src/main/java/com/skyflow/utils/logger/LogUtil.java b/skyvault/src/main/java/com/skyflow/utils/logger/LogUtil.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/logger/LogUtil.java rename to skyvault/src/main/java/com/skyflow/utils/logger/LogUtil.java diff --git a/v2/src/main/java/com/skyflow/utils/validations/Validations.java b/skyvault/src/main/java/com/skyflow/utils/validations/Validations.java similarity index 100% rename from v2/src/main/java/com/skyflow/utils/validations/Validations.java rename to skyvault/src/main/java/com/skyflow/utils/validations/Validations.java diff --git a/v2/src/main/java/com/skyflow/vault/audit/ListEventRequest.java b/skyvault/src/main/java/com/skyflow/vault/audit/ListEventRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/audit/ListEventRequest.java rename to skyvault/src/main/java/com/skyflow/vault/audit/ListEventRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/audit/ListEventResponse.java b/skyvault/src/main/java/com/skyflow/vault/audit/ListEventResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/audit/ListEventResponse.java rename to skyvault/src/main/java/com/skyflow/vault/audit/ListEventResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java b/skyvault/src/main/java/com/skyflow/vault/bin/GetBinRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/bin/GetBinRequest.java rename to skyvault/src/main/java/com/skyflow/vault/bin/GetBinRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/bin/GetBinResponse.java b/skyvault/src/main/java/com/skyflow/vault/bin/GetBinResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/bin/GetBinResponse.java rename to skyvault/src/main/java/com/skyflow/vault/bin/GetBinResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java b/skyvault/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java rename to skyvault/src/main/java/com/skyflow/vault/connection/InvokeConnectionRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java b/skyvault/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java rename to skyvault/src/main/java/com/skyflow/vault/connection/InvokeConnectionResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/AuditController.java b/skyvault/src/main/java/com/skyflow/vault/controller/AuditController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/AuditController.java rename to skyvault/src/main/java/com/skyflow/vault/controller/AuditController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java b/skyvault/src/main/java/com/skyflow/vault/controller/BinLookupController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/BinLookupController.java rename to skyvault/src/main/java/com/skyflow/vault/controller/BinLookupController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java b/skyvault/src/main/java/com/skyflow/vault/controller/ConnectionController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/ConnectionController.java rename to skyvault/src/main/java/com/skyflow/vault/controller/ConnectionController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/DetectController.java b/skyvault/src/main/java/com/skyflow/vault/controller/DetectController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/DetectController.java rename to skyvault/src/main/java/com/skyflow/vault/controller/DetectController.java diff --git a/v2/src/main/java/com/skyflow/vault/controller/VaultController.java b/skyvault/src/main/java/com/skyflow/vault/controller/VaultController.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/controller/VaultController.java rename to skyvault/src/main/java/com/skyflow/vault/controller/VaultController.java diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java b/skyvault/src/main/java/com/skyflow/vault/data/DeleteRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/DeleteRequest.java rename to skyvault/src/main/java/com/skyflow/vault/data/DeleteRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java b/skyvault/src/main/java/com/skyflow/vault/data/DeleteResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/DeleteResponse.java rename to skyvault/src/main/java/com/skyflow/vault/data/DeleteResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/FileUploadRequest.java b/skyvault/src/main/java/com/skyflow/vault/data/FileUploadRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/FileUploadRequest.java rename to skyvault/src/main/java/com/skyflow/vault/data/FileUploadRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/FileUploadResponse.java b/skyvault/src/main/java/com/skyflow/vault/data/FileUploadResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/FileUploadResponse.java rename to skyvault/src/main/java/com/skyflow/vault/data/FileUploadResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/GetRequest.java b/skyvault/src/main/java/com/skyflow/vault/data/GetRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/GetRequest.java rename to skyvault/src/main/java/com/skyflow/vault/data/GetRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/GetResponse.java b/skyvault/src/main/java/com/skyflow/vault/data/GetResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/GetResponse.java rename to skyvault/src/main/java/com/skyflow/vault/data/GetResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/skyvault/src/main/java/com/skyflow/vault/data/InsertRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/InsertRequest.java rename to skyvault/src/main/java/com/skyflow/vault/data/InsertRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertResponse.java b/skyvault/src/main/java/com/skyflow/vault/data/InsertResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/InsertResponse.java rename to skyvault/src/main/java/com/skyflow/vault/data/InsertResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryRequest.java b/skyvault/src/main/java/com/skyflow/vault/data/QueryRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/QueryRequest.java rename to skyvault/src/main/java/com/skyflow/vault/data/QueryRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/QueryResponse.java b/skyvault/src/main/java/com/skyflow/vault/data/QueryResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/QueryResponse.java rename to skyvault/src/main/java/com/skyflow/vault/data/QueryResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java b/skyvault/src/main/java/com/skyflow/vault/data/UpdateRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/UpdateRequest.java rename to skyvault/src/main/java/com/skyflow/vault/data/UpdateRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java b/skyvault/src/main/java/com/skyflow/vault/data/UpdateResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/data/UpdateResponse.java rename to skyvault/src/main/java/com/skyflow/vault/data/UpdateResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/AudioBleep.java b/skyvault/src/main/java/com/skyflow/vault/detect/AudioBleep.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/AudioBleep.java rename to skyvault/src/main/java/com/skyflow/vault/detect/AudioBleep.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/DateTransformation.java b/skyvault/src/main/java/com/skyflow/vault/detect/DateTransformation.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/DateTransformation.java rename to skyvault/src/main/java/com/skyflow/vault/detect/DateTransformation.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/DeidentifyFileRequest.java b/skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyFileRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/DeidentifyFileRequest.java rename to skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyFileRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/DeidentifyFileResponse.java b/skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyFileResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/DeidentifyFileResponse.java rename to skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyFileResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/DeidentifyTextRequest.java b/skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyTextRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/DeidentifyTextRequest.java rename to skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyTextRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/DeidentifyTextResponse.java b/skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyTextResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/DeidentifyTextResponse.java rename to skyvault/src/main/java/com/skyflow/vault/detect/DeidentifyTextResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/EntityInfo.java b/skyvault/src/main/java/com/skyflow/vault/detect/EntityInfo.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/EntityInfo.java rename to skyvault/src/main/java/com/skyflow/vault/detect/EntityInfo.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/FileEntityInfo.java b/skyvault/src/main/java/com/skyflow/vault/detect/FileEntityInfo.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/FileEntityInfo.java rename to skyvault/src/main/java/com/skyflow/vault/detect/FileEntityInfo.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/FileInfo.java b/skyvault/src/main/java/com/skyflow/vault/detect/FileInfo.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/FileInfo.java rename to skyvault/src/main/java/com/skyflow/vault/detect/FileInfo.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/FileInput.java b/skyvault/src/main/java/com/skyflow/vault/detect/FileInput.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/FileInput.java rename to skyvault/src/main/java/com/skyflow/vault/detect/FileInput.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/GetDetectRunRequest.java b/skyvault/src/main/java/com/skyflow/vault/detect/GetDetectRunRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/GetDetectRunRequest.java rename to skyvault/src/main/java/com/skyflow/vault/detect/GetDetectRunRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/ReidentifyTextRequest.java b/skyvault/src/main/java/com/skyflow/vault/detect/ReidentifyTextRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/ReidentifyTextRequest.java rename to skyvault/src/main/java/com/skyflow/vault/detect/ReidentifyTextRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/ReidentifyTextResponse.java b/skyvault/src/main/java/com/skyflow/vault/detect/ReidentifyTextResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/ReidentifyTextResponse.java rename to skyvault/src/main/java/com/skyflow/vault/detect/ReidentifyTextResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/TextIndex.java b/skyvault/src/main/java/com/skyflow/vault/detect/TextIndex.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/TextIndex.java rename to skyvault/src/main/java/com/skyflow/vault/detect/TextIndex.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/TokenFormat.java b/skyvault/src/main/java/com/skyflow/vault/detect/TokenFormat.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/TokenFormat.java rename to skyvault/src/main/java/com/skyflow/vault/detect/TokenFormat.java diff --git a/v2/src/main/java/com/skyflow/vault/detect/Transformations.java b/skyvault/src/main/java/com/skyflow/vault/detect/Transformations.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/detect/Transformations.java rename to skyvault/src/main/java/com/skyflow/vault/detect/Transformations.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/ColumnValue.java b/skyvault/src/main/java/com/skyflow/vault/tokens/ColumnValue.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/ColumnValue.java rename to skyvault/src/main/java/com/skyflow/vault/tokens/ColumnValue.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeData.java b/skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeData.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/DetokenizeData.java rename to skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeData.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java b/skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java rename to skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeRecordResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java b/skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java rename to skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java b/skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java rename to skyvault/src/main/java/com/skyflow/vault/tokens/DetokenizeResponse.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java b/skyvault/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java rename to skyvault/src/main/java/com/skyflow/vault/tokens/TokenizeRequest.java diff --git a/v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java b/skyvault/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java similarity index 100% rename from v2/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java rename to skyvault/src/main/java/com/skyflow/vault/tokens/TokenizeResponse.java diff --git a/v2/src/main/resources/sdk.properties b/skyvault/src/main/resources/sdk.properties similarity index 100% rename from v2/src/main/resources/sdk.properties rename to skyvault/src/main/resources/sdk.properties diff --git a/v2/src/test/java/com/skyflow/ConnectionClientDotenvTests.java b/skyvault/src/test/java/com/skyflow/ConnectionClientDotenvTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/ConnectionClientDotenvTests.java rename to skyvault/src/test/java/com/skyflow/ConnectionClientDotenvTests.java diff --git a/v2/src/test/java/com/skyflow/ConnectionClientTests.java b/skyvault/src/test/java/com/skyflow/ConnectionClientTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/ConnectionClientTests.java rename to skyvault/src/test/java/com/skyflow/ConnectionClientTests.java diff --git a/v2/src/test/java/com/skyflow/RequestFidelityTests.java b/skyvault/src/test/java/com/skyflow/RequestFidelityTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/RequestFidelityTests.java rename to skyvault/src/test/java/com/skyflow/RequestFidelityTests.java diff --git a/v2/src/test/java/com/skyflow/SkyflowTests.java b/skyvault/src/test/java/com/skyflow/SkyflowTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/SkyflowTests.java rename to skyvault/src/test/java/com/skyflow/SkyflowTests.java diff --git a/v2/src/test/java/com/skyflow/VaultClientTests.java b/skyvault/src/test/java/com/skyflow/VaultClientTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/VaultClientTests.java rename to skyvault/src/test/java/com/skyflow/VaultClientTests.java diff --git a/v2/src/test/java/com/skyflow/config/ConnectionConfigTests.java b/skyvault/src/test/java/com/skyflow/config/ConnectionConfigTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/config/ConnectionConfigTests.java rename to skyvault/src/test/java/com/skyflow/config/ConnectionConfigTests.java diff --git a/v2/src/test/java/com/skyflow/config/ManagementConfigTest.java b/skyvault/src/test/java/com/skyflow/config/ManagementConfigTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/config/ManagementConfigTest.java rename to skyvault/src/test/java/com/skyflow/config/ManagementConfigTest.java diff --git a/v2/src/test/java/com/skyflow/config/VaultConfigTests.java b/skyvault/src/test/java/com/skyflow/config/VaultConfigTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/config/VaultConfigTests.java rename to skyvault/src/test/java/com/skyflow/config/VaultConfigTests.java diff --git a/v2/src/test/java/com/skyflow/enums/DeidentifyFileStatusTest.java b/skyvault/src/test/java/com/skyflow/enums/DeidentifyFileStatusTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/enums/DeidentifyFileStatusTest.java rename to skyvault/src/test/java/com/skyflow/enums/DeidentifyFileStatusTest.java diff --git a/v2/src/test/java/com/skyflow/enums/DetectEntitiesTest.java b/skyvault/src/test/java/com/skyflow/enums/DetectEntitiesTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/enums/DetectEntitiesTest.java rename to skyvault/src/test/java/com/skyflow/enums/DetectEntitiesTest.java diff --git a/v2/src/test/java/com/skyflow/enums/DetectOutputTranscriptionsTest.java b/skyvault/src/test/java/com/skyflow/enums/DetectOutputTranscriptionsTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/enums/DetectOutputTranscriptionsTest.java rename to skyvault/src/test/java/com/skyflow/enums/DetectOutputTranscriptionsTest.java diff --git a/v2/src/test/java/com/skyflow/enums/MaskingMethodTest.java b/skyvault/src/test/java/com/skyflow/enums/MaskingMethodTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/enums/MaskingMethodTest.java rename to skyvault/src/test/java/com/skyflow/enums/MaskingMethodTest.java diff --git a/v2/src/test/java/com/skyflow/enums/TokenModeTest.java b/skyvault/src/test/java/com/skyflow/enums/TokenModeTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/enums/TokenModeTest.java rename to skyvault/src/test/java/com/skyflow/enums/TokenModeTest.java diff --git a/v2/src/test/java/com/skyflow/enums/TokenTypeTest.java b/skyvault/src/test/java/com/skyflow/enums/TokenTypeTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/enums/TokenTypeTest.java rename to skyvault/src/test/java/com/skyflow/enums/TokenTypeTest.java diff --git a/v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java b/skyvault/src/test/java/com/skyflow/utils/HttpUtilityTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/utils/HttpUtilityTests.java rename to skyvault/src/test/java/com/skyflow/utils/HttpUtilityTests.java diff --git a/v2/src/test/java/com/skyflow/utils/UtilsTests.java b/skyvault/src/test/java/com/skyflow/utils/UtilsTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/utils/UtilsTests.java rename to skyvault/src/test/java/com/skyflow/utils/UtilsTests.java diff --git a/v2/src/test/java/com/skyflow/vault/BinAuditTests.java b/skyvault/src/test/java/com/skyflow/vault/BinAuditTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/BinAuditTests.java rename to skyvault/src/test/java/com/skyflow/vault/BinAuditTests.java diff --git a/v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java b/skyvault/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java rename to skyvault/src/test/java/com/skyflow/vault/connection/InvokeConnectionTests.java diff --git a/v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java rename to skyvault/src/test/java/com/skyflow/vault/controller/ConnectionControllerTests.java diff --git a/v2/src/test/java/com/skyflow/vault/controller/ConnectionRequestFidelityTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/ConnectionRequestFidelityTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/controller/ConnectionRequestFidelityTests.java rename to skyvault/src/test/java/com/skyflow/vault/controller/ConnectionRequestFidelityTests.java diff --git a/v2/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java rename to skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerFileTests.java diff --git a/v2/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java rename to skyvault/src/test/java/com/skyflow/vault/controller/DetectControllerTests.java diff --git a/v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java b/skyvault/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java rename to skyvault/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/DeleteTests.java b/skyvault/src/test/java/com/skyflow/vault/data/DeleteTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/DeleteTests.java rename to skyvault/src/test/java/com/skyflow/vault/data/DeleteTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/FileUploadTests.java b/skyvault/src/test/java/com/skyflow/vault/data/FileUploadTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/FileUploadTests.java rename to skyvault/src/test/java/com/skyflow/vault/data/FileUploadTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/GetTests.java b/skyvault/src/test/java/com/skyflow/vault/data/GetTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/GetTests.java rename to skyvault/src/test/java/com/skyflow/vault/data/GetTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/InsertTests.java b/skyvault/src/test/java/com/skyflow/vault/data/InsertTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/InsertTests.java rename to skyvault/src/test/java/com/skyflow/vault/data/InsertTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/QueryResponseTest.java b/skyvault/src/test/java/com/skyflow/vault/data/QueryResponseTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/QueryResponseTest.java rename to skyvault/src/test/java/com/skyflow/vault/data/QueryResponseTest.java diff --git a/v2/src/test/java/com/skyflow/vault/data/QueryTests.java b/skyvault/src/test/java/com/skyflow/vault/data/QueryTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/QueryTests.java rename to skyvault/src/test/java/com/skyflow/vault/data/QueryTests.java diff --git a/v2/src/test/java/com/skyflow/vault/data/UpdateTests.java b/skyvault/src/test/java/com/skyflow/vault/data/UpdateTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/data/UpdateTests.java rename to skyvault/src/test/java/com/skyflow/vault/data/UpdateTests.java diff --git a/v2/src/test/java/com/skyflow/vault/detect/DeidentifyFileRequestTest.java b/skyvault/src/test/java/com/skyflow/vault/detect/DeidentifyFileRequestTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/detect/DeidentifyFileRequestTest.java rename to skyvault/src/test/java/com/skyflow/vault/detect/DeidentifyFileRequestTest.java diff --git a/v2/src/test/java/com/skyflow/vault/detect/DeidentifyFileResponseTest.java b/skyvault/src/test/java/com/skyflow/vault/detect/DeidentifyFileResponseTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/detect/DeidentifyFileResponseTest.java rename to skyvault/src/test/java/com/skyflow/vault/detect/DeidentifyFileResponseTest.java diff --git a/v2/src/test/java/com/skyflow/vault/detect/DeidentifyTextTests.java b/skyvault/src/test/java/com/skyflow/vault/detect/DeidentifyTextTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/detect/DeidentifyTextTests.java rename to skyvault/src/test/java/com/skyflow/vault/detect/DeidentifyTextTests.java diff --git a/v2/src/test/java/com/skyflow/vault/detect/FileEntityInfoTest.java b/skyvault/src/test/java/com/skyflow/vault/detect/FileEntityInfoTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/detect/FileEntityInfoTest.java rename to skyvault/src/test/java/com/skyflow/vault/detect/FileEntityInfoTest.java diff --git a/v2/src/test/java/com/skyflow/vault/detect/FileInfoTest.java b/skyvault/src/test/java/com/skyflow/vault/detect/FileInfoTest.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/detect/FileInfoTest.java rename to skyvault/src/test/java/com/skyflow/vault/detect/FileInfoTest.java diff --git a/v2/src/test/java/com/skyflow/vault/detect/ReidentifyTextTests.java b/skyvault/src/test/java/com/skyflow/vault/detect/ReidentifyTextTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/detect/ReidentifyTextTests.java rename to skyvault/src/test/java/com/skyflow/vault/detect/ReidentifyTextTests.java diff --git a/v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java b/skyvault/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java rename to skyvault/src/test/java/com/skyflow/vault/tokens/DetokenizeTests.java diff --git a/v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java b/skyvault/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java similarity index 100% rename from v2/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java rename to skyvault/src/test/java/com/skyflow/vault/tokens/TokenizeTests.java diff --git a/v2/src/test/resources/notJson.txt b/skyvault/src/test/resources/notJson.txt similarity index 100% rename from v2/src/test/resources/notJson.txt rename to skyvault/src/test/resources/notJson.txt diff --git a/v2/api-report/skyflow-java.baseline.jar b/v2/api-report/skyflow-java.baseline.jar deleted file mode 100644 index c35c4ef7..00000000 Binary files a/v2/api-report/skyflow-java.baseline.jar and /dev/null differ