diff --git a/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx b/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx index f8d93e45ab6a0..3d05742e87191 100644 --- a/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx +++ b/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx @@ -1,5 +1,3 @@ -## Pricing - per 1,000 origin images. You are only charged for usage exceeding your subscription plan's quota. diff --git a/apps/docs/content/guides/auth/server-side/creating-a-client.mdx b/apps/docs/content/guides/auth/server-side/creating-a-client.mdx index 7a35b70fdccc6..b02a37ad8fd8e 100644 --- a/apps/docs/content/guides/auth/server-side/creating-a-client.mdx +++ b/apps/docs/content/guides/auth/server-side/creating-a-client.mdx @@ -746,6 +746,6 @@ language="typescript" ## Next steps -- Implement [Authentication using Email and Password](/docs/guides/auth/server-side/email-based-auth-with-pkce-flow-for-ssr) +- Implement [Authentication using Email and Password](/docs/guides/auth/passwords) - Implement [Authentication using OAuth](/docs/guides/auth/social-login) -- [Learn more about SSR](/docs/guides/auth/server-side-rendering) +- [Learn more about SSR](/docs/guides/auth/server-side/advanced-guide) diff --git a/apps/docs/content/guides/auth/server-side/migrating-to-ssr-from-auth-helpers.mdx b/apps/docs/content/guides/auth/server-side/migrating-to-ssr-from-auth-helpers.mdx index 63de85f80bb4c..c8d48b93619b0 100644 --- a/apps/docs/content/guides/auth/server-side/migrating-to-ssr-from-auth-helpers.mdx +++ b/apps/docs/content/guides/auth/server-side/migrating-to-ssr-from-auth-helpers.mdx @@ -45,6 +45,6 @@ Check out the [Creating a client](/docs/guides/auth/server-side/creating-a-clien ## Next steps -- Implement [Authentication using Email and Password](/docs/guides/auth/server-side/email-based-auth-with-pkce-flow-for-ssr) -- Implement [Authentication using OAuth](/docs/guides/auth/server-side/oauth-with-pkce-flow-for-ssr) -- [Learn more about SSR](/docs/guides/auth/server-side-rendering) +- Implement [Authentication using Email and Password](/docs/guides/auth/passwords) +- Implement [Authentication using OAuth](/docs/guides/auth/social-login) +- [Learn more about SSR](/docs/guides/auth/server-side/advanced-guide) diff --git a/apps/docs/content/guides/auth/social-login/auth-google.mdx b/apps/docs/content/guides/auth/social-login/auth-google.mdx index f89ef1d61b340..339aaa3fd81e6 100644 --- a/apps/docs/content/guides/auth/social-login/auth-google.mdx +++ b/apps/docs/content/guides/auth/social-login/auth-google.mdx @@ -196,7 +196,7 @@ To use the Google provider in local development: ```env SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_SECRET="" ``` -2. Configure the provider: +2. Configure the provider in `supabase/config.toml`: ```toml [auth.external.google] enabled = true diff --git a/apps/docs/content/guides/deployment/branching/troubleshooting.mdx b/apps/docs/content/guides/deployment/branching/troubleshooting.mdx index f9a1716254de6..6e77b2c17683d 100644 --- a/apps/docs/content/guides/deployment/branching/troubleshooting.mdx +++ b/apps/docs/content/guides/deployment/branching/troubleshooting.mdx @@ -45,7 +45,7 @@ These conflicts can be resolved in the same way as normal Git Conflicts: merge o ### Changing production branch -It's not possible to change the Git branch used as the Production branch for Supabase Branching. The only way to change it is to disable and re-enable branching. See [Disable Branching](#disable-branching). +You cannot change which project branch serves as the production branch — the base project that all branches are created from will always remain the production branch. However, you can update which GitHub branch is linked to your production branch. To do this, go to the [Integrations page](/dashboard/project/_/settings/integrations) and change the production branch name. ## Migration issues diff --git a/apps/docs/content/guides/platform/manage-your-usage/storage-image-transformations.mdx b/apps/docs/content/guides/platform/manage-your-usage/storage-image-transformations.mdx index e77a1a9681ddf..d9fe127af3b4a 100644 --- a/apps/docs/content/guides/platform/manage-your-usage/storage-image-transformations.mdx +++ b/apps/docs/content/guides/platform/manage-your-usage/storage-image-transformations.mdx @@ -66,8 +66,6 @@ For simplicity, let's assume a package size of 1,000 and a charge of ## Billing examples diff --git a/apps/docs/content/guides/realtime/broadcast.mdx b/apps/docs/content/guides/realtime/broadcast.mdx index 34f35fee7d939..70dda780c948d 100644 --- a/apps/docs/content/guides/realtime/broadcast.mdx +++ b/apps/docs/content/guides/realtime/broadcast.mdx @@ -25,7 +25,7 @@ However, regardless of whether it's public or private, the Realtime service conn -For Authorization we do insert a message and try to read it and then we it back as way to verify that the RLS policies set by the user are being respected by the user joining the channel but this messages won't be sent to the user. You can read more about it in the [Authorization](/docs/guides/realtime/authorization) docs +For Authorization we insert a message and try to read it, and rollback the transaction to verify that the RLS policies set by the user are being respected by the user joining the channel, but this message isn't sent to the user. You can read more about it in the [Authorization docs](/docs/guides/realtime/authorization). ## Subscribe to messages diff --git a/apps/docs/public/img/mcp-clients/opencode-dark-icon.svg b/apps/docs/public/img/mcp-clients/opencode-dark-icon.svg new file mode 100644 index 0000000000000..b79c7332e2048 --- /dev/null +++ b/apps/docs/public/img/mcp-clients/opencode-dark-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/public/img/mcp-clients/opencode-icon.svg b/apps/docs/public/img/mcp-clients/opencode-icon.svg new file mode 100644 index 0000000000000..b79140a50707c --- /dev/null +++ b/apps/docs/public/img/mcp-clients/opencode-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/spec/api_v1_openapi.json b/apps/docs/spec/api_v1_openapi.json index 3259da0a75dc7..421145683cb0c 100644 --- a/apps/docs/spec/api_v1_openapi.json +++ b/apps/docs/spec/api_v1_openapi.json @@ -833,7 +833,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to list action runs" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], "summary": "List all action runs", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], @@ -867,7 +867,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to count action runs" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], "summary": "Count the number of action runs", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], @@ -906,7 +906,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get action run status" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], "summary": "Get the status of an action run", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], @@ -954,7 +954,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update action run status" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_write"] }], "summary": "Update the status of an action run", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], @@ -992,7 +992,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get action run logs" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["action_runs_read"] }], "summary": "Get the logs of an action run", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], @@ -1328,7 +1328,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve database branches" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_read"] }], "summary": "List all database branches", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], @@ -1365,7 +1365,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to create database branch" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_write"] }], "summary": "Create a database branch", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], @@ -1391,7 +1391,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to disable preview branching" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_write"] }], "summary": "Disables preview branching", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:write", "position": "after" }], @@ -1425,7 +1425,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to fetch database branch" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["branching_development_read"] }], "summary": "Get a database branch", "tags": ["Environments"], "x-badges": [{ "name": "OAuth scope: environment:read", "position": "after" }], @@ -1459,7 +1459,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's custom hostname config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_read"] }], "summary": "[Beta] Gets project's custom hostname config", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:read", "position": "after" }], @@ -1484,7 +1484,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete project custom hostname configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], "summary": "[Beta] Deletes a project's custom hostname configuration", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], @@ -1526,7 +1526,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project custom hostname configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], "summary": "[Beta] Updates project's custom hostname configuration", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], @@ -1560,7 +1560,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to verify project custom hostname configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], "summary": "[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], @@ -1594,7 +1594,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to activate project custom hostname configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["custom_domain_write"] }], "summary": "[Beta] Activates a custom hostname for a project.", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], @@ -1731,7 +1731,10 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's network restrictions" } }, - "security": [{ "bearer": [] }], + "security": [ + { "bearer": [] }, + { "fga_permissions": ["database_network_restrictions_read"] } + ], "summary": "[Beta] Gets project's network restrictions", "tags": ["Projects"], "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], @@ -1771,7 +1774,10 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project network restrictions" } }, - "security": [{ "bearer": [] }], + "security": [ + { "bearer": [] }, + { "fga_permissions": ["database_network_restrictions_write"] } + ], "summary": "[Alpha] Updates project's network restrictions by adding or removing CIDRs", "tags": ["Projects"], "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], @@ -1813,7 +1819,10 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project network restrictions" } }, - "security": [{ "bearer": [] }], + "security": [ + { "bearer": [] }, + { "fga_permissions": ["database_network_restrictions_write"] } + ], "summary": "[Beta] Updates project's network restrictions", "tags": ["Projects"], "x-badges": [{ "name": "OAuth scope: projects:write", "position": "after" }], @@ -1847,7 +1856,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's pgsodium config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], "summary": "[Beta] Gets project's pgsodium config", "tags": ["Secrets"], "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], @@ -1887,7 +1896,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's pgsodium config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_write"] }], "summary": "[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.", "tags": ["Secrets"], "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], @@ -1921,7 +1930,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's postgrest config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["data_api_config_read"] }], "summary": "Gets project's postgrest config", "tags": ["Rest"], "x-badges": [{ "name": "OAuth scope: rest:read", "position": "after" }], @@ -1961,7 +1970,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's postgrest config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["data_api_config_write"] }], "summary": "Updates project's postgrest config", "tags": ["Rest"], "x-badges": [{ "name": "OAuth scope: rest:write", "position": "after" }], @@ -2102,7 +2111,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's secrets" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_secrets_read"] }], "summary": "List all secrets", "tags": ["Secrets"], "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], @@ -2134,7 +2143,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to create project's secrets" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_secrets_write"] }], "summary": "Bulk create secrets", "tags": ["Secrets"], "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], @@ -2166,7 +2175,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete secrets with given names" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_secrets_write"] }], "summary": "Bulk delete secrets", "tags": ["Secrets"], "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], @@ -2200,7 +2209,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's SSL enforcement config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_ssl_config_read"] }], "summary": "[Beta] Get project's SSL enforcement configuration.", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -2240,7 +2249,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's SSL enforcement configuration." } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_ssl_config_write"] }], "summary": "[Beta] Update project's SSL enforcement configuration.", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -2281,7 +2290,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to generate TypeScript types" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_read"] }], "summary": "Generate TypeScript types", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -2315,7 +2324,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get project vanity subdomain configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_read"] }], "summary": "[Beta] Gets current vanity subdomain config", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:read", "position": "after" }], @@ -2340,7 +2349,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete project vanity subdomain configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_write"] }], "summary": "[Beta] Deletes a project's vanity subdomain configuration", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], @@ -2380,7 +2389,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to check project vanity subdomain configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_write"] }], "summary": "[Beta] Checks vanity subdomain availability", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], @@ -2420,7 +2429,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to activate project vanity subdomain configuration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["vanity_subdomain_write"] }], "summary": "[Beta] Activates a vanity subdomain for a project.", "tags": ["Domains"], "x-badges": [{ "name": "OAuth scope: domains:write", "position": "after" }], @@ -2734,7 +2743,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's service health status" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["project_admin_read"] }], "summary": "Gets project's service health status", "tags": ["Projects"], "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], @@ -2767,7 +2776,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], "summary": "Set up the project's existing JWT secret as an in_use JWT signing key. This endpoint will be removed in the future always check for HTTP 404 Not Found.", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], @@ -2798,7 +2807,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_read"] }], "summary": "Get the signing key information for the JWT secret imported as signing key for this project. This endpoint will be removed in the future, check for HTTP 404 Not Found.", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], @@ -2839,7 +2848,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], "summary": "Create a new signing key for the project in standby status", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], @@ -2870,7 +2879,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_read"] }], "summary": "List all signing keys for the project", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: secrets:read", "position": "after" }], @@ -2909,7 +2918,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_read"] }], "summary": "Get information about a signing key", "tags": ["Auth"], "x-endpoint-owners": ["auth"] @@ -2944,7 +2953,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], "summary": "Remove a signing key from a project. Only possible if the key has been in revoked status for a while.", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], @@ -2989,7 +2998,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_signing_keys_write"] }], "summary": "Update a signing key, mainly its status", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: secrets:write", "position": "after" }], @@ -3023,7 +3032,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's storage config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["storage_config_read"] }], "summary": "Gets project's storage config", "tags": ["Storage"], "x-endpoint-owners": ["storage"] @@ -3054,7 +3063,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's storage config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["storage_config_write"] }], "summary": "Updates project's storage config", "tags": ["Storage"], "x-endpoint-owners": ["storage"] @@ -3086,7 +3095,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's Postgres config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_config_read"] }], "summary": "Gets project's Postgres config", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -3126,7 +3135,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's Postgres config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_config_write"] }], "summary": "Updates project's Postgres config", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -3160,6 +3169,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's pgbouncer config" } }, + "security": [{ "fga_permissions": ["database_read"] }], "summary": "Get project's pgbouncer config", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -3196,7 +3206,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's supavisor config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_pooling_config_read"] }], "summary": "Gets project's supavisor config", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -3236,7 +3246,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's supavisor config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_pooling_config_write"] }], "summary": "Updates project's supavisor config", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -3270,7 +3280,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's auth config" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], "summary": "Gets project's auth config", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], @@ -3310,7 +3320,10 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update project's auth config" } }, - "security": [{ "bearer": [] }], + "security": [ + { "bearer": [] }, + { "fga_permissions": ["auth_config_write", "project_admin_write"] } + ], "summary": "Updates a project's auth config", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], @@ -3410,7 +3423,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], "summary": "Creates a new third-party auth integration", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], @@ -3444,7 +3457,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], "summary": "Lists all third-party auth integrations", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], @@ -3481,7 +3494,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], "summary": "Removes a third-party auth integration", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], @@ -3516,7 +3529,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], "summary": "Get a third-party integration", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], @@ -3662,7 +3675,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to list project addons" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_add_ons_read"] }], "summary": "List billing addons and compute instance selections", "tags": ["Billing"], "x-endpoint-owners": ["billing"] @@ -3694,7 +3707,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to apply project addon" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_add_ons_write"] }], "summary": "Apply or update billing addons, including compute instance size", "tags": ["Billing"], "x-endpoint-owners": ["billing"] @@ -3755,7 +3768,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to remove project addon" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["infra_add_ons_write"] }], "summary": "Remove billing addons or revert compute instance sizing", "tags": ["Billing"], "x-endpoint-owners": ["billing"] @@ -3879,7 +3892,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["advisors_read"] }], "summary": "Gets project performance advisors.", "tags": ["Advisors"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -3920,7 +3933,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["advisors_read"] }], "summary": "Gets project security advisors.", "tags": ["Advisors"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -3971,7 +3984,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_logs_read"] }], "summary": "Gets project's logs", "tags": ["Analytics"], "x-badges": [{ "name": "OAuth scope: analytics:read", "position": "after" }], @@ -4014,7 +4027,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get project's usage api counts" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_usage_read"] }], "summary": "Gets project's usage api counts", "tags": ["Analytics"], "x-endpoint-owners": ["analytics"] @@ -4046,7 +4059,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get project's usage api requests count" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_usage_read"] }], "summary": "Gets project's usage api requests count", "tags": ["Analytics"], "x-endpoint-owners": ["analytics"] @@ -4083,7 +4096,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get project's function combined statistics" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["analytics_usage_read"] }], "summary": "Gets a project's function combined statistics", "tags": ["Analytics"], "x-endpoint-owners": ["analytics"] @@ -4121,7 +4134,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to create login role" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], "summary": "[Beta] Create a login role for CLI with temporary password", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4153,7 +4166,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete login roles" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], "summary": "[Beta] Delete existing login roles used by CLI", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4188,7 +4201,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to list database migrations" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_read"] }], "summary": "[Beta] List applied migration versions", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -4229,7 +4242,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to apply database migration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], "summary": "[Beta] Apply a database migration", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4270,7 +4283,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to upsert database migration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], "summary": "[Beta] Upsert a database migration without applying", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4303,7 +4316,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to rollback database migration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], "summary": "[Beta] Rollback database migrations and remove them from history table", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4344,7 +4357,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get database migration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_read"] }], "summary": "[Beta] Fetch an existing entry from migration history", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -4384,7 +4397,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to patch database migration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_migrations_write"] }], "summary": "[Beta] Patch an existing entry in migration history", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4417,7 +4430,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to run sql query" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], "summary": "[Beta] Run sql query", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4451,7 +4464,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to run read-only sql query" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_read"] }], "summary": "[Beta] Run a sql query as supabase_read_only_user", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -4478,7 +4491,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to enable Database Webhooks on the project" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_webhooks_config_write"] }], "summary": "[Beta] Enables Database Webhooks on the project", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4513,7 +4526,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_read"] }], "summary": "Gets database metadata for the given project.", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: projects:read", "position": "after" }], @@ -4555,7 +4568,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update database password" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_write"] }], "summary": "Updates the database password", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -4588,7 +4601,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to list database jit access" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_read"] }], "summary": "Get user-id to role mappings for JIT access", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -4629,7 +4642,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to authorize database jit access" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_read"] }], "summary": "Authorize user-id to role mappings for JIT access", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -4666,7 +4679,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to upsert database migration" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_write"] }], "summary": "Updates a user mapping for JIT access", "tags": ["Database"], "x-endpoint-owners": ["security"] @@ -4699,7 +4712,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to list database jit access" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_read"] }], "summary": "List all user-id to role mappings for JIT access", "tags": ["Database"], "x-endpoint-owners": ["security"] @@ -4731,7 +4744,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to remove JIT access" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["database_jit_write"] }], "summary": "Delete JIT access by user-id", "tags": ["Database"], "x-endpoint-owners": ["security"] @@ -4767,7 +4780,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve project's functions" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_read"] }], "summary": "List all functions", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:read", "position": "after" }], @@ -4850,7 +4863,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to create project's function" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], "summary": "Create a function", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], @@ -4892,7 +4905,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update functions" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], "summary": "Bulk update functions", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], @@ -4949,7 +4962,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to deploy function" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], "summary": "Deploy a function", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], @@ -4991,7 +5004,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve function with given slug" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_read"] }], "summary": "Retrieve a function", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:read", "position": "after" }], @@ -5079,7 +5092,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to update function with given slug" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], "summary": "Update a function", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], @@ -5112,7 +5125,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to delete function with given slug" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_write"] }], "summary": "Delete a function", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:write", "position": "after" }], @@ -5152,7 +5165,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to retrieve function body with given slug" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["edge_functions_read"] }], "summary": "Retrieve a function body", "tags": ["Edge Functions"], "x-badges": [{ "name": "OAuth scope: edge_functions:read", "position": "after" }], @@ -5189,7 +5202,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get list of buckets" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["storage_read"] }], "summary": "Lists all buckets", "tags": ["Storage"], "x-badges": [{ "name": "OAuth scope: storage:read", "position": "after" }], @@ -5229,7 +5242,7 @@ "404": { "description": "SAML 2.0 support is not enabled for this project" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], "summary": "Creates a new SSO provider", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], @@ -5261,7 +5274,7 @@ "404": { "description": "SAML 2.0 support is not enabled for this project" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], "summary": "Lists all SSO providers", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], @@ -5303,7 +5316,7 @@ }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_read"] }], "summary": "Gets a SSO provider by its UUID", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:read", "position": "after" }], @@ -5349,7 +5362,7 @@ }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], "summary": "Updates a SSO provider by its UUID", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], @@ -5389,7 +5402,7 @@ }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["auth_config_write"] }], "summary": "Removes a SSO provider by its UUID", "tags": ["Auth"], "x-badges": [{ "name": "OAuth scope: auth:write", "position": "after" }], @@ -5421,7 +5434,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get backups" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_read"] }], "summary": "Lists all backups", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -5453,7 +5466,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_write"] }], "summary": "Restores a PITR backup for a database", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -5494,7 +5507,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_write"] }], "summary": "Initiates a creation of a restore point for a database", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -5533,7 +5546,7 @@ "429": { "description": "Rate limit exceeded" }, "500": { "description": "Failed to get requested restore points" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_read"] }], "summary": "Get restore points for project", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:read", "position": "after" }], @@ -5566,7 +5579,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["backups_write"] }], "summary": "Initiates an undo to a given restore point", "tags": ["Database"], "x-badges": [{ "name": "OAuth scope: database:write", "position": "after" }], @@ -5603,7 +5616,7 @@ "403": { "description": "Forbidden action" }, "429": { "description": "Rate limit exceeded" } }, - "security": [{ "bearer": [] }, { "fga_permissions": ["members_write"] }], + "security": [{ "bearer": [] }, { "fga_permissions": ["members_read"] }], "summary": "List members of an organization", "tags": ["Organizations"], "x-badges": [{ "name": "OAuth scope: organizations:read", "position": "after" }], @@ -8220,7 +8233,10 @@ "smtp_port": { "type": "string", "nullable": true }, "smtp_sender_name": { "type": "string", "nullable": true }, "smtp_user": { "type": "string", "nullable": true }, - "uri_allow_list": { "type": "string", "nullable": true } + "uri_allow_list": { "type": "string", "nullable": true }, + "oauth_server_enabled": { "type": "boolean" }, + "oauth_server_allow_dynamic_registration": { "type": "boolean" }, + "oauth_server_authorization_path": { "type": "string", "nullable": true } }, "required": [ "api_max_request_duration", @@ -8449,7 +8465,10 @@ "smtp_port", "smtp_sender_name", "smtp_user", - "uri_allow_list" + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" ] }, "UpdateAuthConfigBody": { @@ -8819,7 +8838,10 @@ }, "mfa_phone_template": { "type": "string", "nullable": true }, "nimbus_oauth_client_id": { "type": "string", "nullable": true }, - "nimbus_oauth_client_secret": { "type": "string", "nullable": true } + "nimbus_oauth_client_secret": { "type": "string", "nullable": true }, + "oauth_server_enabled": { "type": "boolean", "nullable": true }, + "oauth_server_allow_dynamic_registration": { "type": "boolean", "nullable": true }, + "oauth_server_authorization_path": { "type": "string", "nullable": true } } }, "RealtimeConfigResponse": { diff --git a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json index 32e217ebd9c3a..fedb3207c9bcd 100644 --- a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json +++ b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json @@ -2368,6 +2368,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] } ], "summary": "List all action runs", @@ -2428,6 +2431,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] } ], "summary": "Count the number of action runs", @@ -2568,6 +2574,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] } ], "summary": "Get the status of an action run", @@ -2739,6 +2748,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_write"] } ], "summary": "Update the status of an action run", @@ -2807,6 +2819,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["action_runs_read"] } ], "summary": "Get the logs of an action run", @@ -3768,6 +3783,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["branching_development_read"] } ], "summary": "List all database branches", @@ -4002,6 +4020,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["branching_development_write"] } ], "summary": "Create a database branch", @@ -4052,6 +4073,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["branching_development_write"] } ], "summary": "Disables preview branching", @@ -4218,6 +4242,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["branching_development_read"] } ], "summary": "Get a database branch", @@ -4395,6 +4422,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_read"] } ], "summary": "[Beta] Gets project's custom hostname config", @@ -4444,6 +4474,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_write"] } ], "summary": "[Beta] Deletes a project's custom hostname configuration", @@ -4638,6 +4671,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_write"] } ], "summary": "[Beta] Updates project's custom hostname configuration", @@ -4815,6 +4851,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_write"] } ], "summary": "[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration", @@ -4992,6 +5031,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["custom_domain_write"] } ], "summary": "[Beta] Activates a custom hostname for a project.", @@ -5339,6 +5381,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_restrictions_read"] } ], "summary": "[Beta] Gets project's network restrictions", @@ -5504,6 +5549,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_restrictions_write"] } ], "summary": "[Alpha] Updates project's network restrictions by adding or removing CIDRs", @@ -5641,6 +5689,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_network_restrictions_write"] } ], "summary": "[Beta] Updates project's network restrictions", @@ -5705,6 +5756,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] } ], "summary": "[Beta] Gets project's pgsodium config", @@ -5783,6 +5837,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_write"] } ], "summary": "[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.", @@ -5861,6 +5918,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["data_api_config_read"] } ], "summary": "Gets project's postgrest config", @@ -5962,6 +6022,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["data_api_config_write"] } ], "summary": "Updates project's postgrest config", @@ -6345,6 +6408,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_secrets_read"] } ], "summary": "List all secrets", @@ -6422,6 +6488,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_secrets_write"] } ], "summary": "Bulk create secrets", @@ -6485,6 +6554,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_secrets_write"] } ], "summary": "Bulk delete secrets", @@ -6558,6 +6630,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_ssl_config_read"] } ], "summary": "[Beta] Get project's SSL enforcement configuration.", @@ -6651,6 +6726,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_ssl_config_write"] } ], "summary": "[Beta] Update project's SSL enforcement configuration.", @@ -6725,6 +6803,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_read"] } ], "summary": "Generate TypeScript types", @@ -6794,6 +6875,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_read"] } ], "summary": "[Beta] Gets current vanity subdomain config", @@ -6843,6 +6927,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_write"] } ], "summary": "[Beta] Deletes a project's vanity subdomain configuration", @@ -6923,6 +7010,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_write"] } ], "summary": "[Beta] Checks vanity subdomain availability", @@ -7003,6 +7093,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["vanity_subdomain_write"] } ], "summary": "[Beta] Activates a vanity subdomain for a project.", @@ -7936,6 +8029,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["project_admin_read"] } ], "summary": "Gets project's service health status", @@ -8018,6 +8114,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] } ], "summary": "Set up the project's existing JWT secret as an in_use JWT signing key. This endpoint will be removed in the future always check for HTTP 404 Not Found.", @@ -8098,6 +8197,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_read"] } ], "summary": "Get the signing key information for the JWT secret imported as signing key for this project. This endpoint will be removed in the future, check for HTTP 404 Not Found.", @@ -8405,6 +8507,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] } ], "summary": "Create a new signing key for the project in standby status", @@ -8495,6 +8600,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_read"] } ], "summary": "List all signing keys for the project", @@ -8586,6 +8694,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_read"] } ], "summary": "Get information about a signing key", @@ -8668,6 +8779,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] } ], "summary": "Remove a signing key from a project. Only possible if the key has been in revoked status for a while.", @@ -8775,6 +8889,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_signing_keys_write"] } ], "summary": "Update a signing key, mainly its status", @@ -8942,6 +9059,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["storage_config_read"] } ], "summary": "Gets project's storage config", @@ -9074,6 +9194,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["storage_config_write"] } ], "summary": "Updates project's storage config", @@ -9221,6 +9344,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_config_read"] } ], "summary": "Gets project's Postgres config", @@ -9483,6 +9609,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_config_write"] } ], "summary": "Updates project's Postgres config", @@ -9568,6 +9697,11 @@ "description": "Failed to retrieve project's pgbouncer config" } }, + "security": [ + { + "fga_permissions": ["database_read"] + } + ], "summary": "Get project's pgbouncer config", "tags": ["Database"], "x-badges": [ @@ -9684,6 +9818,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_pooling_config_read"] } ], "summary": "Gets project's supavisor config", @@ -9773,6 +9910,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_pooling_config_write"] } ], "summary": "Updates project's supavisor config", @@ -10727,6 +10867,16 @@ "uri_allow_list": { "type": "string", "nullable": true + }, + "oauth_server_enabled": { + "type": "boolean" + }, + "oauth_server_allow_dynamic_registration": { + "type": "boolean" + }, + "oauth_server_authorization_path": { + "type": "string", + "nullable": true } }, "required": [ @@ -10956,7 +11106,10 @@ "smtp_port", "smtp_sender_name", "smtp_user", - "uri_allow_list" + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" ] } } @@ -10978,6 +11131,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] } ], "summary": "Gets project's auth config", @@ -11966,6 +12122,18 @@ "nimbus_oauth_client_secret": { "type": "string", "nullable": true + }, + "oauth_server_enabled": { + "type": "boolean", + "nullable": true + }, + "oauth_server_allow_dynamic_registration": { + "type": "boolean", + "nullable": true + }, + "oauth_server_authorization_path": { + "type": "string", + "nullable": true } } } @@ -12895,6 +13063,16 @@ "uri_allow_list": { "type": "string", "nullable": true + }, + "oauth_server_enabled": { + "type": "boolean" + }, + "oauth_server_allow_dynamic_registration": { + "type": "boolean" + }, + "oauth_server_authorization_path": { + "type": "string", + "nullable": true } }, "required": [ @@ -13124,7 +13302,10 @@ "smtp_port", "smtp_sender_name", "smtp_user", - "uri_allow_list" + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" ] } } @@ -13146,6 +13327,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_write", "project_admin_write"] } ], "summary": "Updates a project's auth config", @@ -13490,6 +13674,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] } ], "summary": "Creates a new third-party auth integration", @@ -13580,6 +13767,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] } ], "summary": "Lists all third-party auth integrations", @@ -13678,6 +13868,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] } ], "summary": "Removes a third-party auth integration", @@ -13774,6 +13967,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] } ], "summary": "Get a third-party integration", @@ -14282,6 +14478,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["infra_add_ons_read"] } ], "summary": "List billing addons and compute instance selections", @@ -14389,6 +14588,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["infra_add_ons_write"] } ], "summary": "Apply or update billing addons, including compute instance size", @@ -14478,6 +14680,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["infra_add_ons_write"] } ], "summary": "Remove billing addons or revert compute instance sizing", @@ -14828,6 +15033,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["advisors_read"] } ], "summary": "Gets project performance advisors.", @@ -15014,6 +15222,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["advisors_read"] } ], "summary": "Gets project security advisors.", @@ -15155,6 +15366,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["analytics_logs_read"] } ], "summary": "Gets project's logs", @@ -15307,6 +15521,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["analytics_usage_read"] } ], "summary": "Gets project's usage api counts", @@ -15424,6 +15641,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["analytics_usage_read"] } ], "summary": "Gets project's usage api requests count", @@ -15550,6 +15770,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["analytics_usage_read"] } ], "summary": "Gets a project's function combined statistics", @@ -15633,6 +15856,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_write"] } ], "summary": "[Beta] Create a login role for CLI with temporary password", @@ -15696,6 +15922,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_write"] } ], "summary": "[Beta] Delete existing login roles used by CLI", @@ -15768,6 +15997,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_migrations_read"] } ], "summary": "[Beta] List applied migration versions", @@ -15850,6 +16082,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] } ], "summary": "[Beta] Apply a database migration", @@ -15932,6 +16167,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] } ], "summary": "[Beta] Upsert a database migration without applying", @@ -15992,6 +16230,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] } ], "summary": "[Beta] Rollback database migrations and remove them from history table", @@ -16088,6 +16329,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_migrations_read"] } ], "summary": "[Beta] Fetch an existing entry from migration history", @@ -16165,6 +16409,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_migrations_write"] } ], "summary": "[Beta] Patch an existing entry in migration history", @@ -16240,6 +16487,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_write"] } ], "summary": "[Beta] Run sql query", @@ -16313,6 +16563,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_read"] } ], "summary": "[Beta] Run a sql query as supabase_read_only_user", @@ -16364,6 +16617,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_webhooks_config_write"] } ], "summary": "[Beta] Enables Database Webhooks on the project", @@ -16450,6 +16706,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_read"] } ], "summary": "Gets database metadata for the given project.", @@ -16531,6 +16790,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_write"] } ], "summary": "Updates the database password", @@ -16642,6 +16904,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_jit_read"] } ], "summary": "Get user-id to role mappings for JIT access", @@ -16769,6 +17034,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_jit_read"] } ], "summary": "Authorize user-id to role mappings for JIT access", @@ -16941,6 +17209,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_jit_write"] } ], "summary": "Updates a user mapping for JIT access", @@ -17054,6 +17325,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_jit_read"] } ], "summary": "List all user-id to role mappings for JIT access", @@ -17108,6 +17382,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["database_jit_write"] } ], "summary": "Delete JIT access by user-id", @@ -17213,6 +17490,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_read"] } ], "summary": "List all functions", @@ -17415,6 +17695,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] } ], "summary": "Create a function", @@ -17586,6 +17869,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] } ], "summary": "Bulk update functions", @@ -17752,6 +18038,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] } ], "summary": "Deploy a function", @@ -17871,6 +18160,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_read"] } ], "summary": "Retrieve a function", @@ -18074,6 +18366,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] } ], "summary": "Update a function", @@ -18134,6 +18429,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_write"] } ], "summary": "Delete a function", @@ -18204,6 +18502,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["edge_functions_read"] } ], "summary": "Retrieve a function body", @@ -18286,6 +18587,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["storage_read"] } ], "summary": "Lists all buckets", @@ -18529,6 +18833,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] } ], "summary": "Creates a new SSO provider", @@ -18697,6 +19004,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] } ], "summary": "Lists all SSO providers", @@ -18867,6 +19177,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_read"] } ], "summary": "Gets a SSO provider by its UUID", @@ -19111,6 +19424,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] } ], "summary": "Updates a SSO provider by its UUID", @@ -19279,6 +19595,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["auth_config_write"] } ], "summary": "Removes a SSO provider by its UUID", @@ -19392,6 +19711,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_read"] } ], "summary": "Lists all backups", @@ -19458,6 +19780,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_write"] } ], "summary": "Restores a PITR backup for a database", @@ -19540,6 +19865,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_write"] } ], "summary": "Initiates a creation of a restore point for a database", @@ -19616,6 +19944,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_read"] } ], "summary": "Get restore points for project", @@ -19682,6 +20013,9 @@ "security": [ { "bearer": [] + }, + { + "fga_permissions": ["backups_write"] } ], "summary": "Initiates an undo to a given restore point", @@ -19759,7 +20093,7 @@ "bearer": [] }, { - "fga_permissions": ["members_write"] + "fga_permissions": ["members_read"] } ], "summary": "List members of an organization", @@ -24569,6 +24903,16 @@ "uri_allow_list": { "type": "string", "nullable": true + }, + "oauth_server_enabled": { + "type": "boolean" + }, + "oauth_server_allow_dynamic_registration": { + "type": "boolean" + }, + "oauth_server_authorization_path": { + "type": "string", + "nullable": true } }, "required": [ @@ -24798,7 +25142,10 @@ "smtp_port", "smtp_sender_name", "smtp_user", - "uri_allow_list" + "uri_allow_list", + "oauth_server_enabled", + "oauth_server_allow_dynamic_registration", + "oauth_server_authorization_path" ] }, "UpdateAuthConfigBody": { @@ -25756,6 +26103,18 @@ "nimbus_oauth_client_secret": { "type": "string", "nullable": true + }, + "oauth_server_enabled": { + "type": "boolean", + "nullable": true + }, + "oauth_server_allow_dynamic_registration": { + "type": "boolean", + "nullable": true + }, + "oauth_server_authorization_path": { + "type": "string", + "nullable": true } } }, diff --git a/apps/studio/public/img/mcp-clients/opencode-dark-icon.svg b/apps/studio/public/img/mcp-clients/opencode-dark-icon.svg new file mode 100644 index 0000000000000..b79c7332e2048 --- /dev/null +++ b/apps/studio/public/img/mcp-clients/opencode-dark-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/studio/public/img/mcp-clients/opencode-icon.svg b/apps/studio/public/img/mcp-clients/opencode-icon.svg new file mode 100644 index 0000000000000..b79140a50707c --- /dev/null +++ b/apps/studio/public/img/mcp-clients/opencode-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/www/lib/redirects.js b/apps/www/lib/redirects.js index 8eac3b7e071f7..0392c18c49675 100644 --- a/apps/www/lib/redirects.js +++ b/apps/www/lib/redirects.js @@ -2649,7 +2649,7 @@ module.exports = [ { permanent: true, source: '/docs/guides/auth/server-side-rendering', - destination: '/docs/guides/auth/server-side', + destination: '/docs/guides/auth/server-side/advanced-guide', }, { permanent: true, @@ -2664,7 +2664,7 @@ module.exports = [ { permanent: true, source: '/docs/guides/auth/server-side/oauth-with-pkce-flow-for-ssr', - destination: '/docs/guides/auth/passwords', + destination: '/docs/guides/auth/social-login', }, { permanent: true, diff --git a/packages/ui-patterns/src/McpUrlBuilder/constants.tsx b/packages/ui-patterns/src/McpUrlBuilder/constants.tsx index 564d9f791b869..b8d38e495c063 100644 --- a/packages/ui-patterns/src/McpUrlBuilder/constants.tsx +++ b/packages/ui-patterns/src/McpUrlBuilder/constants.tsx @@ -7,6 +7,7 @@ import type { GooseMcpConfig, McpClient, McpFeatureGroup, + OpenCodeMcpConfig, VSCodeMcpConfig, WindsurfMcpConfig, } from './types' @@ -380,7 +381,7 @@ export const MCP_CLIENTS: McpClient[] = [ const command = `droid mcp add supabase ${mcpUrl} --type http` return (
-

