diff --git a/backend/package.json b/backend/package.json
index 57ba600e6..768f48c15 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -38,7 +38,7 @@
"build:frontend": "npm run build --prefix ../frontend",
"start": "node --enable-source-maps dist/main.mjs",
"type:check": "tsc --noEmit",
- "lint:fix": "node --max-old-space-size=8192 ./node_modules/.bin/eslint --fix --ext js,ts ./src",
+ "lint:fix": "eslint --fix --ext js,ts ./src",
"lint": "eslint 'src/**/*.ts'",
"test:unit": "vitest run -c vitest.unit.config.ts",
"test:e2e": "vitest run -c vitest.e2e.config.ts --bail=1",
diff --git a/backend/src/services/app-connection/oci/oci-connection-fns.ts b/backend/src/services/app-connection/oci/oci-connection-fns.ts
index fb6e5ce5a..d48044d29 100644
--- a/backend/src/services/app-connection/oci/oci-connection-fns.ts
+++ b/backend/src/services/app-connection/oci/oci-connection-fns.ts
@@ -73,7 +73,8 @@ export const listOCICompartments = async (appConnection: TOCIConnection) => {
const compartments = await identityClient.listCompartments({
compartmentId: appConnection.credentials.tenancyOcid,
compartmentIdInSubtree: true,
- accessLevel: identity.requests.ListCompartmentsRequest.AccessLevel.Any
+ accessLevel: identity.requests.ListCompartmentsRequest.AccessLevel.Any,
+ lifecycleState: identity.models.Compartment.LifecycleState.Active
});
return [rootCompartment, ...compartments.items];
@@ -90,7 +91,7 @@ export const listOCIVaults = async (appConnection: TOCIConnection, compartmentOc
compartmentId: compartmentOcid
});
- return vaults.items;
+ return vaults.items.filter((v) => v.lifecycleState === keymanagement.models.Vault.LifecycleState.Active);
};
export const listOCIVaultKeys = async (appConnection: TOCIConnection, compartmentOcid: string, vaultOcid: string) => {
@@ -113,5 +114,5 @@ export const listOCIVaultKeys = async (appConnection: TOCIConnection, compartmen
compartmentId: compartmentOcid
});
- return keys.items;
+ return keys.items.filter((v) => v.lifecycleState === keymanagement.models.KeySummary.LifecycleState.Enabled);
};
diff --git a/docs/api-reference/endpoints/app-connections/oci/available.mdx b/docs/api-reference/endpoints/app-connections/oci/available.mdx
new file mode 100644
index 000000000..19d83e5b7
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/oci/available.mdx
@@ -0,0 +1,4 @@
+---
+title: "Available"
+openapi: "GET /api/v1/app-connections/oci/available"
+---
diff --git a/docs/api-reference/endpoints/app-connections/oci/create.mdx b/docs/api-reference/endpoints/app-connections/oci/create.mdx
new file mode 100644
index 000000000..e15877121
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/oci/create.mdx
@@ -0,0 +1,8 @@
+---
+title: "Create"
+openapi: "POST /api/v1/app-connections/oci"
+---
+
+
+ Check out the configuration docs for [OCI Connections](/integrations/app-connections/oci) to learn how to obtain the required credentials.
+
diff --git a/docs/api-reference/endpoints/app-connections/oci/delete.mdx b/docs/api-reference/endpoints/app-connections/oci/delete.mdx
new file mode 100644
index 000000000..990700885
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/oci/delete.mdx
@@ -0,0 +1,4 @@
+---
+title: "Delete"
+openapi: "DELETE /api/v1/app-connections/oci/{connectionId}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/oci/get-by-id.mdx b/docs/api-reference/endpoints/app-connections/oci/get-by-id.mdx
new file mode 100644
index 000000000..a7541b227
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/oci/get-by-id.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by ID"
+openapi: "GET /api/v1/app-connections/oci/{connectionId}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/oci/get-by-name.mdx b/docs/api-reference/endpoints/app-connections/oci/get-by-name.mdx
new file mode 100644
index 000000000..1c920e14f
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/oci/get-by-name.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by Name"
+openapi: "GET /api/v1/app-connections/oci/connection-name/{connectionName}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/oci/list.mdx b/docs/api-reference/endpoints/app-connections/oci/list.mdx
new file mode 100644
index 000000000..ba4430073
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/oci/list.mdx
@@ -0,0 +1,4 @@
+---
+title: "List"
+openapi: "GET /api/v1/app-connections/oci"
+---
diff --git a/docs/api-reference/endpoints/app-connections/oci/update.mdx b/docs/api-reference/endpoints/app-connections/oci/update.mdx
new file mode 100644
index 000000000..c012009a2
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/oci/update.mdx
@@ -0,0 +1,8 @@
+---
+title: "Update"
+openapi: "PATCH /api/v1/app-connections/oci/{connectionId}"
+---
+
+
+ Check out the configuration docs for [OCI Connections](/integrations/app-connections/oci) to learn how to obtain the required credentials.
+
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/create.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/create.mdx
new file mode 100644
index 000000000..fa3ac2738
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/create.mdx
@@ -0,0 +1,4 @@
+---
+title: "Create"
+openapi: "POST /api/v1/secret-syncs/oci-vault"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/delete.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/delete.mdx
new file mode 100644
index 000000000..81f208308
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/delete.mdx
@@ -0,0 +1,4 @@
+---
+title: "Delete"
+openapi: "DELETE /api/v1/secret-syncs/oci-vault/{syncId}"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-id.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-id.mdx
new file mode 100644
index 000000000..52b3201dc
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-id.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by ID"
+openapi: "GET /api/v1/secret-syncs/oci-vault/{syncId}"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-name.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-name.mdx
new file mode 100644
index 000000000..eabc8794c
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-name.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by Name"
+openapi: "GET /api/v1/secret-syncs/oci-vault/sync-name/{syncName}"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/import-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/import-secrets.mdx
new file mode 100644
index 000000000..27ca686d6
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/import-secrets.mdx
@@ -0,0 +1,4 @@
+---
+title: "Import Secrets"
+openapi: "POST /api/v1/secret-syncs/oci-vault/{syncId}/import-secrets"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/list.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/list.mdx
new file mode 100644
index 000000000..88cd2a44a
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/list.mdx
@@ -0,0 +1,4 @@
+---
+title: "List"
+openapi: "GET /api/v1/secret-syncs/oci-vault"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/remove-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/remove-secrets.mdx
new file mode 100644
index 000000000..e98e7140e
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/remove-secrets.mdx
@@ -0,0 +1,4 @@
+---
+title: "Remove Secrets"
+openapi: "POST /api/v1/secret-syncs/oci-vault/{syncId}/remove-secrets"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/sync-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/sync-secrets.mdx
new file mode 100644
index 000000000..38ea4331c
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/sync-secrets.mdx
@@ -0,0 +1,4 @@
+---
+title: "Sync Secrets"
+openapi: "POST /api/v1/secret-syncs/oci-vault/{syncId}/sync-secrets"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/oci-vault/update.mdx b/docs/api-reference/endpoints/secret-syncs/oci-vault/update.mdx
new file mode 100644
index 000000000..06f1d9d1c
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/oci-vault/update.mdx
@@ -0,0 +1,4 @@
+---
+title: "Update"
+openapi: "PATCH /api/v1/secret-syncs/oci-vault/{syncId}"
+---
diff --git a/docs/images/app-connections/oci/add-api-key.png b/docs/images/app-connections/oci/add-api-key.png
new file mode 100644
index 000000000..049ea4c87
Binary files /dev/null and b/docs/images/app-connections/oci/add-api-key.png differ
diff --git a/docs/images/app-connections/oci/app-connection-created.png b/docs/images/app-connections/oci/app-connection-created.png
new file mode 100644
index 000000000..73edfa441
Binary files /dev/null and b/docs/images/app-connections/oci/app-connection-created.png differ
diff --git a/docs/images/app-connections/oci/app-connection-modal.png b/docs/images/app-connections/oci/app-connection-modal.png
new file mode 100644
index 000000000..c4ca6c0fb
Binary files /dev/null and b/docs/images/app-connections/oci/app-connection-modal.png differ
diff --git a/docs/images/app-connections/oci/app-connection-option.png b/docs/images/app-connections/oci/app-connection-option.png
new file mode 100644
index 000000000..1651316c6
Binary files /dev/null and b/docs/images/app-connections/oci/app-connection-option.png differ
diff --git a/docs/images/app-connections/oci/click-create-policy.png b/docs/images/app-connections/oci/click-create-policy.png
new file mode 100644
index 000000000..edc5a74e9
Binary files /dev/null and b/docs/images/app-connections/oci/click-create-policy.png differ
diff --git a/docs/images/app-connections/oci/click-create-user.png b/docs/images/app-connections/oci/click-create-user.png
new file mode 100644
index 000000000..d4422b1a4
Binary files /dev/null and b/docs/images/app-connections/oci/click-create-user.png differ
diff --git a/docs/images/app-connections/oci/create-group.png b/docs/images/app-connections/oci/create-group.png
new file mode 100644
index 000000000..9063ed737
Binary files /dev/null and b/docs/images/app-connections/oci/create-group.png differ
diff --git a/docs/images/app-connections/oci/create-policy.png b/docs/images/app-connections/oci/create-policy.png
new file mode 100644
index 000000000..ea666e09e
Binary files /dev/null and b/docs/images/app-connections/oci/create-policy.png differ
diff --git a/docs/images/app-connections/oci/create-user.png b/docs/images/app-connections/oci/create-user.png
new file mode 100644
index 000000000..f10488544
Binary files /dev/null and b/docs/images/app-connections/oci/create-user.png differ
diff --git a/docs/images/app-connections/oci/search-domains.png b/docs/images/app-connections/oci/search-domains.png
new file mode 100644
index 000000000..b56f85350
Binary files /dev/null and b/docs/images/app-connections/oci/search-domains.png differ
diff --git a/docs/images/app-connections/oci/search-policies.png b/docs/images/app-connections/oci/search-policies.png
new file mode 100644
index 000000000..d541fdbbe
Binary files /dev/null and b/docs/images/app-connections/oci/search-policies.png differ
diff --git a/docs/images/app-connections/oci/select-api-keys.png b/docs/images/app-connections/oci/select-api-keys.png
new file mode 100644
index 000000000..7c63e0919
Binary files /dev/null and b/docs/images/app-connections/oci/select-api-keys.png differ
diff --git a/docs/images/app-connections/oci/select-domain.png b/docs/images/app-connections/oci/select-domain.png
new file mode 100644
index 000000000..9190de801
Binary files /dev/null and b/docs/images/app-connections/oci/select-domain.png differ
diff --git a/docs/images/app-connections/oci/select-groups.png b/docs/images/app-connections/oci/select-groups.png
new file mode 100644
index 000000000..d958900a3
Binary files /dev/null and b/docs/images/app-connections/oci/select-groups.png differ
diff --git a/docs/images/app-connections/oci/select-users.png b/docs/images/app-connections/oci/select-users.png
new file mode 100644
index 000000000..392fd7000
Binary files /dev/null and b/docs/images/app-connections/oci/select-users.png differ
diff --git a/docs/images/app-connections/oci/user-info.png b/docs/images/app-connections/oci/user-info.png
new file mode 100644
index 000000000..24688d084
Binary files /dev/null and b/docs/images/app-connections/oci/user-info.png differ
diff --git a/docs/images/secret-syncs/oci-vault/configure-destination.png b/docs/images/secret-syncs/oci-vault/configure-destination.png
new file mode 100644
index 000000000..553380635
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/configure-destination.png differ
diff --git a/docs/images/secret-syncs/oci-vault/configure-details.png b/docs/images/secret-syncs/oci-vault/configure-details.png
new file mode 100644
index 000000000..27cf890e8
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/configure-details.png differ
diff --git a/docs/images/secret-syncs/oci-vault/configure-source.png b/docs/images/secret-syncs/oci-vault/configure-source.png
new file mode 100644
index 000000000..0953466fc
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/configure-source.png differ
diff --git a/docs/images/secret-syncs/oci-vault/configure-sync-options.png b/docs/images/secret-syncs/oci-vault/configure-sync-options.png
new file mode 100644
index 000000000..6f40e0dbb
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/configure-sync-options.png differ
diff --git a/docs/images/secret-syncs/oci-vault/copy-compartment-ocid.png b/docs/images/secret-syncs/oci-vault/copy-compartment-ocid.png
new file mode 100644
index 000000000..fb4355807
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/copy-compartment-ocid.png differ
diff --git a/docs/images/secret-syncs/oci-vault/review-configuration.png b/docs/images/secret-syncs/oci-vault/review-configuration.png
new file mode 100644
index 000000000..2abe7820f
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/review-configuration.png differ
diff --git a/docs/images/secret-syncs/oci-vault/search-compartment.png b/docs/images/secret-syncs/oci-vault/search-compartment.png
new file mode 100644
index 000000000..005f06ecd
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/search-compartment.png differ
diff --git a/docs/images/secret-syncs/oci-vault/select-compartment.png b/docs/images/secret-syncs/oci-vault/select-compartment.png
new file mode 100644
index 000000000..3eae44c32
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/select-compartment.png differ
diff --git a/docs/images/secret-syncs/oci-vault/select-option.png b/docs/images/secret-syncs/oci-vault/select-option.png
new file mode 100644
index 000000000..49a61ccae
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/select-option.png differ
diff --git a/docs/images/secret-syncs/oci-vault/sync-created.png b/docs/images/secret-syncs/oci-vault/sync-created.png
new file mode 100644
index 000000000..c68fedc68
Binary files /dev/null and b/docs/images/secret-syncs/oci-vault/sync-created.png differ
diff --git a/docs/integrations/app-connections/oci.mdx b/docs/integrations/app-connections/oci.mdx
new file mode 100644
index 000000000..fe12d4095
--- /dev/null
+++ b/docs/integrations/app-connections/oci.mdx
@@ -0,0 +1,189 @@
+---
+title: "OCI Connection"
+description: "Learn how to configure an Oracle Cloud Infrastructure Connection for Infisical."
+---
+
+Infisical supports the use of [API Signing Key Authentication](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm) to connect with OCI.
+
+## Create OCI User
+
+
+
+ 
+
+
+ Select the domain in which you want to create the Infisical user account.
+
+ 
+
+
+ 
+
+
+ 
+
+
+ The name, email, and username can be anything.
+
+ 
+
+
+ After you've created a user, you'll be redirected to the user's page. Navigate to 'API keys'.
+
+ 
+
+
+ Click on 'Add API key' and then download or import the private key. After you've obtained the private key, click 'Add'.
+
+ 
+
+
+ After creating the API key, you'll be shown a modal with relevant information. Save the highlighted values (and the private key) for later steps.
+
+ 
+
+
+
+## Create OCI Group
+
+
+
+ 
+
+
+ Select the domain in which you want to create the Infisical user account.
+
+ 
+
+
+ 
+
+
+ The name and description can be anything. **Ensure that you assing the user created in earlier steps to this group**.
+
+ 
+
+
+ After creating the group, take note of it's name. It will be used in later steps.
+
+
+
+## Create OCI Policy
+
+
+
+ 
+
+
+ 
+
+
+ The name and description can be anything. Click 'Show manual editor' and paste in the policy rules relevant to your task:
+
+
+
+ ```
+ Allow group to manage secret-family in compartment
+ Allow group to use keys in compartment
+ Allow group to use vaults in compartment
+ Allow group to inspect compartments in tenancy
+ ```
+
+ - **Group Name:** The name of the group you created in earlier steps.
+ - **Compartment Name:** The name of the compartment which has your secrets vault.
+
+ If you'd like to grant Infisical access to all compartments, replace instances of `compartment ` with `tenancy`.
+
+
+
+ 
+
+
+ **You must create this policy on the root compartment**, otherwise some functionality may not work.
+
+
+
+
+## Create OCI Connection in Infisical
+
+
+
+
+
+ In your Infisical dashboard, go to **Organization Settings** and select the [**App Connections**](https://app.infisical.com/organization/app-connections) tab.
+
+ 
+
+
+ Click the **+ Add Connection** button and select the **OCI Connection** option from the available integrations.
+
+ 
+
+
+ Complete the OCI Connection form by entering:
+ - A descriptive name for the connection
+ - An optional description for future reference
+ - The User OCID from [earlier steps](https://infisical.com/docs/integrations/app-connections/oci#create-oci-user)
+ - The Tenancy OCID from [earlier steps](https://infisical.com/docs/integrations/app-connections/oci#create-oci-user)
+ - The Region from [earlier steps](https://infisical.com/docs/integrations/app-connections/oci#create-oci-user)
+ - The Fingerprint from [earlier steps](https://infisical.com/docs/integrations/app-connections/oci#create-oci-user)
+ - The Private Key PEM from [earlier steps](https://infisical.com/docs/integrations/app-connections/oci#create-oci-user)
+
+ 
+
+
+ After clicking Create, your **OCI Connection** is established and ready to use with your Infisical projects.
+
+ 
+
+
+
+
+ To create an OCI Connection, make an API request to the [Create OCI Connection](/api-reference/endpoints/app-connections/oci/create) API endpoint.
+
+ ### Sample request
+
+ ```bash Request
+ curl --request POST \
+ --url https://app.infisical.com/api/v1/app-connections/oci \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "name": "my-oci-connection",
+ "method": "access-key",
+ "credentials": {
+ "userOcid": "ocid1.user.oc1..aaaaaaaagrp35tbkvvad4y2j7sug7xonua7dl2gfp4at2u5i5xj4ghnitg3a",
+ "tenancyOcid": "ocid1.tenancy.oc1..aaaaaaaaotfma465m4zumfe2ua64mj2m5dwmlw2llh4g4dnfttnakiifonta",
+ "region": "us-ashburn-1",
+ "fingerprint": "9c:f6:18:23:92:73:f8:e1:85:2c:6a:e3:2c:7d:ec:8f",
+ "privateKey": "[PRIVATE KEY PEM]"
+ }
+ }'
+ ```
+
+ ### Sample response
+
+ ```bash Response
+ {
+ "appConnection": {
+ "id": "e5d18aca-86f7-4026-a95e-efb8aeb0d8e6",
+ "name": "my-oci-connection",
+ "description": null,
+ "version": 1,
+ "orgId": "6f03caa1-a5de-43ce-b127-95a145d3464c",
+ "createdAt": "2025-04-23T19:46:34.831Z",
+ "updatedAt": "2025-04-23T19:46:34.831Z",
+ "isPlatformManagedCredentials": false,
+ "credentialsHash": "7c2d371dec195f82a6a0d5b41c970a229cfcaf88e894a5b6395e2dbd0280661f",
+ "app": "oci",
+ "method": "access-token",
+ "credentials": {
+ "userOcid": "ocid1.user.oc1..aaaaaaaagrp35tbkvvad4y2j7sug7xonua7dl2gfp4at2u5i5xj4ghnitg3a",
+ "tenancyOcid": "ocid1.tenancy.oc1..aaaaaaaaotfma465m4zumfe2ua64mj2m5dwmlw2llh4g4dnfttnakiifonta",
+ "region": "us-ashburn-1",
+ "fingerprint": "9c:f6:18:23:92:73:f8:e1:85:2c:6a:e3:2c:7d:ec:8f"
+ }
+ }
+ }
+ ```
+
+
diff --git a/docs/integrations/secret-syncs/oci-vault.mdx b/docs/integrations/secret-syncs/oci-vault.mdx
new file mode 100644
index 000000000..5b5aa4eb4
--- /dev/null
+++ b/docs/integrations/secret-syncs/oci-vault.mdx
@@ -0,0 +1,159 @@
+---
+title: "OCI Vault Sync"
+description: "Learn how to configure an Oracle Cloud Infrastructure Vault Sync for Infisical."
+---
+
+**Prerequisites:**
+- Create an [OCI Connection](/integrations/app-connections/oci) with the required **Secret Sync** permissions
+- [Create](https://docs.oracle.com/en-us/iaas/Content/Identity/compartments/To_create_a_compartment.htm) or use an existing OCI Compartment (which the OCI Connection is authorized to access)
+- [Create](https://docs.oracle.com/en-us/iaas/Content/KeyManagement/Tasks/managingvaults_topic-To_create_a_new_vault.htm#createnewvault) or use an existing OCI Vault
+
+
+
+
+
+ Navigate to **Project** > **Integrations** and select the **Secret Syncs** tab. Click on the **Add Sync** button.
+
+ 
+
+
+ 
+
+
+ Configure the **Source** from where secrets should be retrieved, then click **Next**.
+
+ 
+
+ - **Environment**: The project environment to retrieve secrets from.
+ - **Secret Path**: The folder path to retrieve secrets from.
+
+
+ If you need to sync secrets from multiple folder locations, check out [secret imports](/documentation/platform/secret-reference#secret-imports).
+
+
+
+ Configure the **Destination** to where secrets should be deployed, then click **Next**.
+
+ 
+
+ - **OCI Connection**: The OCI Connection to authenticate with.
+ - **Compartment**: The compartment where the vault is located.
+ - **Vault**: The vault to sync secrets to.
+ - **Encryption Key**: The encryption key to use when creating secrets in the vault.
+
+
+ Configure the **Sync Options** to specify how secrets should be synced, then click **Next**.
+
+ 
+
+ - **Initial Sync Behavior**: Determines how Infisical should resolve the initial sync.
+ - **Overwrite Destination Secrets**: Removes any secrets at the destination endpoint not present in Infisical.
+ - **Import Secrets (Prioritize Infisical)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Infisical over OCI Vault when keys conflict.
+ - **Import Secrets (Prioritize OCI Vault)**: Imports secrets from the destination endpoint before syncing, prioritizing values from OCI Vault over Infisical when keys conflict.
+
+ - **Auto-Sync Enabled**: If enabled, secrets will automatically be synced from the source location when changes occur. Disable to enforce manual syncing only.
+ - **Disable Secret Deletion**: If enabled, Infisical will not remove secrets from the sync destination. Enable this option if you intend to manage some secrets manually outside of Infisical.
+
+
+ Configure the **Details** of your OCI Vault Sync, then click **Next**.
+
+ 
+
+ - **Name**: The name of your sync. Must be slug-friendly.
+ - **Description**: An optional description for your sync.
+
+
+ Review your OCI Vault Sync configuration, then click **Create Sync**.
+
+ 
+
+
+ If enabled, your OCI Vault Sync will begin syncing your secrets to the destination endpoint.
+
+ 
+
+
+
+
+ To create an **OCI Vault Sync**, make an API request to the [Create OCI Vault Sync](/api-reference/endpoints/secret-syncs/oci-vault/create) API endpoint.
+
+ ### Sample request
+
+ ```bash Request
+ curl --request POST \
+ --url https://app.infisical.com/api/v1/secret-syncs/oci-vault \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "name": "my-oci-vault-sync",
+ "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "description": "an example sync",
+ "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "environment": "dev",
+ "secretPath": "/my-secrets",
+ "isEnabled": true,
+ "syncOptions": {
+ "initialSyncBehavior": "overwrite-destination"
+ },
+ "destinationConfig": {
+ "compartmentOcid": "...",
+ "vaultOcid": "...",
+ "keyOcid": "..."
+ }
+ }'
+ ```
+
+ ### Sample response
+
+ ```bash Response
+ {
+ "secretSync": {
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "name": "my-oci-vault-sync",
+ "description": "an example sync",
+ "isEnabled": true,
+ "version": 1,
+ "folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "createdAt": "2023-11-07T05:31:56Z",
+ "updatedAt": "2023-11-07T05:31:56Z",
+ "syncStatus": "succeeded",
+ "lastSyncJobId": "123",
+ "lastSyncMessage": null,
+ "lastSyncedAt": "2023-11-07T05:31:56Z",
+ "importStatus": null,
+ "lastImportJobId": null,
+ "lastImportMessage": null,
+ "lastImportedAt": null,
+ "removeStatus": null,
+ "lastRemoveJobId": null,
+ "lastRemoveMessage": null,
+ "lastRemovedAt": null,
+ "syncOptions": {
+ "initialSyncBehavior": "overwrite-destination"
+ },
+ "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "connection": {
+ "app": "oci",
+ "name": "my-oci-connection",
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
+ },
+ "environment": {
+ "slug": "dev",
+ "name": "Development",
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
+ },
+ "folder": {
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "path": "/my-secrets"
+ },
+ "destination": "oci-vault",
+ "destinationConfig": {
+ "compartmentOcid": "...",
+ "vaultOcid": "...",
+ "keyOcid": "..."
+ }
+ }
+ }
+ ```
+
+
diff --git a/docs/mint.json b/docs/mint.json
index 54039c5ba..219c0a69d 100644
--- a/docs/mint.json
+++ b/docs/mint.json
@@ -448,6 +448,7 @@
"integrations/app-connections/humanitec",
"integrations/app-connections/ldap",
"integrations/app-connections/mssql",
+ "integrations/app-connections/oci",
"integrations/app-connections/postgres",
"integrations/app-connections/teamcity",
"integrations/app-connections/terraform-cloud",
@@ -474,6 +475,7 @@
"integrations/secret-syncs/github",
"integrations/secret-syncs/hashicorp-vault",
"integrations/secret-syncs/humanitec",
+ "integrations/secret-syncs/oci-vault",
"integrations/secret-syncs/teamcity",
"integrations/secret-syncs/terraform-cloud",
"integrations/secret-syncs/vercel",
@@ -1140,6 +1142,18 @@
"api-reference/endpoints/app-connections/mssql/delete"
]
},
+ {
+ "group": "OCI",
+ "pages": [
+ "api-reference/endpoints/app-connections/oci/list",
+ "api-reference/endpoints/app-connections/oci/available",
+ "api-reference/endpoints/app-connections/oci/get-by-id",
+ "api-reference/endpoints/app-connections/oci/get-by-name",
+ "api-reference/endpoints/app-connections/oci/create",
+ "api-reference/endpoints/app-connections/oci/update",
+ "api-reference/endpoints/app-connections/oci/delete"
+ ]
+ },
{
"group": "PostgreSQL",
"pages": [
@@ -1343,6 +1357,20 @@
"api-reference/endpoints/secret-syncs/humanitec/remove-secrets"
]
},
+ {
+ "group": "OCI",
+ "pages": [
+ "api-reference/endpoints/secret-syncs/oci-vault/list",
+ "api-reference/endpoints/secret-syncs/oci-vault/get-by-id",
+ "api-reference/endpoints/secret-syncs/oci-vault/get-by-name",
+ "api-reference/endpoints/secret-syncs/oci-vault/create",
+ "api-reference/endpoints/secret-syncs/oci-vault/update",
+ "api-reference/endpoints/secret-syncs/oci-vault/delete",
+ "api-reference/endpoints/secret-syncs/oci-vault/sync-secrets",
+ "api-reference/endpoints/secret-syncs/oci-vault/import-secrets",
+ "api-reference/endpoints/secret-syncs/oci-vault/remove-secrets"
+ ]
+ },
{
"group": "TeamCity",
"pages": [
diff --git a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/OCIVaultSyncFields.tsx b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/OCIVaultSyncFields.tsx
index 0fd6b8473..f6e868318 100644
--- a/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/OCIVaultSyncFields.tsx
+++ b/frontend/src/components/secret-syncs/forms/SecretSyncDestinationFields/OCIVaultSyncFields.tsx
@@ -126,7 +126,6 @@ export const OCIVaultSyncFields = () => {
setValue("destinationConfig.keyOcid", "");
}}
options={vaults}
- isClearable
placeholder="Select a vault..."
getOptionLabel={(option) => option.displayName}
getOptionValue={(option) => option.id}
@@ -166,7 +165,6 @@ export const OCIVaultSyncFields = () => {
onChange((option as SingleValue<{ id: string }>)?.id ?? null);
}}
options={keys}
- isClearable
placeholder="Select a key..."
getOptionLabel={(option) => option.displayName}
getOptionValue={(option) => option.id}
diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts
index f3a67d7ad..4bf0eeed2 100644
--- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts
+++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/helpers/index.ts
@@ -103,7 +103,6 @@ export const getSecretSyncDestinationColValues = (secretSync: TSecretSync) => {
secondaryText = destinationConfig.buildConfig;
break;
case SecretSync.OCIVault:
- // TODO(andrey): Truncating these may make them look better
primaryText = destinationConfig.compartmentOcid;
secondaryText = destinationConfig.vaultOcid;
break;