Add the Supabase MCP server to Factory:

+

Add Supabase MCP server to Factory:

(

- Restart Factory or type /mcp within droid to complete the OAuth - authentication flow. + Restart Factory or type /mcp within droid to complete OAuth authentication + flow. +

+
+ ), + }, + { + key: 'opencode', + label: 'OpenCode', + icon: 'opencode', + configFile: '~/.config/opencode/opencode.json', + externalDocsUrl: 'https://opencode.ai/docs/mcp-servers/', + transformConfig: (config): OpenCodeMcpConfig => { + const mcpUrl = getMcpUrl(config) + return { + $schema: 'https://opencode.ai/config.json', + mcp: { + supabase: { + type: 'remote', + url: mcpUrl, + enabled: true, + }, + }, + } + }, + alternateInstructions: (config, onCopy) => ( +
+

+ After adding the configuration, run the following command to authenticate: +

+ onCopy('command')} + /> +

+ This will open your browser to complete the OAuth authentication flow.

), diff --git a/packages/ui-patterns/src/McpUrlBuilder/types.ts b/packages/ui-patterns/src/McpUrlBuilder/types.ts index bc06b0fb4b63d..6a2dee544244b 100644 --- a/packages/ui-patterns/src/McpUrlBuilder/types.ts +++ b/packages/ui-patterns/src/McpUrlBuilder/types.ts @@ -133,6 +133,17 @@ export interface GeminiMcpConfig { } } +export interface OpenCodeMcpConfig { + $schema: string + mcp: { + supabase: { + type: 'remote' + url: string + enabled?: boolean + } + } +} + // Union of all possible config types export type McpClientConfig = | ClaudeCodeMcpConfig @@ -143,6 +154,7 @@ export type McpClientConfig = | GeminiMcpConfig | GooseMcpConfig | McpClientBaseConfig + | OpenCodeMcpConfig | OtherMcpConfig | VSCodeMcpConfig | WindsurfMcpConfig @@ -168,6 +180,10 @@ export function isGeminiMcpConfig(config: McpClientConfig): config is GeminiMcpC ) } +export function isOpenCodeMcpConfig(config: McpClientConfig): config is OpenCodeMcpConfig { + return '$schema' in config && 'mcp' in config && 'supabase' in config.mcp +} + export function isMcpServersConfig( config: McpClientConfig ): config is McpClientBaseConfig | ClaudeCodeMcpConfig | FactoryMcpConfig { @@ -188,6 +204,9 @@ export function getMcpUrl(config: McpClientConfig): string { if (isGeminiMcpConfig(config)) { return config.mcpServers.supabase.httpUrl } + if (isOpenCodeMcpConfig(config)) { + return config.mcp.supabase.url + } if (isMcpServersConfig(config)) { return config.mcpServers.supabase.url }