diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore index b18b47afe4b..2c0147b651a 100644 --- a/apps/docs/.gitignore +++ b/apps/docs/.gitignore @@ -23,3 +23,6 @@ yarn-error.log* **/*/generated/**/* !**/*/generated/.gitkeep !**/*/generated/**/.gitkeep + +# Sitemap +public/sitemap.xml diff --git a/apps/docs/components/Feedback/Feedback.tsx b/apps/docs/components/Feedback/Feedback.tsx index 4694e338e20..3b86b5dabe1 100644 --- a/apps/docs/components/Feedback/Feedback.tsx +++ b/apps/docs/components/Feedback/Feedback.tsx @@ -16,7 +16,7 @@ import { Button, cn } from 'ui' import { useSendFeedbackMutation } from '~/lib/fetch/feedback' import { useSendTelemetryEvent } from '~/lib/telemetry' import { FeedbackModal, type FeedbackFields } from './FeedbackModal' -import { getSanitizedTabParams } from './Feedback.utils' +import { getNotionTeam, getSanitizedTabParams } from './Feedback.utils' const FeedbackButton = forwardRef< HTMLButtonElement, @@ -125,6 +125,7 @@ function Feedback() { title, // @ts-expect-error -- can't click this button without having a state.response isHelpful: state.response === 'yes', + team: getNotionTeam(pathname), }) setModalOpen(false) refocusButton() diff --git a/apps/docs/components/Feedback/Feedback.utils.ts b/apps/docs/components/Feedback/Feedback.utils.ts index bc3683490f0..c1e93f10f27 100644 --- a/apps/docs/components/Feedback/Feedback.utils.ts +++ b/apps/docs/components/Feedback/Feedback.utils.ts @@ -1,5 +1,39 @@ import { pick } from 'lodash' +/** + * Gets the Notion team to send feedback to based on the pathname. + */ +const getNotionTeam = (pathname: string) => { + const DEFAULT_TEAM = 'team-docs' + + // Pathname has format `/guides/(team)/**` + const pathParts = pathname.split('/') + + if (pathParts[1] !== 'guides' || !pathParts[2]) return DEFAULT_TEAM + + switch (pathParts[2]) { + case 'database': + return 'team-postgres' + case 'auth': + return 'team-auth' + case 'storage': + return 'team-storage' + case 'functions': + return 'team-functions' + case 'realtime': + return 'team-realtime' + case 'ai': + return 'team-ai' + case 'cli': + return 'team-cli' + + // Ignoring platform for now because that section is a mix of teams. + case 'platform': + default: + return DEFAULT_TEAM + } +} + /** * Gets the tab selection state from the URL search params. * @@ -13,4 +47,4 @@ const getSanitizedTabParams = () => { return pick(Object.fromEntries(searchParams.entries()), queryGroups) } -export { getSanitizedTabParams } +export { getNotionTeam, getSanitizedTabParams } diff --git a/apps/docs/components/MDX/social_provider_setup.mdx b/apps/docs/components/MDX/social_provider_setup.mdx index b270d56d745..6e8f01d65cf 100644 --- a/apps/docs/components/MDX/social_provider_setup.mdx +++ b/apps/docs/components/MDX/social_provider_setup.mdx @@ -4,3 +4,9 @@ The next step requires a callback URL, which looks like this: `https:// + +For testing OAuth locally with the Supabase CLI please see the [local development docs](/docs/guides/cli/local-development#use-auth-locally). + + diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx index b6b28dc2d57..b4f2e7ae2a2 100644 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx @@ -26,7 +26,7 @@ import { IconMenuDevCli, } from './HomeMenuIcons' -function getMenuIcon(menuKey: string, width: number = 16, height: number = 16, className) { +function getMenuIcon(menuKey: string, width: number = 16, height: number = 16, className: string) { switch (menuKey) { case 'home': return diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 063bcdba5a2..9f7e970d241 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -195,7 +195,7 @@ export const REFERENCES: References = { csharp: { name: 'C#', library: 'supabase-csharp', - versions: ['v0'], + versions: ['v1', 'v0'], icon: '/docs/img/libraries/c-sharp-icon.svg', }, swift: { @@ -624,6 +624,10 @@ export const auth = { name: 'Next.js guide', url: '/guides/auth/server-side/nextjs', }, + { + name: 'SvelteKit guide', + url: '/guides/auth/server-side/sveltekit', + }, { name: 'Creating a client', url: '/guides/auth/server-side/creating-a-client', @@ -715,6 +719,10 @@ export const database: NavMenuConstant = { name: 'Managing tables, views, and data', url: '/guides/database/tables', }, + { + name: 'Working with arrays', + url: '/guides/database/arrays', + }, { name: 'Managing indexes', url: '/guides/database/postgres/indexes' }, { name: 'Querying joins and nested tables', @@ -890,7 +898,7 @@ export const database: NavMenuConstant = { url: '/guides/database/extensions/pg-safeupdate', }, { - name: 'pgsodium: Encryption Features', + name: 'pgsodium (pending deprecation): Encryption Features', url: '/guides/database/extensions/pgsodium', }, { @@ -1057,6 +1065,10 @@ export const api: NavMenuConstant = { name: 'Using custom schemas', url: '/guides/api/using-custom-schemas', }, + { + name: 'Converting from SQL to JavaScript API', + url: '/guides/api/sql-to-api', + }, ], }, ], @@ -2081,6 +2093,13 @@ export const reference_csharp_v0 = { parent: '/reference', } +export const reference_csharp_v1 = { + icon: 'reference-csharp', + title: 'C#', + url: 'guides/reference/csharp', + parent: '/reference', +} + export const reference_python_v2 = { icon: 'reference-python', title: 'Python', diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx index 525fb496f1e..3b8556bd348 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx @@ -24,6 +24,7 @@ enum MenuId { RefDartV1 = 'reference_dart_v1', RefDartV2 = 'reference_dart_v2', RefCSharpV0 = 'reference_csharp_v0', + RefCSharpV1 = 'reference_csharp_v1', RefPythonV2 = 'reference_python_v2', RefSwiftV1 = 'reference_swift_v1', RefSwiftV2 = 'reference_swift_v2', @@ -154,6 +155,13 @@ const menus: Menu[] = [ commonSectionsFile: 'common-client-libs-sections.json', specFile: 'supabase_csharp_v0.yml', type: 'reference', + path: '/reference/csharp/v0', + }, + { + id: MenuId.RefCSharpV1, + commonSectionsFile: 'common-client-libs-sections.json', + specFile: 'supabase_csharp_v1.yml', + type: 'reference', path: '/reference/csharp', }, { diff --git a/apps/docs/content/guides/ai/vector-columns.mdx b/apps/docs/content/guides/ai/vector-columns.mdx index 870f303fc44..5a1cc7ef803 100644 --- a/apps/docs/content/guides/ai/vector-columns.mdx +++ b/apps/docs/content/guides/ai/vector-columns.mdx @@ -109,7 +109,7 @@ Similarity search is the most common use case for vectors. `pgvector` support 3 Choosing the right operator depends on your needs. Dot product tends to be the fastest if your vectors are normalized. For more information on how embeddings work and how they relate to each other, see [What are Embeddings?](/docs/guides/ai/concepts#what-are-embeddings). -Supabase client libraries like `supabase-js` connect to your Postgres instance via [PostgREST](docs/guides/getting-started/architecture#postgrest-api). PostgREST does not currently support `pgvector` similarity operators, so we'll need to wrap our query in a Postgres function and call it via the `rpc()` method: +Supabase client libraries like `supabase-js` connect to your Postgres instance via [PostgREST](/docs/guides/getting-started/architecture#postgrest-api). PostgREST does not currently support `pgvector` similarity operators, so we'll need to wrap our query in a Postgres function and call it via the `rpc()` method: ```sql create or replace function match_documents ( diff --git a/apps/docs/content/guides/api/securing-your-api.mdx b/apps/docs/content/guides/api/securing-your-api.mdx index b82b226294e..7eafdc86814 100644 --- a/apps/docs/content/guides/api/securing-your-api.mdx +++ b/apps/docs/content/guides/api/securing-your-api.mdx @@ -195,7 +195,7 @@ Read more about [PostgREST's pre-request function](https://postgrest.org/en/stab > -You can only rate-limit `POST`, `PUT`, `PATCH` and `DELETE` requests. This is because `GET` and `HEAD` requests run in read-only mode, and will be served by [Read Replicas](/guides/platform/read-replicas) which do not support writing to the database. +You can only rate-limit `POST`, `PUT`, `PATCH` and `DELETE` requests. This is because `GET` and `HEAD` requests run in read-only mode, and will be served by [Read Replicas](/docs/guides/platform/read-replicas) which do not support writing to the database. Outline: @@ -265,7 +265,7 @@ alter role authenticator notify pgrst, 'reload config'; ``` -To clear old entries in the `private.rate_limits` table, set up a [pg_cron](/guides/database/extensions/pg_cron) job to clean them up. +To clear old entries in the `private.rate_limits` table, set up a [pg_cron](/docs/guides/database/extensions/pg_cron) job to clean them up. diff --git a/apps/docs/content/guides/database/sql-to-api.mdx b/apps/docs/content/guides/api/sql-to-api.mdx similarity index 81% rename from apps/docs/content/guides/database/sql-to-api.mdx rename to apps/docs/content/guides/api/sql-to-api.mdx index 76140737c95..619e7bf7a3c 100644 --- a/apps/docs/content/guides/database/sql-to-api.mdx +++ b/apps/docs/content/guides/api/sql-to-api.mdx @@ -4,7 +4,9 @@ title: 'Converting SQL to JavaScript API' description: 'Implementing common SQL patterns in the JavaScript API' --- -{/* @TODO: this one is a very daunting read on first attempt. Need to check what is the purpose of it */} +Many common SQL queries can be written using the JavaScript API, provided by the SDK to wrap Data API calls. Below are a few examples of conversions between SQL and JavaScript patterns. + +## Select statement with basic clauses Select a set of columns from a single table with where, order by, and limit clauses. @@ -28,6 +30,8 @@ const { data, error } = await supabase .limit(20) ``` +## Select statement with complex Boolean Logic clause + Select all columns from a single table with a complex where clause: OR AND OR ```sql @@ -42,7 +46,6 @@ const { data, error } = await supabase .select() // or .select('*') .or('team_id.eq.CHN,team_id.is.null') .or('age.gt.35,age.is.null') // additional filters imply "AND" - .not('team_id', 'eq', 'STL') ``` Select all columns from a single table with a complex where clause: AND OR AND @@ -60,21 +63,6 @@ const { data, error } = await supabase .or('and(team_id.eq.CHN,age.gt.35),and(team_id.neq.CHN,.not.age.is.null)') ``` -Get a count of rows, but don't return any data. - -```sql -select count(*) -from players -where team_id = 'NYM'; -``` - -```js -const { count, error } = await supabase - .from('players') - .select('*', { count: 'exact', head: true }) // exact, planned, or executed - .eq('team_id', 'NYM') -``` - ## Resources - [Supabase - Get started for free](https://supabase.com) diff --git a/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx b/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx index d817f0bc973..b24639e091d 100644 --- a/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx +++ b/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx @@ -27,7 +27,11 @@ The `auth-helpers` package has been replaced with the `@supabase/ssr` package. W This submodule provides convenience helpers for implementing user authentication in Next.js applications using the pages directory. -> Note: As of [Next.js 13.4](https://nextjs.org/blog/next-13-4), the App Router has reached stable status. This is now the recommended path for new Next.js app. Check out our guide on using [Auth Helpers with the Next.js App Directory](/docs/guides/auth/auth-helpers/nextjs). + + +Note: As of [Next.js 13.4](https://nextjs.org/blog/next-13-4), the App Router has reached stable status. This is now the recommended path for new Next.js app. Check out our guide on using [Auth Helpers with the Next.js App Directory](/docs/guides/auth/auth-helpers/nextjs). + + ## Install the Next.js helper library diff --git a/apps/docs/content/guides/auth/auth-helpers/remix.mdx b/apps/docs/content/guides/auth/auth-helpers/remix.mdx index df032be0944..dd9d537f960 100644 --- a/apps/docs/content/guides/auth/auth-helpers/remix.mdx +++ b/apps/docs/content/guides/auth/auth-helpers/remix.mdx @@ -36,7 +36,11 @@ This submodule provides convenience helpers for implementing user authentication > -> For a complete implementation example, check out [this free egghead course](https://egghead.io/courses/build-a-realtime-chat-app-with-remix-and-supabase-d36e2618) or [this GitHub repo](https://github.com/supabase/auth-helpers/tree/main/examples/remix). + + +For a complete implementation example, check out [this free egghead course](https://egghead.io/courses/build-a-realtime-chat-app-with-remix-and-supabase-d36e2618) or [this GitHub repo](https://github.com/supabase/auth-helpers/tree/main/examples/remix). + + ## Install the Remix helper library @@ -179,7 +183,11 @@ export const loader = async ({ request }) => { } ``` -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Loader` function. + + +Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Loader` function. + + @@ -209,7 +217,11 @@ export const loader = async ({ request }: LoaderFunctionArgs) => { } ``` -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Loader` function. + + +Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Loader` function. + + @@ -251,7 +263,11 @@ export const action = async ({ request }) => { } ``` -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Action` function. + + +Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Action` function. + + @@ -282,7 +298,11 @@ export const action = async ({ request }: ActionFunctionArgs) => { } ``` -> Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Action` function. + + +Supabase will set cookie headers to manage the user's auth session, therefore, the `response.headers` must be returned from the `Action` function. + + @@ -341,7 +361,11 @@ export const loader = () => { } ``` -> These may not be stored in `process.env` for environments other than Node. + + +These may not be stored in `process.env` for environments other than Node. + + Next, we call the `useLoaderData` hook in our component to get the `env` object. @@ -375,7 +399,11 @@ export const loader = ({}: LoaderFunctionArgs) => { } ``` -> These may not be stored in `process.env` for environments other than Node. + + +These may not be stored in `process.env` for environments other than Node. + + Next, we call the `useLoaderData` hook in our component to get the `env` object. @@ -558,7 +586,11 @@ useEffect(() => { -> Check out [this repo](https://github.com/supabase/auth-helpers/tree/main/examples/remix) for full implementation example + + +Check out [this repo](https://github.com/supabase/auth-helpers/tree/main/examples/remix) for full implementation example + + ### Authentication @@ -771,7 +803,11 @@ export default function Index() { -> Ensure you have [enabled replication](https://supabase.com/dashboard/project/_/database/publications) on the table you are subscribing to. + + +Ensure you have [enabled replication](https://supabase.com/dashboard/project/_/database/publications) on the table you are subscribing to. + + ## Migration guide diff --git a/apps/docs/content/guides/auth/row-level-security.mdx b/apps/docs/content/guides/auth/row-level-security.mdx index fb6100a1471..278c20dba7e 100644 --- a/apps/docs/content/guides/auth/row-level-security.mdx +++ b/apps/docs/content/guides/auth/row-level-security.mdx @@ -125,6 +125,20 @@ on my_table for select using ( true ); ``` +### Protect views using `security_invoker` + +Views bypass RLS by default because they are usually created with the `postgres` user. This is a feature of Postgres, which automatically creates views with `security definer`. + +In Postgres 15 and above, you can make a view obey the RLS policies of the underlying tables when invoked by `anon` and `authenticated` roles by setting `security_invoker = true`. + +```sql +create view +with(security_invoker = true) +as select +``` + +In older versions of Postgres, protect your views by revoking access from the `anon` and `authenticated` roles, or by putting them in an unexposed schema. + ### Using external authorization systems If you want to use another authorization method for your applications that's also fine. Supabase is "just Postgres", so if your application works with Postgres, then it also works with Supabase. If you take this path, don't put your tables in the `public` schema - instead create a new schema for your tables and functions: 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 cde78fb8854..8732b944ce3 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 @@ -469,22 +469,27 @@ export const handle: Handle = async ({ event, resolve }) => { }) /** - * Unlike `supabase.auth.getSession`, which is unsafe on the server because it - * doesn't validate the JWT, this function validates the JWT by first calling - * `getUser` and aborts early if the JWT signature is invalid. + * Unlike `supabase.auth.getSession()`, which returns the session _without_ + * validating the JWT, this function also calls `getUser()` to validate the + * JWT before returning the session. */ event.locals.safeGetSession = async () => { + const { + data: { session }, + } = await event.locals.supabase.auth.getSession() + if (!session) { + return { session: null, user: null } + } + const { data: { user }, error, } = await event.locals.supabase.auth.getUser() if (error) { + // JWT validation has failed return { session: null, user: null } } - const { - data: { session }, - } = await event.locals.supabase.auth.getSession() return { session, user } } diff --git a/apps/docs/content/guides/auth/server-side/overview.mdx b/apps/docs/content/guides/auth/server-side/overview.mdx index eb2d1c1c9d8..317f7df8b28 100644 --- a/apps/docs/content/guides/auth/server-side/overview.mdx +++ b/apps/docs/content/guides/auth/server-side/overview.mdx @@ -9,15 +9,22 @@ When using Supabase with server-side languages and frameworks - such as Next.js, ## Framework quickstarts -
+
{[ { title: 'Next.js', href: '/guides/auth/server-side/nextjs', description: - 'Automatically configure Supabase to use cookies, making your user and their session available on the client and server.', + 'Automatically configure Supabase in Next.js to use cookies, making your user and their session available on the client and server.', icon: '/docs/img/icons/nextjs-icon', }, + { + title: 'SvelteKit', + href: '/guides/auth/server-side/sveltekit', + description: + 'Automatically configure Supabase in SvelteKit to use cookies, making your user and their session available on the client and server.', + icon: '/docs/img/icons/svelte-icon', + }, ].map((item) => { return ( diff --git a/apps/docs/content/guides/auth/server-side/sveltekit.mdx b/apps/docs/content/guides/auth/server-side/sveltekit.mdx new file mode 100644 index 00000000000..d1fc0e97c6c --- /dev/null +++ b/apps/docs/content/guides/auth/server-side/sveltekit.mdx @@ -0,0 +1,636 @@ +--- +title: 'Setting up Server-Side Auth for SvelteKit' +hideToc: true +--- + +Set up Server-Side Auth to use cookie-based authentication with SvelteKit. + + + + + + + +Install the `@supabase/supabase-js` package and the helper `@supabase/ssr` package. + + + + + +```sh +npm install @supabase/supabase-js @supabase/ssr +``` + + + + + + + + + +Create a `.env.local` file in your project root directory. + +Fill in your `PUBLIC_SUPABASE_URL` and `PUBLIC_SUPABASE_ANON_KEY`: + + + + + + + + +```txt .env.local +PUBLIC_SUPABASE_URL= +PUBLIC_SUPABASE_ANON_KEY= +``` + + + + + + + + + +Set up server-side hooks in `src/hooks.server.ts`. The hooks: + +- Create a request-specific Supabase client, using the user credentials from the request cookie. This client is used for server-only code. +- Check user authentication. +- Guard protected pages. + + + + + +```ts src/hooks.server.ts +import { createServerClient } from '@supabase/ssr' +import { type Handle, redirect } from '@sveltejs/kit' +import { sequence } from '@sveltejs/kit/hooks' + +import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' + +const supabase: Handle = async ({ event, resolve }) => { + /** + * Creates a Supabase client specific to this server request. + * + * The Supabase client gets the Auth token from the request cookies. + */ + event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, { + cookies: { + get: (key) => event.cookies.get(key), + /** + * SvelteKit's cookies API requires `path` to be explicitly set in + * the cookie options. Setting `path` to `/` replicates previous/ + * standard behavior. + */ + set: (key, value, options) => { + event.cookies.set(key, value, { ...options, path: '/' }) + }, + remove: (key, options) => { + event.cookies.delete(key, { ...options, path: '/' }) + }, + }, + }) + + /** + * Unlike `supabase.auth.getSession()`, which returns the session _without_ + * validating the JWT, this function also calls `getUser()` to validate the + * JWT before returning the session. + */ + event.locals.safeGetSession = async () => { + const { + data: { session }, + } = await event.locals.supabase.auth.getSession() + if (!session) { + return { session: null, user: null } + } + + const { + data: { user }, + error, + } = await event.locals.supabase.auth.getUser() + if (error) { + // JWT validation has failed + return { session: null, user: null } + } + + return { session, user } + } + + return resolve(event, { + filterSerializedResponseHeaders(name) { + /** + * Supabase libraries use the `content-range` header, so we need to + * tell SvelteKit to pass it through. + */ + return name === 'content-range' + }, + }) +} + +const authGuard: Handle = async ({ event, resolve }) => { + const { session, user } = await event.locals.safeGetSession() + event.locals.session = session + event.locals.user = user + + if (!event.locals.session && event.url.pathname.startsWith('/private')) { + return redirect(303, '/auth') + } + + if (event.locals.session && event.url.pathname === '/auth') { + return redirect(303, '/private') + } + + return resolve(event) +} + +export const handle: Handle = sequence(supabase, authGuard) +``` + + + + + + + + + +To prevent TypeScript errors, add type definitions for the new `event.locals` properties. + + + + + +```ts src/app.d.ts +import type { Session, SupabaseClient, User } from '@supabase/supabase-js' + +declare global { + namespace App { + // interface Error {} + interface Locals { + supabase: SupabaseClient + safeGetSession: () => Promise<{ session: Session | null; user: User | null }> + session: Session | null + user: User | null + } + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {} +``` + + + + + + + + + +Create a Supabase client in your root `+layout.ts`. This client can be used to access Supabase from the client or the server. In order to get access to the Auth token on the server, use a `+layout.server.ts` file to pass in the session from `event.locals`. + + + + + + + +```ts src/routes/+layout.ts +import { createBrowserClient, createServerClient, isBrowser, parse } from '@supabase/ssr' + +import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public' + +import type { LayoutLoad } from './$types' + +export const load: LayoutLoad = async ({ data, depends, fetch }) => { + /** + * Declare a dependency so the layout can be invalidated, for example, on + * session refresh. + */ + depends('supabase:auth') + + const supabase = isBrowser() + ? createBrowserClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, { + global: { + fetch, + }, + cookies: { + get(key) { + const cookie = parse(document.cookie) + return cookie[key] + }, + }, + }) + : createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, { + global: { + fetch, + }, + cookies: { + get() { + return JSON.stringify(data.session) + }, + }, + }) + + /** + * It's fine to use `getSession` here, because on the client, `getSession` is + * safe, and on the server, it reads `session` from the `LayoutData`, which + * safely checked the session using `safeGetSession`. + */ + const { + data: { session }, + } = await supabase.auth.getSession() + + const { + data: { user }, + } = await supabase.auth.getUser() + + return { session, supabase, user } +} +``` + +```ts src/routes/+layout.server.ts +import type { LayoutServerLoad } from './$types' + +export const load: LayoutServerLoad = async ({ locals: { session } }) => { + return { + session, + } +} +``` + + + + + + + + + + + +Set up a listener for Auth events on the client, to handle session refreshes and signouts. + + + + + +```svelte src/routes/+layout.svelte + + + +``` + + + + + + + + + +Create your first page. This example page calls Supabase from the server to get a list of countries from the database. + +This is an example of a public page that uses publicly readable data. + +To populate your database, run the [countries quickstart](/dashboard/project/_/sql/quickstarts) from your dashboard. + + + + + + + +```ts src/routes/+page.server.ts +import type { PageServerLoad } from './$types' + +export const load: PageServerLoad = async ({ locals: { supabase } }) => { + const { data: countries } = await supabase.from('countries').select('name').limit(5).order('name') + return { countries: countries ?? [] } +} +``` + +```svelte src/routes/+page.svelte + + +

Welcome to Supabase!

+
    + {#each countries as country} +
  • {country.name}
  • + {/each} +
+``` + +
+ +
+ +
+ + + + + +If you have email confirmation turned on (the default), a new user will receive an email confirmation after signing up. + +Change the email template to support a server-side authentication flow. + +Go to the [Auth templates](https://supabase.com/dashboard/project/_/auth/templates) page in your dashboard. In the `Confirm signup` template, change `{{ .ConfirmationURL }}` to `{{ .SiteURL }}/api/auth/confirm?token_hash={{ .TokenHash }}&type=signup`. + + + + + + + + + +Next, create a login page to let users sign up and log in. + + + + + + + +```ts src/routes/auth/+page.server.ts +import { redirect } from '@sveltejs/kit' + +import type { Actions } from './$types' + +export const actions: Actions = { + signup: async ({ request, locals: { supabase } }) => { + const formData = await request.formData() + const email = formData.get('email') as string + const password = formData.get('password') as string + + const { error } = await supabase.auth.signUp({ email, password }) + if (error) { + console.error(error) + return redirect(303, '/auth/error') + } else { + return redirect(303, '/') + } + }, + login: async ({ request, locals: { supabase } }) => { + const formData = await request.formData() + const email = formData.get('email') as string + const password = formData.get('password') as string + + const { error } = await supabase.auth.signInWithPassword({ email, password }) + if (error) { + console.error(error) + return redirect(303, '/auth/error') + } else { + return redirect(303, '/private') + } + }, +} +``` + +```svelte src/routes/auth/+page.svelte +
+ + + + +
+``` + +```svelte src/routes/auth/+layout.svelte +
+ +
+ +``` + +```svelte src/routes/auth/error/+page.svelte +

Login error

+``` + +
+ +
+ +
+ + + + + +Finish the signup flow by creating the API route to handle email verification. + + + + + +```ts src/routes/api/auth/confirm/+server.ts +import type { EmailOtpType } from '@supabase/supabase-js' +import { redirect } from '@sveltejs/kit' + +import type { RequestHandler } from './$types' + +export const GET: RequestHandler = async ({ url, locals: { supabase } }) => { + const token_hash = url.searchParams.get('token_hash') + const type = url.searchParams.get('type') as EmailOtpType | null + const next = url.searchParams.get('next') ?? '/' + + /** + * Clean up the redirect URL by deleting the Auth flow parameters. + * + * `next` is preserved for now, because it's needed in the error case. + */ + const redirectTo = new URL(url) + redirectTo.pathname = next + redirectTo.searchParams.delete('token_hash') + redirectTo.searchParams.delete('type') + + if (token_hash && type) { + const { error } = await supabase.auth.verifyOtp({ type, token_hash }) + if (!error) { + redirectTo.searchParams.delete('next') + return redirect(303, redirectTo) + } + } + + redirectTo.pathname = '/auth/error' + return redirect(303, redirectTo) +} +``` + + + + + + + + + +Create private routes that can only be accessed by authenticated users. The routes in the `private` directory are protected by the route guard in `hooks.server.ts`. + +To ensure that `hooks.server.ts` runs for every nested path, put a `+layout.server.ts` file in the `private` directory. This file can be empty, but must exist to protect routes that don't have their own `+layout|page.server.ts`. + + + + + + + +```ts src/routes/private/+layout.server.ts +/** + * This file is necessary to ensure protection of all routes in the `private` + * directory. It makes the routes in this directory _dynamic_ routes, which + * send a server request, and thus trigger `hooks.server.ts`. + **/ +``` + +```svelte src/routes/private/+layout.svelte + + +
+ + +
+
+ +
+``` + +```sql SQL +-- Run this SQL against your database to create a `notes` table. + +create table notes ( + id bigint primary key generated always as identity, + created_at timestamp with time zone not null default now(), + user_id uuid references auth.users on delete cascade not null default auth.uid(), + note text not null +); + +alter table notes enable row level security; + +revoke all on table notes from authenticated; +revoke all on table notes from anon; + +grant all (note) on table notes to authenticated; +grant select (id) on table notes to authenticated; +grant delete on table notes to authenticated; + +create policy "Users can access and modify their own notes" +on notes +for all +to authenticated +using ((select auth.uid()) = user_id); +``` + +```svelte src/routes/private/+page.server.ts +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ depends, locals: { supabase } }) => { + depends('supabase:db:notes'); + const { data: notes } = await supabase.from('notes').select('id,note').order('id'); + return { notes: notes ?? [] }; +}; +``` + +```svelte src/routes/private/+page.svelte + + +

Private page for user: {user?.email}

+

Notes

+
    + {#each notes as note} +
  • {note.note}
  • + {/each} +
+
+ +
+``` + +
+ +
+ +
+ +
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 8360c023780..60fb73fa232 100644 --- a/apps/docs/content/guides/auth/social-login/auth-google.mdx +++ b/apps/docs/content/guides/auth/social-login/auth-google.mdx @@ -311,7 +311,7 @@ Before you can use Sign in with Google, you need to obtain a [Google Cloud Platf ## Google sign-in for Web, macOS, Windows, and Linux - Google sign-in with Supabase on Web, macOS, Windows, and Linux is done through the [signInWithOAuth](docs/reference/dart/auth-signinwithoauth) method. + Google sign-in with Supabase on Web, macOS, Windows, and Linux is done through the [signInWithOAuth](/docs/reference/dart/auth-signinwithoauth) method. This method of signing in is web based, and will open a browser window to perform the sign in. For non-web platforms, the user is brought back to the app via [deep linking](/docs/guides/auth/native-mobile-deep-linking?platform=flutter). diff --git a/apps/docs/content/guides/cli.mdx b/apps/docs/content/guides/cli.mdx index 4cc568e2d3d..e123fa567c9 100644 --- a/apps/docs/content/guides/cli.mdx +++ b/apps/docs/content/guides/cli.mdx @@ -6,7 +6,7 @@ subtitle: 'Developing locally using the Supabase CLI.' sidebar_label: 'Overview' --- -You can use the Supabase CLI to run the entire Supabase stack locally on your machine, simply by running `supabase init` and then `supabase start`. +You can use the Supabase CLI to run the entire Supabase stack locally on your machine, simply by running `supabase init` and then `supabase start`. To install the CLI, see the [installation guide](/docs/guides/cli/getting-started#installing-the-supabase-cli). The Supabase CLI provides tools to develop your project locally, deploy to the Supabase Platform, handle database migrations, and generate types directly from your database schema. diff --git a/apps/docs/content/guides/cli/testing-and-linting.mdx b/apps/docs/content/guides/cli/testing-and-linting.mdx index bb109ff15bc..c999159aa69 100644 --- a/apps/docs/content/guides/cli/testing-and-linting.mdx +++ b/apps/docs/content/guides/cli/testing-and-linting.mdx @@ -20,7 +20,7 @@ Usage: supabase test db [flags] ``` -This is powered by the [pgTAP](https://supabase.com/docs/guides/database/extensions/pgtap) extension. You can find a full guide to writing an running tests in the [Testing your database](/docs/guides/database/testing) section. +This is powered by the [pgTAP](https://supabase.com/docs/guides/database/extensions/pgtap) extension. You can find a full guide to writing and running tests in the [Testing your database](/docs/guides/database/testing) section. ### Test helpers @@ -28,7 +28,7 @@ Our friends at [Basejump](https://usebasejump.com/) have created a useful set of ### Running database tests in CI -Use our GitHub Action to [automate your database tests](docs/guides/cli/github-action/testing#testing-your-database). +Use our GitHub Action to [automate your database tests](/docs/guides/cli/github-action/testing#testing-your-database). ## Testing your Edge Functions diff --git a/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx b/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx index 0016af1be1a..b43a54a68ed 100644 --- a/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx +++ b/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx @@ -7,7 +7,7 @@ subtitle: 'Connecting to your Postgres database in serverless environments.' Supabase provides several options for connecting to your Postgres database from serverless environments. -[supabase-js](/reference/javascript/introduction) is an isomorphic JavaScript client that uses the [auto-generated REST API](/guides/api) and therefore works in any environment that supports HTTPS connections. This API has a built-in [connection pooler](/guides/database/connecting-to-postgres#connection-pooler) and can serve thousands of simultaneous requests, and therefore is ideal for Serverless workloads. +[supabase-js](/docs/reference/javascript/introduction) is an isomorphic JavaScript client that uses the [auto-generated REST API](/docs/guides/api) and therefore works in any environment that supports HTTPS connections. This API has a built-in [connection pooler](/docs/guides/database/connecting-to-postgres#connection-pooler) and can serve thousands of simultaneous requests, and therefore is ideal for Serverless workloads. ## Vercel Edge Functions diff --git a/apps/docs/content/guides/database/extensions/pgaudit.mdx b/apps/docs/content/guides/database/extensions/pgaudit.mdx index e653eccd317..50d890eabbf 100644 --- a/apps/docs/content/guides/database/extensions/pgaudit.mdx +++ b/apps/docs/content/guides/database/extensions/pgaudit.mdx @@ -214,7 +214,11 @@ where rolname = 'postgres'; PGAudit was designed for storing logs as CSV files with the following headers: -> Referenced from the [PGAudit official docs](https://github.com/pgaudit/pgaudit/blob/master/README.md#format) + + +Referenced from the [PGAudit official docs](https://github.com/pgaudit/pgaudit/blob/master/README.md#format) + + | header | Description | | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/apps/docs/content/guides/database/extensions/pgsodium.mdx b/apps/docs/content/guides/database/extensions/pgsodium.mdx index 8c139f9ef80..dbddf13b51f 100644 --- a/apps/docs/content/guides/database/extensions/pgsodium.mdx +++ b/apps/docs/content/guides/database/extensions/pgsodium.mdx @@ -1,90 +1,23 @@ --- id: 'pgsodium' -title: 'pgsodium: Encryption Features' +title: 'pgsodium (pending deprecation): Encryption Features' description: 'Encryption library for PostgreSQL' --- -[`pgsodium`](https://github.com/michelp/pgsodium) is a PostgreSQL extension which provides SQL access to [`libsodium`'s](https://doc.libsodium.org/) high-level cryptographic algorithms. +Supabase DOES NOT RECOMMEND any new usage of [`pgsodium`](https://github.com/michelp/pgsodium). -`libsodium` is a modern, easy-to-use software library for encryption, decryption, signatures, password hashing, and more. It is a portable, cross-compilable, installable, and packageable fork of the [NaCl](http://nacl.cr.yp.to/) library, with a compatible but extended API to improve usability even further. +The [`pgsodium`](https://github.com/michelp/pgsodium) extension is expected to go through a deprecation cycle in the near future. We will reach out to owners of impacted projects to assist with migrations away from [`pgsodium`](https://github.com/michelp/pgsodium) once the deprecation process begins. -The design choices emphasize security and ease of use. But despite the emphasis on high security, primitives are faster across-the-board than most implementations. +[`pgsodium`](https://github.com/michelp/pgsodium) is a Postgres extension which provides SQL access to [`libsodium`'s](https://doc.libsodium.org/) high-level cryptographic algorithms. -`pgsodium` exposes the following `libsodium` APIs to SQL: +Supabase previously documented two features derived from pgsodium. Namely [Server Key Management](https://github.com/michelp/pgsodium#server-key-management) and [Transparent Column Encryption](https://github.com/michelp/pgsodium#transparent-column-encryption). At this time, we do not recommend using either on the Supabase platform due to their high level of operational complexity and misconfiguration risk. -- [Generating Random Data](https://github.com/michelp/pgsodium/#generating-random-data) -- [Secret key cryptography](https://github.com/michelp/pgsodium/#secret-key-cryptography) - - [Authenticated encryption](https://github.com/michelp/pgsodium/#authenticated-encryption) - - [Authentication](https://github.com/michelp/pgsodium/#authentication) -- [Public key cryptography](https://github.com/michelp/pgsodium/#public-key-cryptography) - - [Authenticated encryption](https://github.com/michelp/pgsodium/#authenticated-encryption-1) - - [Public key signatures](https://github.com/michelp/pgsodium/#public-key-signatures) - - [Sealed boxes](https://github.com/michelp/pgsodium/#sealed-boxes) -- [Hashing](https://github.com/michelp/pgsodium/#hashing) -- [Password hashing](https://github.com/michelp/pgsodium/#password-hashing) -- [Key Derivation](https://github.com/michelp/pgsodium/#key-derivation) -- [Key Exchange](https://github.com/michelp/pgsodium/#key-exchange) -- [HMAC512](https://github.com/michelp/pgsodium/#hmac512) -- [Advanced Stream API](https://github.com/michelp/pgsodium/#advanced-stream-api) -- [XChaCha20-SIV](https://github.com/michelp/pgsodium/#xchacha20-siv) -- [Signcryption](https://github.com/michelp/pgsodium/#signcryption) - -It also enables some Postgres specific features including: - -- [Server Key Management](https://github.com/michelp/pgsodium#server-key-management) - -- [Transparent Column Encryption](https://github.com/michelp/pgsodium#transparent-column-encryption) - -Note that column encryption should only be used in highly sensitive scenarios as it has a meaningful impact on statement performance and flexibility. - -Specifically: - - - Encryption and decryption both take time. Inserting and selecting encrypted data takes more time than a "plain" column of data. - - - Encrypted columns should never be indexed. This is because the index will store the encrypted value of a column, which would not be useful. - - - Encrypted columns can be queried in a `WHERE` clause, but this can also have some negative performance consequences, since the value must be decrypted in order to matched to any `WHERE` qualifiers. - - - While you can encrypt multiple columns in the same table, each column must go through a full encryption cycle, so two columns will take twice the time as one etc. - -In general, it is a bad idea to over-use column encryption for mundane data or data that you need to search against such as names, user or account types, addresses, country codes, etc. Column encryption is intended to be used for very sensitive data that would cause serious issues if it were to leak, such as API keys, payment keys, highly sensitive personal information, etc. - -Note that Supabase projects are already encrypted at rest by default. +Note that Supabase projects are encrypted at rest by default which likely is sufficient for your compliance needs e.g. SOC2 & HIPAA. ## Get the root encryption key for your Supabase project Encryption requires keys. Keeping the keys in the same database as the encrypted data would be unsafe. For more information about managing the `pgsodium` root encryption key on your Supabase project see **[encryption key location](/docs/guides/database/vault#encryption-key-location)**. This key is required to decrypt values stored in [Supabase Vault](/docs/guides/database/vault) and data encrypted with Transparent Column Encryption. -## Enable the extension - - - - -1. Go to the [Database](https://supabase.com/dashboard/project/_/database/tables) page in the Dashboard. -2. Click on **Extensions** in the sidebar. -3. Search for `pgsodium` and enable the extension. - - - - -{/* prettier-ignore */} -```sql --- Enable the "pgsodium" extension -create extension pgsodium; - --- Disable the "pgsodium" extension -drop extension if exists pgsodium; -``` - - - - ## Resources - [Supabase Vault](/docs/guides/database/vault) diff --git a/apps/docs/content/guides/database/managing-passwords.mdx b/apps/docs/content/guides/database/managing-passwords.mdx deleted file mode 100644 index c754bdd1a81..00000000000 --- a/apps/docs/content/guides/database/managing-passwords.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -id: 'managing-passwords' -title: 'Passwords' -description: 'How to change your PostgreSQL database password.' ---- - -Your Postgres database is the core of your Supabase project, so it's important that it has a strong, secure password at all times. - -If you use special symbols in your postgres password, you must remember to [percent-encode](https://en.wikipedia.org/wiki/Percent-encoding) your password later if using the postgres connection string e.g. `postgresql://postgres.projectref:p%3Dword@aws-0-us-east-1.pooler.supabase.com:6543/postgres` - -## Changing your project password - -When you created your project you were also asked to enter a password. This is actually the password for your database, specifically for the `postgres` user. -You can update this from the Dashboard under the [database settings](https://supabase.com/dashboard/project/_/settings/database) page. - -## Creating a secure password - -It's absolutely critical that you store your customers' data safely. Here are some tips for creating a secure password. - -- Use a password manager to generate it. -- Make a long password (12 characters at least). -- Don't use any common dictionary words. -- Use both upper and lower case characters, numbers, and special symbols. - -## Resources - -- [PostgreSQL `ALTER USER` Documentation](https://www.postgresql.org/docs/12/sql-alteruser.html) diff --git a/apps/docs/content/guides/database/managing-timezones.mdx b/apps/docs/content/guides/database/managing-timezones.mdx deleted file mode 100644 index d74a40bf348..00000000000 --- a/apps/docs/content/guides/database/managing-timezones.mdx +++ /dev/null @@ -1,77 +0,0 @@ ---- -id: 'managing-timezones' -title: 'Timezones' -slug: 'managing-timezones' -description: 'How to change your database timezone.' ---- - -Every Supabase database is set to UTC timezone by default. We strongly recommend keeping it this way, even if your users are in a different location. -This is because it makes it much easier to calculate differences between timezones if you adopt the mental model that "everything in my database is in UTC time." - -### Change timezone - - - - -```sql -alter database postgres -set timezone to 'America/New_York'; -``` - - - - -### Full list of timezones - -Get a full list of timezones supported by your database. This will return the following columns: - -- `name`: Time zone name -- `abbrev`: Time zone abbreviation -- `utc_offset`: Offset from UTC (positive means east of Greenwich) -- `is_dst`: True if currently observing daylight savings - - - - -```sql -select name, abbrev, utc_offset, is_dst -from pg_timezone_names() -order by name; -``` - - - - -### Search for a specific timezone - -Use `ilike` (case insensitive search) to find specific timezones. - - - - -```sql -select * -from pg_timezone_names() -where name ilike '%york%'; -``` - - - diff --git a/apps/docs/content/guides/database/tables.mdx b/apps/docs/content/guides/database/tables.mdx index 54945eef4ea..fe9cdf9c178 100644 --- a/apps/docs/content/guides/database/tables.mdx +++ b/apps/docs/content/guides/database/tables.mdx @@ -79,8 +79,7 @@ You must define the "data type" when you create a column. ### Data types -Every column is a predefined type. PostgreSQL provides many [default types](https://www.postgresql.org/docs/current/datatype.html), and you can even design your own (or use extensions) -if the default types don't fit your needs. You can use any data type that Postgres supports via the SQL editor. We only support a subset of these in the Table Editor in an effort to keep the experience simple for people with less experience with databases. +Every column is a predefined type. PostgreSQL provides many [default types](https://www.postgresql.org/docs/current/datatype.html), and you can even design your own (or use extensions) if the default types don't fit your needs. You can use any data type that Postgres supports via the SQL editor. We only support a subset of these in the Table Editor in an effort to keep the experience simple for people with less experience with databases.
Show/Hide default data types diff --git a/apps/docs/content/guides/functions/ai-models.mdx b/apps/docs/content/guides/functions/ai-models.mdx index f16f7b23249..3d3fddbdd20 100644 --- a/apps/docs/content/guides/functions/ai-models.mdx +++ b/apps/docs/content/guides/functions/ai-models.mdx @@ -70,7 +70,7 @@ Inference via larger models is supported via [Ollama](https://ollama.com/). In t ### Running locally -1. Install Ollama and pull the Mistral model +1. [Install Ollama](https://github.com/ollama/ollama?tab=readme-ov-file#ollama) and pull the Mistral model ``` ollama pull mistral @@ -85,7 +85,7 @@ Inference via larger models is supported via [Ollama](https://ollama.com/). In t 1. Set a function secret called AI_INFERENCE_API_HOST to point to the Ollama server ``` - echo "AI_INFERENCE_API_HOST=http://host.docker.internal:11434/api/generate" >> supabase/functions/.env + echo "AI_INFERENCE_API_HOST=http://host.docker.internal:11434" >> supabase/functions/.env ``` 1. Create a new function with the following code diff --git a/apps/docs/content/guides/getting-started/features.mdx b/apps/docs/content/guides/getting-started/features.mdx index cfb38b830bd..45a02558d8e 100644 --- a/apps/docs/content/guides/getting-started/features.mdx +++ b/apps/docs/content/guides/getting-started/features.mdx @@ -172,7 +172,7 @@ Manage your projects programmatically. [Docs](/docs/reference/api). ## Client libraries -Official client libraries for [JavaScript](/docs/reference/javascript/start), [Flutter](docs/reference/dart/initializing) and [Swift](/docs/reference/swift/introduction). +Official client libraries for [JavaScript](/docs/reference/javascript/start), [Flutter](/docs/reference/dart/initializing) and [Swift](/docs/reference/swift/introduction). Unofficial libraries are supported by the community. ## Feature status diff --git a/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx b/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx index 4dce06707bb..b22f2f867d3 100644 --- a/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx +++ b/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx @@ -138,7 +138,11 @@ export class SupabaseService { Let's set up a route to manage logins and signups. We'll use Magic Links so users can sign in with their email without using passwords. Create a **LoginPage** with the `ionic g page login` Ionic CLI command. -> This guide will show the template inline, but the example app will have `templateUrl`s + + +This guide will show the template inline, but the example app will have `templateUrl`s + + ```ts src/app/login/login.page.ts import { Component, OnInit } from '@angular/core' diff --git a/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx b/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx index 75e51643f4c..0153609ec88 100644 --- a/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx +++ b/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx @@ -456,7 +456,11 @@ const HomePage = () => { export default HomePage ``` -> What we're doing here is showing the sign in form if you aren't logged in and your account profile if you are. + + +What we're doing here is showing the sign in form if you aren't logged in and your account profile if you are. + + ### Launch! diff --git a/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx index 649a87dd98b..a8d81139f41 100644 --- a/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx +++ b/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx @@ -85,22 +85,27 @@ export const handle: Handle = async ({ event, resolve }) => { }) /** - * Unlike `supabase.auth.getSession`, which is unsafe on the server because it - * doesn't validate the JWT, this function validates the JWT by first calling - * `getUser` and aborts early if the JWT signature is invalid. + * Unlike `supabase.auth.getSession()`, which returns the session _without_ + * validating the JWT, this function also calls `getUser()` to validate the + * JWT before returning the session. */ event.locals.safeGetSession = async () => { + const { + data: { session }, + } = await event.locals.supabase.auth.getSession() + if (!session) { + return { session: null, user: null } + } + const { data: { user }, error, } = await event.locals.supabase.auth.getUser() if (error) { + // JWT validation has failed return { session: null, user: null } } - const { - data: { session }, - } = await event.locals.supabase.auth.getSession() return { session, user } } @@ -153,7 +158,11 @@ export const load = (async ({ locals: { safeGetSession } }) => { }) satisfies LayoutServerLoad ``` -> Start your dev server (`npm run dev`) in order to generate the `./$types` files we are referencing in our project. + + +Start your dev server (`npm run dev`) in order to generate the `./$types` files we are referencing in our project. + + Create a new `src/routes/+layout.ts` file to handle the session and the supabase object on the client-side. diff --git a/apps/docs/content/guides/platform/branching.mdx b/apps/docs/content/guides/platform/branching.mdx index a3f451240df..974c296a5a8 100644 --- a/apps/docs/content/guides/platform/branching.mdx +++ b/apps/docs/content/guides/platform/branching.mdx @@ -24,6 +24,14 @@ Supabase Branching works with Git. You can test changes in a separate, temporary You can run multiple Preview Branches for every Supabase project. Branches contain all the Supabase features with their own API credentials. Preview Environments pause automatically after 5 minutes of inactivity. + + +Due to Preview Branches running on Fly Postgres instances, some features like `pg-cron` are not fully supported. + +For a full list of limitations, see [Fly Postgres limitations](/docs/guides/platform/fly-postgres#limitations). + + +
{ - console.log('server', `${process.env.NEXT_PUBLIC_SUPABASE_URL}/rest`, url) return !url.startsWith(`${process.env.NEXT_PUBLIC_SUPABASE_URL}/rest`) }, }), diff --git a/apps/docs/content/guides/realtime/guides/client-side-throttling.mdx b/apps/docs/content/guides/realtime/guides/client-side-throttling.mdx deleted file mode 100644 index 3921c2aceea..00000000000 --- a/apps/docs/content/guides/realtime/guides/client-side-throttling.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -id: 'realtime' -title: 'Throttling messages' -description: 'Use client-side throttling to manage message frequency.' -subtitle: 'Use client-side throttling to manage message frequency.' ---- - -The Supabase clients include functionality for throttling messages. - -## Managing client-side throttling - -You can customize the client-side throttling when creating the client: - - - - -```js -import { createClient } from '@supabase/supabase-js' - -const SUPABASE_URL = 'https://.supabase.co' -const SUPABASE_ANON_KEY = '' - -const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, { - realtime: { - params: { - eventsPerSecond: 2, - }, - }, -}) -``` - - - - -```dart -import 'package:supabase_flutter/supabase_flutter.dart'; - -void main() async { - Supabase.initialize( - url: 'https://.supabase.co', - anonKey: '', - realtimeClientOptions: const RealtimeClientOptions( - eventsPerSecond: 2, - ), - ); - runApp(const MyApp()); -} - -final supabase = Supabase.instance.client; -``` - - - - -```kotlin -val supabase = createSupabaseClient( - "https://.supabase.co", - "" -) { - install(Realtime) { - eventsPerSecond = 2 - } -} -``` - - - - -## Default client throttling - -By default the Supabase clients throttles messages to 10 messages per-second (1 message every 100 milliseconds). This is a soft-limit provided as a safe-guard when you're getting started. You'll rarely need to send more messages than this. - -Each client has their own throttling behavior. If you instantiate two clients, by default you would send 20 messages per-second to your project. - -## Project quotas - -Each Broadcast and Presence message counts towards your [Project Quotas](/docs/guides/realtime/quotas). - -It's common to unintentionally flood the Realtime service with messages. For example, tracking mouse movements without throttling would send hundreds of events per second. It's rare that you need so many messages. Updating a mouse movement even a few times per second is usually enough for the human eye. - -The throttling parameter protects against these unintended floods. diff --git a/apps/docs/content/guides/storage/management/delete-objects.mdx b/apps/docs/content/guides/storage/management/delete-objects.mdx index 2c54eb2300f..fba9cfdd7e1 100644 --- a/apps/docs/content/guides/storage/management/delete-objects.mdx +++ b/apps/docs/content/guides/storage/management/delete-objects.mdx @@ -32,6 +32,6 @@ on storage.objects for delete TO authenticated USING ( - owner_id = (select auth.uid()) + owner = (select auth.uid()) ); ``` diff --git a/apps/docs/docs/ref/csharp/installing.mdx b/apps/docs/docs/ref/csharp/installing.mdx index 4709791a7ec..89fac0df7fa 100644 --- a/apps/docs/docs/ref/csharp/installing.mdx +++ b/apps/docs/docs/ref/csharp/installing.mdx @@ -10,7 +10,7 @@ custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supab - You can install Supabase package from [nuget.org](https://www.nuget.org/packages/supabase-csharp/) + You can install Supabase package from [nuget.org](https://www.nuget.org/packages/supabase/) @@ -25,7 +25,7 @@ custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supab ```sh Terminal - dotnet add package supabase-csharp + dotnet add package supabase ``` diff --git a/apps/docs/docs/ref/csharp/introduction.mdx b/apps/docs/docs/ref/csharp/introduction.mdx index 0a9549047bd..84c307600c9 100644 --- a/apps/docs/docs/ref/csharp/introduction.mdx +++ b/apps/docs/docs/ref/csharp/introduction.mdx @@ -16,7 +16,7 @@ hideTitle: true {/* prettier-ignore */}
- This reference documents every object and method available in Supabase's C# library, [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can use supabase-csharp to interact with your Postgres database, listen to database changes, invoke Deno Edge Functions, build login and user management functionality, and manage large files. + This reference documents every object and method available in Supabase's C# library, [supabase](https://www.nuget.org/packages/supabase). You can use `Supabase` to interact with your Postgres database, listen to database changes, invoke Deno Edge Functions, build login and user management functionality, and manage large files.
{/* prettier-ignore */} @@ -24,6 +24,6 @@ hideTitle: true The C# client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues. - Huge thanks to official maintainer, [Joseph Schultz](https://github.com/acupofjose), and to [Ben Randall](https://github.com/veleek) and [Rhuan Barros](https://github.com/rhuanbarros) for their help. + Huge thanks to official maintainer, [Joseph Schultz](https://github.com/acupofjose). As well as [Will Iverson](https://github.com/wiverson), [Ben Randall](https://github.com/veleek), and [Rhuan Barros](https://github.com/rhuanbarros) for their help.
diff --git a/apps/docs/docs/ref/csharp/release-notes.mdx b/apps/docs/docs/ref/csharp/release-notes.mdx index 291636cfb08..751fc13c424 100644 --- a/apps/docs/docs/ref/csharp/release-notes.mdx +++ b/apps/docs/docs/ref/csharp/release-notes.mdx @@ -3,372 +3,36 @@ id: release-notes title: Release Notes --- -## 0.11.0 - 2023-05-24 - -- Update dependency: postgrest-csharp@3.2.0 - - General codebase and QOL improvements. Exceptions are generally thrown through `PostgrestException` now instead - of `Exception`. A `FailureHint.Reason` is provided with failures if possible to parse. - - `AddDebugListener` is now available on the client to help with debugging - - Merges [#65](https://github.com/supabase-community/postgrest-csharp/pull/65) Cleanup + Add better exception handling - - Merges [#66](https://github.com/supabase-community/postgrest-csharp/pull/66) Local test Fixes - - Fixes [#67](https://github.com/supabase-community/postgrest-csharp/issues/67) Postgrest Reference attribute is - producing StackOverflow for circular references -- Update dependency: gotrue-csharp@4.0.2 - - [#58](https://github.com/supabase-community/gotrue-csharp/issues/58) - Add support for the `reauthentication` endpoint which allows for secure password changes. -- Update dependency: realtime-csharp@6.0.1 - - Updates publishing action for future packages, includes README and icon. - - Merges [#28](https://github.com/supabase-community/realtime-csharp/pull/28) and [#30](https://github.com/supabase-community/realtime-csharp/pull/30) - - The realtime client now takes a "fail-fast" approach. On establishing an initial connection, client will throw - a `RealtimeException` in `ConnectAsync()` if the socket server is unreachable. After an initial connection has been - established, the **client will continue attempting reconnections indefinitely until disconnected.** - - [Major, New] C# `EventHandlers` have been changed to `delegates`. This should allow for cleaner event data access over - the previous subclassed `EventArgs` setup. Events are scoped accordingly. For example, the `RealtimeSocket` error - handlers will receive events regarding socket connectivity; whereas the `RealtimeChannel` error handlers will receive - events according to `Channel` joining/leaving/etc. This is implemented with the following methods prefixed by ( - Add/Remove/Clear): - - `RealtimeBroadcast.AddBroadcastEventHandler` - - `RealtimePresence.AddPresenceEventHandler` - - `RealtimeSocket.AddStateChangedHandler` - - `RealtimeSocket.AddMessageReceivedHandler` - - `RealtimeSocket.AddHeartbeatHandler` - - `RealtimeSocket.AddErrorHandler` - - `RealtimeClient.AddDebugHandler` - - `RealtimeClient.AddStateChangedHandler` - - `RealtimeChannel.AddPostgresChangeHandler` - - `RealtimeChannel.AddMessageReceivedHandler` - - `RealtimeChannel.AddErrorHandler` - - `Push.AddMessageReceivedHandler` - - [Major, new] `ClientOptions.Logger` has been removed in favor of `Client.AddDebugHandler()` which allows for - implementing custom logging solutions if desired. - - A simple logger can be set up with the following: - ```c# - client.AddDebugHandler((sender, message, exception) => Debug.WriteLine(message)); - ``` - - [Major] `Connect()` has been marked `Obsolete` in favor of `ConnectAsync()` - - Custom reconnection logic has been removed in favor of using the built-in logic from `Websocket.Client@4.6.1`. - - Exceptions that are handled within this library have been marked as `RealtimeException`s. - - The local, docker-composed test suite has been brought back (as opposed to remotely testing on live supabase servers) - to test against. - - Comments have been added throughout the entire codebase and an `XML` file is now generated on build. - -## 0.10.0 - 2023-05-14 - -- Changes options to require `Supabase.SupabaseOptions.SessionPersistor` from using `ISupabaseSessionHandler` - to `IGotrueSessionPersistance` (these are now synchronous operations). -- Update dependency: gotrue-csharp@4.0.1 - - [#60](https://github.com/supabase-community/gotrue-csharp/pull/60) - Add interfaces, bug fixes, additional error - reason detection. Thanks [@wiverson](https://github.com/wiverson)! - - [#57](https://github.com/supabase-community/gotrue-csharp/pull/57) Refactor exceptions, code cleanup, and move to - delegate auth state changes - - Huge thank you to [@wiverson](https://github.com/wiverson) for his help on this refactor and release! - - Changes - - Exceptions have been simplified to a single `GotrueException`. A `Reason` field has been added - to `GotrueException` to clarify what happened. This should also be easier to manage as the Gotrue - server API & messages evolve. - - The session delegates for `Save`/`Load`/`Destroy` have been simplified to no longer require `async`. - - Console logging in a few places (most notable the background refresh thread) has been removed - in favor of a notification method. See `Client.AddDebugListener()` and the test cases for examples. - This will allow you to implement your own logging strategy (write to temp file, console, user visible - err console, etc). - - The client now more reliably emits AuthState changes. - - There is now a single source of truth for headers in the stateful Client - the `Options` headers. - - New feature: - - Added a `Settings` request to the stateless API only - you can now query the server instance to - determine if it's got the settings you need. This might allow for things like a visual - component in a tool to verify the GoTrue settings are working correctly, or tests that run differently - depending on the server configuration. - - Implementation notes: - - Test cases have been added to help ensure reliability of auth state change notifications - and persistence. - - Persistence is now managed via the same notifications as auth state change - -## 0.9.1 - 2023-04-28 - -- Update dependency: gotrue-csharp@3.1.1 - - Implements `SignInWithIdToken` for Apple/Google signing from LW7. A HUGE thank you - to [@wiverson](https://github.com/wiverson)! -- Update dependency: realtime-csharp@5.0.5 - - Re: [#27](https://github.com/supabase-community/realtime-csharp/issues/27) `PostgresChangesOptions` was not - setting `listenType` in constructor. Thanks [@Kuffs2205](https://github.com/Kuffs2205) -- Update dependency: supabase-storage-csharp@1.2.10 - - Re: [#7](https://github.com/supabase-community/storage-csharp/issues/7) Implements a `DownloadPublicFile` method. - -## 0.9.0 - 2023-04-12 - -- Update dependency: gotrue-csharp@3.1.0 - - - [Minor] Implements PKCE auth flow. SignIn using a provider now returns an instance of `ProviderAuthState` rather - than a `string`. - -- Update dependency: supabase-storage-csharp@1.2.9 - - Implements storage features from LW7: - - feat: custom file size limit and mime types at bucket - level [supabase/storage-js#151](https://github.com/supabase/storage-js/pull/151) file size and mime type - limits per bucket - - feat: quality option, image - transformation [supabase/storage-js#145](https://github.com/supabase/storage-js/pull/152) quality option for - image transformations - - feat: format option for webp - support [supabase/storage-js#142](https://github.com/supabase/storage-js/pull/142) format option for image - transformation - -## 0.8.8 - 2023-03-29 - -- Update dependency: gotrue-csharp@3.0.6 - - Supports adding `SignInOptions` (i.e. `RedirectTo`) on `OAuth Provider` SignIn requests. - -## 0.8.7 - 2023-03-23 - -- Update dependency: realtime-csharp@5.0.4 - - Re: [#26](https://github.com/supabase-community/realtime-csharp/pull/26) - Fixes Connect() not returning callback - result when the socket isn't null. Thanks [@BlueWaterCrystal](https://github.com/BlueWaterCrystal)! - -## 0.8.6 - 2023-03-23 - -- Update dependency: supabase-storage-csharp@1.2.8 - - [Merge #5](https://github.com/supabase-community/storage-csharp/pull/5) Added search string as an optional search - parameter. Thanks [@ElectroKnight22](https://github.com/ElectroKnight22)! - -## 0.8.5 - 2023-03-10 - -- Update dependency: realtime-csharp@5.0.3 - - Re: [#25](https://github.com/supabase-community/realtime-csharp/issues/25) - Support Channel being resubscribed - after having been unsubscribed, fixes rejoin timer being erroneously called on channel `Unsubscribe`. - Thanks [@Kuffs2205](https://github.com/Kuffs2205)! - -## 0.8.4 - 2023-03-03 - -- Update dependency: supabase-storage-csharp@1.2.7 - - Re: [#4](https://github.com/supabase-community/storage-csharp/issues/4) Implementation for `ClientOptions` which - supports specifying Upload, Download, and Request timeouts. -- Update dependency: realtime-csharp@5.0.2 - - Re: [#24](https://github.com/supabase-community/realtime-csharp/issues/24) - Fixes join failing until reconnect - happened + adds access token push on channel join. Big thank you to [@Honeyhead](https://github.com/honeyhead) for - the help debugging and identifying! - -## 0.8.3 - 2023-02-26 - -- Update dependency: supabase-storage-csharp@1.2.5 - - Provides fix - for [supabase-community/supabase-csharp#54](https://github.com/supabase-community/supabase-csharp/issues/54) - - Dynamic headers were always being overwritten by initialized token headers, so the storage client would not - receive user's access token as expected. - - Provides fix for upload progress not reporting - in [supabase-community/storage-csharp#3](https://github.com/supabase-community/storage-csharp/issues/3) -- Update dependency: gotrue-csharp@3.0.5 - - Fixes [#44](https://github.com/supabase-community/gotrue-csharp/issues/44) - refresh timer should automatically - reattempt (interval of 5s) for HTTP exceptions - gracefully exits on invalid refresh and triggers - an `AuthState.Changed` event - -## 0.8.2 - 2023-02-26 - -- Update dependency: supabase-storage-csharp@1.2.4 - - `UploadOrUpdate` now appropriately throws request exceptions - -## 0.8.1 - 2023-02-06 - -- Update dependency: realtime-csharp@5.0.1 - - Re: [#22](https://github.com/supabase-community/realtime-csharp/issues/22) - `SerializerSettings` were not being - passed to `PostgresChangesResponse` - Thanks [@Shenrak](https://github.com/Shenrak) for the help debugging! - -## 0.8.0 - 2023-01-31 - -- Update dependency: realtime-csharp@5.0.0 - - Re: [#21](https://github.com/supabase-community/realtime-csharp/pull/21) Provide API for `presence`, `broadcast` and `postgres_changes` - - [Major, New] `Channel.PostgresChanges` event will receive the wildcard `*` changes event, not `Channel.OnMessage`. - - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now conform to the server's payload of `Response.Payload.**Data**` - - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now return `PostgresChangesEventArgs` - - [Minor] Rename `Channel` to `RealtimeChannel` - - Supports better handling of disconnects in `RealtimeSocket` and adds a `Client.OnReconnect` event. - - [Minor] Moves `ChannelOptions` to `Channel.ChannelOptions` - - [Minor] Moves `ChannelStateChangedEventArgs` to `Channel.ChannelStateChangedEventArgs` - - [Minor] Moves `Push` to `Channel.Push` - - [Minor] Moves `Channel.ChannelState` to `Constants.ChannelState` - - [Minor] Moves `SocketResponse`, `SocketRequest`, `SocketResponsePayload`, `SocketResponseEventArgs`, and `SocketStateChangedEventArgs` to `Socket` namespace. - - [New] Adds `RealtimeBroadcast` - - [New] Adds `RealtimePresence` - - [Improvement] Better handling of disconnection/reconnection -- Update dependency: postgrest-csharp@3.1.3 - - Another fix for [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which further typechecks nullable values. - -## 0.7.2 - 2023-01-27 - -- Update dependency: gotrue-csharp@3.0.4 - - Makes `Session.CreatedAt` a publicly settable property, which should fix incorrect dates on retrieved `Session`s. -- Update dependency: postgrest-csharp@3.1.2 - - Fix [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which did not correctly parse Linq `Where` when encountering a nullable type. - - Add missing support for transforming for `== null` and `!= null` - -## 0.7.1 - 2023-01-17 - -- Update dependency: postgrest-csharp@3.1.1 - - Fix issue from supabase-community/supabase-csharp#48 where boolean model properties would not be evaluated in predicate expressions - -## 0.7.0 - 2023-01-16 - -- Update dependency: postgrest-csharp@3.1.0 - - [Minor] Breaking API Change: `PrimaryKey` attribute defaults to `shouldInsert: false` as most uses will have the Database generate the primary key. - - Merged [#60](https://github.com/supabase-community/postgrest-csharp/pull/60) which Added linq support for `Select`, `Where`, `OnConflict`, `Columns`, `Order`, `Update`, `Set`, and `Delete` - -## 0.6.2 - 2022-11-22 - -- Update dependency: postgrest-csharp@3.0.4 - - `GetHeaders` is now passed to `ModeledResponse` and `BaseModel` so that the default `Update` and `Delete` methods use the latest credentials - - `GetHeaders` is used in `Rpc` calls (re: [#39](https://github.com/supabase-community/supabase-csharp/issues/39)) - -## 0.6.1 - 2022-11-12 - -- [Hotfix] `GetHeaders` was not passing properly to `SupabaseTable` and `Gotrue.Api` - -## 0.6.0 - 2022-11-12 - -[BREAKING CHANGES] - -- `Client` is no longer a singleton, singleton interactions (if desired) are left to the developer to implement. -- `Client` supports injection of dependent clients after initialization via property: - - `Auth` - - `Functions` - - `Realtime` - - `Postgrest` - - `Storage` -- `SupabaseModel` contains no logic but remains for backwards compatibility. (Marked `Obsolete`) -- `ClientOptions.ShouldInitializeRealtime` was removed (no longer auto initialized) -- `ClientOptions` now references an `ISupabaseSessionHandler` which specifies expected functionality for session persistence on Gotrue (replaces `ClientOptions.SessionPersistor`, `ClientOptions.SessionRetriever`, and `ClientOptions.SessionDestroyer`). -- `supabase-csharp` and all child libraries now have support `nullity` - -Other Changes: - -- Update dependency: functions-csharp@1.2.1 -- Update dependency: gotrue-csharp@3.0.2 -- Update dependency: postgrest-csharp@3.0.2 -- Update dependency: realtime-csharp@4.0.1 -- Update dependency: supabase-storage-csharp@1.2.3 -- Update dependency: supabase-core@0.0.2 - -Big thank you to [@veleek](https://github.com/veleek) for his insight into these changes. - -Re: [#35](https://github.com/supabase-community/supabase-csharp/issues/35), [#34](https://github.com/supabase-community/supabase-csharp/issues/34), [#23](https://github.com/supabase-community/supabase-csharp/issues/23), [#36](https://github.com/supabase-community/supabase-csharp/pull/36) - -## 0.5.3 - 2022-10-11 - -- Update dependency: postgrest-csharp@2.1.0 - - [Minor] Breaking API change: Remove `BaseModel.PrimaryKeyValue` and `BaseModel.PrimaryKeyColumn` in favor of a `PrimaryKey` dictionary with support for composite keys. - - Re: [#48](https://github.com/supabase-community/postgrest-csharp/issues/48) - Add support for derived models on `ReferenceAttribute` - - Re: [#49](https://github.com/supabase-community/postgrest-csharp/issues/49) - Added `Match(T model)` - -## 0.5.2 - 2022-9-13 - -- Update dependency: postgrest-csharp@2.0.12 - - Merged [#47](https://github.com/supabase-community/postgrest-csharp/pull/49) which added cancellation token support to `Table` methods. Thanks [@devpikachu](https://github.com/devpikachu)! - -## 0.5.1 - 2022-8-1 - -- Update dependency: postgrest-csharp@2.0.11 -- Update dependency: supabase-storage-csharp@1.1.1 - -## 0.5.0 - 2022-7-17 - -- Update dependency: postgrest-csharp@2.0.9 -- Update dependency: realtime-csharp@3.0.1 -- Update dependency: supabase-storage-csharp@1.1.0 - - API Change [Breaking/Minor] Library no longer uses `WebClient` and instead leverages `HttpClient`. Progress events on `Upload` and `Download` are now handled with `EventHandler` instead of `WebClient` EventHandlers. - -## 0.4.4 - 2022-5-24 - -- Update dependency: gotrue-csharp@2.4.5 -- Update dependency: postgrest-csharp@2.0.8 - -## 0.4.3 - 2022-5-13 - -- Update dependency: gotrue-csharp@2.4.4 - -## 0.4.2 - 2022-4-30 - -- Update dependency: gotrue-csharp@2.4.3 - -## 0.4.1 - 2022-4-23 - -- Update dependency: gotrue-csharp@2.4.2 - -## 0.4.0 - 2022-4-12 - -- Add support for functions-csharp@1.0.1, giving access to invoking Supabase's edge functions. -- Update dependency: gotrue-csharp@2.4.1 - -## 0.3.5 - 2022-4-11 - -- Update dependency: postgres-csharp@2.0.7 - -## 0.3.4 - 2022-03-28 - -- Update dependency: gotrue-csharp@2.4.0 - -## 0.3.3 - 2022-02-27 - -- Update dependency: gotrue-csharp@2.3.6 -- Update dependency: supabase-storage-csharp@1.0.2 - -## 0.3.2 - 2022-02-18 - -- Update dependency: realtime-csharp@3.0.0 - - Exchange existing websocket client: [WebSocketSharp](https://github.com/sta/websocket-sharp) for [Marfusios/websocket-client](https://github.com/Marfusios/websocket-client) which adds support for Blazor WASM apps. - Ref: [#14](https://github.com/supabase-community/realtime-csharp/pull/14) - -## 0.3.1 - 2022-01-20 - -- Update dependency: gotrue-csharp@2.3.5 - - [#23](https://github.com/supabase-community/gotrue-csharp/pull/23) Added `redirect_url` option for MagicLink sign in (Thanks [@MisterJimson](https://github.com/MisterJimson)) - - [#21](https://github.com/supabase-community/gotrue-csharp/pull/21) Added SignOut method to Stateless Client (Thanks [@fplaras](https://github.com/fplaras)) - -## 0.3.0 - 2021-12-30 - -- Update dependency: postgrest-csharp@2.0.6 - - Add support for `NullValueHandling` to be specified on a `Column` Attribute and for it to be honored on Inserts and Updates. Defaults to: `NullValueHandling.Include`. - - Implements [#38](https://github.com/supabase-community/postgrest-csharp/issues/38) -- Update dependency: realtime-csharp@2.0.8 - - Implement Upstream Realtime RLS Error Broadcast Handler - - Implements [#12](https://github.com/supabase-community/realtime-csharp/issues/12) - - `SocketResponse` now exposes a method: `OldModel`, that hydrates the `OldRecord` property into a model. - -## 0.2.12 - 2021-12-29 - -- Update dependency: gotrue-csharp@2.3.3 - - `SignUp` will return a `Session` with a _populated `User` object_ on an unconfirmed signup. - - Fixes [#19](https://github.com/supabase-community/gotrue-csharp/issues/19) - - Developers who were using a `null` check on `Session.User` will need to adjust accordingly. -- Update dependency: postgrest-csharp@2.0.5 - - Fix for [#37](https://github.com/supabase-community/postgrest-csharp/issues/37) - Return Type `minimal` would fail to resolve because of incorrect `Accept` headers. Added header and test to verify for future. - - Fix for [#36](https://github.com/supabase-community/postgrest-csharp/issues/36) - Inserting/Upserting bulk records would fail while doing an unnecessary generic coercion. - -## 0.2.11 - 2021-12-24 - -- Update dependency: gotrue-csharp@2.3.2 (changes CreateUser parameters to conform to `AdminUserAttributes`) - - See [#15](https://github.com/supabase-community/supabase-csharp/issues/15) - - See [#16](https://github.com/supabase-community/supabase-csharp/issues/16) -- Update dependency: realtime-csharp@2.0.7 - - See [#13](https://github.com/supabase-community/supabase-csharp/issues/13) - -## 0.2.10 - 2021-12-23 - -- Update dependency: gotrue-csharp@2.3.0 (adds metadata support for user signup, see [#14](https://github.com/supabase/community/issues/14)) - -## 0.2.9 - 2021-12-9 - -- Separate Storage client from Supabase repo and into `storage-csharp`, `supabase-csharp` now references new repo. - -## 0.2.8 - 2021-12-4 - -- Update gotrue-csharp to 2.2.4 - - Adds support for `ListUsers` (paginate, sort, filter), `GetUserById`, `CreateUser`, and `UpdateById` - -## 0.2.7 - 2021-12-2 - -- Update gotrue-csharp to 2.2.3 - - Adds support for sending password resets to users. - -## 0.2.6 - 2021-11-29 - -- Support for [#12](https://github.com/supabase-community/supabase-csharp/issues/12) -- Update realtime-csharp to 2.0.6 -- Update gotrue-csharp to 2.2.2 -- Add `StatelessClient` re:[#7](https://github.com/supabase-community/supabase-csharp/issues/7) +## 1.0.0 - 2024-04-21 + +- Assembly Name has been changed to `Supabase.dll` +- Update dependency: `postgrest-csharp@5.0.0` + - [MAJOR] Moves namespaces from `Postgrest` to `Supabase.Postgrest` + - Re: [#135](https://github.com/supabase-community/supabase-csharp/issues/135) Update nuget package + name `postgrest-csharp` to `Supabase.Postgrest` +- Update dependency: `gotrue-csharp@5.0.0` + - Re: [#135](supabase-community/supabase-csharp#135) Update nuget package name `gotrue-csharp` to `Supabase.Gotrue` + - Re: [#89](https://github.com/supabase-community/gotrue-csharp/issues/89), Only add `access_token` to request body + when it is explicitly declared. + - [MINOR] Re: [#89](https://github.com/supabase-community/gotrue-csharp/issues/89) Update signature + for `SignInWithIdToken` which adds an optional `accessToken` parameter, update doc comments, and + call `DestroySession` in method + - Re: [#88](https://github.com/supabase-community/gotrue-csharp/issues/88), Add `IsAnonymous` property to `User` + - Re: [#90](https://github.com/supabase-community/gotrue-csharp/issues/90) Implement `LinkIdentity` + and `UnlinkIdentity` +- Update dependency: `realtime-csharp@7.0.0` + - Merges [#45](https://github.com/supabase-community/realtime-csharp/pull/45) - Updating + the `Websocket.Client@5.1.1` + - Re: [#135](https://github.com/supabase-community/supabase-csharp/issues/135) Update nuget package + name `realtime-csharp` to `Supabase.Realtime` +- Update dependency: `storage-csharp@2.0.0` + - Re: [#135](https://github.com/supabase-community/supabase-csharp/issues/135) Update nuget package + name `storage-csharp` to `Supabase.Storage` +- Update dependency: `functions-csharp@2.0.0` + - Re: [#135](https://github.com/supabase-community/supabase-csharp/issues/135) Update nuget package + name `functions-csharp` to `Supabase.Functions` +- Update dependency: `core-csharp@1.0.0` + - Re: [#135](https://github.com/supabase-community/supabase-csharp/issues/135) Update nuget package + name `supabase-core` + to `Supabase.Core` +- Adds comments to the remaining undocumented code. diff --git a/apps/docs/docs/ref/csharp/v0/installing.mdx b/apps/docs/docs/ref/csharp/v0/installing.mdx new file mode 100644 index 00000000000..4709791a7ec --- /dev/null +++ b/apps/docs/docs/ref/csharp/v0/installing.mdx @@ -0,0 +1,35 @@ +--- +id: installing +title: 'Installing & Initialization' +slug: installing +custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml +--- + +### Install from NuGet + + + + + You can install Supabase package from [nuget.org](https://www.nuget.org/packages/supabase-csharp/) + + + + + + + + + ```sh Terminal + dotnet add package supabase-csharp + ``` + + + + + + diff --git a/apps/docs/docs/ref/csharp/v0/introduction.mdx b/apps/docs/docs/ref/csharp/v0/introduction.mdx new file mode 100644 index 00000000000..1fed5441e0f --- /dev/null +++ b/apps/docs/docs/ref/csharp/v0/introduction.mdx @@ -0,0 +1,29 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
+ +
+

C# Client Library

+

+ @supabase-community/supabase-csharp +

+
+
+ +{/* prettier-ignore */} +
+ This reference documents every object and method available in Supabase's C# library, [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can use `Supabase` to interact with your Postgres database, listen to database changes, invoke Deno Edge Functions, build login and user management functionality, and manage large files. +
+ +{/* prettier-ignore */} +
+ + The C# client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues. + + Huge thanks to official maintainer, [Joseph Schultz](https://github.com/acupofjose). As well as [Will Iverson](https://github.com/wiverson), [Ben Randall](https://github.com/veleek), and [Rhuan Barros](https://github.com/rhuanbarros) for their help. + +
diff --git a/apps/docs/docs/ref/csharp/v0/release-notes.mdx b/apps/docs/docs/ref/csharp/v0/release-notes.mdx index 2ecb0ef3990..2ce380a99fc 100644 --- a/apps/docs/docs/ref/csharp/v0/release-notes.mdx +++ b/apps/docs/docs/ref/csharp/v0/release-notes.mdx @@ -3,4 +3,565 @@ id: release-notes title: Release Notes --- -## dart v0 this is the release notes file. +## 0.16.2 - 2024-04-02 + +- Update dependency: `gotrue-csharp@4.2.7` + - [#88](https://github.com/supabase-community/gotrue-csharp/issues/88) Implement `signInAnonymously` from the JS + client + - Include additional 3rd party providers in constants. + +## 0.16.1 - 2024-03-15 + +- Update dependency: `postgrest-csharp@3.5.1` + - Re: [#147](https://github.com/supabase-community/supabase-csharp/issues/147) - Supports `Rpc` specifying a generic + type for its return. + +## 0.16.0 - 2024-03-12 + +- Update dependency: `postgrest-csharp@3.5.0` + - Re: [#78](https://github.com/supabase-community/postgrest-csharp/issues/78), Generalize query filtering creation + in `Table` so that it matches new generic signatures. + - Move from `QueryFilter` parameters to a more generic `IPosgrestQueryFilter` to support constructing new + QueryFilters from a LINQ expression. + - Note: Lists of `QueryFilter`s will now need to be defined + as: `new List { new QueryFilter(), ... }` + - Adjust serialization of timestamps within a `QueryFilter` to support `DateTime` and `DateTimeOffset` using the + ISO-8601 (https://stackoverflow.com/a/115002) +- Update dependency: `functions-csharp@1.3.2` + - Re: [#5](https://github.com/supabase-community/functions-csharp/issues/5) Add support for specifying Http Timeout + on a function call by adding `HttpTimeout` to `InvokeFunctionOptions` + +## 0.15.0 - 2024-01-08 + +- Update Dependency: `gotrue-csharp@4.2.6` + - [#83](https://github.com/supabase-community/gotrue-csharp/pull/83) Replaces JWTDecoder package with + System.IdentityModel.Tokens.Jwt. Thanks [@FantasyTeddy](https://github.com/FantasyTeddy)! +- Update Dependency: `postgrest-csharp@3.4.1` + - Re: [#85](https://github.com/supabase-community/postgrest-csharp/issues/85) Fixes problem when using multiple + .Order() + methods by merging [#86](https://github.com/supabase-community/postgrest-csharp/pull/86). + Thanks [@hunsra](https://github.com/hunsra)! + - Re: [#81](https://github.com/supabase-community/postgrest-csharp/issues/81) + - [Minor] Removes `IgnoreOnInsert`and `IgnoreOnUpdate` from `ReferenceAttribute` as changing these properties + to `false` does not currently provide the expected functionality. + - Fixes `Insert` and `Update` not working on models that have `Reference` specified on a property with a + non-null + value. + +## 0.14.0 - 2023-12-15 + +- Update Dependency: `gotrue-csharp@4.2.5` + - [#82](https://github.com/supabase-community/gotrue-csharp/issues/81) - Implements #82 - Creates a `GenerateLink` + method on the `AdminClient` that supports `signup`, `invite`, `magiclink`, `recovery`, `email_change_new` + and `email_change_current` + - [#81](https://github.com/supabase-community/gotrue-csharp/issues/81) - Adds `InviteUserByEmailOptions` as a + parameter to the Gotrue Admin Client +- Update Dependency: `postgrest-csharp@3.3.0` + - Re: [#78](https://github.com/supabase-community/postgrest-csharp/issues/78) Updates signatures for `Not` + and `Filter` to include generic types for a better development experience. + - Updates internal generic type names to be more descriptive. + - Add support for LINQ predicates on `Table.Not()` signatures + +## 0.13.7 - 2023-11-13 + +- Update Dependency: `postgrest-csharp@3.2.10` + - Re: [#76](https://github.com/supabase-community/postgrest-csharp/issues/76) Removes the + incorrect `ToUniversalTime` conversion in the LINQ `Where` parser. + +## 0.13.6 - 2023-10-12 + +- Update Dependency: `gotrue-csharp@4.2.3` + - Re: [#80](https://github.com/supabase-community/gotrue-csharp/pull/80) Fixes `Session.Expires()` not being + calculated correctly. Thanks [@dayjay](https://github.com/Dayjay)! + +## 0.13.5 - 2023-10-09 + +- Update Dependency: `postgrest-csharp@3.2.9` + - Re: [supabase-csharp#115](https://github.com/supabase-community/supabase-csharp/discussions/115) Additional + support for a model referencing another model with multiple foreign keys. + - Re: [supabase-csharp#115](https://github.com/supabase-community/supabase-csharp/discussions/115) Adds support for + multiple references attached to the same model (foreign keys) on a single C# Model. + +## 0.13.4 - 2023-10-08 + +- Update Dependency: `gotrue-csharp@4.2.2` + - Re: [#78](https://github.com/supabase-community/gotrue-csharp/issues/78) - Implements PKCE flow support + for `ResetPasswordForEmail`. + +## 0.13.3 - 2023-09-15 + +- Re: [#107](https://github.com/supabase-community/supabase-csharp/issues/107) - removes Realtime socket being + disconnected on a User sign-out - only the subscriptions should be removed. + +## 0.13.2 - 2023-09-15 + +- Update dependency: `postgrest-csharp@3.2.7` + - Implements a `TableWithCache` for `Get` requests that can pull reactive Models from cache before making a remote + request. + - Re: [supabase-csharp#85](https://github.com/supabase-community/supabase-csharp/issues/85) Includes sourcelink + support. + - Re: [#75](https://github.com/supabase-community/postgrest-csharp/pull/75) Fix issue with marshalling of stored + procedure arguments. Big thank you to [@corrideat](https://github.com/corrideat)! + +## 0.13.1 - 2023-08-26 + +- Update dependency: `supabase-storage-csharp@1.4.0` + - Fixes [#11](https://github.com/supabase-community/storage-csharp/issues/11) - Which implements + missing `SupabaseStorageException` on failure status codes for `Upload`, `Download`, `Move`, `CreateSignedUrl` + and `CreateSignedUrls`. + +## 0.13.0 - 2023-08-26 + +- Update dependency: `gotrue-csharp@4.2.1` + - [#74](https://github.com/supabase-community/gotrue-csharp/pull/74) - Fixes bug where token refresh interval was + not honored by client. Thanks [@slater1](https://github.com/slater1)! + - **Minor Breaking changes:** [#72](https://github.com/supabase-community/gotrue-csharp/pull/72) - Fixes + Calling `SetAuth` does not actually set Authorization Headers for subsequent requests by implementing `SetSession` + - Removes `RefreshToken(string refreshToken)` and `SetAuth(string accessToken` in favor + of `SetSession(string accessToken, string refreshToken)` + - Makes `RefreshAccessToken` require `accessToken` and `refreshToken` as parameters - overrides the + authorization + headers to use the supplied token + - Migrates project internal times to use `DateTime.UtcNow` over `DateTime.Now`. + +## 0.12.2 - 2023-07-28 + +- Update dependency: `realtime-csharp@6.0.4` + - Fixes [#29](https://github.com/supabase-community/realtime-csharp/issues/29) Where the Realtime client could + disconnect from channels after a few hours and fail to reconnect by removing the case where the `IsSubscribe` flag + is flipped when encountering a channel error. +- Update dependency: `postgrest-csharp@3.2.5` + - Re: [supabase-community/supabase-csharp#81](https://github.com/supabase-community/supabase-csharp/discussions/81): + Clarifies `ReferenceAttribute` by changing `shouldFilterTopLevel` to `useInnerJoin` and adds an additional + constructor for `ReferenceAttribute` with a shortcut for specifying the `JoinType` + +## 0.12.1 - 2023-06-29 + +- Update dependency: `gotrue-csharp@4.1.1` + - [#68](https://github.com/supabase-community/gotrue-csharp/pull/68) Changes Network Status to use the interface + instead of client +- Update dependency: `postgrest-csharp@3.2.4` + - [#70](https://github.com/supabase-community/postgrest-csharp/pull/70) Minor Unity related fixes + +## 0.12.0 - 2023-06-25 + +- Update dependency: `gotrue-csharp@4.1.0` + - **Minor** [#66](https://github.com/supabase-community/gotrue-csharp/pull/66) - Separates out Admin JWT + functionality into a separate `AdminClient` + - [#67](https://github.com/supabase-community/gotrue-csharp/pull/67) - Adds shutdown method which terminates the + background refresh threads. + - Movement of much of the documentation for methods out of their classes and into their interfaces. + - Language features locked to C#9 +- Update dependency: `postgrest-csharp@3.2.3` + - [#69](https://github.com/supabase-community/postgrest-csharp/pull/69) Locks language version to C#9 + - [#68](https://github.com/supabase-community/postgrest-csharp/pull/68) Makes RPC parameters optional + +Thanks [@wiverson](https://github.com/wiverson) for the work in this release! + +## 0.11.1 - 2023-06-10 + +- Update dependencies: `functions-csharp@1.3.1`, `gotrue-csharp@4.0.4`, `postgrest-csharp@3.2.2`, + `realtime-csharp@6.0.3`, `supabase-storage-csharp@1.3.2`, `supabase-core@0.0.3` + - Namespaces assembly names to make them unique among other dependencies, i.e: `Core.dll` + becomes `Supabase.Core.dll` which will hopefully prevent future collisions. + +## 0.11.0 - 2023-05-24 + +- Update dependency: postgrest-csharp@3.2.0 + - General codebase and QOL improvements. Exceptions are generally thrown through `PostgrestException` now instead + of `Exception`. A `FailureHint.Reason` is provided with failures if possible to parse. + - `AddDebugListener` is now available on the client to help with debugging + - Merges [#65](https://github.com/supabase-community/postgrest-csharp/pull/65) Cleanup + Add better exception + handling + - Merges [#66](https://github.com/supabase-community/postgrest-csharp/pull/66) Local test Fixes + - Fixes [#67](https://github.com/supabase-community/postgrest-csharp/issues/67) Postgrest Reference attribute is + producing StackOverflow for circular references +- Update dependency: gotrue-csharp@4.0.2 + - [#58](https://github.com/supabase-community/gotrue-csharp/issues/58) - Add support for the `reauthentication` + endpoint which allows for secure password changes. +- Update dependency: realtime-csharp@6.0.1 + - Updates publishing action for future packages, includes README and icon. + - Merges [#28](https://github.com/supabase-community/realtime-csharp/pull/28) + and [#30](https://github.com/supabase-community/realtime-csharp/pull/30) + - The realtime client now takes a "fail-fast" approach. On establishing an initial connection, client will throw + a `RealtimeException` in `ConnectAsync()` if the socket server is unreachable. After an initial connection has + been + established, the **client will continue attempting reconnections indefinitely until disconnected.** + - [Major, New] C# `EventHandlers` have been changed to `delegates`. This should allow for cleaner event data access + over + the previous subclassed `EventArgs` setup. Events are scoped accordingly. For example, the `RealtimeSocket` error + handlers will receive events regarding socket connectivity; whereas the `RealtimeChannel` error handlers will + receive + events according to `Channel` joining/leaving/etc. This is implemented with the following methods prefixed by ( + Add/Remove/Clear): + - `RealtimeBroadcast.AddBroadcastEventHandler` + - `RealtimePresence.AddPresenceEventHandler` + - `RealtimeSocket.AddStateChangedHandler` + - `RealtimeSocket.AddMessageReceivedHandler` + - `RealtimeSocket.AddHeartbeatHandler` + - `RealtimeSocket.AddErrorHandler` + - `RealtimeClient.AddDebugHandler` + - `RealtimeClient.AddStateChangedHandler` + - `RealtimeChannel.AddPostgresChangeHandler` + - `RealtimeChannel.AddMessageReceivedHandler` + - `RealtimeChannel.AddErrorHandler` + - `Push.AddMessageReceivedHandler` + - [Major, new] `ClientOptions.Logger` has been removed in favor of `Client.AddDebugHandler()` which allows for + implementing custom logging solutions if desired. + - A simple logger can be set up with the following: + ```c# + client.AddDebugHandler((sender, message, exception) => Debug.WriteLine(message)); + ``` + - [Major] `Connect()` has been marked `Obsolete` in favor of `ConnectAsync()` + - Custom reconnection logic has been removed in favor of using the built-in logic from `Websocket.Client@4.6.1`. + - Exceptions that are handled within this library have been marked as `RealtimeException`s. + - The local, docker-composed test suite has been brought back (as opposed to remotely testing on live supabase + servers) + to test against. + - Comments have been added throughout the entire codebase and an `XML` file is now generated on build. + +## 0.10.0 - 2023-05-14 + +- Changes options to require `Supabase.SupabaseOptions.SessionPersistor` from using `ISupabaseSessionHandler` + to `IGotrueSessionPersistance` (these are now synchronous operations). +- Update dependency: gotrue-csharp@4.0.1 + - [#60](https://github.com/supabase-community/gotrue-csharp/pull/60) - Add interfaces, bug fixes, additional error + reason detection. Thanks [@wiverson](https://github.com/wiverson)! + - [#57](https://github.com/supabase-community/gotrue-csharp/pull/57) Refactor exceptions, code cleanup, and move to + delegate auth state changes + - Huge thank you to [@wiverson](https://github.com/wiverson) for his help on this refactor and release! + - Changes + - Exceptions have been simplified to a single `GotrueException`. A `Reason` field has been added + to `GotrueException` to clarify what happened. This should also be easier to manage as the Gotrue + server API & messages evolve. + - The session delegates for `Save`/`Load`/`Destroy` have been simplified to no longer require `async`. + - Console logging in a few places (most notable the background refresh thread) has been removed + in favor of a notification method. See `Client.AddDebugListener()` and the test cases for examples. + This will allow you to implement your own logging strategy (write to temp file, console, user visible + err console, etc). + - The client now more reliably emits AuthState changes. + - There is now a single source of truth for headers in the stateful Client - the `Options` headers. + - New feature: + - Added a `Settings` request to the stateless API only - you can now query the server instance to + determine if it's got the settings you need. This might allow for things like a visual + component in a tool to verify the GoTrue settings are working correctly, or tests that run differently + depending on the server configuration. + - Implementation notes: + - Test cases have been added to help ensure reliability of auth state change notifications + and persistence. + - Persistence is now managed via the same notifications as auth state change + +## 0.9.1 - 2023-04-28 + +- Update dependency: gotrue-csharp@3.1.1 + - Implements `SignInWithIdToken` for Apple/Google signing from LW7. A HUGE thank you + to [@wiverson](https://github.com/wiverson)! +- Update dependency: realtime-csharp@5.0.5 + - Re: [#27](https://github.com/supabase-community/realtime-csharp/issues/27) `PostgresChangesOptions` was not + setting `listenType` in constructor. Thanks [@Kuffs2205](https://github.com/Kuffs2205) +- Update dependency: supabase-storage-csharp@1.2.10 + - Re: [#7](https://github.com/supabase-community/storage-csharp/issues/7) Implements a `DownloadPublicFile` method. + +## 0.9.0 - 2023-04-12 + +- Update dependency: gotrue-csharp@3.1.0 + + - [Minor] Implements PKCE auth flow. SignIn using a provider now returns an instance of `ProviderAuthState` rather + than a `string`. + +- Update dependency: supabase-storage-csharp@1.2.9 + - Implements storage features from LW7: + - feat: custom file size limit and mime types at bucket + level [supabase/storage-js#151](https://github.com/supabase/storage-js/pull/151) file size and mime type + limits per bucket + - feat: quality option, image + transformation [supabase/storage-js#145](https://github.com/supabase/storage-js/pull/152) quality option for + image transformations + - feat: format option for webp + support [supabase/storage-js#142](https://github.com/supabase/storage-js/pull/142) format option for image + transformation + +## 0.8.8 - 2023-03-29 + +- Update dependency: gotrue-csharp@3.0.6 + - Supports adding `SignInOptions` (i.e. `RedirectTo`) on `OAuth Provider` SignIn requests. + +## 0.8.7 - 2023-03-23 + +- Update dependency: realtime-csharp@5.0.4 + - Re: [#26](https://github.com/supabase-community/realtime-csharp/pull/26) - Fixes Connect() not returning callback + result when the socket isn't null. Thanks [@BlueWaterCrystal](https://github.com/BlueWaterCrystal)! + +## 0.8.6 - 2023-03-23 + +- Update dependency: supabase-storage-csharp@1.2.8 + - [Merge #5](https://github.com/supabase-community/storage-csharp/pull/5) Added search string as an optional search + parameter. Thanks [@ElectroKnight22](https://github.com/ElectroKnight22)! + +## 0.8.5 - 2023-03-10 + +- Update dependency: realtime-csharp@5.0.3 + - Re: [#25](https://github.com/supabase-community/realtime-csharp/issues/25) - Support Channel being resubscribed + after having been unsubscribed, fixes rejoin timer being erroneously called on channel `Unsubscribe`. + Thanks [@Kuffs2205](https://github.com/Kuffs2205)! + +## 0.8.4 - 2023-03-03 + +- Update dependency: supabase-storage-csharp@1.2.7 + - Re: [#4](https://github.com/supabase-community/storage-csharp/issues/4) Implementation for `ClientOptions` which + supports specifying Upload, Download, and Request timeouts. +- Update dependency: realtime-csharp@5.0.2 + - Re: [#24](https://github.com/supabase-community/realtime-csharp/issues/24) - Fixes join failing until reconnect + happened + adds access token push on channel join. Big thank you to [@Honeyhead](https://github.com/honeyhead) for + the help debugging and identifying! + +## 0.8.3 - 2023-02-26 + +- Update dependency: supabase-storage-csharp@1.2.5 + - Provides fix + for [supabase-community/supabase-csharp#54](https://github.com/supabase-community/supabase-csharp/issues/54) - + Dynamic headers were always being overwritten by initialized token headers, so the storage client would not + receive user's access token as expected. + - Provides fix for upload progress not reporting + in [supabase-community/storage-csharp#3](https://github.com/supabase-community/storage-csharp/issues/3) +- Update dependency: gotrue-csharp@3.0.5 + - Fixes [#44](https://github.com/supabase-community/gotrue-csharp/issues/44) - refresh timer should automatically + reattempt (interval of 5s) for HTTP exceptions - gracefully exits on invalid refresh and triggers + an `AuthState.Changed` event + +## 0.8.2 - 2023-02-26 + +- Update dependency: supabase-storage-csharp@1.2.4 + - `UploadOrUpdate` now appropriately throws request exceptions + +## 0.8.1 - 2023-02-06 + +- Update dependency: realtime-csharp@5.0.1 + - Re: [#22](https://github.com/supabase-community/realtime-csharp/issues/22) - `SerializerSettings` were not being + passed to `PostgresChangesResponse` - Thanks [@Shenrak](https://github.com/Shenrak) for the help debugging! + +## 0.8.0 - 2023-01-31 + +- Update dependency: realtime-csharp@5.0.0 + - Re: [#21](https://github.com/supabase-community/realtime-csharp/pull/21) Provide API for `presence`, `broadcast` + and `postgres_changes` + - [Major, New] `Channel.PostgresChanges` event will receive the wildcard `*` changes event, + not `Channel.OnMessage`. + - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now conform to the server's payload + of `Response.Payload.**Data**` + - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now return `PostgresChangesEventArgs` + - [Minor] Rename `Channel` to `RealtimeChannel` + - Supports better handling of disconnects in `RealtimeSocket` and adds a `Client.OnReconnect` event. + - [Minor] Moves `ChannelOptions` to `Channel.ChannelOptions` + - [Minor] Moves `ChannelStateChangedEventArgs` to `Channel.ChannelStateChangedEventArgs` + - [Minor] Moves `Push` to `Channel.Push` + - [Minor] Moves `Channel.ChannelState` to `Constants.ChannelState` + - [Minor] Moves `SocketResponse`, `SocketRequest`, `SocketResponsePayload`, `SocketResponseEventArgs`, + and `SocketStateChangedEventArgs` to `Socket` namespace. + - [New] Adds `RealtimeBroadcast` + - [New] Adds `RealtimePresence` + - [Improvement] Better handling of disconnection/reconnection +- Update dependency: postgrest-csharp@3.1.3 + - Another fix for [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which futher typechecks + nullable values. + +## 0.7.2 - 2023-01-27 + +- Update dependency: gotrue-csharp@3.0.4 + - Makes `Session.CreatedAt` a publicly settable property, which should fix incorrect dates on retrieved `Session`s. +- Update dependency: postgrest-csharp@3.1.2 + - Fix [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which did not correctly parse + Linq `Where` when encountering a nullable type. + - Add missing support for transforming for `== null` and `!= null` + +## 0.7.1 - 2023-01-17 + +- Update dependency: postgrest-csharp@3.1.1 + - Fix issue from supabase-community/supabase-csharp#48 where boolean model properties would not be evaluated in + predicate expressions + +## 0.7.0 - 2023-01-16 + +- Update dependency: postgrest-csharp@3.1.0 + - [Minor] Breaking API Change: `PrimaryKey` attribute defaults to `shouldInsert: false` as most uses will have the + Database generate the primary key. + - Merged [#60](https://github.com/supabase-community/postgrest-csharp/pull/60) which Added linq support + for `Select`, `Where`, `OnConflict`, `Columns`, `Order`, `Update`, `Set`, and `Delete` + +## 0.6.2 - 2022-11-22 + +- Update dependency: postgrest-csharp@3.0.4 + - `GetHeaders` is now passed to `ModeledResponse` and `BaseModel` so that the default `Update` and `Delete` methods + use the latest credentials + - `GetHeaders` is used in `Rpc` calls (re: [#39](https://github.com/supabase-community/supabase-csharp/issues/39)) + +## 0.6.1 - 2022-11-12 + +- [Hotfix] `GetHeaders` was not passing properly to `SupabaseTable` and `Gotrue.Api` + +## 0.6.0 - 2022-11-12 + +[BREAKING CHANGES] + +- `Client` is no longer a singleton, singleton interactions (if desired) are left to the developer to implement. +- `Client` supports injection of dependent clients after initialization via property: + - `Auth` + - `Functions` + - `Realtime` + - `Postgrest` + - `Storage` +- `SupabaseModel` contains no logic but remains for backwards compatibility. (Marked `Obsolete`) +- `ClientOptions.ShouldInitializeRealtime` was removed (no longer auto initialized) +- `ClientOptions` now references an `ISupabaseSessionHandler` which specifies expected functionality for session + persistence on Gotrue (replaces `ClientOptions.SessionPersistor`, `ClientOptions.SessionRetriever`, + and `ClientOptions.SessionDestroyer`). +- `supabase-csharp` and all child libraries now have support `nullity` + +Other Changes: + +- Update dependency: functions-csharp@1.2.1 +- Update dependency: gotrue-csharp@3.0.2 +- Update dependency: postgrest-csharp@3.0.2 +- Update dependency: realtime-csharp@4.0.1 +- Update dependency: supabase-storage-csharp@1.2.3 +- Update dependency: supabase-core@0.0.2 + +Big thank you to [@veleek](https://github.com/veleek) for his insight into these changes. + +Re: [#35](https://github.com/supabase-community/supabase-csharp/issues/35), [#34](https://github.com/supabase-community/supabase-csharp/issues/34), [#23](https://github.com/supabase-community/supabase-csharp/issues/23), [#36](https://github.com/supabase-community/supabase-csharp/pull/36) + +## 0.5.3 - 2022-10-11 + +- Update dependency: postgrest-csharp@2.1.0 + - [Minor] Breaking API change: Remove `BaseModel.PrimaryKeyValue` and `BaseModel.PrimaryKeyColumn` in favor of + a `PrimaryKey` dictionary with support for composite keys. + - Re: [#48](https://github.com/supabase-community/postgrest-csharp/issues/48) - Add support for derived models + on `ReferenceAttribute` + - Re: [#49](https://github.com/supabase-community/postgrest-csharp/issues/49) - Added `Match(T model)` + +## 0.5.2 - 2022-9-13 + +- Update dependency: postgrest-csharp@2.0.12 + - Merged [#47](https://github.com/supabase-community/postgrest-csharp/pull/49) which added cancellation token + support to `Table` methods. Thanks [@devpikachu](https://github.com/devpikachu)! + +## 0.5.1 - 2022-8-1 + +- Update dependency: postgrest-csharp@2.0.11 +- Update dependency: supabase-storage-csharp@1.1.1 + +## 0.5.0 - 2022-7-17 + +- Update dependency: postgrest-csharp@2.0.9 +- Update dependency: realtime-csharp@3.0.1 +- Update dependency: supabase-storage-csharp@1.1.0 + - API Change [Breaking/Minor] Library no longer uses `WebClient` and instead leverages `HttpClient`. Progress events + on `Upload` and `Download` are now handled with `EventHandler` instead of `WebClient` EventHandlers. + +## 0.4.4 - 2022-5-24 + +- Update dependency: gotrue-csharp@2.4.5 +- Update dependency: postgrest-csharp@2.0.8 + +## 0.4.3 - 2022-5-13 + +- Update dependency: gotrue-csharp@2.4.4 + +## 0.4.2 - 2022-4-30 + +- Update dependency: gotrue-csharp@2.4.3 + +## 0.4.1 - 2022-4-23 + +- Update dependency: gotrue-csharp@2.4.2 + +## 0.4.0 - 2022-4-12 + +- Add support for functions-csharp@1.0.1, giving access to invoking Supabase's edge functions. +- Update dependency: gotrue-csharp@2.4.1 + +## 0.3.5 - 2022-4-11 + +- Update dependency: postgres-csharp@2.0.7 + +## 0.3.4 - 2022-03-28 + +- Update dependency: gotrue-csharp@2.4.0 + +## 0.3.3 - 2022-02-27 + +- Update dependency: gotrue-csharp@2.3.6 +- Update dependency: supabase-storage-csharp@1.0.2 + +## 0.3.2 - 2022-02-18 + +- Update dependency: realtime-csharp@3.0.0 + - Exchange existing websocket client: [WebSocketSharp](https://github.com/sta/websocket-sharp) + for [Marfusios/websocket-client](https://github.com/Marfusios/websocket-client) which adds support for Blazor WASM + apps. + Ref: [#14](https://github.com/supabase-community/realtime-csharp/pull/14) + +## 0.3.1 - 2022-01-20 + +- Update dependency: gotrue-csharp@2.3.5 + - [#23](https://github.com/supabase-community/gotrue-csharp/pull/23) Added `redirect_url` option for MagicLink sign + in (Thanks [@MisterJimson](https://github.com/MisterJimson)) + - [#21](https://github.com/supabase-community/gotrue-csharp/pull/21) Added SignOut method to Stateless Client ( + Thanks [@fplaras](https://github.com/fplaras)) + +## 0.3.0 - 2021-12-30 + +- Update dependency: postgrest-csharp@2.0.6 + - Add support for `NullValueHandling` to be specified on a `Column` Attribute and for it to be honored on Inserts + and Updates. Defaults to: `NullValueHandling.Include`. + - Implements [#38](https://github.com/supabase-community/postgrest-csharp/issues/38) +- Update dependency: realtime-csharp@2.0.8 + - Implement Upstream Realtime RLS Error Broadcast Handler + - Implements [#12](https://github.com/supabase-community/realtime-csharp/issues/12) + - `SocketResponse` now exposes a method: `OldModel`, that hydrates the `OldRecord` property into a model. + +## 0.2.12 - 2021-12-29 + +- Update dependency: gotrue-csharp@2.3.3 + - `SignUp` will return a `Session` with a _populated `User` object_ on an unconfirmed signup. + - Fixes [#19](https://github.com/supabase-community/gotrue-csharp/issues/19) + - Developers who were using a `null` check on `Session.User` will need to adjust accordingly. +- Update dependency: postgrest-csharp@2.0.5 + - Fix for [#37](https://github.com/supabase-community/postgrest-csharp/issues/37) - Return Type `minimal` would fail + to resolve because of incorrect `Accept` headers. Added header and test to verify for future. + - Fix for [#36](https://github.com/supabase-community/postgrest-csharp/issues/36) - Inserting/Upserting bulk records + would fail while doing an unnecessary generic coercion. + +## 0.2.11 - 2021-12-24 + +- Update dependency: gotrue-csharp@2.3.2 (changes CreateUser parameters to conform to `AdminUserAttributes`) + - See [#15](https://github.com/supabase-community/supabase-csharp/issues/15) + - See [#16](https://github.com/supabase-community/supabase-csharp/issues/16) +- Update dependency: realtime-csharp@2.0.7 + - See [#13](https://github.com/supabase-community/supabase-csharp/issues/13) + +## 0.2.10 - 2021-12-23 + +- Update dependency: gotrue-csharp@2.3.0 (adds metadata support for user signup, + see [#14](https://github.com/supabase/community/issues/14)) + +## 0.2.9 - 2021-12-9 + +- Separate Storage client from Supabase repo and into `storage-csharp`, `supabase-csharp` now references new repo. + +## 0.2.8 - 2021-12-4 + +- Update gotrue-csharp to 2.2.4 + - Adds support for `ListUsers` (paginate, sort, filter), `GetUserById`, `CreateUser`, and `UpdateById` + +## 0.2.7 - 2021-12-2 + +- Update gotrue-csharp to 2.2.3 + - Adds support for sending password resets to users. + +## 0.2.6 - 2021-11-29 + +- Support for [#12](https://github.com/supabase-community/supabase-csharp/issues/12) +- Update realtime-csharp to 2.0.6 +- Update gotrue-csharp to 2.2.2 +- Add `StatelessClient` re:[#7](https://github.com/supabase-community/supabase-csharp/issues/7) diff --git a/apps/docs/docs/ref/javascript/installing.mdx b/apps/docs/docs/ref/javascript/installing.mdx index dfb86377c64..eb133446abf 100644 --- a/apps/docs/docs/ref/javascript/installing.mdx +++ b/apps/docs/docs/ref/javascript/installing.mdx @@ -36,6 +36,13 @@ custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supab ``` + + + ```sh Terminal + pnpm add @supabase/supabase-js + ``` + + diff --git a/apps/docs/layouts/MainSkeleton.tsx b/apps/docs/layouts/MainSkeleton.tsx index ed0fef5cc36..8fc3608bfda 100644 --- a/apps/docs/layouts/MainSkeleton.tsx +++ b/apps/docs/layouts/MainSkeleton.tsx @@ -96,6 +96,10 @@ const levelsData = { icon: 'reference-csharp', name: 'C# Reference v0.0', }, + reference_csharp_v1: { + icon: 'reference-csharp', + name: 'C# Reference v1.0', + }, reference_python_v2: { icon: 'reference-python', name: 'Python Reference v2.0', diff --git a/apps/docs/lib/fetch/feedback.ts b/apps/docs/lib/fetch/feedback.ts index 6bbb4bbd0d0..670780b7c7c 100644 --- a/apps/docs/lib/fetch/feedback.ts +++ b/apps/docs/lib/fetch/feedback.ts @@ -8,15 +8,23 @@ type SendFeedbackVariables = { message: string isHelpful: boolean pathname?: string + team?: string } -export async function sendFeedback({ message, pathname, title, isHelpful }: SendFeedbackVariables) { +export async function sendFeedback({ + message, + pathname, + title, + isHelpful, + team, +}: SendFeedbackVariables) { const { data, error } = await post('/platform/feedback/docs', { body: { page: pathname, isHelpful, title, feedback: message, + team, }, }) if (error) throw Error(`Couldn't send feedback`, { cause: error }) diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs index 08e4943e944..762c631aaec 100644 --- a/apps/docs/next.config.mjs +++ b/apps/docs/next.config.mjs @@ -68,6 +68,7 @@ const nextConfig = { 'mdx-mermaid', 'dayjs', 'shared-data', + 'api-types', 'icons', ], async headers() { diff --git a/apps/docs/package.json b/apps/docs/package.json index 5b6df117e78..040647e3dcb 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -7,7 +7,6 @@ "dev:secrets:pull": "AWS_PROFILE=supabase-dev node ../../scripts/getSecrets.js -n local/docs", "build": "next build", "build:analyze": "ANALYZE=true next build", - "codegen": "openapi-typescript http://localhost:8080/api-json -o types/api.d.ts && prettier --write types/api.d.ts", "start": "next start", "lint": "next lint", "typecheck": "tsc --noEmit", @@ -96,9 +95,9 @@ "jest-environment-jsdom": "^29.7.0", "npm-run-all": "^4.1.5", "openapi-types": "^12.1.3", - "openapi-typescript": "^6.7.4", "tsconfig": "*", "tsx": "^4.6.2", - "typescript": "^5.4.3" + "typescript": "^5.4.3", + "api-types": "*" } } diff --git a/apps/docs/pages/reference/csharp/[...slug].tsx b/apps/docs/pages/reference/csharp/[...slug].tsx index 77dba701704..6bc8b054195 100644 --- a/apps/docs/pages/reference/csharp/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/[...slug].tsx @@ -1,5 +1,5 @@ import clientLibsCommonSections from '~/spec/common-client-libs-sections.json' -import spec from '~/spec/supabase_csharp_v0.yml' assert { type: 'yml' } +import spec from '~/spec/supabase_csharp_v1.yml' assert { type: 'yml' } import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' @@ -12,7 +12,7 @@ const libraryPath = '/csharp' export default function CSharpReference(props) { return ( diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml deleted file mode 100644 index e897a0e9bc5..00000000000 --- a/apps/docs/public/sitemap.xml +++ /dev/null @@ -1,5570 +0,0 @@ - - - - https://supabase.com/docs/faq - weekly - 0.5 - - - - https://supabase.com/docs/index - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai - weekly - 0.5 - - - - https://supabase.com/docs/guides/api - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage - weekly - 0.5 - - - - https://supabase.com/docs/handbook/contributing - weekly - 0.5 - - - - https://supabase.com/docs/handbook/introduction - weekly - 0.5 - - - - https://supabase.com/docs/reference/index - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/choosing-compute-addon - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/concepts - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/engineering-for-scale - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/going-to-prod - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/google-colab - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/hugging-face - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/langchain - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/python-clients - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/rag-with-permissions - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/structured-unstructured - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/vecs-python-client - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/vector-columns - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/vector-indexes - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/api-keys - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/creating-routes - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/data-apis - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/securing-your-api - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/using-custom-schemas - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-captcha - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-email-templates - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-email - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-hooks - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-identity-linking - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-mfa - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-password-reset - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-smtp - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-user-management - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/enterprise-sso - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/managing-user-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/native-mobile-deep-linking - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/native-mobile-login - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/passwordless-login - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/passwords - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/row-level-security - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side-rendering - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/sessions - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/arrays - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/connecting-to-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/debugging-performance - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/full-text-search - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/functions - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/import-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/inspect - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/joins-and-nesting - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/json - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/managing-passwords - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/managing-timezones - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/overview - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/partitions - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/query-optimization - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/replication - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/secure-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/sql-to-api - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/tables - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/testing - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/vault - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/webhooks - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/cicd-workflow - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/connect-to-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/cors - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/dart-edge - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/debugging - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/deploy - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/import-maps - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/kysely-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/local-development - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/regional-invocation - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/schedule-functions - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/secrets - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/storage-caching - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/unit-test - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/architecture - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/features - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/customizing-email-templates - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/getting-started - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/local-development - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/managing-config - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/managing-environments - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/seeding-your-database - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/testing-and-linting - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/access-control - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/backups - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/branching - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/compute-add-ons - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/custom-domains - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/custom-postgres-config - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/database-size - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/enterprise-billing - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/exhaust-cpu - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/exhaust-disk-io - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/exhaust-ram - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/fly-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/going-into-prod - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/http-status-codes - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/logs - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/marketplace - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/maturity-model - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/metrics - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/migrating-and-upgrading-projects - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/multi-factor-authentication - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/network-restrictions - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/org-based-billing - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/performance - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/permissions - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/project-transfer - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/read-replicas - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/shared-responsibility-model - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/spend-cap - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/ssl-enforcement - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/troubleshooting - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/architecture - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/bring-your-own-database - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/broadcast - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/concepts - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/postgres-changes - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/presence - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/protocol - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/quotas - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/realtime-with-nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/subscribing-to-database-changes - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/examples - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/glossary - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/docker - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-deep-dive-jwts - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-google-oauth - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-gotrue - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-policies - weekly - 0.5 - - - - https://supabase.com/docs/learn/auth-deep-dive/auth-row-level-security - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/building-chatgpt-plugins - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/headless-vector-search - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/huggingface-image-captioning - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/image-search-openai-clip - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/nextjs-vector-search - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/examples/openai - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/integrations/llamaindex - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/integrations/roboflow - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/quickstarts/face-similarity - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/quickstarts/generate-text-embeddings - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/quickstarts/hello-world - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/quickstarts/text-deduplication - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/vector-indexes/hnsw-indexes - weekly - 0.5 - - - - https://supabase.com/docs/guides/ai/vector-indexes/ivf-indexes - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/rest/auto-generated-docs - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/rest/client-libs - weekly - 0.5 - - - - https://supabase.com/docs/guides/api/rest/generating-types - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/concepts/redirect-urls - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login/messagebird - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login/twilio - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/phone-login/vonage - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/quickstarts/nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/quickstarts/react-native - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/quickstarts/react - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side/creating-a-client - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side/email-based-auth-with-pkce-flow-for-ssr - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side/migrating-to-ssr-from-auth-helpers - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side/oauth-with-pkce-flow-for-ssr - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/server-side/overview - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-apple - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-azure - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-bitbucket - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-discord - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-facebook - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-figma - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-github - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-gitlab - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-google - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-kakao - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-keycloak - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-linkedin - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-notion - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-slack - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-spotify - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-twitch - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-twitter - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-workos - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/social-login/auth-zoom - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/sso/auth-sso-saml - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/auth-ui - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/flutter-auth-ui - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/nextjs-pages - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/remix - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/auth-helpers/sveltekit - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/cascade-deletes - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/configuration - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/dropping-all-tables-in-schema - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/enums - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/first-row-in-group - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/indexes - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/roles - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/row-level-security - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/triggers - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/postgres/which-version-of-postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/http - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/hypopg - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/index_advisor - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg-safeupdate - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_cron - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_graphql - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_hashids - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_jsonschema - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_net - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_plan_filter - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_stat_monitor - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pg_stat_statements - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgaudit - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgjwt - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgroonga - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgrouting - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgsodium - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgtap - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/pgvector - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/plpgsql_check - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/plv8 - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/postgis - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/rum - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/timescaledb - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/uuid-ossp - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/flutter - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/kotlin - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/nuxtjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/reactjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/redwoodjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/refine - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/solidjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/sveltekit - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/quickstarts/vue - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/cloudflare-turnstile - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/discord-bot - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/github-actions - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/og-image - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/push-notifications - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/rate-limiting - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/screenshots - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/send-emails - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/slack-bot-mention - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/stripe-webhooks - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/telegram-bot - weekly - 0.5 - - - - https://supabase.com/docs/guides/functions/examples/upstash-redis - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-angular - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-expo-react-native - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-flutter - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-angular - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-react - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-vue - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-kotlin - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-nextjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-nuxt-3 - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-react - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-redwoodjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-refine - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-solidjs - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-svelte - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-sveltekit - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-swift - weekly - 0.5 - - - - https://supabase.com/docs/guides/getting-started/tutorials/with-vue-3 - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/oauth-apps/build-a-supabase-integration - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/oauth-apps/oauth-scopes - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/azure - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/gsuite - weekly - 0.5 - - - - https://supabase.com/docs/guides/platform/sso/okta - weekly - 0.5 - - - - https://supabase.com/docs/guides/realtime/guides/client-side-throttling - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/amazon-rds - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-storage - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/firestore-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/heroku - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/mssql - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/mysql - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/postgres - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase/render - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/analytics/config - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/auth/config - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/realtime/config - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/passwordless-login/auth-email-otp - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/passwordless-login/auth-magic-link - weekly - 0.5 - - - - https://supabase.com/docs/guides/self-hosting/storage/config - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/buckets/creating-buckets - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/buckets/fundamentals - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/cdn/fundamentals - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/cdn/metrics - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/cdn/smart-cdn - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/debugging/error-codes - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/debugging/logs - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/production/scaling - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/schema/design - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/schema/helper-functions - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/security/access-control - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/serving/downloads - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/serving/image-transformations - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/uploads/file-limits - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/uploads/resumable-uploads - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/uploads/standard-uploads - weekly - 0.5 - - - - https://supabase.com/docs/guides/database/extensions/wrappers/overview - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithidtoken - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signinwithsso - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-getuseridentities - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-linkidentity - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-unlinkidentity - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-reauthentication - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-resend - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-exchangecodeforsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-enroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-challenge - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-verify - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-challengeandverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-unenroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-mfa-getauthenticatorassurancelevel - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/admin-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-getuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-listusers - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-createuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-deleteuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-inviteuserbyemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-resetpasswordforemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-generatelink - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-updateuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-mfa-listfactors - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/auth-admin-mfa-deletefactor - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/containedby - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangegt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangegte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangelt - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangelte - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/rangeadjacent - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/overlaps - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-modifiers-select - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-abortsignal - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/maybesingle - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-csv - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/db-returns - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/explain - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/broadcastmessage - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/removeallchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-copy - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-createsignedurls - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-createsigneduploadurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-uploadtosignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/javascript/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signinwithidtoken - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-reauthentication - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-resend - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/undefined - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-mfa-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-mfa-enroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-mfa-challenge - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-mfa-verify - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-mfa-challengeandverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-mfa-unenroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-mfa-getauthenticatorassurancelevel - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/admin-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-admin-getuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-admin-listusers - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-admin-createuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-admin-deleteuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-admin-inviteuserbyemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-admin-generatelink - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/auth-admin-updateuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/removeallchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/stream - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/containedby - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangelt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangegt - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangegte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangelte - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/rangeadjacent - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/overlaps - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/dart/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/containedby - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/maybesingle - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/python/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/undefined - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/undefined - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/containedby - weekly - 0.5 - - - - https://supabase.com/docs/reference/csharp/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signinwithidtoken - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-exchangecodeforsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-mfa-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-mfa-enroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-mfa-challenge - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-mfa-verify - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-mfa-challengeandverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-mfa-unenroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-mfa-getauthenticatorassurancelevel - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/auth-admin-mfa-listfactors - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/match - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/db-modifiers-select - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/db-csv - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/broadcastmessage - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/removeallchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-copy - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/swift/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/initializing - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/select - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/insert - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/update - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/upsert - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rpc - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/using-filters - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/or - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/not - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/eq - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/neq - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/gt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/gte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/lt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/lte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/like - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/ilike - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/is - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/in - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/contains - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangelt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangegt - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangegte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangelte - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/rangeadjacent - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/overlaps - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/textsearch - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/filter - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/using-modifiers - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/db-modifiers-select - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/order - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/limit - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/range - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/single - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/db-csv - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/explain - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signup - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithpassword - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithoauth - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signinwithsso - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-signout - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-verifyotp - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-reauthentication - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-resend - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-getsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-getuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-updateuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-getuseridentities - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-linkidentity - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-unlinkidentity - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-setsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-refreshsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-onauthstatechange - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-resetpasswordforemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-exchangecodeforsession - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-enroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-challenge - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-verify - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-challengeandverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-unenroll - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-mfa-getauthenticatorassurancelevel - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/admin-api - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-getuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-listusers - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-createuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-deleteuser - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-inviteuserbyemail - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-generatelink - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-updateuserbyid - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-mfa-listfactors - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/auth-admin-mfa-deletefactor - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/functions-invoke - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/subscribe - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/removechannel - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/removeallchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/getchannels - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-listbuckets - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-getbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-createbucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-updatebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-emptybucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-deletebucket - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-upload - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-move - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-copy - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-createsignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-createsignedurls - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-createsigneduploadurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-uploadtosignedurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-getpublicurl - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/kotlin/storage-from-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-check-availability - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-vanity-subdomains-activate - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-test - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-test-new - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-test-db - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-storage - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-storage-mv - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-storage-ls - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-storage-cp - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-stop - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-status - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-start - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-show - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-info - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-sso-add - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-ssl-enforcement - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-ssl-enforcement-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-ssl-enforcement-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-snippets - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-snippets-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-snippets-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-services - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets-unset - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets-set - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-secrets-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects-create - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-projects-api-keys - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-ssl-enforcement - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-postgres-config-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-postgres-config-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-orgs - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-orgs-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-orgs-create - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-restrictions - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-restrictions-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-restrictions-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-bans - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-bans-remove - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-network-bans-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-up - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-squash - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-repair - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-new - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-migration-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-login - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-link - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-vacuum-stats - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-unused-indexes - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-total-table-sizes - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-total-index-size - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-table-sizes - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-table-record-counts - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-table-index-sizes - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-seq-scans - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-role-connections - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-replication-slots - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-outliers - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-long-running-queries - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-locks - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-index-usage - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-index-sizes - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-calls - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-cache-hit - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-blocking - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-inspect-db-bloat - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-init - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen-types - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen-types-typescript - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-gen-keys - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-serve - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-new - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-download - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-deploy - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-functions-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-encryption - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-encryption-update-root-key - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-encryption-get-root-key - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-reverify - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-create - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-domains-activate - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-start - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-reset - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-push - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-pull - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-lint - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-dump - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-db-diff - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-zsh - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-powershell - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-fish - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-completion-bash - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-branches - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-branches-update - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-branches-list - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-branches-get - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-branches-disable - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-branches-delete - weekly - 0.5 - - - - https://supabase.com/docs/reference/cli/supabase-branches-create - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/introduction - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-projects - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/create-a-project - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-organizations - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/create-an-organization - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/bulk-create-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/bulk-delete-secrets - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/generate-typescript-types - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/create-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/list-all-functions - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/retrieve-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/update-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/delete-a-function - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/retrieve-a-function-body - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-custom-hostname-config - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/deletes-a-projects-custom-hostname-configuration - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/updates-projects-custom-hostname-configuration - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/attempts-to-verify-the-dns-configuration-for-projects-custom-hostname-configuration - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/activates-a-custom-hostname-for-a-project - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-pgsodium-config - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/updates-projects-pgsodium-config-updating-the-root_key-can-cause-all-data-encrypted-with-the-older-key-to-become-inaccessible - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-network-bans - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/remove-network-bans - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/gets-projects-network-restrictions - weekly - 0.5 - - - - https://supabase.com/docs/reference/api/updates-projects-network-restrictions - weekly - 0.5 - - diff --git a/apps/docs/scripts/orphans/detect-orphan-mdx.ts b/apps/docs/scripts/orphans/detect-orphan-mdx.ts new file mode 100644 index 00000000000..9eb5c3a00bb --- /dev/null +++ b/apps/docs/scripts/orphans/detect-orphan-mdx.ts @@ -0,0 +1,96 @@ +import { readdir } from 'node:fs/promises' +import { extname, join } from 'node:path' +import { + HOMEPAGE_MENU_ITEMS, + gettingstarted, + cli, + auth, + database, + api, + graphql, + functions, + realtime, + storage, + ai, + supabase_cli, + platform, + resources, + self_hosting, + migrate, +} from '../../components/Navigation/NavigationMenu/NavigationMenu.constants' + +const DOCS_ROOT_DIR = join(__dirname, '..', '..') +const DEFAULT_DOCS_CONTENT_DIR = join(DOCS_ROOT_DIR, 'content') + +const DOCS_CONTENT_DIR = process.env.DOCS_CONTENT_DIR || DEFAULT_DOCS_CONTENT_DIR + +const IGNORE_LIST = [ + /** + * This is linked from the Edge Functions examples page though not from the + * main nav. + */ + 'guides/functions/examples/github-actions', + /** + * Auth helpers are deprecated and hidden but still available for legacy + * users if they need it. + */ + 'guides/auth/auth-helpers', + 'guides/auth/auth-helpers/nextjs-pages', + 'guides/auth/auth-helpers/nextjs', + 'guides/auth/auth-helpers/remix', + 'guides/auth/auth-helpers/sveltekit', +] + +type RefItem = { + href?: string + url?: string + items?: RefItem[] +} + +const recGetUrl = (items: readonly RefItem[], acc: string[] = []) => + items.reduce((acc, item) => { + if (item.href || item.url) acc.push(item.href || item.url) + if (item.items) acc.push(...recGetUrl(item.items, acc)) + return acc + }, acc) + +const main = async () => { + try { + const savedFiles = (await readdir(DOCS_CONTENT_DIR, { recursive: true })) + .filter((file) => extname(file) === '.mdx') + .map((file) => file.replace(/\.mdx$/, '')) + + const flattenedHomepageMenuItems = HOMEPAGE_MENU_ITEMS.flat() as RefItem[] + const pagesToPublish = [ + flattenedHomepageMenuItems, + gettingstarted.items, + cli.items, + auth.items, + database.items, + api.items, + graphql.items, + functions.items, + realtime.items, + storage.items, + ai.items, + supabase_cli.items, + platform.items, + resources.items, + self_hosting.items, + migrate.items, + ] + .flatMap((items) => recGetUrl(items)) + // Remove initial slash + .map((path) => path.substring(1)) + + const extraPages = savedFiles.filter( + (file) => !pagesToPublish.includes(file) && !IGNORE_LIST.includes(file) + ) + console.log(extraPages) + } catch (err) { + console.error(err) + process.exit(1) + } +} + +main() diff --git a/apps/docs/spec/cli_v1_commands.yaml b/apps/docs/spec/cli_v1_commands.yaml index 5fe46e5b5d8..d17bb6bb29e 100644 --- a/apps/docs/spec/cli_v1_commands.yaml +++ b/apps/docs/spec/cli_v1_commands.yaml @@ -1,7 +1,7 @@ clispec: '001' info: id: cli - version: 1.157.2 + version: 1.163.2 title: Supabase CLI language: sh source: https://github.com/supabase/cli @@ -3303,7 +3303,7 @@ commands: description: Update a preview branch by its ID. tags: [] links: [] - usage: supabase branches update [flags] + usage: supabase branches update [branch-id] [flags] subcommands: [] flags: - id: git-branch @@ -3323,6 +3323,10 @@ commands: description: enable experimental features required: true default_value: 'false' + - id: project-ref + name: --project-ref + description: Project ref of the Supabase project. + default_value: '' - id: supabase-branches-list title: supabase branches list summary: List all preview branches @@ -3337,13 +3341,17 @@ commands: description: enable experimental features required: true default_value: 'false' + - id: project-ref + name: --project-ref + description: Project ref of the Supabase project. + default_value: '' - id: supabase-branches-get title: supabase branches get summary: Retrieve details of a preview branch description: Retrieve details of the specified preview branch. tags: [] links: [] - usage: supabase branches get + usage: supabase branches get [branch-id] subcommands: [] flags: - id: experimental @@ -3351,6 +3359,10 @@ commands: description: enable experimental features required: true default_value: 'false' + - id: project-ref + name: --project-ref + description: Project ref of the Supabase project. + default_value: '' - id: supabase-branches-disable title: supabase branches disable summary: Disable preview branching @@ -3365,13 +3377,17 @@ commands: description: enable experimental features required: true default_value: 'false' + - id: project-ref + name: --project-ref + description: Project ref of the Supabase project. + default_value: '' - id: supabase-branches-delete title: supabase branches delete summary: Delete a preview branch description: Delete a preview branch by its ID. tags: [] links: [] - usage: supabase branches delete + usage: supabase branches delete [branch-id] subcommands: [] flags: - id: experimental @@ -3379,6 +3395,10 @@ commands: description: enable experimental features required: true default_value: 'false' + - id: project-ref + name: --project-ref + description: Project ref of the Supabase project. + default_value: '' - id: supabase-branches-create title: supabase branches create summary: Create a preview branch @@ -3494,6 +3514,10 @@ commands: description: enable experimental features required: true default_value: 'false' + - id: project-ref + name: --project-ref + description: Project ref of the Supabase project. + default_value: '' - id: supabase-bootstrap title: supabase bootstrap summary: Bootstrap a Supabase project from a starter template diff --git a/apps/docs/spec/common-client-libs-sections.json b/apps/docs/spec/common-client-libs-sections.json index 6a44fb3c877..b563968d1c1 100644 --- a/apps/docs/spec/common-client-libs-sections.json +++ b/apps/docs/spec/common-client-libs-sections.json @@ -32,6 +32,7 @@ "reference_dart_v2", "reference_python_v2", "reference_csharp_v0", + "reference_csharp_v1", "reference_swift_v1", "reference_swift_v2", "reference_kotlin_v1", @@ -48,6 +49,7 @@ "reference_dart_v1", "reference_python_v2", "reference_csharp_v0", + "reference_csharp_v1", "reference_swift_v1", "reference_swift_v2", "reference_kotlin_v1", @@ -986,7 +988,6 @@ "reference_dart_v1", "reference_dart_v2", "reference_python_v2", - "reference_csharp_v0", "reference_swift_v1", "reference_swift_v2", "reference_kotlin_v1", diff --git a/apps/docs/spec/supabase_csharp_v0.yml b/apps/docs/spec/supabase_csharp_v0.yml index e09549dafbb..914c3341808 100644 --- a/apps/docs/spec/supabase_csharp_v0.yml +++ b/apps/docs/spec/supabase_csharp_v0.yml @@ -22,7 +22,7 @@ functions: Initializing a new client is pretty straightforward. Find your project url and public key from the admin panel and pass it into your client initialization function. - `supabase-csharp` is heavily dependent on Models deriving from `BaseModel`. To interact with the API, one must have the associated model (see example) specified. + `Supabase` is heavily dependent on Models deriving from `BaseModel`. To interact with the API, one must have the associated model (see example) specified. Leverage `Table`, `PrimaryKey`, and `Column` attributes to specify names of classes/properties that are different from their C# Versions. diff --git a/apps/docs/spec/supabase_csharp_v1.yml b/apps/docs/spec/supabase_csharp_v1.yml new file mode 100644 index 00000000000..0c127b9c639 --- /dev/null +++ b/apps/docs/spec/supabase_csharp_v1.yml @@ -0,0 +1,1597 @@ +openref: 0.1 + +info: + id: reference/csharp + title: Supabase C# Client + description: | + + Supabase C#. + + definition: spec/enrichments/tsdoc_v2/combined.json + slugPrefix: '/' + specUrl: https://github.com/supabase/supabase/edit/master/apps/docs/spec/supabase_csharp_v1.yml + libraries: + - name: 'C#' + id: 'csharp' + version: '1.0.0' + +functions: + - id: initializing + title: Initializing + description: | + Initializing a new client is pretty straightforward. Find your project url and public key from the + admin panel and pass it into your client initialization function. + + `Supabase` is heavily dependent on Models deriving from `BaseModel`. To interact with the API, one must have the associated model (see example) specified. + + Leverage `Table`, `PrimaryKey`, and `Column` attributes to specify names of classes/properties that are different from their C# Versions. + + examples: + - id: csharp-init-standard + name: Standard + code: | + ```c# + var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); + var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); + + var options = new Supabase.SupabaseOptions + { + AutoConnectRealtime = true + }; + + var supabase = new Supabase.Client(url, key, options); + await supabase.InitializeAsync(); + ``` + - id: csharp-init-maui + name: Dependency Injection (Maui-like) + code: | + ```c# + public static MauiApp CreateMauiApp() + { + // ... + var builder = MauiApp.CreateBuilder(); + + var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); + var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); + var options = new SupabaseOptions + { + AutoRefreshToken = true, + AutoConnectRealtime = true, + // SessionHandler = new SupabaseSessionHandler() <-- This must be implemented by the developer + }; + + // Note the creation as a singleton. + builder.Services.AddSingleton(provider => new Supabase.Client(url, key, options)); + } + ``` + - id: csharp-init-showing-models + name: With Models Example + code: | + ```c# + // Given the following Model representing the Supabase Database (Message.cs) + [Table("messages")] + public class Message : BaseModel + { + [PrimaryKey("id")] + public int Id { get; set; } + + [Column("username")] + public string UserName { get; set; } + + [Column("channel_id")] + public int ChannelId { get; set; } + + public override bool Equals(object obj) + { + return obj is Message message && + Id == message.Id; + } + + public override int GetHashCode() + { + return HashCode.Combine(Id); + } + } + + void Initialize() + { + // Get All Messages + var response = await client.Table().Get(); + List models = response.Models; + + // Insert + var newMessage = new Message { UserName = "acupofjose", ChannelId = 1 }; + await client.Table().Insert(); + + // Update + var model = response.Models.First(); + model.UserName = "elrhomariyounes"; + await model.Update(); + + // Delete + await response.Models.Last().Delete(); + + // etc. + } + ``` + - id: sign-up + title: 'SignUp()' + description: | + Creates a new user. + notes: | + - By default, the user needs to verify their email address before logging in. To turn this off, disable **Confirm email** in [your project](https://supabase.com/dashboard/project/_/auth/providers). + - **Confirm email** determines if users need to confirm their email address after signing up. + - If **Confirm email** is enabled, a `user` is returned but `session` is null. + - If **Confirm email** is disabled, both a `user` and a `session` are returned. + - When the user confirms their email address, they are redirected to the [`SITE_URL`](https://supabase.com/docs/guides/auth/concepts/redirect-urls) by default. You can modify your `SITE_URL` or add additional redirect URLs in [your project](https://supabase.com/dashboard/project/_/auth/url-configuration). + - If SignUp() is called for an existing confirmed user: + - When both **Confirm email** and **Confirm phone** (even when phone provider is disabled) are enabled in [your project](/dashboard/project/_/auth/providers), an obfuscated/fake user object is returned. + - When either **Confirm email** or **Confirm phone** (even when phone provider is disabled) is disabled, the error message, `User already registered` is returned. + examples: + - id: sign-up + name: Sign up. + isSpotlight: true + code: | + ```c# + var session = await supabase.Auth.SignUp(email, password); + ``` + - id: sign-in-with-password + title: 'SignIn(email, password)' + description: | + Log in an existing user using email or phone number with password. + notes: | + - Requires either an email and password or a phone number and password. + examples: + - id: sign-in-with-email-and-password + name: Sign in with email and password + isSpotlight: true + code: | + ```c# + var session = await supabase.Auth.SignIn(email, password); + ``` + - id: sign-in-with-phone-and-password + name: Sign in with phone and password + code: | + ```c# + var session = await supabase.Auth.SignIn(SignInType.Phone, phoneNumber, password); + ``` + - id: sign-in-with-otp + title: 'SendMagicLink() and SignIn(SignInType, Phone)' + notes: | + - Requires either an email or phone number. + - This method is used for passwordless sign-ins where a OTP is sent to the user's email or phone number. + - If you're using an email, you can configure whether you want the user to receive a magiclink or a OTP. + - If you're using phone, you can configure whether you want the user to receive a OTP. + - The magic link's destination URL is determined by the [`SITE_URL`](https://supabase.com/docs/guides/auth/concepts/redirect-urls). You can modify the `SITE_URL` or add additional redirect urls in [your project](https://supabase.com/dashboard/project/_/auth/settings). + examples: + - id: sign-in-with-email + name: Send Magic Link. + isSpotlight: true + description: | + The user will be sent an email which contains either a magiclink or a OTP or both. By default, a given user can only request a OTP once every 60 seconds. + You can pass `emailRedirectTo` with dynamic link to bring the users back to your app after they click on the magic link. + code: | + ```c# + var options = new SignInOptions { RedirectTo = "http://myredirect.example" }; + var didSendMagicLink = await supabase.Auth.SendMagicLink("joseph@supabase.io", options); + ``` + - id: sign-in-with-sms-otp + name: Sign in with SMS OTP. + description: The user will be sent a SMS which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. + code: | + ```c# + await supabase.Auth.SignIn(SignInType.Phone, "+13334445555"); + + // Paired with `VerifyOTP` to get a session + var session = await supabase.Auth.VerifyOTP("+13334445555", TOKEN, MobileOtpType.SMS); + ``` + - id: sign-in-with-oauth + title: 'SignIn(Provider)' + description: | + Signs the user in using third party OAuth providers. + notes: | + - This method is used for signing in using a third-party provider. + - Supabase supports many different [third-party providers](https://supabase.com/docs/guides/auth#providers). + examples: + - id: sign-in-using-a-third-party-provider + name: Sign in using a third-party provider + isSpotlight: true + code: | + ```c# + var signInUrl = supabase.Auth.SignIn(Provider.Github); + ``` + - id: sign-in-with-scopes + name: With scopes + description: | + If you need additional data from an OAuth provider, you can include a space-separated list of scopes in your request to get back an OAuth provider token. + You may also need to specify the scopes in the provider's OAuth app settings, depending on the provider. + code: | + ```c# + var signInUrl = supabase.Auth.SignIn(Provider.Github, 'repo gist notifications'); + + // after user comes back from signin flow + var session = supabase.Auth.GetSessionFromUrl(REDIRECTED_URI); + ``` + - id: sign-out + title: 'SignOut()' + description: | + Signs out the current user, if there is a logged in user. + notes: | + - In order to use the `SignOut()` method, the user needs to be signed in first. + examples: + - id: sign-out + name: Sign out + isSpotlight: true + code: | + ```c# + await supabase.Auth.SignOut(); + ``` + - id: verify-otp + title: 'VerifyOtp()' + notes: | + - The `VerifyOtp` method takes in different verification types. If a phone number is used, the type can either be `sms` or `phone_change`. If an email address is used, the type can be one of the following: `signup`, `magiclink`, `recovery`, `invite` or `email_change`. + - The verification type used should be determined based on the corresponding auth method called before `VerifyOtp` to sign up / sign-in a user. + examples: + - id: verify-sms-one-time-password(otp) + name: Verify Sms One-Time Password (OTP) + isSpotlight: true + code: | + ```c# + var session = await supabase.Auth.VerifyOTP("+13334445555", TOKEN, MobileOtpType.SMS); + ``` + - id: get-session + title: 'CurrentSession' + description: | + Returns the session data, if there is an active session. + examples: + - id: get-the-session-data + name: Get the session data + isSpotlight: true + code: | + ```c# + var session = supabase.Auth.CurrentSession; + ``` + - id: get-user + title: 'CurrentUser' + description: | + Returns the user data, if there is a logged in user. + examples: + - name: Get the logged in user + isSpotlight: true + code: | + ```c# + var user = supabase.Auth.CurrentUser; + ``` + - id: update-user + title: 'UpdateUser()' + description: | + Updates user data, if there is a logged in user. + notes: | + - In order to use the `UpdateUser()` method, the user needs to be signed in first. + - By Default, email updates sends a confirmation link to both the user's current and new email. + To only send a confirmation link to the user's new email, disable **Secure email change** in your project's [email auth provider settings](https://supabase.com/dashboard/project/_/auth/settings). + examples: + - id: update-the-email-for-an-authenticated-user + name: Update the email for an authenticated user + description: Sends a "Confirm Email Change" email to the new email address. + isSpotlight: true + code: | + ```c# + var attrs = new UserAttributes { Email = "new-email@example.com" }; + var response = await supabase.Auth.Update(attrs); + ``` + - id: update-the-password-for-an-authenticated-user + name: Update the password for an authenticated user + isSpotlight: false + code: | + ```c# + var attrs = new UserAttributes { Password = "***********" }; + var response = await supabase.Auth.Update(attrs); + ``` + - id: update-the-users-metadata + name: Update the user's metadata + isSpotlight: true + code: | + ```c# + var attrs = new UserAttributes + { + Data = new Dictionary { {"example", "data" } } + }; + var response = await supabase.Auth.Update(attrs); + ``` + - id: on-auth-state-change + title: 'StateChanged' + description: | + Receive a notification every time an auth event happens. + notes: | + - Types of auth events: `AuthState.SignedIn`, `AuthState.SignedOut`, `AuthState.UserUpdated`, `AuthState.PasswordRecovery`, `AuthState.TokenRefreshed` + examples: + - id: listen-to-auth-changes + name: Listen to auth changes + isSpotlight: true + code: | + ```c# + supabase.Auth.AddStateChangedListener((sender, changed) => + { + switch (changed) + { + case AuthState.SignedIn: + break; + case AuthState.SignedOut: + break; + case AuthState.UserUpdated: + break; + case AuthState.PasswordRecovery: + break; + case AuthState.TokenRefreshed: + break; + } + }); + ``` + - id: auth-reset-password-for-email + title: 'ResetPasswordForEmail()' + description: | + Sends a reset request to an email address. + notes: | + Sends a password reset request to an email address. When the user clicks the reset link in the email they are redirected back to your application. Prompt the user for a new password and call Auth.UpdateUser(): + + examples: + - id: reset-password + name: Reset password for Flutter + isSpotlight: true + code: | + ```c# + await supabase.Auth.ResetPasswordForEmail("joseph@supabase.io"); + ``` + - id: invoke + title: 'invoke()' + description: | + Invokes a Supabase Function. See the [guide](/docs/guides/functions) for details on writing Functions. + notes: | + - Requires an Authorization header. + - Invoke params generally match the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) spec. + examples: + - id: basic-invocation + name: Basic invocation. + isSpotlight: true + code: | + ```c# + var options = new InvokeFunctionOptions + { + Headers = new Dictionary {{ "Authorization", "Bearer 1234" }}, + Body = new Dictionary { { "foo", "bar" } } + }; + + await supabase.Functions.Invoke("hello", options: options); + ``` + - id: modeled-invocation + name: Modeled invocation + code: | + ``` c# + class HelloResponse + { + [JsonProperty("name")] + public string Name { get; set; } + } + + await supabase.Functions.Invoke("hello"); + ``` + - id: select + description: | + Performs vertical filtering with SELECT. + title: 'Fetch data: Select()' + notes: | + - **LINQ expressions do not currently support parsing embedded resource columns. For these cases, `string` will need to be used.** + - **When using string Column Names to select, they must match names in database, not names specified on model properties.** + - Additional information on modeling + querying Joins and Inner Joins can be found [in the `postgrest-csharp README`](https://github.com/supabase-community/postgrest-csharp/blob/master/README.md#foreign-keys-join-tables-and-relationships) + - By default, Supabase projects will return a maximum of 1,000 rows. This setting can be changed in Project API Settings. It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data. + - `From()` can be combined with [Modifiers](/docs/reference/csharp/using-modifiers) + - `From()` can be combined with [Filters](/docs/reference/csharp/using-filters) + - If using the Supabase hosted platform `apikey` is technically a reserved keyword, since the API gateway will pluck it out for authentication. [It should be avoided as a column name](https://github.com/supabase/supabase/issues/5465). + examples: + - id: getting-your-data + name: Getting your data + isSpotlight: true + code: | + ```c# + // Given the following Model (City.cs) + [Table("cities")] + class City : BaseModel + { + [PrimaryKey("id")] + public int Id { get; set; } + + [Column("name")] + public string Name { get; set; } + + [Column("country_id")] + public int CountryId { get; set; } + + //... etc. + } + + // A result can be fetched like so. + var result = await supabase.From().Get(); + var cities = result.Models + ``` + - id: selecting-specific-columns + name: Selecting specific columns + description: You can select specific fields from your tables. + code: | + ```c# + // Given the following Model (Movie.cs) + [Table("movies")] + class Movie : BaseModel + { + [PrimaryKey("id")] + public int Id { get; set; } + + [Column("name")] + public string Name { get; set; } + + [Column("created_at")] + public DateTime CreatedAt { get; set; } + + //... etc. + } + + // A result can be fetched like so. + var result = await supabase + .From() + .Select(x => new object[] {x.Name, x.CreatedAt}) + .Get(); + ``` + - id: query-foreign-tables + name: Query foreign tables + description: If your database has relationships, you can query related tables too. + code: | + ```c# + var data = await supabase + .From() + .Select("id, supplier:supplier_id(name), purchaser:purchaser_id(name)") + .Get(); + ``` + - id: filtering-with-inner-joins + name: Filtering with inner joins + description: | + If you want to filter a table based on a child table's values you can use the `!inner()` function. For example, if you wanted + to select all rows in a `message` table which belong to a user with the `username` "Jane": + code: | + ```c# + var result = await supabase + .From() + .Select("*, users!inner(*)") + .Filter("user.username", Operator.Equals, "Jane") + .Get(); + ``` + - id: querying-with-count-option + name: Querying with count option + description: | + You can get the number of rows by using the count option. + Allowed values for count option are [exact](https://postgrest.org/en/stable/api.html#exact-count), [planned](https://postgrest.org/en/stable/api.html#planned-count) and [estimated](https://postgrest.org/en/stable/api.html#estimated-count). + code: | + ```c# + var count = await supabase + .From() + .Select(x => new object[] { x.Name }) + .Count(CountType.Exact); + ``` + - id: querying-json-data + name: Querying JSON data + description: | + If you have data inside of a JSONB column, you can apply select + and query filters to the data values. Postgres offers a + [number of operators](https://www.postgresql.org/docs/current/functions-json.html) + for querying JSON data. Also see + [PostgREST docs](http://postgrest.org/en/v7.0.0/api.html#json-columns) for more details. + code: | + ```c# + var result = await supabase + .From() + .Select("id, name, address->street") + .Filter("address->postcode", Operator.Equals, 90210) + .Get(); + ``` + + - id: insert + description: | + Performs an INSERT into the table. + title: 'Create data: Insert()' + examples: + - id: create-a-record + name: Create a record + isSpotlight: true + code: | + ```c# + [Table("cities")] + class City : BaseModel + { + [PrimaryKey("id", false)] + public int Id { get; set; } + + [Column("name")] + public string Name { get; set; } + + [Column("country_id")] + public int CountryId { get; set; } + } + + var model = new City + { + Name = "The Shire", + CountryId = 554 + }; + + await supabase.From().Insert(model); + ``` + - id: bulk-create + name: Bulk create + code: | + ```c# + [Table("cities")] + class City : BaseModel + { + [PrimaryKey("id", false)] + public int Id { get; set; } + + [Column("name")] + public string Name { get; set; } + + [Column("country_id")] + public int CountryId { get; set; } + } + + var models = new List + { + new City { Name = "The Shire", CountryId = 554 }, + new City { Name = "Rohan", CountryId = 553 }, + }; + + await supabase.From().Insert(models); + ``` + - id: fetch-inserted-data + name: Fetch inserted record + code: | + ```c# + var result = await supabase + .From() + .Insert(models, new QueryOptions { Returning = ReturnType.Representation }); + ``` + + - id: update + description: | + Performs an UPDATE on the table. + title: 'Modify data: Update()' + notes: | + - `Update()` is typically called using a model as an argument or from a hydrated model. + examples: + - id: updating-your-data-with-filter + name: Update your data using Filter + isSpotlight: true + code: | + ```c# + var update = await supabase + .From() + .Where(x => x.Name == "Auckland") + .Set(x => x.Name, "Middle Earth") + .Update(); + ``` + - id: updating-your-data + name: Update your data + code: | + ```c# + var model = await supabase + .From() + .Where(x => x.Name == "Auckland") + .Single(); + + model.Name = "Middle Earth"; + + await model.Update(); + ``` + + - id: upsert + description: | + Performs an UPSERT into the table. + title: 'Upsert data: Upsert()' + notes: | + - Primary keys should be included in the data payload in order for an update to work correctly. + - Primary keys must be natural, not surrogate. There are however, [workarounds](https://github.com/PostgREST/postgrest/issues/1118) for surrogate primary keys. + examples: + - id: upsert-your-data + name: Upsert your data + isSpotlight: true + code: | + ```c# + var model = new City + { + Id = 554, + Name = "Middle Earth" + }; + + await supabase.From().Upsert(model); + ``` + - id: upserting-into-tables-with-constraints + name: Upserting into tables with constraints + description: | + Running the following will cause supabase to upsert data into the `users` table. + If the username 'supabot' already exists, the `onConflict` argument tells supabase to overwrite that row + based on the column passed into `onConflict`. + isSpotlight: true + code: | + ```c# + var model = new City + { + Id = 554, + Name = "Middle Earth" + }; + + await supabase + .From() + .OnConflict(x => x.Name) + .Upsert(model); + ``` + - id: return-the-exact-number-of-rows + name: Return the exact number of rows + description: | + Allowed values for count option are `exact`, `planned` and `estimated`. + code: | + ```c# + var model = new City + { + Id = 554, + Name = "Middle Earth" + }; + + await supabase + .From() + .Upsert(model, new QueryOptions { Count = QueryOptions.CountType.Exact }); + ``` + + - id: delete + description: | + Performs a DELETE on the table. + title: 'Delete data: Delete()' + notes: | + - `Delete()` should always be combined with [Filters](/docs/reference/csharp/using-filters) to target the item(s) you wish to delete. + examples: + - id: delete-records + name: Delete records + isSpotlight: true + code: | + ```c# + await supabase + .From() + .Where(x => x.Id == 342) + .Delete(); + ``` + + - id: rpc + title: 'Stored Procedures: Rpc()' + description: | + You can call stored procedures as a "Remote Procedure Call". + + That's a fancy way of saying that you can put some logic into your database then call it from anywhere. + It's especially useful when the logic rarely changes - like password resets and updates. + examples: + - id: call-a-stored-procedure + name: Call a stored procedure + isSpotlight: true + description: This is an example invoking a stored procedure. + code: | + ```c# + await supabase.Rpc("hello_world", null); + ``` + - id: with-parameters + name: With Parameters + code: | + ```c# + await supabase.Rpc("hello_world", new Dictionary { { "foo", "bar"} }); + ``` + + - id: subscribe + title: 'Realtime.Channel' + description: | + Subscribe to realtime changes in your database. + notes: | + - Realtime is disabled by default for new Projects for better database performance and security. You can turn it on by [managing replication](/docs/guides/api#managing-realtime). + - If you want to receive the "previous" data for updates and deletes, you will need to set `REPLICA IDENTITY` to `FULL`, like this: `ALTER TABLE your_table REPLICA IDENTITY FULL;` + examples: + - id: listen-to-broadcast + name: Listen to broadcast messages + isSpotlight: true + code: | + ```c# + class CursorBroadcast : BaseBroadcast + { + [JsonProperty("cursorX")] + public int CursorX {get; set;} + + [JsonProperty("cursorY")] + public int CursorY {get; set;} + } + + var channel = supabase.Realtime.Channel("any"); + var broadcast = channel.Register(); + broadcast.AddBroadcastEventHandler((sender, baseBroadcast) => + { + var response = broadcast.Current(); + }); + + await channel.Subscribe(); + + // Send a broadcast + await broadcast.Send("cursor", new CursorBroadcast { CursorX = 123, CursorY = 456 }); + ``` + - id: listen-to-presence-sync + name: Listen to presence sync + isSpotlight: true + code: | + ```c# + class UserPresence : BasePresence + { + [JsonProperty("cursorX")] + public bool IsTyping {get; set;} + + [JsonProperty("onlineAt")] + public DateTime OnlineAt {get; set;} + } + + var channel = supabase.Realtime.Channel("any"); + var presenceKey = Guid.NewGuid().ToString(); + var presence = channel.Register(presenceKey); + presence.AddPresenceEventHandler(EventType.Sync, (sender, type) => + { + Debug.WriteLine($"The Event Type: {type}"); + var state = presence.CurrentState; + }); + + await channel.Subscribe(); + + // Send a presence update + await presence.Track(new UserPresence { IsTyping = false, OnlineAt = DateTime.Now }); + ``` + - id: listening-to-a-specific-table + name: Listening to a specific table + isSpotlight: true + code: | + ```c# + await supabase.From().On(ListenType.All, (sender, change) => + { + Debug.WriteLine(change.Payload.Data); + }); + ``` + - id: listen-to-all-database-changes + name: Listen to all database changes + code: | + ```c# + var channel = supabase.Realtime.Channel("realtime", "public", "*"); + + channel.AddPostgresChangeHandler(ListenType.All, (sender, change) => + { + // The event type + Debug.WriteLine(change.Event); + // The changed record + Debug.WriteLine(change.Payload); + }); + + await channel.Subscribe(); + ``` + - id: listening-to-inserts + name: Listening to inserts + code: | + ```c# + await supabase.From().On(ListenType.Inserts, (sender, change) => + { + Debug.WriteLine(change.Payload.Data); + }); + ``` + - id: listening-to-updates + name: Listening to updates + description: | + By default, Supabase will send only the updated record. If you want to receive the previous values as well you can + enable full replication for the table you are listening too: + + ```sql + alter table "your_table" replica identity full; + ``` + code: | + ```c# + await supabase.From().On(ListenType.Updates, (sender, change) => + { + Debug.WriteLine(change.Payload.Data); + }); + ``` + - id: listening-to-deletes + name: Listening to deletes + description: | + By default, Supabase does not send deleted records. If you want to receive the deleted record you can + enable full replication for the table you are listening too: + + ```sql + alter table "your_table" replica identity full; + ``` + code: | + ```c# + await supabase.From().On(ListenType.Deletes, (sender, change) => + { + Debug.WriteLine(change.Payload.Data); + }); + ``` + - id: listening-to-row-level-changes + name: Listening to row level changes + description: You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. + code: | + ```c# + var channel = supabase.Realtime.Channel("realtime", "public", "countries", "id", "id=eq.200"); + + channel.AddPostgresChangeHandler(ListenType.All, (sender, change) => + { + // The event type + Debug.WriteLine(change.Event); + // The changed record + Debug.WriteLine(change.Payload); + }); + + await channel.Subscribe(); + ``` + + - id: remove-channel + description: | + Unsubscribes and removes Realtime channel from Realtime client. + title: 'Unsubscribe()' + notes: | + - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. + examples: + - id: removes-a-channel + name: Remove a channel + isSpotlight: true + code: | + ```c# + var channel = await supabase.From().On(ChannelEventType.All, (sender, change) => { }); + channel.Unsubscribe(); + + // OR + + var channel = supabase.Realtime.Channel("realtime", "public", "*"); + channel.Unsubscribe() + ``` + + - id: get-channels + description: | + Returns all Realtime channels. + title: 'Subscriptions' + examples: + - id: get-all-channels + name: Get all channels + isSpotlight: true + code: | + ```c# + var channels = supabase.Realtime.Subscriptions; + ``` + + - id: list-buckets + description: | + Retrieves the details of all Storage buckets within an existing product. + title: 'ListBuckets()' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` + - `objects` permissions: none + examples: + - id: list-buckets + name: List buckets + isSpotlight: true + code: | + ```c# + var buckets = await supabase.Storage.ListBuckets(); + ``` + + - id: get-bucket + description: | + Retrieves the details of an existing Storage bucket. + title: 'GetBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` + - `objects` permissions: none + examples: + - id: get-bucket + name: Get bucket + isSpotlight: true + code: | + ```c# + var bucket = await supabase.Storage.GetBucket("avatars"); + ``` + + - id: create-bucket + description: | + Creates a new Storage bucket + title: 'CreateBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `insert` + - `objects` permissions: none + examples: + - id: create-bucket + name: Create bucket + isSpotlight: true + code: | + ```c# + var bucket = await supabase.Storage.CreateBucket("avatars"); + ``` + + - id: empty-bucket + description: | + Removes all objects inside a single bucket. + title: 'EmptyBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` + - `objects` permissions: `select` and `delete` + examples: + - id: empty-bucket + name: Empty bucket + isSpotlight: true + code: | + ```c# + var bucket = await supabase.Storage.EmptyBucket("avatars"); + ``` + - id: update-bucket + description: | + Updates a new Storage bucket + title: 'UpdateBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `update` + - `objects` permissions: none + examples: + - id: update-bucket + name: Update bucket + isSpotlight: true + code: | + ```c# + var bucket = await supabase.Storage.UpdateBucket("avatars", new BucketUpsertOptions { Public = false }); + ``` + + - id: delete-bucket + description: | + Deletes an existing bucket. A bucket can't be deleted with existing objects inside it. You must first `empty()` the bucket. + title: 'DeleteBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` and `delete` + - `objects` permissions: none + examples: + - id: delete-bucket + name: Delete bucket + isSpotlight: true + code: | + ```dart + var result = await supabase.Storage.DeleteBucket("avatars"); + ``` + + - id: from-upload + description: | + Uploads a file to an existing bucket. + title: 'From().Upload()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `insert` + examples: + - id: upload-file + name: Upload file + isSpotlight: true + code: | + ```c# + var imagePath = Path.Combine("Assets", "fancy-avatar.png"); + + await supabase.Storage + .From("avatars") + .Upload(imagePath, "fancy-avatar.png", new FileOptions { CacheControl = "3600", Upsert = false }); + ``` + - id: upload-file-with-progress + name: Upload file with Progress + code: | + ```c# + var imagePath = Path.Combine("Assets", "fancy-avatar.png"); + + await supabase.Storage + .From("avatars") + .Upload(imagePath, "fancy-avatar.png", onProgress: (sender, progress) => Debug.WriteLine($"{progress}%")); + ``` + + - id: from-update + description: | + Replaces an existing file at the specified path with a new one. + title: 'From().update()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `update` and `select` + examples: + - id: update-file + name: Update file + isSpotlight: true + code: | + ```c# + var imagePath = Path.Combine("Assets", "fancy-avatar.png"); + await supabase.Storage.From("avatars").Update(imagePath, "fancy-avatar.png"); + ``` + + - id: from-move + description: | + Moves an existing file, optionally renaming it at the same time. + title: 'From().Move()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `update` and `select` + examples: + - id: move-file + name: Move file + isSpotlight: true + code: | + ```c# + await supabase.Storage.From("avatars") + .Move("public/fancy-avatar.png", "private/fancy-avatar.png"); + ``` + + - id: from-create-signed-url + description: | + Create signed url to download file without requiring permissions. This URL can be valid for a set number of seconds. + title: 'From().CreateSignedUrl()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `select` + examples: + - id: create-signed-url + name: Create Signed URL + isSpotlight: true + code: | + ```c# + var url = await supabase.Storage.From("avatars").CreateSignedUrl("public/fancy-avatar.png", 60); + ``` + + - id: from-get-public-url + description: | + Retrieve URLs for assets in public buckets + title: 'from.getPublicUrl()' + notes: | + - The bucket needs to be set to public, either via [UpdateBucket()](/docs/reference/csharp/storage-updatebucket) or by going to Storage on [supabase.com/dashboard](https://supabase.com/dashboard), clicking the overflow menu on a bucket and choosing "Make public" + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: none + examples: + - id: returns-the-url-for-an-asset-in-a-public-bucket + name: Returns the URL for an asset in a public bucket + isSpotlight: true + code: | + ```c# + var publicUrl = supabase.Storage.From("avatars").GetPublicUrl("public/fancy-avatar.png"); + ``` + + - id: from-download + description: | + Downloads a file. + title: 'From().Download()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `select` + examples: + - id: download-file + name: Download file + isSpotlight: true + code: | + ```c# + var bytes = await supabase.Storage.From("avatars").Download("public/fancy-avatar.png"); + ``` + - id: download-file-with-progress + name: Download file with Progress + code: | + ```c# + var bytes = await supabase.Storage + .From("avatars") + .Download("public/fancy-avatar.png", (sender, progress) => Debug.WriteLine($"{progress}%")); + ``` + + - id: from-remove + description: | + Deletes files within the same bucket + title: 'From().Remove()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `delete` and `select` + examples: + - id: delete-file + name: Delete file + isSpotlight: true + code: | + ```c# + await supabase.Storage.From("avatars").Remove(new List { "public/fancy-avatar.png" }); + ``` + + - id: from-list + description: | + Lists all the files within a bucket. + title: 'From().list()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `select` + examples: + - id: list-files-in-a-bucket + name: List files in a bucket + isSpotlight: true + code: | + ```c# + var objects = await supabase.Storage.From("avatars").List(); + ``` + - id: using-modifiers + title: Using Modifiers + description: | + Filters work on the row level—they allow you to return rows that + only match certain conditions without changing the shape of the rows. + Modifiers are everything that don't fit that definition—allowing you to + change the format of the response (e.g., setting a limit or offset). + + - id: limit + title: Limit() + description: | + Limits the result with the specified count. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Limit(10) + .Get(); + ``` + - id: with-embedded-resources + name: With embedded resources + code: | + ```c# + var result = await supabase.From() + .Select("name, cities(name)") + .Filter("name", Operator.Equals, "United States") + .Limit(10, "cities") + .Get(); + ``` + + - id: order + title: Order() + description: | + Orders the result with the specified column. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Order(x => x.Id, Ordering.Descending) + .Get(); + ``` + - id: with-embedded-resources + name: With embedded resources + code: | + ```c# + var result = await supabase.From() + .Select("name, cities(name)") + .Filter(x => x.Name == "United States") + .Order("cities", "name", Ordering.Descending) + .Get(); + ``` + + - id: range + title: Range() + description: | + Limits the result to rows within the specified range, inclusive. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Range(0, 3) + .Get(); + ``` + + - id: offset + title: Offset() + description: | + Specifies the offset of the queried rows to be returned (useful in pagination) + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Offset(25) + .Get(); + ``` + + - id: single + title: Single() + description: | + Retrieves only one row from the result. Result must be one row (e.g. using limit), otherwise this will result in an error. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Single(); + ``` + + - id: using-filters + title: Using Filters + description: | + Filters allow you to only return rows that match certain conditions. + + Filters can be used on `Select()`, `Update()`, and `Delete()` queries. + + **Note: LINQ expressions do not currently support parsing embedded resource columns. For these cases, `string` will need to be used.** + examples: + - id: applying-filters + name: Applying Filters + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Where(x => x.Name == "The Shire") + .Single(); + ``` + - id: filter-by-value-within-json-column + name: Filter by values within a JSON column + data: + sql: | + ```sql + create table + users ( + id int8 primary key, + name text, + address jsonb + ); + + insert into + users (id, name, address) + values + (1, 'Michael', '{ "postcode": 90210 }'), + (2, 'Jane', null); + ``` + code: | + ```c# + var result = await supabase.From() + .Filter("address->postcode", Operator.Equals, 90210) + .Get(); + ``` + - id: filter-foreign-tables + name: Filter Foreign Tables + code: | + ```c# + var results = await supabase.From() + .Select("name, cities!inner(name)") + .Filter("cities.name", Operator.Equals, "Bali") + .Get(); + ``` + + - id: or + title: Or() + description: | + Finds all rows satisfying at least one of the filters. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Where(x => x.Id == 20 || x.Id == 30) + .Get(); + ``` + - id: use-or-with-and + name: Use `or` with `and` + code: | + ```c# + var result = await supabase.From() + .Where(x => x.Population > 300000 || x.BirthRate < 0.6) + .Where(x => x.Name != "Mordor") + .Get(); + ``` + + - id: not + title: Not() + description: | + Finds all rows which doesn't satisfy the filter. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Where(x => x.Name != "Paris") + .Get(); + ``` + + - id: match + title: Match() + description: | + - Finds a model given a class (useful when hydrating models and correlating with database) + - Finds all rows whose columns match the specified `Dictionary` object. + examples: + - id: with-model + name: With Model + isSpotlight: true + code: | + ```c# + var city = new City + { + Id = 224, + Name = "Atlanta" + }; + + var model = supabase.From().Match(city).Single(); + ``` + - id: with-dictionary + name: With Dictionary + code: | + ```c# + var opts = new Dictionary + { + {"name","Beijing"}, + {"country_id", "156"} + }; + + var model = supabase.From().Match(opts).Single(); + ``` + + - id: eq + title: Operator.Equals + description: | + Finds all rows whose value on the stated `column` exactly matches the specified `value`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Where(x => x.Name == "Bali") + .Get(); + ``` + + - id: neq + title: Operator.NotEqual + description: | + Finds all rows whose value on the stated `column` doesn't match the specified `value`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Where(x => x.Name != "Bali") + .Get(); + ``` + + - id: gt + title: Operator.GreaterThan + description: | + Finds all rows whose value on the stated `column` is greater than the specified `value`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Where(x => x.CountryId > 250) + .Get(); + ``` + + - id: gte + title: Operator.GreaterThanOrEqual + description: | + Finds all rows whose value on the stated `column` is greater than or equal to the specified `value`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select(x => new object[] { x.Name, x.CountryId }) + .Where(x => x.CountryId >= 250) + .Get(); + ``` + + - id: lt + title: Operator.LessThan + description: | + Finds all rows whose value on the stated `column` is less than the specified `value`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Where(x => x.CountryId < 250) + .Get(); + ``` + + - id: lte + title: Operator.LessThanOrEqual + description: | + Finds all rows whose value on the stated `column` is less than or equal to the specified `value`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Where(x => x.CountryId <= 250) + .Get(); + ``` + + - id: like + title: Operator.Like + description: | + Finds all rows whose value in the stated `column` matches the supplied `pattern` (case sensitive). + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Filter(x => x.Name, Operator.Like, "%la%") + .Get(); + ``` + + - id: ilike + title: Operator.ILike + description: | + Finds all rows whose value in the stated `column` matches the supplied `pattern` (case insensitive). + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + await supabase.From() + .Filter(x => x.Name, Operator.ILike, "%la%") + .Get(); + ``` + + - id: is + title: Operator.Is + description: | + A check for exact equality (null, true, false), finds all rows whose value on the stated `column` exactly match the specified `value`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Where(x => x.Name == null + .Get(); + ``` + + - id: in + title: Operator.In + description: | + Finds all rows whose value on the stated `column` is found on the specified `values`. + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Filter(x => x.Name, Operator.In, new List { "Rio de Janiero", "San Francisco" }) + .Get(); + ``` + + - id: contains + title: Operator.Contains + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Filter(x => x.MainExports, Operator.Contains, new List { "oil", "fish" }) + .Get(); + ``` + + - id: contained-by + title: Operator.ContainedIn + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Filter(x => x.MainExports, Operator.ContainedIn, new List { "oil", "fish" }) + .Get(); + ``` + + - id: text-search + title: Operator.[FTS,PLFTS,PHFTS,WFTS] (Full Text Search) + description: | + Finds all rows whose tsvector value on the stated `column` matches to_tsquery(query). + examples: + - id: text-search + name: Text search + code: | + ```c# + var result = await supabase.From() + .Select(x => x.Catchphrase) + .Filter(x => x.Catchphrase, Operator.FTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); + ``` + - id: basic-normalization + name: Basic normalization + description: Uses PostgreSQL's `plainto_tsquery` function. + code: | + ```c# + var result = await supabase.From() + .Select(x => x.Catchphrase) + .Filter(x => x.Catchphrase, Operator.PLFTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); + ``` + - id: full-normalization + name: Full normalization + description: Uses PostgreSQL's `phraseto_tsquery` function. + code: | + ```c# + var result = await supabase.From() + .Select(x => x.Catchphrase) + .Filter(x => x.Catchphrase, Operator.PHFTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); + ``` + - id: web-search + name: Websearch + description: | + Uses PostgreSQL's `websearch_to_tsquery` function. + This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used + with advanced operators. + + - `unquoted text`: text not inside quote marks will be converted to terms separated by & operators, as if processed by plainto_tsquery. + - `"quoted text"`: text inside quote marks will be converted to terms separated by <-> operators, as if processed by phraseto_tsquery. + - `OR`: the word “or” will be converted to the | operator. + - `-`: a dash will be converted to the ! operator. + + code: | + ```c# + var result = await supabase.From() + .Select(x => x.Catchphrase) + .Filter(x => x.Catchphrase, Operator.WFTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); + ``` diff --git a/apps/docs/spec/supabase_swift_v2.yml b/apps/docs/spec/supabase_swift_v2.yml index 43fd69fb404..66f2b5e2457 100644 --- a/apps/docs/spec/supabase_swift_v2.yml +++ b/apps/docs/spec/supabase_swift_v2.yml @@ -2954,6 +2954,95 @@ functions: By default, the data is returned in JSON format, but can also be returned as Comma Separated Values. hideCodeBlock: true isSpotlight: true + - id: explain + title: Using Explain + description: | + For debugging slow queries, you can get the [Postgres `EXPLAIN` execution plan](https://www.postgresql.org/docs/current/sql-explain.html) of a query + using the `explain()` method. This works on any query, even for `rpc()` or writes. + + Explain is not enabled by default as it can reveal sensitive information about your database. + It's best to only enable this for testing environments but if you wish to enable it for production you can provide additional protection by using a `pre-request` function. + + Follow the [Performance Debugging Guide](/docs/guides/database/debugging-performance) to enable the functionality on your project. + examples: + - id: get-execution-plan + name: Get the execution plan + code: | + ```swift + try await supabase + .from("countries") + .select() + .explain() + .execute() + .value + ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + + insert into + countries (id, name) + values + (1, 'Afghanistan'), + (2, 'Albania'), + (3, 'Algeria'); + ``` + response: | + ``` + Aggregate (cost=33.34..33.36 rows=1 width=112) + -> Limit (cost=0.00..18.33 rows=1000 width=40) + -> Seq Scan on countries (cost=0.00..22.00 rows=1200 width=40) + ``` + description: | + By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter. + hideCodeBlock: true + isSpotlight: true + + - id: get-execution-plan-with-analyze-and-verbose + name: Get the execution plan with analyze and verbose + code: | + ```swift + try await supabase + .from("countries") + .select() + .explain( + analyze: true, + verbose: true + ) + .execute() + .value + ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + + insert into + countries (id, name) + values + (1, 'Afghanistan'), + (2, 'Albania'), + (3, 'Algeria'); + ``` + response: | + ``` + Aggregate (cost=33.34..33.36 rows=1 width=112) (actual time=0.041..0.041 rows=1 loops=1) + Output: NULL::bigint, count(ROW(countries.id, countries.name)), COALESCE(json_agg(ROW(countries.id, countries.name)), '[]'::json), NULLIF(current_setting('response.headers'::text, true), ''::text), NULLIF(current_setting('response.status'::text, true), ''::text) + -> Limit (cost=0.00..18.33 rows=1000 width=40) (actual time=0.005..0.006 rows=3 loops=1) + Output: countries.id, countries.name + -> Seq Scan on public.countries (cost=0.00..22.00 rows=1200 width=40) (actual time=0.004..0.005 rows=3 loops=1) + Output: countries.id, countries.name + Query Identifier: -4730654291623321173 + Planning Time: 0.407 ms + Execution Time: 0.119 ms + ``` + description: | + By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter. + hideCodeBlock: true + isSpotlight: false - id: invoke title: invoke() description: | @@ -2997,6 +3086,18 @@ functions: print(type(of: response)) // String? ``` + - id: invocation-with-streamed-response + name: Invocation with streamed response + description: | + - Use this method to return an `AsyncStream` when the function returns `Content-Type` = `text/event-stream`. + isSpotlight: true + code: | + ```swift + var response = Data() + for try await data try await supabase.functions._invokeWithStreamedResponse("hello") { + response.append(data) + } + ``` - id: error-handling name: Error handling description: | @@ -3040,6 +3141,37 @@ functions: ) ) ``` + - id: regional-invocation + name: Invoking a Function in the UsEast1 region + description: | + Here are the available regions: + - `FunctionRegion.any` + - `FunctionRegion.apNortheast1` + - `FunctionRegion.apNortheast2` + - `FunctionRegion.apSouth1` + - `FunctionRegion.apSoutheast1` + - `FunctionRegion.apSoutheast2` + - `FunctionRegion.caCentral1` + - `FunctionRegion.euCentral1` + - `FunctionRegion.euWest1` + - `FunctionRegion.euWest2` + - `FunctionRegion.euWest3` + - `FunctionRegion.saEast1` + - `FunctionRegion.usEast1` + - `FunctionRegion.usWest1` + - `FunctionRegion.usWest2` + isSpotlight: true + code: | + ```swift + let response = try await supabase.functions + .invoke( + "hello", + options: FunctionInvokeOptions( + body: ["foo": "bar"], + region: .usEast1 + ) + ) + ``` - id: calling-with-delete-verb name: Calling with DELETE HTTP verb description: | @@ -3084,6 +3216,7 @@ functions: - By default, listening to database changes is disabled for new projects due to database performance and security concerns. You can turn it on by managing Realtime's [replication](/docs/guides/api#realtime-api-overview). - You can receive the "previous" data for updates and deletes by setting the table's `REPLICA IDENTITY` to `FULL` (e.g., `ALTER TABLE your_table REPLICA IDENTITY FULL;`). - Row level security is not applied to delete statements. When RLS is enabled and replica identity is set to full, only the primary key is sent to clients. + - Use AsyncStream or callbacks for listening to changes. examples: - id: listen-to-broadcast name: Listen to broadcast messages @@ -3113,6 +3246,31 @@ functions: } ``` + - id: listen-to-broadcast-callback + name: Listen to broadcast messages using callback + isSpotlight: true + code: | + ```swift + let channel = await supabase.channel("room1") + + let subscription = await channel.onBroadcast(event: "cursor-pos") { message in + print("Cursor position received", message.payload) + } + + await channel.subscribe() + + await channel.broadcast( + event: "cursor-pos", + message: [ + "x": .double(.random(in: 0...1)), + "y": .double(.random(in: 0...1)) + ] + ) + + // remove subscription some time later + subscription.remove() + ``` + - id: listen-to-presence-updates name: Listen to presence updates code: | @@ -3139,6 +3297,30 @@ functions: try await channel.track(PresenceState(username: "John")) } + - id: listen-to-presence-updates-callback + name: Listen to presence updates using callback + code: | + ```swift + struct PresenceState: Codable { + let username: String + } + + let channel = await supabase.channel("channelId") + + let subscription = await channel.onPresenceChange() { presence in + let joins = try presence.decodeJoins(as: PresenceState.self) + let leaves = try presence.decodeLeaves(as: PresenceState.self) + } + + await channel.subscribe() + + // Send your own state + try await channel.track(PresenceState(username: "John")) + + // remove subscription some time later + subscription.remove() + ``` + - id: listen-to-all-database-changes name: Listen to all database changes code: | @@ -3158,6 +3340,26 @@ functions: } } ``` + - id: listen-to-all-database-changes-callback + name: Listen to all database changes using callback + code: | + ```swift + let channel = await supabase.channel("channelId") + + let subscription = await channel.onPostgresChange(AnyAction.self, schema: "public") { change in + switch change { + case .delete(let action): print("Deleted: \(action.oldRecord)") + case .insert(let action): print("Inserted: \(action.record)") + case .select(let action): print("Selected: \(action.record)") + case .update(let action): print("Updated": \(action.oldRecord) with \(action.record)") + } + } + + await channel.subscribe() + + // remove subscription some time later + subscription.remove() + ``` - id: listen-to-a-specific-table name: Listen to a specific table code: | @@ -3181,6 +3383,30 @@ functions: } } ``` + - id: listen-to-a-specific-table-callback + name: Listen to a specific table using callback + code: | + ```swift + let channel = await supabase.channel("channelId") + + let subscription = await channel.onPostgresChange( + AnyAction.self, + schema: "public", + table: "users" + ) { change in + switch change { + case .delete(let action): print("Deleted: \(action.oldRecord)") + case .insert(let action): print("Inserted: \(action.record)") + case .select(let action): print("Selected: \(action.record)") + case .update(let action): print("Updated": \(action.oldRecord) with \(action.record)") + } + } + + await channel.subscribe() + + // remove subscription some time later + subscription.remove() + ``` - id: listen-to-inserts name: Listen to inserts code: | @@ -3199,6 +3425,25 @@ functions: print("Inserted: \(insert.record)") } ``` + - id: listen-to-inserts-callback + name: Listen to inserts using callback + code: | + ```swift + let channel = await supabase.channel("channelId") + + let subscription = await channel.onPostgresChange( + InsertAction.self, + schema: "public", + table: "users" + ) { insert in + print("Inserted: \(insert.record)") + } + + await channel.subscribe() + + // remove subscription some time later + subscription.remove() + ``` - id: listen-to-updates name: Listen to updates description: | @@ -3224,6 +3469,32 @@ functions: print("Updated: \(update.oldRecord) with \(update.record)") } ``` + - id: listen-to-updates-callback + name: Listen to updates using callback + description: | + By default, Supabase will send only the updated record. If you want to receive the previous values as well you can + enable full replication for the table you are listening too: + + ```sql + alter table "your_table" replica identity full; + ``` + code: | + ```swift + let channel = await supabase.channel("channelId") + + let subscription = await channel.onPostgresChange( + UpdateAction.self, + schema: "public", + table: "users" + ) { update in + print("Updated: \(update.oldRecord) with \(update.record)") + } + + await channel.subscribe() + + // remove subscription some time later + subscription.remove() + ``` - id: listen-to-deletes name: Listen to deletes description: | @@ -3249,6 +3520,32 @@ functions: print("Deleted: \(deletion.oldRecord)") } ``` + - id: listen-to-deletes-callback + name: Listen to deletes using callback + description: | + By default, Supabase does not send deleted records. If you want to receive the deleted record you can + enable full replication for the table you are listening too: + + ```sql + alter table "your_table" replica identity full; + ``` + code: | + ```swift + let channel = await supabase.channel("channelId") + + let subscription = await channel.onPostgresChange( + DeleteAction.self, + schema: "public", + table: "users" + ) { deletion in + print("Deleted: \(deletion.oldRecord)") + } + + await channel.subscribe() + + // remove subscription some time later + subscription.remove() + ``` - id: listening-to-row-level-changes name: Listen to row level changes code: | @@ -3268,6 +3565,26 @@ functions: print("Deleted: \(deletion.oldRecord)") } ``` + - id: listening-to-row-level-changes-callback + name: Listen to row level changes using callback + code: | + ```swift + let channel = await supabase.channel("channelId") + + let subscription = await channel.onPostgresChange( + DeleteAction.self, + schema: "public", + table: "users", + filter: "id=eq.1" + ) { deletion in + print("Deleted: \(deletion.oldRecord)") + } + + await channel.subscribe() + + // remove subscription some time later + subscription.remove() + ``` - id: remove-channel description: | diff --git a/apps/docs/types/api.d.ts b/apps/docs/types/api.d.ts index c630c9ee527..ef41f7bc31e 100644 --- a/apps/docs/types/api.d.ts +++ b/apps/docs/types/api.d.ts @@ -1,13661 +1,4 @@ /** - * This file was auto-generated by openapi-typescript. - * Do not make direct changes to the file. + * Avoid importing this file and import the types directly from api-types */ - -/** OneOf type helpers */ -type Without = { [P in Exclude]?: never } -type XOR = T | U extends object ? (Without & U) | (Without & T) : T | U -type OneOf = T extends [infer Only] - ? Only - : T extends [infer A, infer B, ...infer Rest] - ? OneOf<[XOR, ...Rest]> - : never - -export interface paths { - '/platform/notifications': { - /** Get notifications */ - get: operations['NotificationsController_getNotificationsV2'] - /** Delete notifications */ - delete: operations['NotificationsController_deleteNotifications'] - /** Update notifications */ - patch: operations['NotificationsController_updateNotificationsV2'] - } - '/platform/notifications/summary': { - /** Get an aggregated data of interest across all notifications for the user */ - get: operations['NotificationsController_getNotificationsSummary'] - } - '/platform/notifications/archive-all': { - /** Archives all notifications */ - patch: operations['NotificationsController_archiveAllNotifications'] - } - '/platform/reset-password': { - /** Reset password for email */ - post: operations['ResetPasswordController_resetPassword'] - } - '/platform/feedback/send': { - /** Send feedback */ - post: operations['SendFeedbackController_sendFeedback'] - } - '/platform/feedback/downgrade': { - /** Send exit survey to HubSpot */ - post: operations['SendExitSurveyController_sendExitSurvey'] - } - '/platform/feedback/upgrade': { - /** Send upgrade survey to survey_responses table */ - post: operations['SendUpgradeSurveyController_sendUpgradeSurvey'] - } - '/platform/feedback/docs': { - /** Send feedback on docs */ - post: operations['SendDocsFeedbackController_sendDocsFeedback'] - } - '/platform/signup': { - /** Sign up with email and password */ - post: operations['SignUpController_signUp'] - } - '/platform/status': { - /** Get infrastructure status */ - get: operations['StatusController_getStatus'] - } - '/platform/projects-resource-warnings': { - /** - * Gets resource warnings for all projects accessible by the user - * @description Only returns the minimal project info - */ - get: operations['ProjectsResourceWarningsController_getProjectsResourceWarnings'] - } - '/platform/tos/fly': { - /** Redirects to Fly sso flow */ - get: operations['TermsOfServiceController_flyTosAccepted'] - } - '/platform/auth/{ref}/config': { - /** Gets GoTrue config */ - get: operations['GoTrueConfigController_getGoTrueConfig'] - /** Updates GoTrue config */ - patch: operations['GoTrueConfigController_updateGoTrueConfig'] - } - '/platform/auth/{ref}/invite': { - /** Sends an invite to the given email */ - post: operations['InviteController_sendInvite'] - } - '/platform/auth/{ref}/magiclink': { - /** Sends a magic link to the given email */ - post: operations['MagicLinkController_sendMagicLink'] - } - '/platform/auth/{ref}/otp': { - /** Sends an OTP to the given phone number */ - post: operations['OtpController_sendOtp'] - } - '/platform/auth/{ref}/recover': { - /** Sends a recovery email to the given email */ - post: operations['RecoverController_sendRecover'] - } - '/platform/auth/{ref}/templates/{template}': { - /** Gets GoTrue template */ - get: operations['TemplateController_getTemplate'] - } - '/platform/auth/{ref}/users': { - /** Gets users */ - get: operations['UsersController_getUsers'] - /** Delete user with given ID */ - delete: operations['UsersController_deleteUser'] - } - '/platform/auth/{ref}/users/{id}/factors': { - /** Delete all factors associated to a user */ - delete: operations['FactorsController_deleteFactors'] - } - '/platform/database/{ref}/backups': { - /** Gets project backups */ - get: operations['BackupsController_getBackups'] - } - '/platform/database/{ref}/backups/enable-physical-backups': { - /** Enable usage of physical backups */ - post: operations['BackupsController_enablePhysicalBackup'] - } - '/platform/database/{ref}/backups/download': { - /** Download project backup */ - post: operations['BackupsController_downloadBackup'] - } - '/platform/database/{ref}/backups/restore': { - /** Restore project backup */ - post: operations['BackupsController_restoreBackup'] - } - '/platform/database/{ref}/backups/restore-physical': { - /** Restore project with a physical backup */ - post: operations['BackupsController_restorePhysicalBackup'] - } - '/platform/database/{ref}/backups/pitr': { - /** Restore project to a previous point in time */ - post: operations['BackupsController_restorePointInTimeBackup'] - } - '/platform/database/{ref}/hook-logs': { - /** Gets hook logs with the given ID */ - get: operations['HooksController_getHookLogs'] - } - '/platform/database/{ref}/hook-enable': { - /** Enables Database Webhooks on the project */ - post: operations['HooksController_enableHooks'] - } - '/platform/database/{ref}/owner-reassign': { - /** Gets the status of owner reassignment */ - get: operations['OwnerController_getOwnerReassignStatus'] - /** Reassigns object owner from supabase_admin to temp */ - post: operations['OwnerController_applyOwnerReassign'] - /** Rollback object owner from temp to supabase_admin */ - delete: operations['OwnerController_rollbackOwnerReassign'] - /** Reassigns object owner from temp to postgres */ - patch: operations['OwnerController_finaliseOwnerReassign'] - } - '/platform/organizations': { - /** Gets user's organizations */ - get: operations['OrganizationsController_getOrganizations'] - /** Creates an organization */ - post: operations['OrganizationsController_createOrganizationWithTier'] - } - '/platform/organizations/fly/{fly_organization_id}': { - /** Gets organization linked to fly organization id */ - get: operations['OrganizationsController_getOrganizationByFlyOrganizationId'] - } - '/platform/organizations/{slug}': { - /** Deletes organization */ - delete: operations['OrganizationSlugController_deleteOrganization'] - /** Updates organization */ - patch: operations['OrganizationSlugController_updateOrganization'] - } - '/platform/organizations/{slug}/customer': { - /** Gets the Stripe customer */ - get: operations['CustomerController_getCustomer'] - /** Updates the Stripe customer */ - patch: operations['CustomerController_updateCustomer'] - } - '/platform/organizations/{slug}/roles': { - /** Gets the given organization's roles */ - get: operations['RolesController_addMember'] - } - '/platform/organizations/{slug}/tax-ids': { - /** Gets the given organization's tax IDs */ - get: operations['TaxIdsController_getTaxIds'] - /** Creates a tax ID for the given organization */ - post: operations['TaxIdsController_createTaxId'] - /** Delete the tax ID with the given ID */ - delete: operations['TaxIdsController_deleteTaxId'] - } - '/platform/organizations/{slug}/transfer': { - /** Transfers the organization to the given member */ - post: operations['TransferController_transferOrganization'] - } - '/platform/organizations/{slug}/daily-stats': { - /** Gets daily organization stats */ - get: operations['OrgDailyStatsController_getDailyStats'] - } - '/platform/organizations/{slug}/daily-stats/compute': { - /** Gets daily organization stats for compute */ - get: operations['OrgDailyStatsController_getDailyStatsCompute'] - } - '/platform/organizations/{slug}/usage': { - /** Gets usage stats */ - get: operations['OrgUsageController_getOrgUsage'] - } - '/platform/organizations/{slug}/documents/standard-security-questionnaire': { - /** Get standard security questionnaire URL */ - get: operations['OrgDocumentsController_getStandardSecurityQuestionnaireUrl'] - } - '/platform/organizations/{slug}/documents/soc2-type-2-report': { - /** Get SOC2 Type 2 report URL */ - get: operations['OrgDocumentsController_getSoc2Type2ReportUrl'] - } - '/platform/organizations/{slug}/audit': { - /** Gets an organization's audit logs */ - get: operations['OrgAuditLogsController_getAuditLogs'] - } - '/platform/organizations/{slug}/members/invite': { - /** Gets invited users */ - get: operations['InviteController_getInvitedUsers'] - /** Invites user */ - post: operations['InviteController_inviteUser'] - /** Delete invited user */ - delete: operations['InviteController_deleteInvitedUser'] - } - '/platform/organizations/{slug}/members/join': { - /** Gets invite */ - get: operations['JoinController_getInvite'] - /** Joins organization */ - post: operations['JoinController_joinOrganization'] - } - '/platform/organizations/{slug}/members/leave': { - /** Leaves the given organization */ - post: operations['MembersDeprecatedController_leaveOrganization'] - } - '/platform/organizations/{slug}/members/remove': { - /** Leaves the given organization */ - delete: operations['MembersDeprecatedController_removeMember'] - } - '/platform/organizations/{slug}/members': { - /** Gets organization's members */ - get: operations['MembersController_getMembers'] - } - '/platform/organizations/{slug}/members/{gotrue_id}': { - /** Removes organization member */ - delete: operations['MembersController_deleteMember'] - /** Updates organization member */ - patch: operations['MembersController_updateMember'] - } - '/platform/organizations/{slug}/members/reached-free-project-limit': { - /** Gets organization members who have reached their free project limit */ - get: operations['ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit'] - } - '/platform/organizations/{slug}/payments': { - /** Gets Stripe payment methods for the given organization */ - get: operations['PaymentsController_getPaymentMethods'] - /** Detach Stripe payment method with the given card ID */ - delete: operations['PaymentsController_detachPaymentMethod'] - } - '/platform/organizations/{slug}/payments/setup-intent': { - /** Sets up a payment method */ - post: operations['SetupIntentOrgController_setUpPaymentMethod'] - } - '/platform/organizations/{slug}/billing/subscription': { - /** Gets the current subscription */ - get: operations['SubscriptionController_getSubscription'] - /** Updates subscription */ - put: operations['SubscriptionController_updateSubscription'] - } - '/platform/organizations/{slug}/billing/subscription/preview': { - /** Preview subscription changes */ - post: operations['SubscriptionController_previewSubscriptionChange'] - } - '/platform/organizations/{slug}/billing/subscription/schedule': { - /** Deletes any upcoming subscription schedule */ - delete: operations['SubscriptionController_deleteSubscriptionSchedule'] - } - '/platform/organizations/{slug}/billing/plans': { - /** Gets subscription plans */ - get: operations['OrgPlansController_getAvailablePlans'] - } - '/platform/organizations/{slug}/billing/invoices/upcoming': { - /** Gets the upcoming invoice */ - get: operations['OrgInvoicesController_getUpcomingInvoice'] - } - '/platform/pg-meta/{ref}/column-privileges': { - /** Retrieve column privileges */ - get: operations['ColumnPrivilegesController_getColumnPrivileges'] - /** Grant column privileges */ - post: operations['ColumnPrivilegesController_grantColumnPrivileges'] - /** Revoke column privileges */ - delete: operations['ColumnPrivilegesController_revokeColumnPrivileges'] - } - '/platform/pg-meta/{ref}/columns': { - /** Gets project pg.columns */ - get: operations['ColumnsController_getColumns'] - /** Creates project pg.column */ - post: operations['ColumnsController_createColumn'] - /** Deletes project pg.column with the given ID */ - delete: operations['ColumnsController_deleteColumn'] - /** Updates project pg.column with the given ID */ - patch: operations['ColumnsController_updateColumn'] - } - '/platform/pg-meta/{ref}/extensions': { - /** Gets project pg.extensions */ - get: operations['ExtensionsController_getExtensions'] - /** Creates project pg.extension */ - post: operations['ExtensionsController_createExtension'] - /** Deletes project pg.extension with the given ID */ - delete: operations['ExtensionsController_deleteExtension'] - } - '/platform/pg-meta/{ref}/foreign-tables': { - /** Retrieve database foreign tables */ - get: operations['ForeignTablesController_getForeignTables'] - } - '/platform/pg-meta/{ref}/functions': { - /** Gets project pg.functions */ - get: operations['FunctionsController_getFunctions'] - /** Creates project pg.function */ - post: operations['FunctionsController_createFunction'] - /** Deletes project pg.function with the given ID */ - delete: operations['FunctionsController_deleteFunction'] - /** Updates project pg.function with the given ID */ - patch: operations['FunctionsController_updateFunction'] - } - '/platform/pg-meta/{ref}/materialized-views': { - /** Retrieve database materialized views */ - get: operations['MaterializedViewsController_getMaterializedViews'] - } - '/platform/pg-meta/{ref}/policies': { - /** Gets project pg.policies */ - get: operations['PoliciesController_getPolicies'] - /** Creates project pg.policy */ - post: operations['PoliciesController_createPolicy'] - /** Deletes project pg.policy with the given ID */ - delete: operations['PoliciesController_deletePolicy'] - /** Updates project pg.policy with the given ID */ - patch: operations['PoliciesController_updatePolicy'] - } - '/platform/pg-meta/{ref}/publications': { - /** Gets project pg.publications */ - get: operations['PublicationsController_getPublications'] - /** Gets project pg.publications */ - post: operations['PublicationsController_createPublication'] - /** Deletes project pg.publication with the given ID */ - delete: operations['PublicationsController_deletePublication'] - /** Updates project pg.publication with the given ID */ - patch: operations['PublicationsController_updatePublication'] - } - '/platform/pg-meta/{ref}/query': { - /** Run sql query */ - post: operations['QueryController_runQuery'] - } - '/platform/pg-meta/{ref}/query/format': { - /** Format sql query */ - post: operations['QueryController_formatQuery'] - } - '/platform/pg-meta/{ref}/query/validate': { - /** Validate sql query */ - post: operations['QueryController_validateQuery'] - } - '/platform/pg-meta/{ref}/roles': { - /** Gets project pg.roles */ - get: operations['RolesController_getRoles'] - /** Creates project pg.role */ - post: operations['RolesController_createRole'] - /** Deletes project pg.role with the given ID */ - delete: operations['RolesController_deleteRole'] - /** Updates project pg.role with the given ID */ - patch: operations['RolesController_updateRole'] - } - '/platform/pg-meta/{ref}/schemas': { - /** Gets project pg.schemas */ - get: operations['SchemasController_getSchemas'] - /** Creates project pg.schema */ - post: operations['SchemasController_createSchema'] - /** Deletes project pg.schema with the given ID */ - delete: operations['SchemasController_deleteSchema'] - /** Updates project pg.schema with the given ID */ - patch: operations['SchemasController_updateSchema'] - } - '/platform/pg-meta/{ref}/search/tables': { - /** Searches project pg.tables. Return maximum 50 results. */ - post: operations['SearchController_searchTables'] - } - '/platform/pg-meta/{ref}/search/columns': { - /** Searches project pg.columns. Return maximum 50 results. */ - post: operations['SearchController_searchColumns'] - } - '/platform/pg-meta/{ref}/table-privileges': { - /** Retrieve table privileges */ - get: operations['TablePrivilegesController_getTablePrivileges'] - /** Grant table privileges */ - post: operations['TablePrivilegesController_grantTablePrivileges'] - /** Revoke table privileges */ - delete: operations['TablePrivilegesController_revokeTablePrivileges'] - } - '/platform/pg-meta/{ref}/tables': { - /** Gets project pg.tables or pg.table with the given ID */ - get: operations['TablesController_getTables'] - /** Creates project pg.table */ - post: operations['TablesController_createTable'] - /** Deletes project pg.table with the given ID */ - delete: operations['TablesController_deleteTable'] - /** Updates project pg.table with the given ID */ - patch: operations['TablesController_updateTable'] - } - '/platform/pg-meta/{ref}/triggers': { - /** Gets project pg.triggers */ - get: operations['TriggersController_getTriggers'] - /** Creates project pg.trigger */ - post: operations['TriggersController_createTrigger'] - /** Deletes project pg.trigger with the given ID */ - delete: operations['TriggersController_deleteTrigger'] - /** Updates project pg.trigger with the given ID */ - patch: operations['TriggersController_updateTrigger'] - } - '/platform/pg-meta/{ref}/types': { - /** Gets project pg.types */ - get: operations['TypesController_getTypes'] - } - '/platform/pg-meta/{ref}/views': { - /** Retrieve database views */ - get: operations['ViewsController_getViews'] - } - '/platform/profile/access-tokens': { - /** Gets the user's access tokens */ - get: operations['AccessTokensController_getAccessTokens'] - /** Creates a new access token */ - post: operations['AccessTokensController_createAccessToken'] - } - '/platform/profile/access-tokens/{id}': { - /** Gets the access token with the given ID */ - get: operations['AccessTokensController_getAccessToken'] - /** Deletes the access token with the given ID */ - delete: operations['AccessTokensController_deleteAccessToken'] - } - '/platform/profile/audit': { - /** Gets a user's audit logs */ - get: operations['UserAuditLogsController_getAuditLogs'] - } - '/platform/profile/search': { - /** Search profiles by username, email with the given keywords */ - post: operations['SearchProfileController_searchProfile'] - } - '/platform/profile/subscriptions': { - /** Gets the user's subscription statistics */ - get: operations['SubscriptionsController_getSubscriptionsStatistics'] - } - '/platform/profile/password-check': { - /** Check password strength */ - post: operations['PasswordCheckController_checkPassword'] - } - '/platform/profile/permissions': { - /** Gets all the user's permissions */ - get: operations['PermissionsController_getPermissions'] - } - '/platform/profile': { - /** Gets the user's profile */ - get: operations['ProfileController_getProfile'] - /** Creates user's profile */ - post: operations['ProfileController_createProfile'] - /** Deletes user's profile */ - delete: operations['ProfileController_deleteProfile'] - /** Updates user's profile */ - patch: operations['ProfileController_updateProfile'] - } - '/platform/projects': { - /** - * Gets all projects that belong to the authenticated user - * @description Only returns the minimal project info - */ - get: operations['ProjectsController_getProjects'] - /** Creates a project */ - post: operations['ProjectsController_createProject'] - } - '/platform/projects/fly/{fly_extension_id}': { - /** Gets project linked to fly extension id */ - get: operations['ProjectsController_getProjectByFlyExtensionId'] - } - '/platform/projects/{ref}/content': { - /** Gets project's content */ - get: operations['ContentController_getContent'] - /** Updates project's content */ - put: operations['ContentController_updateWholeContent'] - /** Creates project's content */ - post: operations['ContentController_createContent'] - /** Deletes project's contents */ - delete: operations['ContentController_deleteContents'] - /** Updates project's content */ - patch: operations['ContentController_updateContent'] - } - '/platform/projects/{ref}/daily-stats': { - /** Gets daily project stats */ - get: operations['DailyStatsController_getDailyStats'] - } - '/platform/projects/{ref}/databases': { - /** Gets non-removed databases of a specified project */ - get: operations['DatabasesController_getDatabases'] - } - '/platform/projects/{ref}/databases-statuses': { - /** Gets statuses of databases within a project */ - get: operations['DatabasesStatusesController_getStatus'] - } - '/platform/projects/{ref}/db-password': { - /** Updates the database password */ - patch: operations['DbPasswordController_updatePassword'] - } - '/platform/projects/{ref}/live': { - /** Gets project health check */ - get: operations['HealthCheckController_projectHealthCheck'] - } - '/platform/projects/{ref}/load-balancers': { - /** Gets non-removed databases of a specified project */ - get: operations['LoadBalancersController_getLoadBalancers'] - } - '/platform/projects/{ref}/api/rest': { - /** Gets project OpenApi */ - get: operations['ApiController_projectOpenApi'] - } - '/platform/projects/{ref}/api/graphql': { - /** Queries project Graphql */ - post: operations['ApiController_projectGraphql'] - } - '/platform/projects/{ref}/infra-monitoring': { - /** Gets project's usage metrics */ - get: operations['InfraMonitoringController_getUsageMetrics'] - } - '/platform/projects/{ref}/pause': { - /** Pauses the project */ - post: operations['PauseController_pauseProject'] - } - '/platform/projects/{ref}/resize': { - /** Resize database disk */ - post: operations['ResizeController_resizeDatabase'] - } - '/platform/projects/{ref}/restart': { - /** Restarts project */ - post: operations['RestartController_restartProject'] - } - '/platform/projects/{ref}': { - /** Gets a specific project that belongs to the authenticated user */ - get: operations['ProjectsRefController_getProject'] - /** Deletes the given project */ - delete: operations['ProjectsRefController_deleteProject'] - /** Updates the given project */ - patch: operations['ProjectsRefController_updateProject'] - } - '/platform/projects/{ref}/restore': { - /** Restores project */ - post: operations['RestoreController_restoreProject'] - } - '/platform/projects/{ref}/restart-services': { - /** Restarts given services */ - post: operations['RestartServicesController_restartServices'] - } - '/platform/projects/{ref}/settings': { - /** Gets project's settings */ - get: operations['SettingsController_getProjectApi'] - } - '/platform/projects/{ref}/status': { - /** Gets project's status */ - get: operations['StatusController_getStatus'] - } - '/platform/projects/{ref}/update': { - /** - * Updates the project - * @deprecated - * @description Replaced by PATCH /platform/projects/:ref - */ - post: operations['UpdateController_updateProject'] - } - '/platform/projects/{ref}/transfer/preview': { - /** Previews transfering a project to a different organizations, shows eligibility and impact. */ - post: operations['ProjectTransferController_previewTransfer'] - } - '/platform/projects/{ref}/transfer': { - /** Transfers a project to a different organization. */ - post: operations['ProjectTransferController_transferProject'] - } - '/platform/projects/{ref}/analytics/endpoints/functions.inv-stats': { - /** Gets a project's function invocation statistics */ - get: operations['FunctionInvocationLogsController_getStatus'] - } - '/platform/projects/{ref}/analytics/endpoints/functions.req-stats': { - /** Gets a project's function request statistics */ - get: operations['FunctionRequestLogsController_getStatus'] - } - '/platform/projects/{ref}/analytics/endpoints/functions.resource-usage': { - /** Gets a project's function resource usage */ - get: operations['FunctionResourceLogsController_getStatus'] - } - '/platform/projects/{ref}/analytics/endpoints/logs.all': { - /** Gets project's logs */ - get: operations['LogsController_getApiPaths'] - } - '/platform/projects/{ref}/analytics/endpoints/usage.api-counts': { - /** Gets project's usage api counts */ - get: operations['UsageApiController_getApiCounts'] - } - '/platform/projects/{ref}/analytics/endpoints/usage.api-requests-count': { - /** Gets project's usage api requests count */ - get: operations['UsageApiController_getApiRequestsCount'] - } - '/platform/projects/{ref}/config/pgbouncer': { - /** Gets project's pgbouncer config */ - get: operations['PgbouncerConfigController_getPgbouncerConfig'] - /** Updates project's pgbouncer config */ - patch: operations['PgbouncerConfigController_updatePgbouncerConfig'] - } - '/platform/projects/{ref}/config/pgbouncer/status': { - /** Gets project's pgbouncer status */ - get: operations['PgbouncerConfigController_getPgbouncerStatus'] - } - '/platform/projects/{ref}/config/postgrest': { - /** Gets project's postgrest config */ - get: operations['PostgrestConfigController_getPostgRESTConfig'] - /** Updates project's postgrest config */ - patch: operations['PostgrestConfigController_updatePostgRESTConfig'] - } - '/platform/projects/{ref}/config/postgres': { - /** Gets project's Postgres config */ - get: operations['PostgresConfigController_getConfig'] - /** Updates project's Postgres config */ - put: operations['PostgresConfigController_updateConfig'] - } - '/platform/projects/{ref}/config/secrets': { - /** Updates project's secrets config */ - patch: operations['SecretsConfigController_updateConfig'] - } - '/platform/projects/{ref}/config/storage': { - /** Gets project's storage config */ - get: operations['StorageConfigController_getConfig'] - /** Updates project's storage config */ - patch: operations['StorageConfigController_updateConfig'] - } - '/platform/projects/{ref}/config/supavisor': { - /** Gets project's supavisor config */ - get: operations['SupavisorConfigController_getSupavisorConfig'] - /** Updates project's supavisor config */ - patch: operations['SupavisorConfigController_updateSupavisorConfig'] - } - '/platform/projects/{ref}/billing/addons': { - /** Gets project addons */ - get: operations['ProjectAddonController_getProjectAddons'] - /** Updates project addon */ - post: operations['ProjectAddonController_updateAddon'] - } - '/platform/projects/{ref}/billing/addons/{addon_variant}': { - /** Removes project addon */ - delete: operations['ProjectAddonController_removeAddon'] - } - '/platform/props/project/{ref}/api': { - /** - * Gets project's api info - * @deprecated - */ - get: operations['ApiController_getProjectApi'] - } - '/platform/props/project/{ref}/jwt-secret-update-status': { - /** Gets the last JWT secret update status */ - get: operations['JwtSecretUpdateStatusController_getJwtSecretUpdateStatus'] - } - '/platform/props/project/{ref}/settings': { - /** - * Gets project's settings - * @deprecated - */ - get: operations['SettingsController_getProjectApi'] - } - '/platform/storage/{ref}/buckets/{id}': { - /** Gets bucket */ - get: operations['StorageBucketIdController_getBucket'] - /** Deletes bucket */ - delete: operations['StorageBucketIdController_deleteBucket'] - /** Updates bucket */ - patch: operations['StorageBucketIdController_updateBucket'] - } - '/platform/storage/{ref}/buckets/{id}/empty': { - /** Removes all objects inside a single bucket. */ - post: operations['StorageBucketIdController_emptyBucket'] - } - '/platform/storage/{ref}/buckets': { - /** Gets list of buckets */ - get: operations['StorageBucketsController_getBuckets'] - /** Create bucket */ - post: operations['StorageBucketsController_createBucket'] - } - '/platform/storage/{ref}/buckets/{id}/objects/list': { - /** Gets list of objects with the given bucket */ - post: operations['StorageObjectsController_getObjects'] - } - '/platform/storage/{ref}/buckets/{id}/objects/public-url': { - /** Creates URL for an asset in a public bucket */ - post: operations['StorageObjectsController_createPublicUrl'] - } - '/platform/storage/{ref}/buckets/{id}/objects/download': { - /** Downloads a file from a private bucket */ - post: operations['StorageObjectsController_download'] - } - '/platform/storage/{ref}/buckets/{id}/objects/sign': { - /** Creates a signed URL */ - post: operations['StorageObjectsController_createSignedUrl'] - } - '/platform/storage/{ref}/buckets/{id}/objects/sign-multi': { - /** Gets multiple signed URLs */ - post: operations['StorageObjectsController_createSignedUrls'] - } - '/platform/storage/{ref}/buckets/{id}/objects/copy': { - /** Copys object */ - post: operations['StorageObjectsController_copyObject'] - } - '/platform/storage/{ref}/buckets/{id}/objects/move': { - /** Move object */ - post: operations['StorageObjectsController_moveObject'] - } - '/platform/storage/{ref}/buckets/{id}/objects': { - /** Deletes objects */ - delete: operations['StorageObjectsController_deleteObjects'] - } - '/platform/stripe/invoices': { - /** Gets invoices for the given customer */ - get: operations['InvoicesController_getInvoices'] - /** Gets the total count of invoices for the given customer */ - head: operations['InvoicesController_countInvoices'] - } - '/platform/stripe/invoices/overdue': { - /** Gets information about overdue invoices that relate to the authenticated user */ - get: operations['InvoicesController_getOverdueInvoices'] - } - '/platform/stripe/invoices/{id}': { - /** Gets invoice with the given invoice ID */ - get: operations['InvoicesController_getInvoice'] - } - '/platform/stripe/setup-intent': { - /** Sets up a payment method */ - post: operations['SetupIntentController_setUpPaymentMethod'] - } - '/platform/telemetry/event': { - /** Sends analytics server event */ - post: operations['TelemetryEventController_sendServerEvent'] - } - '/platform/telemetry/identify': { - /** Send analytics identify event */ - post: operations['TelemetryIdentifyController_identify'] - } - '/platform/telemetry/page': { - /** Send server page event */ - post: operations['TelemetryPageController_sendServerPage'] - } - '/platform/telemetry/activity': { - /** Sends mixpanel server activity */ - post: operations['TelemetryActivityController_sendServerActivity'] - } - '/platform/telemetry/pageview': { - /** Send mixpanel page event */ - post: operations['TelemetryPageviewController_sendServerPageViewed'] - } - '/platform/vercel/token': { - /** Gets the Vercel access token for the given code */ - get: operations['VercelAccessTokenController_getAccessToken'] - } - '/platform/vercel/projects': { - /** Gets the list of Vercel projects */ - get: operations['VercelProjectsController_getVercelProjects'] - } - '/platform/vercel/projects/{id}': { - /** Gets the Vercel project with the given ID */ - get: operations['VercelProjectsController_getVercelProject'] - } - '/platform/vercel/projects/envs': { - /** Gets the environment variables for the given project ID on behalf of the given team ID */ - get: operations['VercelEnvironmentVariablesController_getEnvironmentVariables'] - /** Creates the environment variable for the given project ID on behalf of the given team ID */ - post: operations['VercelEnvironmentVariablesController_createEnvironmentVariable'] - } - '/platform/integrations': { - /** Gets user's integrations */ - get: operations['IntegrationsController_getProjectConnections'] - } - '/platform/integrations/{slug}': { - /** Gets integration with the given organization slug */ - get: operations['IntegrationsController_getProjectConnectionsForOrg'] - } - '/platform/integrations/vercel': { - /** - * Create vercel integration - * @description Exchanges a vercel code for an access token and saves the access token to the new integration record - */ - post: operations['VercelIntegrationController_createVercelIntegration'] - } - '/platform/integrations/vercel/{organization_integration_id}': { - /** Removes Vercel organization integration with the given id */ - delete: operations['VercelIntegrationController_removeVercelIntegration'] - } - '/platform/integrations/vercel/projects/{organization_integration_id}': { - /** Gets vercel projects with the given organization integration id */ - get: operations['VercelProjectController_getVercelProjects'] - } - '/platform/integrations/vercel/connections/{organization_integration_id}': { - /** Gets installed vercel project connections for the given organization integration */ - get: operations['VercelConnectionsController_getVercelConnections'] - } - '/platform/integrations/vercel/connections': { - /** Connects a Vercel project to a supabase project */ - post: operations['VercelConnectionsController_createVercelConnection'] - } - '/platform/integrations/vercel/connections/{connection_id}/sync-envs': { - /** Syncs supabase project envs with given connection id */ - post: operations['VercelConnectionsController_syncVercelConnectionEnvironments'] - } - '/platform/integrations/vercel/connections/{connection_id}': { - /** Deletes vercel project connection */ - delete: operations['VercelConnectionsController_deleteVercelConnection'] - /** Updates a Vercel connection for a supabase project */ - patch: operations['VercelConnectionsController_updateVercelConnection'] - } - '/platform/integrations/github/authorization': { - /** Get GitHub authorization */ - get: operations['GitHubAuthorizationsController_getGitHubAuthorization'] - /** Create GitHub authorization */ - post: operations['GitHubAuthorizationsController_createGitHubAuthorization'] - } - '/platform/integrations/github/connections': { - /** List organization GitHub connections */ - get: operations['GitHubConnectionsController_listOrganizationGitHubConnections'] - /** Connects a GitHub project to a supabase project */ - post: operations['GitHubConnectionsController_createGitHubConnection'] - } - '/platform/integrations/github/connections/{connection_id}': { - /** Deletes github project connection */ - delete: operations['GitHubConnectionsController_deleteGitHubConnection'] - /** Updates a GitHub connection for a supabase project */ - patch: operations['GitHubConnectionsController_updateGitHubConnection'] - } - '/platform/integrations/github/branches/{connectionId}': { - /** List GitHub connection branches */ - get: operations['GitHubBranchesController_listConnectionBranches'] - } - '/platform/integrations/github/branches/{connectionId}/{branchName}': { - /** Get GitHub connection branch */ - get: operations['GitHubBranchesController_getConnectionBranch'] - } - '/platform/integrations/github/repositories': { - /** Gets GitHub repositories for user */ - get: operations['GitHubRepositoriesController_listRepositories'] - } - '/platform/cli/login': { - /** Create CLI login session */ - post: operations['CliLoginController_createCliLoginSession'] - } - '/platform/cli/login/{session_id}': { - /** Retrieve CLI login session */ - get: operations['CliLoginController_getCliLoginSession'] - } - '/system/auth/{ref}/templates/{template}': { - /** Gets GoTrue template */ - get: operations['AuthTemplateController_getTemplate'] - } - '/system/database/{ref}/owner/owner-reassign': { - /** Gets the status of owner reassignment */ - get: operations['DatabaseOwnerController_getOwnerReassignStatus'] - /** Reassigns object owner from supabase_admin to temp */ - post: operations['DatabaseOwnerController_applyOwnerReassign'] - /** Rollback object owner from temp to supabase_admin */ - delete: operations['DatabaseOwnerController_rollbackOwnerReassign'] - /** Reassigns object owner from temp to postgres */ - patch: operations['DatabaseOwnerController_finaliseOwnerReassign'] - } - '/system/database/{ref}/password': { - /** Updates the database password */ - patch: operations['DatabasePasswordController_updatePassword'] - } - '/system/github-secret-alert': { - /** Reset JWT if leaked keys found by GitHub secret scanning */ - post: operations['GithubSecretAlertController_resetJwt'] - } - '/system/projects/{ref}/functions': { - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - get: operations['SystemFunctionsController_getFunctions'] - /** Deletes all Edge Functions from a project */ - delete: operations['SystemFunctionsController_systemDeleteAllFunctions'] - } - '/system/projects/{ref}/secrets': { - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - get: operations['SystemSecretsController_getSecrets'] - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - post: operations['SystemSecretsController_createSecrets'] - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - delete: operations['SystemSecretsController_deleteSecrets'] - } - '/system/projects/{ref}/secrets/refresh': { - /** Refreshes secrets */ - post: operations['SecretsRefreshController_refreshSecrets'] - } - '/system/health': { - /** Get API health status */ - get: operations['HealthController_getStatus'] - } - '/system/projects/{ref}/health-reporting': { - /** Updates a project's health status. */ - put: operations['HealthReportingController_updateStatus'] - } - '/system/projects/{ref}/ha-events': { - /** Records an HA event */ - put: operations['HaEventsController_updateStatus'] - } - '/system/projects/{ref}/credentials/aws': { - /** Allows a project to obtain temporary credentials. */ - post: operations['AwsCredentialsController_getTemporaryCredentials'] - } - '/system/projects/{ref}/billing/addons': { - /** Updates project addon */ - post: operations['AddonsController_updateAddon'] - } - '/system/projects/{ref}/billing/addons/{addon_variant}': { - /** Removes project addon */ - delete: operations['AddonsController_removeAddon'] - } - '/system/projects/{ref}/config/update-jwt/complete': { - /** Handle update project jwt on completion */ - post: operations['ProjectUpdateJwtController_completeUpdateJwt'] - } - '/system/projects': { - /** Create a project */ - post: operations['ProjectsController_createProject'] - } - '/system/organizations/{slug}/usage': { - /** Gets usage stats */ - get: operations['OrgUsageSystemController_getOrgUsage'] - } - '/system/organizations/{slug}/billing/partner/usage-and-costs': { - /** Gets the partner usage and costs */ - get: operations['PartnerBillingSystemController_getPartnerUsageAndCosts'] - } - '/system/organizations/{slug}/billing/subscription': { - /** Gets the current subscription */ - get: operations['OrgSubscriptionSystemController_getSubscription'] - /** Updates subscription */ - put: operations['OrgSubscriptionSystemController_updateSubscription'] - } - '/system/organizations/{slug}/restrictions': { - /** Updates restriction status of an org */ - put: operations['OrgRestrictionsSystemController_updateRestriction'] - } - '/system/integrations/vercel/webhooks': { - /** Processes Vercel event */ - post: operations['VercelWebhooksController_processEvent'] - } - '/system/integrations/github/webhooks': { - /** Processes GitHub event */ - post: operations['GitHubWebhooksController_processEvent'] - } - '/system/stripe/webhooks-v2': { - /** Processes Stripe event */ - post: operations['StripeWebhooksController_processEvent'] - } - '/system/stripe/webhooks': { - /** Processes Stripe event */ - post: operations['StripeWebhooksController_processEvent'] - } - '/v0/notifications': { - /** Get notifications */ - get: operations['NotificationsController_getNotificationsV2'] - /** Delete notifications */ - delete: operations['NotificationsController_deleteNotifications'] - /** Update notifications */ - patch: operations['NotificationsController_updateNotificationsV2'] - } - '/v0/notifications/summary': { - /** Get an aggregated data of interest across all notifications for the user */ - get: operations['NotificationsController_getNotificationsSummary'] - } - '/v0/notifications/archive-all': { - /** Archives all notifications */ - patch: operations['NotificationsController_archiveAllNotifications'] - } - '/v0/status': { - /** Get infrastructure status */ - get: operations['StatusController_getStatus'] - } - '/v0/auth/{ref}/config': { - /** Gets GoTrue config */ - get: operations['GoTrueConfigController_getGoTrueConfig'] - /** Updates GoTrue config */ - patch: operations['GoTrueConfigController_updateGoTrueConfig'] - } - '/v0/auth/{ref}/invite': { - /** Sends an invite to the given email */ - post: operations['InviteController_sendInvite'] - } - '/v0/auth/{ref}/magiclink': { - /** Sends a magic link to the given email */ - post: operations['MagicLinkController_sendMagicLink'] - } - '/v0/auth/{ref}/otp': { - /** Sends an OTP to the given phone number */ - post: operations['OtpController_sendOtp'] - } - '/v0/auth/{ref}/recover': { - /** Sends a recovery email to the given email */ - post: operations['RecoverController_sendRecover'] - } - '/v0/auth/{ref}/templates/{template}': { - /** Gets GoTrue template */ - get: operations['TemplateController_getTemplate'] - } - '/v0/auth/{ref}/users': { - /** Gets users */ - get: operations['UsersController_getUsers'] - /** Delete user with given ID */ - delete: operations['UsersController_deleteUser'] - } - '/v0/auth/{ref}/users/{id}/factors': { - /** Delete all factors associated to a user */ - delete: operations['FactorsController_deleteFactors'] - } - '/v0/database/{ref}/backups': { - /** Gets project backups */ - get: operations['BackupsController_getBackups'] - } - '/v0/database/{ref}/backups/enable-physical-backups': { - /** Enable usage of physical backups */ - post: operations['BackupsController_enablePhysicalBackup'] - } - '/v0/database/{ref}/backups/download': { - /** Download project backup */ - post: operations['BackupsController_downloadBackup'] - } - '/v0/database/{ref}/backups/restore': { - /** Restore project backup */ - post: operations['BackupsController_restoreBackup'] - } - '/v0/database/{ref}/backups/restore-physical': { - /** Restore project with a physical backup */ - post: operations['BackupsController_restorePhysicalBackup'] - } - '/v0/database/{ref}/backups/pitr': { - /** Restore project to a previous point in time */ - post: operations['BackupsController_restorePointInTimeBackup'] - } - '/v0/database/{ref}/hook-logs': { - /** Gets hook logs with the given ID */ - get: operations['HooksController_getHookLogs'] - } - '/v0/database/{ref}/hook-enable': { - /** Enables Database Webhooks on the project */ - post: operations['HooksController_enableHooks'] - } - '/v0/organizations': { - /** Gets user's organizations */ - get: operations['OrganizationsController_getOrganizations'] - /** Creates an organization */ - post: operations['OrganizationsController_createOrganizationWithTier'] - } - '/v0/organizations/fly/{fly_organization_id}': { - /** Gets organization linked to fly organization id */ - get: operations['OrganizationsController_getOrganizationByFlyOrganizationId'] - } - '/v0/organizations/{slug}': { - /** Deletes organization */ - delete: operations['OrganizationSlugController_deleteOrganization'] - /** Updates organization */ - patch: operations['OrganizationSlugController_updateOrganization'] - } - '/v0/organizations/{slug}/roles': { - /** Gets the given organization's roles */ - get: operations['RolesController_addMember'] - } - '/v0/organizations/{slug}/members/invite': { - /** Gets invited users */ - get: operations['InviteController_getInvitedUsers'] - /** Invites user */ - post: operations['InviteController_inviteUser'] - /** Delete invited user */ - delete: operations['InviteController_deleteInvitedUser'] - } - '/v0/organizations/{slug}/members/join': { - /** Gets invite */ - get: operations['JoinController_getInvite'] - /** Joins organization */ - post: operations['JoinController_joinOrganization'] - } - '/v0/organizations/{slug}/members': { - /** Gets organization's members */ - get: operations['MembersController_getMembers'] - } - '/v0/organizations/{slug}/members/{gotrue_id}': { - /** Removes organization member */ - delete: operations['MembersController_deleteMember'] - /** Updates organization member */ - patch: operations['MembersController_updateMember'] - } - '/v0/pg-meta/{ref}/column-privileges': { - /** Retrieve column privileges */ - get: operations['ColumnPrivilegesController_getColumnPrivileges'] - /** Grant column privileges */ - post: operations['ColumnPrivilegesController_grantColumnPrivileges'] - /** Revoke column privileges */ - delete: operations['ColumnPrivilegesController_revokeColumnPrivileges'] - } - '/v0/pg-meta/{ref}/columns': { - /** Gets project pg.columns */ - get: operations['ColumnsController_getColumns'] - /** Creates project pg.column */ - post: operations['ColumnsController_createColumn'] - /** Deletes project pg.column with the given ID */ - delete: operations['ColumnsController_deleteColumn'] - /** Updates project pg.column with the given ID */ - patch: operations['ColumnsController_updateColumn'] - } - '/v0/pg-meta/{ref}/extensions': { - /** Gets project pg.extensions */ - get: operations['ExtensionsController_getExtensions'] - /** Creates project pg.extension */ - post: operations['ExtensionsController_createExtension'] - /** Deletes project pg.extension with the given ID */ - delete: operations['ExtensionsController_deleteExtension'] - } - '/v0/pg-meta/{ref}/foreign-tables': { - /** Retrieve database foreign tables */ - get: operations['ForeignTablesController_getForeignTables'] - } - '/v0/pg-meta/{ref}/functions': { - /** Gets project pg.functions */ - get: operations['FunctionsController_getFunctions'] - /** Creates project pg.function */ - post: operations['FunctionsController_createFunction'] - /** Deletes project pg.function with the given ID */ - delete: operations['FunctionsController_deleteFunction'] - /** Updates project pg.function with the given ID */ - patch: operations['FunctionsController_updateFunction'] - } - '/v0/pg-meta/{ref}/materialized-views': { - /** Retrieve database materialized views */ - get: operations['MaterializedViewsController_getMaterializedViews'] - } - '/v0/pg-meta/{ref}/policies': { - /** Gets project pg.policies */ - get: operations['PoliciesController_getPolicies'] - /** Creates project pg.policy */ - post: operations['PoliciesController_createPolicy'] - /** Deletes project pg.policy with the given ID */ - delete: operations['PoliciesController_deletePolicy'] - /** Updates project pg.policy with the given ID */ - patch: operations['PoliciesController_updatePolicy'] - } - '/v0/pg-meta/{ref}/publications': { - /** Gets project pg.publications */ - get: operations['PublicationsController_getPublications'] - /** Gets project pg.publications */ - post: operations['PublicationsController_createPublication'] - /** Deletes project pg.publication with the given ID */ - delete: operations['PublicationsController_deletePublication'] - /** Updates project pg.publication with the given ID */ - patch: operations['PublicationsController_updatePublication'] - } - '/v0/pg-meta/{ref}/query': { - /** Run sql query */ - post: operations['QueryController_runQuery'] - } - '/v0/pg-meta/{ref}/query/format': { - /** Format sql query */ - post: operations['QueryController_formatQuery'] - } - '/v0/pg-meta/{ref}/query/validate': { - /** Validate sql query */ - post: operations['QueryController_validateQuery'] - } - '/v0/pg-meta/{ref}/roles': { - /** Gets project pg.roles */ - get: operations['RolesController_getRoles'] - /** Creates project pg.role */ - post: operations['RolesController_createRole'] - /** Deletes project pg.role with the given ID */ - delete: operations['RolesController_deleteRole'] - /** Updates project pg.role with the given ID */ - patch: operations['RolesController_updateRole'] - } - '/v0/pg-meta/{ref}/schemas': { - /** Gets project pg.schemas */ - get: operations['SchemasController_getSchemas'] - /** Creates project pg.schema */ - post: operations['SchemasController_createSchema'] - /** Deletes project pg.schema with the given ID */ - delete: operations['SchemasController_deleteSchema'] - /** Updates project pg.schema with the given ID */ - patch: operations['SchemasController_updateSchema'] - } - '/v0/pg-meta/{ref}/search/tables': { - /** Searches project pg.tables. Return maximum 50 results. */ - post: operations['SearchController_searchTables'] - } - '/v0/pg-meta/{ref}/search/columns': { - /** Searches project pg.columns. Return maximum 50 results. */ - post: operations['SearchController_searchColumns'] - } - '/v0/pg-meta/{ref}/table-privileges': { - /** Retrieve table privileges */ - get: operations['TablePrivilegesController_getTablePrivileges'] - /** Grant table privileges */ - post: operations['TablePrivilegesController_grantTablePrivileges'] - /** Revoke table privileges */ - delete: operations['TablePrivilegesController_revokeTablePrivileges'] - } - '/v0/pg-meta/{ref}/tables': { - /** Gets project pg.tables or pg.table with the given ID */ - get: operations['TablesController_getTables'] - /** Creates project pg.table */ - post: operations['TablesController_createTable'] - /** Deletes project pg.table with the given ID */ - delete: operations['TablesController_deleteTable'] - /** Updates project pg.table with the given ID */ - patch: operations['TablesController_updateTable'] - } - '/v0/pg-meta/{ref}/triggers': { - /** Gets project pg.triggers */ - get: operations['TriggersController_getTriggers'] - /** Creates project pg.trigger */ - post: operations['TriggersController_createTrigger'] - /** Deletes project pg.trigger with the given ID */ - delete: operations['TriggersController_deleteTrigger'] - /** Updates project pg.trigger with the given ID */ - patch: operations['TriggersController_updateTrigger'] - } - '/v0/pg-meta/{ref}/types': { - /** Gets project pg.types */ - get: operations['TypesController_getTypes'] - } - '/v0/pg-meta/{ref}/views': { - /** Retrieve database views */ - get: operations['ViewsController_getViews'] - } - '/v0/projects': { - /** - * Gets all projects that belong to the authenticated user - * @description Only returns the minimal project info - */ - get: operations['ProjectsController_getProjects'] - /** Creates a project */ - post: operations['ProjectsController_createProject'] - } - '/v0/projects/fly/{fly_extension_id}': { - /** Gets project linked to fly extension id */ - get: operations['ProjectsController_getProjectByFlyExtensionId'] - } - '/v0/projects/metrics': { - /** - * Get metrics - * @description At most 50 projects can be queried at a time. - * Currently supports '1d', '3d', and '7d' intervals. - */ - get: operations['V0ProjectsMetricsController_getProjectsMetrics'] - } - '/v0/projects/{ref}/content': { - /** Gets project's content */ - get: operations['ContentController_getContent'] - /** Updates project's content */ - put: operations['ContentController_updateWholeContent'] - /** Creates project's content */ - post: operations['ContentController_createContent'] - /** Deletes project's contents */ - delete: operations['ContentController_deleteContents'] - /** Updates project's content */ - patch: operations['ContentController_updateContent'] - } - '/v0/projects/{ref}/databases': { - /** Gets non-removed databases of a specified project */ - get: operations['DatabasesController_getDatabases'] - } - '/v0/projects/{ref}/databases-statuses': { - /** Gets statuses of databases within a project */ - get: operations['DatabasesStatusesController_getStatus'] - } - '/v0/projects/{ref}/db-password': { - /** Updates the database password */ - patch: operations['DbPasswordController_updatePassword'] - } - '/v0/projects/{ref}/live': { - /** Gets project health check */ - get: operations['HealthCheckController_projectHealthCheck'] - } - '/v0/projects/{ref}/load-balancers': { - /** Gets non-removed databases of a specified project */ - get: operations['LoadBalancersController_getLoadBalancers'] - } - '/v0/projects/{ref}/api/rest': { - /** Gets project OpenApi */ - get: operations['ApiController_projectOpenApi'] - } - '/v0/projects/{ref}/api/graphql': { - /** Queries project Graphql */ - post: operations['ApiController_projectGraphql'] - } - '/v0/projects/{ref}/infra-monitoring': { - /** Gets project's usage metrics */ - get: operations['InfraMonitoringController_getUsageMetrics'] - } - '/v0/projects/{ref}/pause': { - /** Pauses the project */ - post: operations['PauseController_pauseProject'] - } - '/v0/projects/{ref}/resize': { - /** Resize database disk */ - post: operations['ResizeController_resizeDatabase'] - } - '/v0/projects/{ref}/restart': { - /** Restarts project */ - post: operations['RestartController_restartProject'] - } - '/v0/projects/{ref}': { - /** Gets a specific project that belongs to the authenticated user */ - get: operations['ProjectsRefController_getProject'] - /** Deletes the given project */ - delete: operations['ProjectsRefController_deleteProject'] - /** Updates the given project */ - patch: operations['ProjectsRefController_updateProject'] - } - '/v0/projects/{ref}/restore': { - /** Restores project */ - post: operations['RestoreController_restoreProject'] - } - '/v0/projects/{ref}/restart-services': { - /** Restarts given services */ - post: operations['RestartServicesController_restartServices'] - } - '/v0/projects/{ref}/settings': { - /** Gets project's settings */ - get: operations['SettingsController_getProjectApi'] - } - '/v0/projects/{ref}/status': { - /** Gets project's status */ - get: operations['StatusController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/functions.inv-stats': { - /** Gets a project's function invocation statistics */ - get: operations['FunctionInvocationLogsController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/functions.req-stats': { - /** Gets a project's function request statistics */ - get: operations['FunctionRequestLogsController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/functions.resource-usage': { - /** Gets a project's function resource usage */ - get: operations['FunctionResourceLogsController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/logs.all': { - /** Gets project's logs */ - get: operations['LogsController_getApiPaths'] - } - '/v0/projects/{ref}/analytics/endpoints/usage.api-counts': { - /** Gets project's usage api counts */ - get: operations['UsageApiController_getApiCounts'] - } - '/v0/projects/{ref}/analytics/endpoints/usage.api-requests-count': { - /** Gets project's usage api requests count */ - get: operations['UsageApiController_getApiRequestsCount'] - } - '/v0/projects/{ref}/config/pgbouncer': { - /** Gets project's pgbouncer config */ - get: operations['PgbouncerConfigController_getPgbouncerConfig'] - /** Updates project's pgbouncer config */ - patch: operations['PgbouncerConfigController_updatePgbouncerConfig'] - } - '/v0/projects/{ref}/config/pgbouncer/status': { - /** Gets project's pgbouncer status */ - get: operations['PgbouncerConfigController_getPgbouncerStatus'] - } - '/v0/projects/{ref}/config/postgrest': { - /** Gets project's postgrest config */ - get: operations['PostgrestConfigController_getPostgRESTConfig'] - /** Updates project's postgrest config */ - patch: operations['PostgrestConfigController_updatePostgRESTConfig'] - } - '/v0/projects/{ref}/config/postgres': { - /** Gets project's Postgres config */ - get: operations['PostgresConfigController_getConfig'] - /** Updates project's Postgres config */ - put: operations['PostgresConfigController_updateConfig'] - } - '/v0/projects/{ref}/config/secrets': { - /** Updates project's secrets config */ - patch: operations['SecretsConfigController_updateConfig'] - } - '/v0/projects/{ref}/config/storage': { - /** Gets project's storage config */ - get: operations['StorageConfigController_getConfig'] - /** Updates project's storage config */ - patch: operations['StorageConfigController_updateConfig'] - } - '/v0/projects/{ref}/config/supavisor': { - /** Gets project's supavisor config */ - get: operations['SupavisorConfigController_getSupavisorConfig'] - /** Updates project's supavisor config */ - patch: operations['SupavisorConfigController_updateSupavisorConfig'] - } - '/v0/projects/{ref}/billing/addons': { - /** Gets project addons */ - get: operations['ProjectAddonController_getProjectAddons'] - /** Updates project addon */ - post: operations['ProjectAddonController_updateAddon'] - } - '/v0/projects/{ref}/billing/addons/{addon_variant}': { - /** Removes project addon */ - delete: operations['ProjectAddonController_removeAddon'] - } - '/v0/storage/{ref}/buckets/{id}': { - /** Gets bucket */ - get: operations['StorageBucketIdController_getBucket'] - /** Deletes bucket */ - delete: operations['StorageBucketIdController_deleteBucket'] - /** Updates bucket */ - patch: operations['StorageBucketIdController_updateBucket'] - } - '/v0/storage/{ref}/buckets/{id}/empty': { - /** Removes all objects inside a single bucket. */ - post: operations['StorageBucketIdController_emptyBucket'] - } - '/v0/storage/{ref}/buckets': { - /** Gets list of buckets */ - get: operations['StorageBucketsController_getBuckets'] - /** Create bucket */ - post: operations['StorageBucketsController_createBucket'] - } - '/v0/storage/{ref}/buckets/{id}/objects/list': { - /** Gets list of objects with the given bucket */ - post: operations['StorageObjectsController_getObjects'] - } - '/v0/storage/{ref}/buckets/{id}/objects/public-url': { - /** Creates URL for an asset in a public bucket */ - post: operations['StorageObjectsController_createPublicUrl'] - } - '/v0/storage/{ref}/buckets/{id}/objects/download': { - /** Downloads a file from a private bucket */ - post: operations['StorageObjectsController_download'] - } - '/v0/storage/{ref}/buckets/{id}/objects/sign': { - /** Creates a signed URL */ - post: operations['StorageObjectsController_createSignedUrl'] - } - '/v0/storage/{ref}/buckets/{id}/objects/sign-multi': { - /** Gets multiple signed URLs */ - post: operations['StorageObjectsController_createSignedUrls'] - } - '/v0/storage/{ref}/buckets/{id}/objects/copy': { - /** Copys object */ - post: operations['StorageObjectsController_copyObject'] - } - '/v0/storage/{ref}/buckets/{id}/objects/move': { - /** Move object */ - post: operations['StorageObjectsController_moveObject'] - } - '/v0/storage/{ref}/buckets/{id}/objects': { - /** Deletes objects */ - delete: operations['StorageObjectsController_deleteObjects'] - } - '/v1/branches/{branch_id}': { - /** - * Get database branch config - * @description Fetches configurations of the specified database branch - */ - get: operations['BranchController_getBranchDetails'] - /** - * Delete a database branch - * @description Deletes the specified database branch - */ - delete: operations['BranchController_deleteBranch'] - /** - * Update database branch config - * @description Updates the configuration of the specified database branch - */ - patch: operations['BranchController_updateBranch'] - } - '/v1/branches/{branch_id}/reset': { - /** - * Resets a database branch - * @description Resets the specified database branch - */ - post: operations['BranchController_resetBranch'] - } - '/v1/projects': { - /** - * List all projects - * @description Returns a list of all projects you've previously created. - */ - get: operations['V1ProjectsController_getProjects'] - /** Create a project */ - post: operations['V1ProjectsController_createProject'] - } - '/v1/projects/{ref}/api-keys': { - /** Get project api keys */ - get: operations['ApiKeysController_getProjectApiKeys'] - } - '/v1/projects/{ref}/branches': { - /** - * List all database branches - * @description Returns all database branches of the specified project. - */ - get: operations['BranchesController_getBranches'] - /** - * Create a database branch - * @description Creates a database branch from the specified project. - */ - post: operations['BranchesController_createBranch'] - /** - * Disables preview branching - * @description Disables preview branching for the specified project - */ - delete: operations['BranchesController_disableBranch'] - } - '/v1/projects/{ref}/custom-hostname': { - /** Gets project's custom hostname config */ - get: operations['CustomHostnamesController_getCustomHostnameConfig'] - /** Deletes a project's custom hostname configuration */ - delete: operations['CustomHostnamesController_removeCustomHostnameConfig'] - } - '/v1/projects/{ref}/custom-hostname/initialize': { - /** Updates project's custom hostname configuration */ - post: operations['CustomHostnamesController_createCustomHostnameConfig'] - } - '/v1/projects/{ref}/custom-hostname/reverify': { - /** Attempts to verify the DNS configuration for project's custom hostname configuration */ - post: operations['CustomHostnamesController_reverify'] - } - '/v1/projects/{ref}/custom-hostname/activate': { - /** Activates a custom hostname for a project. */ - post: operations['CustomHostnamesController_activate'] - } - '/v1/projects/{ref}/network-bans/retrieve': { - /** Gets project's network bans */ - post: operations['NetworkBansController_getNetworkBans'] - } - '/v1/projects/{ref}/network-bans': { - /** Remove network bans. */ - delete: operations['NetworkBansController_removeNetworkBan'] - } - '/v1/projects/{ref}/network-restrictions': { - /** Gets project's network restrictions */ - get: operations['NetworkRestrictionsController_getNetworkRestrictions'] - } - '/v1/projects/{ref}/network-restrictions/apply': { - /** Updates project's network restrictions */ - post: operations['NetworkRestrictionsController_applyNetworkRestrictions'] - } - '/v1/projects/{ref}/pgsodium': { - /** Gets project's pgsodium config */ - get: operations['PgsodiumConfigController_getPgsodiumConfig'] - /** Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */ - put: operations['PgsodiumConfigController_updatePgsodiumConfig'] - } - '/v1/projects/{ref}/postgrest': { - /** Gets project's postgrest config */ - get: operations['PostgrestConfigController_getPostgRESTConfig'] - /** Updates project's postgrest config */ - patch: operations['PostgrestConfigController_updatePostgRESTConfig'] - } - '/v1/projects/{ref}': { - /** Deletes the given project */ - delete: operations['ProjectsRefController_deleteProject'] - } - '/v1/projects/{ref}/secrets': { - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - get: operations['SecretsController_getSecrets'] - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - post: operations['SecretsController_createSecrets'] - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - delete: operations['SecretsController_deleteSecrets'] - } - '/v1/projects/{ref}/ssl-enforcement': { - /** Get project's SSL enforcement configuration. */ - get: operations['SslEnforcementController_getSslEnforcementConfig'] - /** Update project's SSL enforcement configuration. */ - put: operations['SslEnforcementController_updateSslEnforcementConfig'] - } - '/v1/projects/{ref}/types/typescript': { - /** - * Generate TypeScript types - * @description Returns the TypeScript types of your schema for use with supabase-js. - */ - get: operations['TypesController_getTypescriptTypes'] - } - '/v1/projects/{ref}/vanity-subdomain': { - /** Gets current vanity subdomain config */ - get: operations['VanitySubdomainsController_getVanitySubdomainConfig'] - /** Deletes a project's vanity subdomain configuration */ - delete: operations['VanitySubdomainsController_removeVanitySubdomainConfig'] - } - '/v1/projects/{ref}/vanity-subdomain/check-availability': { - /** Checks vanity subdomain availability */ - post: operations['VanitySubdomainsController_checkVanitySubdomainAvailability'] - } - '/v1/projects/{ref}/vanity-subdomain/activate': { - /** Activates a vanity subdomain for a project. */ - post: operations['VanitySubdomainsController_activateVanitySubdomainPlease'] - } - '/v1/projects/{ref}/upgrade': { - /** Upgrades the project's Postgres version */ - post: operations['UpgradeController_upgradeProject'] - } - '/v1/projects/{ref}/upgrade/eligibility': { - /** Returns the project's eligibility for upgrades */ - get: operations['UpgradeController_upgradeEligibilityInformation'] - } - '/v1/projects/{ref}/upgrade/status': { - /** Gets the latest status of the project's upgrade */ - get: operations['UpgradeController_getUpgradeStatus'] - } - '/v1/projects/{ref}/readonly': { - /** Returns project's readonly mode status */ - get: operations['ReadOnlyController_getReadOnlyModeStatus'] - } - '/v1/projects/{ref}/readonly/temporary-disable': { - /** Disables project's readonly mode for the next 15 minutes */ - post: operations['ReadOnlyController_temporarilyDisableReadonlyMode'] - } - '/v1/projects/{ref}/read-replicas/setup': { - /** Set up a read replica */ - post: operations['ReadReplicaController_setUpReadReplica'] - } - '/v1/projects/{ref}/read-replicas/remove': { - /** Remove a read replica */ - post: operations['ReadReplicaController_removeReadReplica'] - } - '/v1/projects/{ref}/health': { - /** Gets project's service health status */ - get: operations['ServiceHealthController_checkServiceHealth'] - } - '/v1/projects/{ref}/config/database/postgres': { - /** Gets project's Postgres config */ - get: operations['AuthPostgresConfigController_getConfig'] - /** Updates project's Postgres config */ - put: operations['AuthPostgresConfigController_updateConfig'] - } - '/v1/projects/{ref}/config/database/pgbouncer': { - /** Get project's pgbouncer config */ - get: operations['V1PgbouncerConfigController_v1GetPgbouncerConfig'] - } - '/v1/projects/{ref}/config/auth': { - /** Gets project's auth config */ - get: operations['V1AuthConfigController_getV1AuthConfig'] - /** Updates a project's auth config */ - patch: operations['V1AuthConfigController_updateV1AuthConfig'] - } - '/v1/projects/{ref}/config/auth/third-party-auth': { - /** Lists all third-party auth integrations */ - get: operations['ThirdPartyAuthController_listTPAForProject'] - /** Creates a new third-party auth integration */ - post: operations['ThirdPartyAuthController_createTPAForProject'] - } - '/v1/projects/{ref}/config/auth/third-party-auth/{tpa_id}': { - /** Get a third-party integration */ - get: operations['ThirdPartyAuthController_getTPAForProject'] - /** Removes a third-party auth integration */ - delete: operations['ThirdPartyAuthController_deleteTPAForProject'] - } - '/v1/projects/{ref}/config/auth/sso/providers': { - /** Lists all SSO providers */ - get: operations['ProvidersController_listAllProviders'] - /** Creates a new SSO provider */ - post: operations['ProvidersController_createProviderForProject'] - } - '/v1/projects/{ref}/config/auth/sso/providers/{provider_id}': { - /** Gets a SSO provider by its UUID */ - get: operations['ProvidersController_getProviderById'] - /** Updates a SSO provider by its UUID */ - put: operations['ProvidersController_updateProviderById'] - /** Removes a SSO provider by its UUID */ - delete: operations['ProvidersController_removeProviderById'] - } - '/v1/projects/{ref}/database/query': { - /** Run sql query */ - post: operations['V1QueryController_v1RunQuery'] - } - '/v1/projects/{ref}/database/webhooks/enable': { - /** Enables Database Webhooks on the project */ - post: operations['V1DatabaseWebhooksController_v1EnableDatabaseWebhooks'] - } - '/v1/projects/{ref}/database/backups': { - /** Lists all backups */ - get: operations['V1BackupsController_getBackups'] - } - '/v1/projects/{ref}/database/backups/restore-pitr': { - /** Restores a PITR backup for a database */ - post: operations['V1RestorePitrController_v1RestorePitr'] - } - '/v1/projects/{ref}/functions': { - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - get: operations['FunctionsController_getFunctions'] - /** - * Create a function - * @description Creates a function and adds it to the specified project. - */ - post: operations['FunctionsController_createFunction'] - } - '/v1/projects/{ref}/functions/{function_slug}': { - /** - * Retrieve a function - * @description Retrieves a function with the specified slug and project. - */ - get: operations['FunctionSlugController_getFunction'] - /** - * Delete a function - * @description Deletes a function with the specified slug from the specified project. - */ - delete: operations['FunctionSlugController_deleteFunction'] - /** - * Update a function - * @description Updates a function with the specified slug and project. - */ - patch: operations['FunctionSlugController_updateFunction'] - } - '/v1/projects/{ref}/functions/{function_slug}/body': { - /** - * Retrieve a function body - * @description Retrieves a function body for the specified slug and project. - */ - get: operations['FunctionSlugController_getFunctionBody'] - } - '/v1/projects/{ref}/storage/buckets': { - /** Lists all buckets */ - get: operations['V1StorageBucketsController_getBuckets'] - } - '/v1/organizations': { - /** - * List all organizations - * @description Returns a list of organizations that you currently belong to. - */ - get: operations['OrganizationsController_getOrganizations'] - /** Create an organization */ - post: operations['OrganizationsController_createOrganization'] - } - '/v1/organizations/{slug}/members': { - /** List members of an organization */ - get: operations['V1OrganizationMembersController_v1ListOrganizationMembers'] - } - '/v1/organizations/{slug}': { - /** Gets information about the organization */ - get: operations['V1OrganizationSlugController_getOrganization'] - } - '/v1/oauth/authorize': { - /** Authorize user through oauth */ - get: operations['OAuthController_authorize'] - } - '/v1/oauth/token': { - /** Exchange auth code for user's access and refresh token */ - post: operations['OAuthController_token'] - } - '/v1/snippets': { - /** Lists SQL snippets for the logged in user */ - get: operations['SnippetsController_listSnippets'] - } - '/v1/snippets/{id}': { - /** Gets a specific SQL snippet */ - get: operations['SnippetsController_getSnippet'] - } - '/partners/flyio/callback': { - /** Redirects to Supabase dashboard after completing Fly sso */ - get: operations['CallbackController_redirectToDashboardFlyioExtensionScreen'] - } - '/partners/flyio/extensions/{extension_id}': { - /** Gets database status */ - get: operations['ExtensionController_getResourceStatus'] - /** Deletes a database */ - delete: operations['ExtensionController_deleteResource'] - } - '/partners/flyio/extensions/{extension_id}/sso': { - /** Starts Fly single sign on */ - get: operations['ExtensionController_startFlyioSSO'] - } - '/partners/flyio/extensions': { - /** Creates a database */ - post: operations['ExtensionsController_provisionResource'] - } - '/partners/flyio/organizations/{organization_id}': { - /** Gets information about the organization */ - get: operations['OrganizationsController_getOrganization'] - } - '/partners/flyio/organizations/{organization_id}/extensions': { - /** Gets all databases that belong to the Fly organization */ - get: operations['OrganizationsController_getOrgExtensions'] - } - '/partners/flyio/organizations/{organization_id}/sso': { - /** Starts Fly single sign on */ - get: operations['OrganizationsController_startFlyioSSO'] - } - '/partners/flyio/organizations/{organization_id}/billing': { - /** Gets the organizations current unbilled charges */ - get: operations['FlyBillingController_getResourceBilling'] - } -} - -export type webhooks = Record - -export interface components { - schemas: { - NotificationResponseV1: { - id: string - inserted_at: string - project_id: number - notification_name: string - notification_status: string - data: Record - meta: Record - } - UpdateNotificationsBodyV1: { - ids: string[] - } - NotificationAction: { - label: string - url?: string - action_type?: string - } - NotificationData: { - org_slug?: string - project_ref?: string - title: string - message?: string - actions?: components['schemas']['NotificationAction'][] - } - NotificationResponseV2: { - /** @enum {string} */ - status: 'new' | 'seen' | 'archived' - /** @enum {string} */ - priority: 'Critical' | 'Warning' | 'Info' - data: components['schemas']['NotificationData'] - id: string - inserted_at: string - name: string - meta: Record - } - NotificationsSummary: { - unread_count: number - has_warning: boolean - has_critical: boolean - } - UpdateNotificationBodyV2: { - id: string - /** @enum {string} */ - status: 'new' | 'seen' | 'archived' - } - ResetPasswordBody: { - email: string - redirectTo?: string - } - SendFeedbackBody: { - message: string - affectedServices?: string - library?: string - category: string - subject?: string - tags: string[] - additionalRedirectUrls?: string - pathname?: string - projectRef?: string - organizationSlug?: string - severity?: string - siteUrl?: string - urlToAirTable?: string - allowSupportAccess?: boolean - verified?: boolean - browserInformation?: string - } - SendFeedbackResponse: { - result: string - } - SendExitSurveyBody: { - projectRef?: string - orgSlug?: string - reasons: string - additionalFeedback?: string - exitAction?: string - } - SendUpgradeSurveyBody: { - orgSlug?: string - prevPlan?: string - currentPlan?: string - reasons: string[] - additionalFeedback?: string - } - SendDocsFeedbackBody: { - page: string - isHelpful: boolean - title: string - feedback: string - } - SignUpBody: { - email: string - password: string - redirectTo?: string - } - ProjectResourceWarningsResponse: { - /** @enum {string|null} */ - need_pitr: 'critical' | 'warning' | null - /** @enum {string|null} */ - disk_io_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - disk_space_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - cpu_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - memory_and_swap_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - auth_rate_limit_exhaustion: 'critical' | 'warning' | null - project: string - is_readonly_mode_enabled: boolean - } - GoTrueConfigResponse: { - SITE_URL: string - DISABLE_SIGNUP: boolean - JWT_EXP: number - SMTP_ADMIN_EMAIL: string - SMTP_HOST: string - SMTP_PORT: string - SMTP_USER: string - SMTP_PASS: string - SMTP_MAX_FREQUENCY: number - SMTP_SENDER_NAME: string - MAILER_AUTOCONFIRM: boolean - MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS: boolean - MAILER_SUBJECTS_INVITE: string - MAILER_SUBJECTS_CONFIRMATION: string - MAILER_SUBJECTS_RECOVERY: string - MAILER_SUBJECTS_EMAIL_CHANGE: string - MAILER_SUBJECTS_MAGIC_LINK: string - MAILER_SUBJECTS_REAUTHENTICATION: string - MAILER_TEMPLATES_INVITE_CONTENT: string - MAILER_TEMPLATES_CONFIRMATION_CONTENT: string - MAILER_TEMPLATES_RECOVERY_CONTENT: string - MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT: string - MAILER_TEMPLATES_MAGIC_LINK_CONTENT: string - MAILER_TEMPLATES_REAUTHENTICATION_CONTENT: string - MFA_MAX_ENROLLED_FACTORS: number - URI_ALLOW_LIST: string - EXTERNAL_ANONYMOUS_USERS_ENABLED: boolean - EXTERNAL_EMAIL_ENABLED: boolean - EXTERNAL_PHONE_ENABLED: boolean - SAML_ENABLED: boolean - SECURITY_CAPTCHA_ENABLED: boolean - SECURITY_CAPTCHA_PROVIDER: string - SECURITY_CAPTCHA_SECRET: string - SESSIONS_TIMEBOX: number - SESSIONS_INACTIVITY_TIMEOUT: number - SESSIONS_SINGLE_PER_USER: boolean - SESSIONS_TAGS: string - RATE_LIMIT_ANONYMOUS_USERS: number - RATE_LIMIT_EMAIL_SENT: number - RATE_LIMIT_SMS_SENT: number - RATE_LIMIT_VERIFY: number - RATE_LIMIT_TOKEN_REFRESH: number - MAILER_SECURE_EMAIL_CHANGE_ENABLED: boolean - REFRESH_TOKEN_ROTATION_ENABLED: boolean - PASSWORD_HIBP_ENABLED: boolean - PASSWORD_MIN_LENGTH: number - PASSWORD_REQUIRED_CHARACTERS: string - SECURITY_MANUAL_LINKING_ENABLED: boolean - SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION: boolean - SECURITY_REFRESH_TOKEN_REUSE_INTERVAL: number - MAILER_OTP_EXP: number - SMS_AUTOCONFIRM: boolean - SMS_MAX_FREQUENCY: number - SMS_OTP_EXP: number - SMS_OTP_LENGTH: number - SMS_PROVIDER: string - SMS_MESSAGEBIRD_ACCESS_KEY: string - SMS_MESSAGEBIRD_ORIGINATOR: string - SMS_TEXTLOCAL_API_KEY: string - SMS_TEXTLOCAL_SENDER: string - SMS_TWILIO_ACCOUNT_SID: string - SMS_TWILIO_AUTH_TOKEN: string - SMS_TWILIO_CONTENT_SID: string - SMS_TWILIO_MESSAGE_SERVICE_SID: string - SMS_TWILIO_VERIFY_ACCOUNT_SID: string - SMS_TWILIO_VERIFY_AUTH_TOKEN: string - SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID: string - SMS_VONAGE_API_KEY: string - SMS_VONAGE_API_SECRET: string - SMS_VONAGE_FROM: string - SMS_TEMPLATE: string - SMS_TEST_OTP: string - SMS_TEST_OTP_VALID_UNTIL: string - HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED: boolean - HOOK_MFA_VERIFICATION_ATTEMPT_URI: string - HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED: boolean - HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI: string - HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: boolean - HOOK_CUSTOM_ACCESS_TOKEN_URI: string - HOOK_SEND_SMS_ENABLED: boolean - HOOK_SEND_SMS_URI: string - EXTERNAL_APPLE_ENABLED: boolean - EXTERNAL_APPLE_CLIENT_ID: string - EXTERNAL_APPLE_SECRET: string - EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS: string - EXTERNAL_AZURE_ENABLED: boolean - EXTERNAL_AZURE_CLIENT_ID: string - EXTERNAL_AZURE_SECRET: string - EXTERNAL_AZURE_URL: string - EXTERNAL_BITBUCKET_ENABLED: boolean - EXTERNAL_BITBUCKET_CLIENT_ID: string - EXTERNAL_BITBUCKET_SECRET: string - EXTERNAL_DISCORD_ENABLED: boolean - EXTERNAL_DISCORD_CLIENT_ID: string - EXTERNAL_DISCORD_SECRET: string - EXTERNAL_FACEBOOK_ENABLED: boolean - EXTERNAL_FACEBOOK_CLIENT_ID: string - EXTERNAL_FACEBOOK_SECRET: string - EXTERNAL_FIGMA_ENABLED: boolean - EXTERNAL_FIGMA_CLIENT_ID: string - EXTERNAL_FIGMA_SECRET: string - EXTERNAL_GITHUB_ENABLED: boolean - EXTERNAL_GITHUB_CLIENT_ID: string - EXTERNAL_GITHUB_SECRET: string - EXTERNAL_GITLAB_ENABLED: boolean - EXTERNAL_GITLAB_CLIENT_ID: string - EXTERNAL_GITLAB_SECRET: string - EXTERNAL_GITLAB_URL: string - EXTERNAL_GOOGLE_ENABLED: boolean - EXTERNAL_GOOGLE_CLIENT_ID: string - EXTERNAL_GOOGLE_SECRET: string - EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS: string - EXTERNAL_GOOGLE_SKIP_NONCE_CHECK: boolean - EXTERNAL_KAKAO_ENABLED: boolean - EXTERNAL_KAKAO_CLIENT_ID: string - EXTERNAL_KAKAO_SECRET: string - EXTERNAL_KEYCLOAK_ENABLED: boolean - EXTERNAL_KEYCLOAK_CLIENT_ID: string - EXTERNAL_KEYCLOAK_SECRET: string - EXTERNAL_KEYCLOAK_URL: string - EXTERNAL_LINKEDIN_OIDC_ENABLED: boolean - EXTERNAL_LINKEDIN_OIDC_CLIENT_ID: string - EXTERNAL_LINKEDIN_OIDC_SECRET: string - EXTERNAL_NOTION_ENABLED: boolean - EXTERNAL_NOTION_CLIENT_ID: string - EXTERNAL_NOTION_SECRET: string - EXTERNAL_SLACK_ENABLED: boolean - EXTERNAL_SLACK_CLIENT_ID: string - EXTERNAL_SLACK_SECRET: string - EXTERNAL_SPOTIFY_ENABLED: boolean - EXTERNAL_SPOTIFY_CLIENT_ID: string - EXTERNAL_SPOTIFY_SECRET: string - EXTERNAL_TWITCH_ENABLED: boolean - EXTERNAL_TWITCH_CLIENT_ID: string - EXTERNAL_TWITCH_SECRET: string - EXTERNAL_TWITTER_ENABLED: boolean - EXTERNAL_TWITTER_CLIENT_ID: string - EXTERNAL_TWITTER_SECRET: string - EXTERNAL_WORKOS_ENABLED: boolean - EXTERNAL_WORKOS_CLIENT_ID: string - EXTERNAL_WORKOS_SECRET: string - EXTERNAL_WORKOS_URL: string - EXTERNAL_ZOOM_ENABLED: boolean - EXTERNAL_ZOOM_CLIENT_ID: string - EXTERNAL_ZOOM_SECRET: string - } - UpdateGoTrueConfigBody: { - SITE_URL?: string - DISABLE_SIGNUP?: boolean - JWT_EXP?: number - SMTP_ADMIN_EMAIL?: string - SMTP_HOST?: string - SMTP_PORT?: string - SMTP_USER?: string - SMTP_PASS?: string - SMTP_MAX_FREQUENCY?: number - SMTP_SENDER_NAME?: string - MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS?: boolean - MAILER_AUTOCONFIRM?: boolean - MAILER_SUBJECTS_INVITE?: string - MAILER_SUBJECTS_CONFIRMATION?: string - MAILER_SUBJECTS_RECOVERY?: string - MAILER_SUBJECTS_EMAIL_CHANGE?: string - MAILER_SUBJECTS_MAGIC_LINK?: string - MAILER_SUBJECTS_REAUTHENTICATION?: string - MAILER_TEMPLATES_INVITE_CONTENT?: string - MAILER_TEMPLATES_REAUTHENTICATION_CONTENT?: string - MAILER_TEMPLATES_CONFIRMATION_CONTENT?: string - MAILER_TEMPLATES_RECOVERY_CONTENT?: string - MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT?: string - MAILER_TEMPLATES_MAGIC_LINK_CONTENT?: string - MFA_MAX_ENROLLED_FACTORS?: number - URI_ALLOW_LIST?: string - EXTERNAL_ANONYMOUS_USERS_ENABLED?: boolean - EXTERNAL_EMAIL_ENABLED?: boolean - EXTERNAL_PHONE_ENABLED?: boolean - SAML_ENABLED?: boolean - SECURITY_CAPTCHA_ENABLED?: boolean - SECURITY_CAPTCHA_PROVIDER?: string - SECURITY_CAPTCHA_SECRET?: string - SESSIONS_TIMEBOX?: number - SESSIONS_INACTIVITY_TIMEOUT?: number - SESSIONS_SINGLE_PER_USER?: boolean - SESSIONS_TAGS?: string - RATE_LIMIT_ANONYMOUS_USERS?: number - RATE_LIMIT_EMAIL_SENT?: number - RATE_LIMIT_SMS_SENT?: number - RATE_LIMIT_VERIFY?: number - RATE_LIMIT_TOKEN_REFRESH?: number - MAILER_SECURE_EMAIL_CHANGE_ENABLED?: boolean - REFRESH_TOKEN_ROTATION_ENABLED?: boolean - PASSWORD_HIBP_ENABLED?: boolean - PASSWORD_MIN_LENGTH?: number - /** @enum {string} */ - PASSWORD_REQUIRED_CHARACTERS?: - | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~' - | '' - SECURITY_MANUAL_LINKING_ENABLED?: boolean - SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION?: boolean - SECURITY_REFRESH_TOKEN_REUSE_INTERVAL?: number - MAILER_OTP_EXP?: number - SMS_AUTOCONFIRM?: boolean - SMS_MAX_FREQUENCY?: number - SMS_OTP_EXP?: number - SMS_OTP_LENGTH?: number - SMS_PROVIDER?: string - SMS_MESSAGEBIRD_ACCESS_KEY?: string - SMS_MESSAGEBIRD_ORIGINATOR?: string - SMS_TEST_OTP?: string - SMS_TEST_OTP_VALID_UNTIL?: string - SMS_TEXTLOCAL_API_KEY?: string - SMS_TEXTLOCAL_SENDER?: string - SMS_TWILIO_ACCOUNT_SID?: string - SMS_TWILIO_AUTH_TOKEN?: string - SMS_TWILIO_CONTENT_SID?: string - SMS_TWILIO_MESSAGE_SERVICE_SID?: string - SMS_TWILIO_VERIFY_ACCOUNT_SID?: string - SMS_TWILIO_VERIFY_AUTH_TOKEN?: string - SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID?: string - SMS_VONAGE_API_KEY?: string - SMS_VONAGE_API_SECRET?: string - SMS_VONAGE_FROM?: string - SMS_TEMPLATE?: string - HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED?: boolean - HOOK_MFA_VERIFICATION_ATTEMPT_URI?: string - HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED?: boolean - HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI?: string - HOOK_CUSTOM_ACCESS_TOKEN_ENABLED?: boolean - HOOK_CUSTOM_ACCESS_TOKEN_URI?: string - HOOK_SEND_SMS_ENABLED?: boolean - HOOK_SEND_SMS_URI?: string - EXTERNAL_APPLE_ENABLED?: boolean - EXTERNAL_APPLE_CLIENT_ID?: string - EXTERNAL_APPLE_SECRET?: string - EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS?: string - EXTERNAL_AZURE_ENABLED?: boolean - EXTERNAL_AZURE_CLIENT_ID?: string - EXTERNAL_AZURE_SECRET?: string - EXTERNAL_AZURE_URL?: string - EXTERNAL_BITBUCKET_ENABLED?: boolean - EXTERNAL_BITBUCKET_CLIENT_ID?: string - EXTERNAL_BITBUCKET_SECRET?: string - EXTERNAL_DISCORD_ENABLED?: boolean - EXTERNAL_DISCORD_CLIENT_ID?: string - EXTERNAL_DISCORD_SECRET?: string - EXTERNAL_FACEBOOK_ENABLED?: boolean - EXTERNAL_FACEBOOK_CLIENT_ID?: string - EXTERNAL_FACEBOOK_SECRET?: string - EXTERNAL_FIGMA_ENABLED?: boolean - EXTERNAL_FIGMA_CLIENT_ID?: string - EXTERNAL_FIGMA_SECRET?: string - EXTERNAL_GITHUB_ENABLED?: boolean - EXTERNAL_GITHUB_CLIENT_ID?: string - EXTERNAL_GITHUB_SECRET?: string - EXTERNAL_GITLAB_ENABLED?: boolean - EXTERNAL_GITLAB_CLIENT_ID?: string - EXTERNAL_GITLAB_SECRET?: string - EXTERNAL_GITLAB_URL?: string - EXTERNAL_GOOGLE_ENABLED?: boolean - EXTERNAL_GOOGLE_CLIENT_ID?: string - EXTERNAL_GOOGLE_SECRET?: string - EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS?: string - EXTERNAL_GOOGLE_SKIP_NONCE_CHECK?: boolean - EXTERNAL_KAKAO_ENABLED?: boolean - EXTERNAL_KAKAO_CLIENT_ID?: string - EXTERNAL_KAKAO_SECRET?: string - EXTERNAL_KEYCLOAK_ENABLED?: boolean - EXTERNAL_KEYCLOAK_CLIENT_ID?: string - EXTERNAL_KEYCLOAK_SECRET?: string - EXTERNAL_KEYCLOAK_URL?: string - EXTERNAL_LINKEDIN_OIDC_ENABLED?: boolean - EXTERNAL_LINKEDIN_OIDC_CLIENT_ID?: string - EXTERNAL_LINKEDIN_OIDC_SECRET?: string - EXTERNAL_NOTION_ENABLED?: boolean - EXTERNAL_NOTION_CLIENT_ID?: string - EXTERNAL_NOTION_SECRET?: string - EXTERNAL_SLACK_ENABLED?: boolean - EXTERNAL_SLACK_CLIENT_ID?: string - EXTERNAL_SLACK_SECRET?: string - EXTERNAL_SPOTIFY_ENABLED?: boolean - EXTERNAL_SPOTIFY_CLIENT_ID?: string - EXTERNAL_SPOTIFY_SECRET?: string - EXTERNAL_TWITCH_ENABLED?: boolean - EXTERNAL_TWITCH_CLIENT_ID?: string - EXTERNAL_TWITCH_SECRET?: string - EXTERNAL_TWITTER_ENABLED?: boolean - EXTERNAL_TWITTER_CLIENT_ID?: string - EXTERNAL_TWITTER_SECRET?: string - EXTERNAL_WORKOS_ENABLED?: boolean - EXTERNAL_WORKOS_CLIENT_ID?: string - EXTERNAL_WORKOS_SECRET?: string - EXTERNAL_WORKOS_URL?: string - EXTERNAL_ZOOM_ENABLED?: boolean - EXTERNAL_ZOOM_CLIENT_ID?: string - EXTERNAL_ZOOM_SECRET?: string - } - UserBody: { - id?: string - aud?: string - banned_until?: string - confirmation_sent_at?: string - confirmation_token?: string - confirmed_at?: string - created_at?: string - email?: string - email_change?: string - email_change_confirm_status?: number - email_change_sent_at?: string - email_change_token_current?: string - email_change_token_new?: string - email_confirmed_at?: string - encrypted_password?: string - instance_id?: string - invited_at?: string - is_super_admin?: boolean - last_sign_in_at?: string - phone?: string - phone_change?: string - phone_change_sent_at?: string - phone_change_token?: string - phone_confirmed_at?: string - raw_app_meta_data?: Record - raw_user_meta_data?: Record - reauthentication_sent_at?: string - reauthentication_token?: string - recovery_sent_at?: string - recovery_token?: string - role?: string - updated_at?: string - is_sso_user?: boolean - deleted_at?: string - is_anonymous?: boolean - } - UsersResponse: { - total: number - users: components['schemas']['UserBody'][] - } - Backup: { - id: number - isPhysicalBackup: boolean - project_id: number - status: Record - inserted_at: string - } - BackupsResponse: { - tierKey: string - region: string - walg_enabled: boolean - pitr_enabled: boolean - backups: components['schemas']['Backup'][] - physicalBackupData: { - earliestPhysicalBackupDateUnix?: number - latestPhysicalBackupDateUnix?: number - } - } - DownloadBackupBody: { - id: number - data: Record - inserted_at: string - project_id: number - s3_bucket: string - s3_path: string - status: string - } - DownloadBackupResponse: { - fileUrl: string - } - RestoreLogicalBackupBody: { - id: number - } - RestorePhysicalBackupBody: { - id: number - recovery_time_target: string - } - PointInTimeRestoreBody: { - recovery_time_target_unix: number - } - OwnerResponse: { - project_ref: string - /** @enum {string} */ - current: 'unmigrated' | 'temp_role' | 'migrated' - /** @enum {string} */ - desired: 'unmigrated' | 'temp_role' | 'migrated' - created_at: string - modified_at: string - migrated_at: string | null - } - OrganizationResponse: { - /** @enum {string|null} */ - restriction_status: 'grace_period' | 'grace_period_over' | 'restricted' | null - id: number - slug: string - name: string - billing_email: string | null - is_owner: boolean - stripe_customer_id: string | null - subscription_id: string | null - opt_in_tags: string[] - restriction_data: Record - } - GetOrganizationByFlyOrganizationIdResponse: { - slug: string - } - CreateOrganizationBody: { - name: string - kind?: string - size?: string - /** @enum {string} */ - tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' - payment_method?: string - } - UpdateOrganizationBody: { - name: string - billing_email: string - opt_in_tags: string[] - } - OrganizationSlugResponse: { - id: number - slug: string - name: string - billing_email?: string - stripe_customer_id?: string - opt_in_tags: string[] - } - CustomerResponse: { - id: string - email: string - address: string - balance: number - invoice_settings: Record - billing_via_partner: boolean - } - CustomerUpdateResponse: { - id: string - object: string - address: Record - balance: number - cash_balance?: Record - created: number - currency: string - default_currency?: string - default_source: string - delinquent: boolean - description: string - discount: Record - email: string - invoice_credit_balance?: Record - invoice_prefix: string - invoice_settings: Record - livemode: boolean - metadata: Record - name: string - next_invoice_sequence?: number - phone: string - preferred_locales: string[] - shipping: Record - sources?: Record - subscriptions?: Record - tax?: Record - tax_exempt?: string - tax_ids?: Record - test_clock?: Record - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - Role: { - id: number - name: string - } - TaxId: { - id: string - object: string - country: string - created: number - customer: Record - deleted?: Record - livemode: boolean - type: string - value: string - verification: Record - } - TaxIdResponse: { - object: string - data: components['schemas']['TaxId'][] - has_more: boolean - url: string - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - CreateTaxIdBody: { - type: Record - value: string - } - CreateTaxIdResponse: { - id: string - object: string - country: string - created: number - customer: Record - livemode: boolean - type: string - value: string - verification: Record - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - DeleteTaxIdBody: { - id: string - } - DeleteTaxIdResponse: { - id: string - object: string - deleted: boolean - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - TransferOrganizationBody: { - member_gotrue_id: string - member_id: number - org_id: number - } - ProjectAllocation: { - ref: string - usage: number - name: string - } - OrgMetricUsage: { - usage: number - usage_original: number - cost: number - unit_price_desc: string - available_in_plan: boolean - unlimited: boolean - capped: boolean - /** @enum {string} */ - metric: - | 'EGRESS' - | 'DATABASE_SIZE' - | 'STORAGE_SIZE' - | 'MONTHLY_ACTIVE_USERS' - | 'MONTHLY_ACTIVE_SSO_USERS' - | 'FUNCTION_INVOCATIONS' - | 'FUNCTION_COUNT' - | 'STORAGE_IMAGES_TRANSFORMED' - | 'REALTIME_MESSAGE_COUNT' - | 'REALTIME_PEAK_CONNECTIONS' - | 'COMPUTE_HOURS_BRANCH' - | 'COMPUTE_HOURS_XS' - | 'COMPUTE_HOURS_SM' - | 'COMPUTE_HOURS_MD' - | 'COMPUTE_HOURS_L' - | 'COMPUTE_HOURS_XL' - | 'COMPUTE_HOURS_2XL' - | 'COMPUTE_HOURS_4XL' - | 'COMPUTE_HOURS_8XL' - | 'COMPUTE_HOURS_12XL' - | 'COMPUTE_HOURS_16XL' - /** @enum {string} */ - pricing_strategy: 'UNIT' | 'PACKAGE' | 'NONE' - pricing_free_units?: number - pricing_package_price?: number - pricing_package_size?: number - pricing_per_unit_price?: number - project_allocations: components['schemas']['ProjectAllocation'][] - } - OrgUsageResponse: { - usage_billing_enabled: boolean - slugs: string[] - usages: components['schemas']['OrgMetricUsage'][] - } - OrgDocumentUrlResponse: { - fileUrl: string - } - AuditLogsResponse: { - result: Record[] - retention_period: number - } - Invite: { - invited_id: number - invited_at: string - invited_email: string - role_id: number - } - InviteUserBody: { - invited_email: string - owner_id: number - role_id: number - } - SendInviteResponse: { - invited_at: string - invited_email: string - role_id: number - } - InviteResponse: { - organization_name: string - invite_id: string - token_does_not_exist: boolean - email_match: boolean - authorized_user: boolean - expired_token: boolean - } - JoinResponse: { - billing_email: string - id: number - name: string - slug: string - stripe_customer_id: string - } - RemoveMemberBody: { - member_id: number - } - Member: { - gotrue_id: string - primary_email: string | null - role_ids: number[] - username: string - mfa_enabled: boolean - } - UpdateMemberBody: { - role_id: number - } - MemberWithFreeProjectLimit: { - free_project_limit: number - primary_email: string - username: string - } - Payment: { - id: string - object: string - acss_debit?: Record - affirm?: Record - afterpay_clearpay?: Record - alipay?: Record - au_becs_debit?: Record - bacs_debit?: Record - bancontact?: Record - billing_details: Record - blik?: Record - boleto?: Record - card?: Record - card_present?: Record - created: number - customer: Record - customer_balance?: Record - eps?: Record - fpx?: Record - giropay?: Record - grabpay?: Record - ideal?: Record - interac_present?: Record - klarna?: Record - konbini?: Record - link?: Record - livemode: boolean - metadata: Record - oxxo?: Record - p24?: Record - paynow?: Record - promptpay?: Record - radar_options?: Record - sepa_debit?: Record - sofort?: Record - type: string - us_bank_account?: Record - wechat_pay?: Record - } - PaymentsResponse: { - object: string - data: components['schemas']['Payment'][] - has_more: boolean - url: string - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - DetachPaymentMethodBody: { - card_id: string - } - DetachPaymentResponse: { - id: string - object: string - acss_debit?: Record - affirm?: Record - afterpay_clearpay?: Record - alipay?: Record - au_becs_debit?: Record - bacs_debit?: Record - bancontact?: Record - billing_details: Record - blik?: Record - boleto?: Record - card?: Record - card_present?: Record - created: number - customer: Record - customer_balance?: Record - eps?: Record - fpx?: Record - giropay?: Record - grabpay?: Record - ideal?: Record - interac_present?: Record - klarna?: Record - konbini?: Record - link?: Record - livemode: boolean - metadata: Record - oxxo?: Record - p24?: Record - paynow?: Record - promptpay?: Record - radar_options?: Record - sepa_debit?: Record - sofort?: Record - type: string - us_bank_account?: Record - wechat_pay?: Record - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - HCaptchaBody: { - hcaptchaToken: string - } - SetupIntentResponse: { - id: string - object: string - application: Record - attach_to_self?: boolean - cancellation_reason: string - client_secret: string - created: number - customer: Record - description: string - flow_directions: Record - last_setup_error: Record - latest_attempt: Record - livemode: boolean - mandate: Record - metadata: Record - next_action: Record - on_behalf_of: Record - payment_method: Record - payment_method_options: Record - payment_method_types: string[] - single_use_mandate: Record - status: string - usage: string - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - /** @enum {string} */ - BillingPlanId: 'free' | 'pro' | 'team' | 'enterprise' - BillingSubscriptionPlan: { - id: components['schemas']['BillingPlanId'] - name: string - price: number - } - BillingSubscriptionAddon: { - name: string - supabase_prod_id: string - price: number - } - /** @enum {string} */ - ProjectAddonType: 'custom_domain' | 'compute_instance' | 'pitr' | 'ipv4' - /** @enum {string} */ - AddonVariantId: - | 'ci_micro' - | 'ci_small' - | 'ci_medium' - | 'ci_large' - | 'ci_xlarge' - | 'ci_2xlarge' - | 'ci_4xlarge' - | 'ci_8xlarge' - | 'ci_12xlarge' - | 'ci_16xlarge' - | 'cd_default' - | 'pitr_7' - | 'pitr_14' - | 'pitr_28' - | 'ipv4_default' - /** @enum {string} */ - ProjectAddonVariantPricingType: 'fixed' | 'usage' - /** @enum {string} */ - ProjectAddonPricingInterval: 'monthly' | 'hourly' - ProjectAddonVariantResponse: { - identifier: components['schemas']['AddonVariantId'] - price_type: components['schemas']['ProjectAddonVariantPricingType'] - price_interval: components['schemas']['ProjectAddonPricingInterval'] - name: string - price_description: string - price: number - meta?: Record - } - SelectedAddonResponse: { - type: components['schemas']['ProjectAddonType'] - variant: components['schemas']['ProjectAddonVariantResponse'] - } - BillingProjectAddonResponse: { - addons: components['schemas']['SelectedAddonResponse'][] - name: string - ref: string - } - BillingPricingOptionsUnit: { - perUnitPrice: number - freeUnits?: number - } - BillingPricingOptionsPackage: { - packageSize: number - packagePrice: number - freeUnits?: number - } - BillingPricingOptionsNone: { - freeUnits?: number - } - BillingUsageBasedPrice: { - /** @enum {string} */ - metric: - | 'EGRESS' - | 'DATABASE_SIZE' - | 'STORAGE_SIZE' - | 'MONTHLY_ACTIVE_USERS' - | 'MONTHLY_ACTIVE_SSO_USERS' - | 'FUNCTION_INVOCATIONS' - | 'FUNCTION_COUNT' - | 'STORAGE_IMAGES_TRANSFORMED' - | 'REALTIME_MESSAGE_COUNT' - | 'REALTIME_PEAK_CONNECTIONS' - | 'COMPUTE_HOURS_BRANCH' - | 'COMPUTE_HOURS_XS' - | 'COMPUTE_HOURS_SM' - | 'COMPUTE_HOURS_MD' - | 'COMPUTE_HOURS_L' - | 'COMPUTE_HOURS_XL' - | 'COMPUTE_HOURS_2XL' - | 'COMPUTE_HOURS_4XL' - | 'COMPUTE_HOURS_8XL' - | 'COMPUTE_HOURS_12XL' - | 'COMPUTE_HOURS_16XL' - /** @enum {string} */ - pricingStrategy: 'UNIT' | 'PACKAGE' | 'NONE' - pricingOptions: - | components['schemas']['BillingPricingOptionsUnit'] - | components['schemas']['BillingPricingOptionsPackage'] - | components['schemas']['BillingPricingOptionsNone'] - name: string - unit: string - } - PaymentMethodCardDetails: { - last_4_digits: string - brand: string - expiry_month: number - expiry_year: number - } - ScheduledPlanChange: { - target_plan: components['schemas']['BillingPlanId'] - /** Format: date-time */ - at: string - usage_billing_enabled: boolean - } - GetSubscriptionResponse: { - billing_cycle_anchor: number - current_period_end: number - current_period_start: number - next_invoice_at: number - usage_billing_enabled: boolean - plan: components['schemas']['BillingSubscriptionPlan'] - addons: components['schemas']['BillingSubscriptionAddon'][] - project_addons: components['schemas']['BillingProjectAddonResponse'][] - usage_fees: components['schemas']['BillingUsageBasedPrice'][] - payment_method_type: string - payment_method_id?: string - payment_method_card_details?: components['schemas']['PaymentMethodCardDetails'] - billing_via_partner: boolean - /** @enum {string} */ - billing_partner: 'fly' | 'aws' - scheduled_plan_change: components['schemas']['ScheduledPlanChange'] | null - customer_balance: number - nano_enabled: boolean - } - UpdateSubscriptionBody: { - payment_method?: string - /** @enum {string} */ - tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' - } - /** @enum {string} */ - BillingPlanChangeType: 'upgrade' | 'downgrade' | 'none' - /** @enum {string} */ - BillingPlanEffectiveAt: 'now' | 'end_of_billing_period' | 'none' - PlanResponse: { - id: components['schemas']['BillingPlanId'] - change_type: components['schemas']['BillingPlanChangeType'] - effective_at: components['schemas']['BillingPlanEffectiveAt'] - name: string - price: number - is_current: boolean - } - PlansResponse: { - plans: components['schemas']['PlanResponse'][] - } - UpcomingInvoice: Record - ColumnPrivilege: { - grantor: string - grantee: string - /** @enum {string} */ - privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' - is_grantable: boolean - } - PostgresColumnPrivileges: { - column_id: string - relation_schema: string - relation_name: string - column_name: string - privileges: components['schemas']['ColumnPrivilege'][] - } - GrantColumnPrivilegesBody: { - is_grantable?: boolean - column_id: string - grantee: string - /** @enum {string} */ - privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' - } - RevokeColumnPrivilegesBody: { - column_id: string - grantee: string - /** @enum {string} */ - privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' - } - PostgresColumn: { - table_id: number - schema: string - table: string - id: string - ordinal_position: number - name: string - default_value: Record - data_type: string - format: string - is_identity: boolean - identity_generation: Record - is_generated: boolean - is_nullable: boolean - is_updatable: boolean - is_unique: boolean - enums: string[] - check: string | null - comment: string | null - } - CreateColumnBody: { - tableId: number - name: string - type: string - check?: string - comment?: string - defaultValue?: Record - /** @enum {string} */ - defaultValueFormat?: 'expression' | 'literal' - /** @enum {string} */ - identityGeneration?: 'BY DEFAULT' | 'ALWAYS' - isIdentity?: boolean - isNullable?: boolean - isPrimaryKey?: boolean - isUnique?: boolean - } - UpdateColumnBody: { - dropDefault?: boolean - name?: string - type?: string - id?: number - check?: string - comment?: string - defaultValue?: Record - /** @enum {string} */ - defaultValueFormat?: 'expression' | 'literal' - /** @enum {string} */ - identityGeneration?: 'BY DEFAULT' | 'ALWAYS' - isIdentity?: boolean - isNullable?: boolean - isUnique?: boolean - } - PostgresExtension: { - name: string - schema: string | null - default_version: string - installed_version: string | null - comment: string | null - } - CreateExtensionBody: { - cascade: boolean - name: string - schema: string - version: string - } - PostgresForeignTable: { - id: number - schema: string - name: string - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - } - PostgresFunction: { - id: number - schema: string - name: string - language: string - definition: string - complete_statement: string - argument_types: string - identity_argument_types: string - return_type: string - /** @enum {string} */ - behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' - security_definer: boolean - config_params: unknown - } - CreateFunctionBody: { - args: string[] - /** @enum {string} */ - behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' - config_params?: Record - definition: string - language: string - name: string - return_type: string - schema: string - security_definer: boolean - } - UpdateFunctionBody: { - id?: number - args?: string[] - /** @enum {string} */ - behavior?: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' - config_params?: Record - definition?: string - language?: string - name?: string - return_type?: string - schema?: string - security_definer?: boolean - } - PostgresMaterializedView: { - id: number - schema: string - name: string - is_populated: boolean - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - } - PostgresPolicy: { - id: number - schema: string - table: string - table_id: number - name: string - /** @enum {string} */ - action: 'PERMISSIVE' | 'RESTRICTIVE' - roles: string[] - /** @enum {string} */ - command: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL' - definition: string | null - check: string | null - } - CreatePolicyBody: { - name: string - table: string - schema?: string - definition?: string - check?: string - /** @enum {string} */ - action?: 'PERMISSIVE' | 'RESTRICTIVE' - /** @enum {string} */ - command?: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL' - roles?: string[] - } - UpdatePolicyBody: { - id?: number - name?: string - definition?: string - check?: string - roles?: string[] - } - Table: { - id: number - name: string - schema: string - } - PostgresPublication: { - id: number - name: string - owner: string - publish_insert: boolean - publish_update: boolean - publish_delete: boolean - publish_truncate: boolean - tables: components['schemas']['Table'][] | null - } - CreatePublicationBody: { - name: string - owner?: string - tables?: string[] | null - publish_insert?: boolean - publish_update?: boolean - publish_delete?: boolean - publish_truncate?: boolean - } - UpdatePublicationBody: { - id?: number - name?: string - owner?: string - tables?: string[] | null - publish_insert?: boolean - publish_update?: boolean - publish_delete?: boolean - publish_truncate?: boolean - } - RunQueryBody: { - query: string - } - FormatQueryBody: { - query: string - } - ValidateQueryBody: { - query: string - } - ValidateQueryResponse: { - valid: boolean - } - PostgresRole: { - id: number - name: string - is_superuser: boolean - can_create_db: boolean - can_create_role: boolean - inherit_role: boolean - can_login: boolean - is_replication_role: boolean - can_bypass_rls: boolean - active_connections: number - connection_limit: number - password: string - valid_until: string | null - config: string[] | null - } - CreateRoleBody: { - name: string - password?: string - inherit_role?: boolean - can_login?: boolean - is_superuser?: boolean - can_create_db?: boolean - can_create_role?: boolean - is_replication_role?: boolean - can_bypass_rls?: boolean - connection_limit?: number - member_of?: string[] - members?: string[] - admins?: string[] - valid_until?: string - config?: Record - } - UpdateRoleBody: { - name?: string - password?: string - inherit_role?: boolean - can_login?: boolean - is_superuser?: boolean - can_create_db?: boolean - can_create_role?: boolean - is_replication_role?: boolean - can_bypass_rls?: boolean - connection_limit?: number - valid_until?: string - config?: Record - } - PostgresSchema: { - id: number - name: string - owner: string - } - CreateSchemaBody: { - name: string - owner: string - } - UpdateSchemaBody: { - name?: string - owner?: string - } - SearchTableBody: { - name: string - schema: string - } - SearchColumnBody: { - name: string - schema: string - } - Column: { - id: number - name: string - schema: string - table_id: number - table: string - } - TablePrivilege: { - grantor: string - grantee: string - /** @enum {string} */ - privilege_type: - | 'ALL' - | 'SELECT' - | 'INSERT' - | 'UPDATE' - | 'DELETE' - | 'TRUNCATE' - | 'REFERENCES' - | 'TRIGGER' - is_grantable: boolean - } - PostgresTablePrivileges: { - schema: string - name: string - kind: string - privileges: components['schemas']['TablePrivilege'][] - } - GrantTablePrivilegesBody: { - is_grantable?: boolean - relation_id: number - grantee: string - /** @enum {string} */ - privilege_type: - | 'ALL' - | 'SELECT' - | 'INSERT' - | 'UPDATE' - | 'DELETE' - | 'TRUNCATE' - | 'REFERENCES' - | 'TRIGGER' - } - RevokeTablePrivilegesBody: { - relation_id: number - grantee: string - /** @enum {string} */ - privilege_type: - | 'ALL' - | 'SELECT' - | 'INSERT' - | 'UPDATE' - | 'DELETE' - | 'TRUNCATE' - | 'REFERENCES' - | 'TRIGGER' - } - PrimaryKey: { - schema: string - table_name: string - name: string - table_id: number - } - Relationship: { - id: number - constraint_name: string - source_schema: string - source_table_name: string - source_column_name: string - target_table_schema: string - target_table_name: string - target_column_name: string - } - PostgresTable: { - id: number - schema: string - name: string - rls_enabled: boolean - rls_forced: boolean - /** @enum {string} */ - replica_identity: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING' - bytes: number - size: string - live_rows_estimate: number - dead_rows_estimate: number - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - primary_keys: components['schemas']['PrimaryKey'][] - relationships: components['schemas']['Relationship'][] - } - CreateTableBody: { - name: string - schema?: string - comment?: string - } - UpdateTableBody: { - id?: number - rls_enabled?: boolean - rls_forced?: boolean - /** @enum {string} */ - replica_identity?: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING' - replica_identity_index?: string - name?: string - schema?: string - comment?: string - } - PostgresTrigger: { - id: number - table_id: number - /** @enum {string} */ - enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' - name: string - table: string - schema: string - condition: string | null - /** @enum {string} */ - orientation: 'ROW' | 'STATEMENT' - /** @enum {string} */ - activation: 'AFTER' | 'BEFORE' - events: string[] - function_schema: string - function_name: string - function_args: string[] - } - CreateTriggerBody: { - /** @enum {string} */ - activation: 'AFTER' | 'BEFORE' - /** @enum {string} */ - enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' - events: ('INSERT' | 'UPDATE' | 'DELETE')[] - function_args: string[] - function_name: string - function_schema: string - name: string - /** @enum {string} */ - orientation: 'ROW' | 'STATEMENT' - schema: string - table: string - table_id?: number - } - UpdateTriggerBody: { - id?: number - /** @enum {string} */ - activation?: 'AFTER' | 'BEFORE' - /** @enum {string} */ - enabled_mode?: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' - events?: ('INSERT' | 'UPDATE' | 'DELETE')[] - function_args?: string[] - function_name?: string - function_schema?: string - name?: string - /** @enum {string} */ - orientation?: 'ROW' | 'STATEMENT' - schema?: string - table?: string - table_id?: number - } - PostgresType: { - id: number - name: string - schema: string - format: string - enums: string[] - comment: string | null - } - PostgresView: { - id: number - schema: string - name: string - is_updatable: boolean - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - } - AccessToken: { - created_at: string - id: number - token_alias: string - name: string - /** @enum {string} */ - scope?: 'V0' - } - CreateAccessTokenBody: { - name: string - /** @enum {string} */ - scope?: 'V0' - } - CreateAccessTokenResponse: { - created_at: string - id: number - token_alias: string - name: string - /** @enum {string} */ - scope?: 'V0' - token: string - } - SearchProfileBody: { - keywords: string - } - Profile: { - first_name: string - gotrue_id: string - id: number - last_name: string - username: string - } - SubscriptionStatisticsResponse: { - total_paid_projects: number - total_free_projects: number - total_active_free_projects: number - total_paused_free_projects: number - total_pro_projects: number - total_payg_projects: number - total_team_projects: number - total_enterprise_projects: number - } - PasswordCheckBody: { - password: string - } - PasswordCheckResponse: { - result: { - feedback?: { - warning?: string - suggestions?: string[] - } - score?: number - } - } - Permission: { - actions: ( - | 'analytics:Read' - | 'auth:Execute' - | 'billing:Read' - | 'billing:Write' - | 'write:Create' - | 'write:Delete' - | 'functions:Read' - | 'functions:Write' - | 'infra:Execute' - | 'read:Read' - | 'sql:Read:Select' - | 'sql:Write:Delete' - | 'sql:Write:Insert' - | 'sql:Write:Update' - | 'storage:Admin:Read' - | 'storage:Admin:Write' - | 'tenant:Sql:Admin:Read' - | 'tenant:Sql:Admin:Write' - | 'tenant:Sql:CreateTable' - | 'tenant:Sql:Write:Delete' - | 'tenant:Sql:Write:Insert' - | 'tenant:Sql:Query' - | 'tenant:Sql:Read:Select' - | 'tenant:Sql:Write:Update' - | 'write:Update' - )[] - condition: unknown - organization_id: number - resources: string[] - } - ProfileResponse: { - id: number - auth0_id: string - primary_email: string - username: string - first_name: string - last_name: string - mobile: string - is_alpha_user: boolean - gotrue_id: string - free_project_limit: number - disabled_features: ( - | 'organizations:create' - | 'organizations:delete' - | 'organization_members:create' - | 'organization_members:delete' - | 'projects:create' - | 'projects:transfer' - | 'project_auth:all' - | 'project_storage:all' - | 'project_edge_function:all' - | 'profile:update' - | 'billing:account_data' - | 'billing:credits' - | 'billing:invoices' - | 'billing:payment_methods' - | 'realtime:all' - )[] - } - UpdateProfileBody: { - first_name: string - last_name: string - } - /** @enum {string} */ - DbInstanceSize: - | 'nano' - | 'micro' - | 'small' - | 'medium' - | 'large' - | 'xlarge' - | '2xlarge' - | '4xlarge' - | '8xlarge' - | '12xlarge' - | '16xlarge' - ProjectInfo: { - infra_compute_size?: components['schemas']['DbInstanceSize'] - cloud_provider: string - id: number - inserted_at: string - name: string - organization_id: number - ref: string - region: string - status: string - subscription_id: string - is_branch_enabled: boolean - is_read_replicas_enabled: boolean - preview_branch_refs: string[] - disk_volume_size_gb?: number - } - GetProjectByFlyExtensionIdResponse: { - ref: string - } - /** @enum {string} */ - DesiredInstanceSize: - | 'micro' - | 'small' - | 'medium' - | 'large' - | 'xlarge' - | '2xlarge' - | '4xlarge' - | '8xlarge' - | '12xlarge' - | '16xlarge' - AmiSearchOptions: { - search_tags?: Record - } - CustomSupabaseInternalRequests: { - ami: components['schemas']['AmiSearchOptions'] - } - CreateProjectBody: { - /** @deprecated */ - kps_enabled?: boolean - desired_instance_size?: components['schemas']['DesiredInstanceSize'] - cloud_provider: string - org_id: number - name: string - db_pass: string - db_region: string - db_pricing_tier_id?: string - db_sql?: string - auth_site_url?: string - vercel_configuration_id?: string - custom_supabase_internal_requests?: components['schemas']['CustomSupabaseInternalRequests'] - } - CreateProjectResponse: { - infra_compute_size?: components['schemas']['DbInstanceSize'] - cloud_provider: string - id: number - inserted_at: string - name: string - organization_id: number - ref: string - region: string - status: string - subscription_id: string - is_branch_enabled: boolean - is_read_replicas_enabled: boolean - preview_branch_refs: string[] - disk_volume_size_gb?: number - endpoint: string - anon_key: string - service_key: string - } - GetUserContentObject: { - owner: { - id?: number - username?: string - } - updated_by: { - id?: number - username?: string - } - id: string - inserted_at: string - updated_at: string - type: Record - visibility: Record - name: string - description?: string - project_id: number - owner_id: number - last_updated_by: number - } - GetUserContentResponse: { - data: components['schemas']['GetUserContentObject'][] - } - CreateContentParams: { - id: string - name: string - description: string - /** @enum {string} */ - type: 'sql' | 'report' | 'log_sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - content?: Record - owner_id?: number - } - UserContentObject: { - id: string - inserted_at: string - updated_at: string - type: Record - visibility: Record - name: string - description?: string - project_id: number - owner_id: number - last_updated_by: number - } - UpsertContentParams: { - id: string - name: string - description: string - /** @enum {string} */ - type: 'sql' | 'report' | 'log_sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - content?: Record - owner_id?: number - project_id: number - } - UpdateContentParams: { - id?: string - name?: string - description?: string - /** @enum {string} */ - type?: 'sql' | 'report' | 'log_sql' - /** @enum {string} */ - visibility?: 'user' | 'project' | 'org' | 'public' - content?: Record - owner_id?: number - } - BulkDeleteUserContentResponse: { - id: string - } - DatabaseDetailResponse: { - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'INIT_READ_REPLICA' - | 'INIT_READ_REPLICA_FAILED' - /** @enum {string} */ - cloud_provider: 'AWS' | 'FLY' - db_port: number - db_name: string - db_user: string - restUrl: string - db_host: string - connectionString: string - identifier: string - inserted_at: string - size: string - region: string - } - DatabaseStatusResponse: { - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'INIT_READ_REPLICA' - | 'INIT_READ_REPLICA_FAILED' - identifier: string - } - UpdatePasswordBody: { - password: string - } - LoadBalancerDatabase: { - identifier: string - /** @enum {string} */ - type: 'PRIMARY' | 'READ_REPLICA' - status: string - } - LoadBalancerDetailResponse: { - endpoint: string - databases: components['schemas']['LoadBalancerDatabase'][] - } - Buffer: Record - ResizeBody: { - volume_size_gb: number - } - ServiceVersions: { - gotrue: string - postgrest: string - 'supabase-postgres': string - } - ProjectDetailResponse: { - infra_compute_size?: components['schemas']['DbInstanceSize'] - cloud_provider: string - db_host: string - id: number - inserted_at: string - name: string - organization_id: number - ref: string - region: string - /** @enum {string} */ - status: - | 'INACTIVE' - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'UNKNOWN' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UPGRADING' - subscription_id: string - connectionString: string - kpsVersion?: string - dbVersion?: string - restUrl: string - serviceVersions?: components['schemas']['ServiceVersions'] - volumeSizeGb?: number - maxDatabasePreprovisionGb?: number - lastDatabaseResizeAt?: string - is_branch_enabled: boolean - parent_project_ref?: string - is_read_replicas_enabled: boolean - v2MaintenanceWindow: { - start?: string - end?: string - } - } - ProjectRefResponse: { - id: number - ref: string - name: string - } - UpdateProjectBody: { - name: string - } - BackupId: { - id: number - } - RestoreProjectInfo: { - id: number - status: string - organization_id: number - subscription_id: string - region: string - cloud_provider: string - back_ups: components['schemas']['BackupId'][] - } - RestartServiceRequest: { - services: ( - | 'adminapi' - | 'api-gateway' - | 'envoy' - | 'functions' - | 'gotrue' - | 'kong' - | 'pgbouncer' - | 'pgsodium' - | 'postgresql' - | 'postgrest' - | 'realtime' - | 'storage' - | 'walg' - | 'autoshutdown' - )[] - source_notification_id?: string - region: string - } - RestartServicesBody: { - restartRequest: components['schemas']['RestartServiceRequest'] - } - ProjectAppConfigResponse: { - db_schema: string - endpoint: string - } - ProjectServiceApiKeyResponse: { - api_key: string - name: string - tags: string - } - ProjectSettingsResponse: { - name: string - ref: string - status: string - inserted_at: string - db_dns_name: string - db_host: string - db_name: string - db_user: string - db_port: string - ssl_enforced: boolean - cloud_provider: string - region: string - app_config?: components['schemas']['ProjectAppConfigResponse'] - jwt_secret?: string - service_api_keys?: components['schemas']['ProjectServiceApiKeyResponse'][] - /** @enum {string|null} */ - db_ip_addr_config: 'legacy' | 'static-ipv4' | 'concurrent-ipv6' | 'ipv6' | null - } - TransferProjectBody: { - target_organization_slug: string - } - PreviewTransferInfo: { - key: string - message: string - } - MemberExceedingFreeProjectLimit: { - name: string - limit: number - } - PreviewTransferInvoiceItem: { - description: string - quantity: number - amount: number - } - PreviewProjectTransferResponse: { - source_subscription_plan: components['schemas']['BillingPlanId'] - target_subscription_plan: components['schemas']['BillingPlanId'] - valid: boolean - warnings: components['schemas']['PreviewTransferInfo'][] - errors: components['schemas']['PreviewTransferInfo'][] - members_exceeding_free_project_limit: components['schemas']['MemberExceedingFreeProjectLimit'][] - has_permissions_on_source_organization: boolean - has_access_to_target_organization: boolean - source_project_eligible: boolean - target_organization_eligible: boolean | null - target_organization_has_free_project_slots: boolean | null - credits_on_source_organization: number - costs_on_target_organization: number - charge_on_target_organization: number - source_invoice_items: components['schemas']['PreviewTransferInvoiceItem'][] - target_invoice_items: components['schemas']['PreviewTransferInvoiceItem'][] - } - AnalyticsResponse: { - error?: OneOf< - [ - { - code?: number - errors?: { - domain?: string - location?: string - locationType?: string - message?: string - reason?: string - }[] - message?: string - status?: string - }, - string, - ] - > - result?: Record[] - } - PgbouncerConfigResponse: { - default_pool_size?: number - ignore_startup_parameters?: string - max_client_conn?: number - /** @enum {string} */ - pool_mode?: 'transaction' | 'session' | 'statement' - inserted_at: string - db_dns_name: string - db_user: string - db_host: string - db_port: number - db_name: string - ssl_enforced: boolean - pgbouncer_enabled: boolean - supavisor_enabled: boolean - /** @enum {string} */ - pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING' - connectionString: string - } - PgbouncerStatusResponse: { - active: boolean - } - UpdatePgbouncerConfigBody: { - default_pool_size?: number - max_client_conn?: number | null - ignore_startup_parameters: string - pgbouncer_enabled: boolean - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - } - UpdatePoolingConfigResponse: { - default_pool_size?: number - max_client_conn?: number | null - ignore_startup_parameters: string - pgbouncer_enabled: boolean - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - /** @enum {string} */ - pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING' - } - PostgrestConfigResponse: { - db_schema: string - db_anon_role: string - role_claim_key: string - jwt_secret: string - max_rows: number - db_extra_search_path: string - } - UpdatePostgrestConfigBody: { - max_rows?: number - db_extra_search_path?: string - db_schema?: string - } - V1PostgrestConfigResponse: { - max_rows: number - db_schema: string - db_extra_search_path: string - } - PostgresConfigResponse: { - statement_timeout?: string - effective_cache_size?: string - maintenance_work_mem?: string - max_connections?: number - max_locks_per_transaction?: number - max_parallel_maintenance_workers?: number - max_parallel_workers?: number - max_parallel_workers_per_gather?: number - max_worker_processes?: number - shared_buffers?: string - work_mem?: string - /** @enum {string} */ - session_replication_role?: 'origin' | 'replica' | 'local' - } - UpdatePostgresConfigBody: { - statement_timeout?: string - effective_cache_size?: string - maintenance_work_mem?: string - max_connections?: number - max_locks_per_transaction?: number - max_parallel_maintenance_workers?: number - max_parallel_workers?: number - max_parallel_workers_per_gather?: number - max_worker_processes?: number - shared_buffers?: string - work_mem?: string - /** @enum {string} */ - session_replication_role?: 'origin' | 'replica' | 'local' - } - UpdateSecretsConfigBody: { - jwt_secret: string - change_tracking_id: string - } - UpdateSecretsResponse: { - message: string - } - StorageConfigResponse: { - isFreeTier: boolean - fileSizeLimit: number - } - UpdateStorageConfigBody: { - fileSizeLimit: number - } - UpdateStorageConfigResponse: { - fileSizeLimit: number - } - SupavisorConfigResponse: { - identifier: string - /** @enum {string} */ - database_type: 'PRIMARY' | 'READ_REPLICA' - is_using_scram_auth: boolean - db_user: string - db_host: string - db_port: number - db_name: string - connectionString: string - default_pool_size: number | null - max_client_conn: number | null - /** @enum {string|null} */ - pool_mode: 'transaction' | 'session' | 'statement' | null - } - UpdateSupavisorConfigBody: { - default_pool_size?: number - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - } - UpdateSupavisorConfigResponse: { - default_pool_size?: number - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - } - AvailableAddonResponse: { - type: components['schemas']['ProjectAddonType'] - name: string - variants: components['schemas']['ProjectAddonVariantResponse'][] - } - ProjectAddonsResponse: { - ref: string - selected_addons: components['schemas']['SelectedAddonResponse'][] - available_addons: components['schemas']['AvailableAddonResponse'][] - } - UpdateAddonBody: { - addon_variant: components['schemas']['AddonVariantId'] - addon_type: components['schemas']['ProjectAddonType'] - } - ServiceApiKey: { - api_key_encrypted?: string - tags: string - name: string - } - AutoApiService: { - protocol: string - endpoint: string - restUrl: string - project: { - ref?: string - } - defaultApiKey: string - serviceApiKey: string - id: number - name: string - app_config: Record - app: { - id?: number - name?: string - } - service_api_keys: components['schemas']['ServiceApiKey'][] - } - ApiResponse: { - autoApiService: components['schemas']['AutoApiService'] - } - JwtSecretUpdateStatus: { - jwtSecretUpdateStatus: { - change_tracking_id?: string - /** @enum {number} */ - error?: 0 | 1 | 2 | 3 | 4 | 5 - /** @enum {number} */ - progress?: 0 | 1 | 2 | 3 | 4 | 5 - /** @enum {number} */ - status?: 0 | 1 | 2 - } - } - ServiceApiKeyResponse: { - api_key_encrypted?: string - tags: string - name: string - api_key?: string - } - ServiceResponse: { - service_api_keys: components['schemas']['ServiceApiKeyResponse'][] - id: number - name: string - app_config: Record - app: { - id?: number - name?: string - } - } - ProjectResponse: { - jwt_secret: string - services?: components['schemas']['ServiceResponse'][] - id: number - name: string - ref: string - status: string - inserted_at: string - db_dns_name: string - db_host: string - db_name: string - db_user: string - db_port: string - ssl_enforced: boolean - cloud_provider: string - region: string - } - SettingsResponse: { - project: components['schemas']['ProjectResponse'] - services: components['schemas']['ServiceResponse'][] - } - StorageBucket: { - id: string - name: string - owner: string - created_at: string - updated_at: string - public: boolean - } - UpdateStorageBucketBody: { - public: boolean - file_size_limit: number - allowed_mime_types: string[] - } - CreateStorageBucketBody: { - id: string - public: boolean - file_size_limit: number - allowed_mime_types: string[] - } - StorageObjectSortBy: { - column?: string - order?: string - } - StorageObjectSearchOptions: { - limit?: number - offset?: number - sortBy?: components['schemas']['StorageObjectSortBy'] - search?: string - } - GetObjectsBody: { - path: string - options: components['schemas']['StorageObjectSearchOptions'] - } - StorageObject: { - name: string - bucket_id: string - owner: string - id: string - updated_at: string - created_at: string - last_accessed_at: string - metadata: Record - buckets: components['schemas']['StorageBucket'] - } - StorageObjectTransformOptions: { - width?: number - height?: number - /** @enum {string} */ - resize?: 'cover' | 'contain' | 'fill' - quality?: number - /** @enum {string} */ - format?: 'origin' - } - PublicUrlOptions: { - transform?: components['schemas']['StorageObjectTransformOptions'] - download?: boolean - downloadName?: string - } - GetPublicUrlBody: { - path: string - options?: components['schemas']['PublicUrlOptions'] - } - PublicUrlResponse: { - publicUrl: string - } - DownloadObjectOptions: { - transform?: components['schemas']['StorageObjectTransformOptions'] - download?: boolean - downloadName?: string - } - DownloadObjectBody: { - path: string - options?: components['schemas']['DownloadObjectOptions'] - } - SignedUrlOptions: { - transform?: components['schemas']['StorageObjectTransformOptions'] - download?: boolean - downloadName?: string - } - GetSignedUrlBody: { - path: string - expiresIn: number - options?: components['schemas']['SignedUrlOptions'] - } - SignedUrlResponse: { - signedUrl: string - } - SignedUrlsOptions: { - download?: boolean - downloadName?: string - } - GetSignedUrlsBody: { - path: string[] - expiresIn: number - options?: components['schemas']['SignedUrlsOptions'] - } - SignedUrlsResponse: { - signedUrl: string - error: string | null - path: string | null - } - CopyObjectBody: { - from: string - to: string - } - CopyObjectResponse: { - path: string - } - MoveObjectBody: { - from: string - to: string - } - DeleteObjectsBody: { - paths: string[] - } - Invoice: { - id: string - invoice_pdf: string - subscription: string - subtotal: number - number: string - period_end: number - status: string - } - OverdueInvoiceCount: { - organization_id: number - overdue_invoice_count: number - } - GoogleAnalyticBody: { - language?: string - screen_resolution?: string - session_id: string - } - TelemetryEventBody: { - category: string - action: string - label?: Record - value?: string - page_referrer?: string - page_title?: string - page_location?: string - ga?: components['schemas']['GoogleAnalyticBody'] - } - IdentifyUserBody: { - id: number - gotrue_id: string - mobile?: string - primary_email: string - username?: string - first_name?: string - last_name?: string - is_alpha_user?: boolean - free_project_limit?: number - auth0_id?: string - } - TelemetryIdentifyBody: { - user: components['schemas']['IdentifyUserBody'] - ga?: components['schemas']['GoogleAnalyticBody'] - } - TelemetryPageBody: { - referrer: string - title: string - route?: string - ga?: components['schemas']['GoogleAnalyticBody'] - } - PageBody: { - path: string - location: string - referrer?: string - title?: string - } - TelemetryActivityBody: { - activity: string - source: string - projectRef?: string - orgSlug?: string - data?: Record - page: components['schemas']['PageBody'] - } - TelemetryPageviewBody: { - projectRef?: string - orgSlug?: string - referrer: string - title: string - path: string - location: string - } - CreateVercelEnvironmentVariableBody: { - key: string - target: string[] - type: string - value: string - } - GetUserOrganizationIntegrationResponse: { - id: string - inserted_at: string - updated_at: string - metadata: Record - integration: { - name?: string - } - added_by: { - username?: string - primary_email?: string - } - organization: { - slug?: string - } - } - ProjectIntegrationConnection: { - id: string - inserted_at: string - updated_at: string - organization_integration_id: string - supabase_project_ref: string - added_by: { - username?: string - primary_email?: string - } - } - GetOrganizationIntegrationResponse: { - id: string - inserted_at: string - updated_at: string - metadata: Record - integration: { - name?: string - } - added_by: { - username?: string - primary_email?: string - } - organization: { - slug?: string - } - connections: components['schemas']['ProjectIntegrationConnection'][] - } - CreateVercelIntegrationBody: { - code: string - configuration_id: string - organization_slug: string - metadata: Record - source: string - teamId?: string - } - VercelProjectDeployHooks: { - createdAt?: number - id: string - name: string - ref: string - url: string - } - VercelProjectLink: { - type?: string - deployHooks: components['schemas']['VercelProjectDeployHooks'][] - gitCredentialId?: string - productionBranch?: string - } - IntegrationVercelProject: { - id: string - name: string - framework?: string | null - link?: components['schemas']['VercelProjectLink'] - } - GetVercelProjectsResponse: { - projects: components['schemas']['IntegrationVercelProject'][] - pagination: { - count?: number - next?: number | null - prev?: number | null - } - } - GetVercelConnections: { - id: string - inserted_at: string - updated_at: string - organization_integration_id: string - supabase_project_ref: string - foreign_project_id: string - metadata: Record - } - IntegrationConnectionVercel: { - foreign_project_id: string - supabase_project_ref: string - metadata: Record - } - CreateVercelConnectionsBody: { - organization_integration_id: string - connection: components['schemas']['IntegrationConnectionVercel'] - } - SyncVercelEnvError: { - message: string - } - CreateVercelConnectionResponse: { - id: string - env_sync_error?: components['schemas']['SyncVercelEnvError'] - } - UpdateVercelConnectionsBody: { - metadata: Record - } - DeleteVercelConnectionResponse: { - id: string - } - GitHubAuthorization: { - id: number - user_id: number - sender_id: number - } - CreateGitHubAuthorizationBody: { - code: string - } - ListGitHubConnectionsProject: { - id: number - ref: string - name: string - } - ListGitHubConnectionsRepository: { - id: number - name: string - } - ListGitHubConnectionsUser: { - id: number - username: string - primary_email: string | null - } - ListGitHubConnectionsConnection: { - id: number - inserted_at: string - updated_at: string - installation_id: number - project: components['schemas']['ListGitHubConnectionsProject'] - repository: components['schemas']['ListGitHubConnectionsRepository'] - user: components['schemas']['ListGitHubConnectionsUser'] | null - workdir: string - } - ListGitHubConnectionsResponse: { - connections: components['schemas']['ListGitHubConnectionsConnection'][] - } - CreateGitHubConnectionsBody: { - project_ref: string - installation_id: number - repository_id: number - } - UpdateGitHubConnectionsBody: { - workdir?: string - supabase_changes_only?: boolean - } - CreateCliLoginSessionBody: { - session_id: string - public_key: string - token_name?: string - } - FunctionResponse: { - id: string - slug: string - name: string - /** @enum {string} */ - status: 'ACTIVE' | 'REMOVED' | 'THROTTLED' - version: number - created_at: number - updated_at: number - verify_jwt?: boolean - import_map?: boolean - entrypoint_path?: string - import_map_path?: string - } - SecretResponse: { - name: string - value: string - } - CreateSecretBody: { - /** - * @description Secret name must not start with the SUPABASE_ prefix. - * @example string - */ - name: string - value: string - } - HealthResponse: { - healthy: boolean - } - ReportStatusBody: { - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'INIT_READ_REPLICA' - | 'INIT_READ_REPLICA_FAILED' - reportingToken: string - databaseIdentifier: string - } - EventBody: { - reportingToken: string - eventType: string - message: string - } - CredentialsRequestBody: { - projectToken: string - } - CredentialsResponseBody: { - access_key_id: string - secret_access_key: string - session_token: string - /** Format: date-time */ - expiry_time: string - } - UpdateAddonAdminBody: { - addon_variant: components['schemas']['AddonVariantId'] - addon_type: components['schemas']['ProjectAddonType'] - /** @enum {string} */ - proration_behaviour?: 'prorate_and_invoice_end_of_cycle' | 'prorate_and_invoice_now' - price_id?: string - } - SystemCreateProjectBody: { - /** @description Database password */ - db_pass: string - /** @description Name of your project, should not contain dots */ - name: string - /** @description Slug of your organization */ - organization_id: string - /** - * @description Subscription plan - * @example free - * @enum {string} - */ - plan: 'free' | 'pro' - /** - * @description Region you want your server to reside in - * @example us-east-1 - * @enum {string} - */ - region: - | 'us-east-1' - | 'us-west-1' - | 'us-west-2' - | 'ap-east-1' - | 'ap-southeast-1' - | 'ap-northeast-1' - | 'ap-northeast-2' - | 'ap-southeast-2' - | 'eu-west-1' - | 'eu-west-2' - | 'eu-west-3' - | 'eu-central-1' - | 'ca-central-1' - | 'ap-south-1' - | 'sa-east-1' - jwt_secret: string - anon_key: string - service_key: string - api_key_supabase: string - db_pass_supabase: string - } - SystemDatabaseResponse: { - /** @description Database host */ - host: string - /** @description Database version */ - version: string - } - SystemProjectResponse: { - /** @description Id of your project */ - id: string - /** @description Slug of your organization */ - organization_id: string - /** @description Name of your project */ - name: string - /** - * @description Region of your project - * @example us-east-1 - */ - region: string - /** - * @description Creation timestamp - * @example 2023-03-29T16:32:59Z - */ - created_at: string - database?: components['schemas']['SystemDatabaseResponse'] - } - UpdateSubscriptionV2AdminBody: { - payment_method?: string - /** @enum {string} */ - tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' - price_id?: string - } - RestrictionData: { - grace_period_end?: string - /** @enum {string} */ - restrictions?: 'drop_requests_402' - violations?: ( - | 'exceed_db_size_quota' - | 'exceed_egress_quota' - | 'exceed_edge_functions_count_quota' - | 'exceed_edge_functions_invocations_quota' - | 'exceed_monthly_active_users_quota' - | 'exceed_realtime_connection_count_quota' - | 'exceed_realtime_message_count_quota' - | 'exceed_storage_size_quota' - | 'overdue_payment' - )[] - } - UpdateRestrictionsBody: { - /** @enum {string} */ - restriction_status: 'grace_period' | 'grace_period_over' | 'null' | 'restricted' - restriction_data?: components['schemas']['RestrictionData'] - no_notification?: boolean - } - UpdateRestrictionsResponse: { - slug: string - /** @enum {string} */ - restriction_status?: 'grace_period' | 'grace_period_over' | 'null' | 'restricted' - restriction_data?: components['schemas']['RestrictionData'] - message?: string - } - GetMetricsBody: { - /** @enum {string} */ - metric: 'user_queries' - /** @enum {string} */ - interval: '1d' | '3d' | '7d' - project_refs: string[] - region: string - } - ProjectMetric: { - project_ref: string - metric: string - value: number - } - GetMetricsResponse: { - metrics: components['schemas']['ProjectMetric'][] - } - BranchDetailResponse: { - db_port: number - ref: string - postgres_version: string - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INACTIVE' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'PAUSING' - db_host: string - db_user?: string - db_pass?: string - jwt_secret?: string - } - UpdateBranchBody: { - branch_name?: string - git_branch?: string - reset_on_push?: boolean - persistent?: boolean - } - BranchResponse: { - id: string - name: string - project_ref: string - parent_project_ref: string - is_default: boolean - git_branch?: string - pr_number?: number - reset_on_push: boolean - persistent: boolean - /** @enum {string} */ - status: 'CREATING_PROJECT' | 'RUNNING_MIGRATIONS' | 'MIGRATIONS_PASSED' | 'MIGRATIONS_FAILED' - created_at: string - updated_at: string - } - BranchDeleteResponse: { - message: string - } - BranchResetResponse: { - message: string - } - V1DatabaseResponse: { - /** @description Database host */ - host: string - /** @description Database version */ - version: string - } - V1ProjectResponse: { - /** @description Id of your project */ - id: string - /** @description Slug of your organization */ - organization_id: string - /** @description Name of your project */ - name: string - /** - * @description Region of your project - * @example us-east-1 - */ - region: string - /** - * @description Creation timestamp - * @example 2023-03-29T16:32:59Z - */ - created_at: string - database?: components['schemas']['V1DatabaseResponse'] - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INACTIVE' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'PAUSING' - } - V1CreateProjectBody: { - /** @description Database password */ - db_pass: string - /** @description Name of your project, should not contain dots */ - name: string - /** @description Slug of your organization */ - organization_id: string - /** - * @deprecated - * @description Subscription plan is now set on organization level and is ignored in this request - * @example free - * @enum {string} - */ - plan?: 'free' | 'pro' - /** - * @description Region you want your server to reside in - * @example us-east-1 - * @enum {string} - */ - region: - | 'us-east-1' - | 'us-west-1' - | 'us-west-2' - | 'ap-east-1' - | 'ap-southeast-1' - | 'ap-northeast-1' - | 'ap-northeast-2' - | 'ap-southeast-2' - | 'eu-west-1' - | 'eu-west-2' - | 'eu-west-3' - | 'eu-central-1' - | 'ca-central-1' - | 'ap-south-1' - | 'sa-east-1' - /** @deprecated */ - kps_enabled?: boolean - desired_instance_size?: components['schemas']['DesiredInstanceSize'] - } - ApiKeyResponse: { - name: string - api_key: string - } - CreateBranchBody: { - branch_name: string - git_branch?: string - region?: string - } - UpdateCustomHostnameResponse: { - /** @enum {string} */ - status: - | '1_not_started' - | '2_initiated' - | '3_challenge_verified' - | '4_origin_setup_completed' - | '5_services_reconfigured' - custom_hostname: string - data: Record - } - UpdateCustomHostnameBody: { - custom_hostname: string - } - NetworkBanResponse: { - banned_ipv4_addresses: string[] - } - RemoveNetworkBanRequest: { - ipv4_addresses: string[] - } - NetworkRestrictionsRequest: { - dbAllowedCidrs?: string[] - dbAllowedCidrsV6?: string[] - } - NetworkRestrictionsResponse: { - /** @enum {string} */ - entitlement: 'disallowed' | 'allowed' - config: components['schemas']['NetworkRestrictionsRequest'] - old_config?: components['schemas']['NetworkRestrictionsRequest'] - /** @enum {string} */ - status: 'stored' | 'applied' - } - PgsodiumConfigResponse: { - root_key: string - } - UpdatePgsodiumConfigBody: { - root_key: string - } - PostgrestConfigWithJWTSecretResponse: { - max_rows: number - db_schema: string - db_extra_search_path: string - jwt_secret?: string - } - V1ProjectRefResponse: { - id: number - ref: string - name: string - } - SslEnforcements: { - database: boolean - } - SslEnforcementResponse: { - currentConfig: components['schemas']['SslEnforcements'] - appliedSuccessfully: boolean - } - SslEnforcementRequest: { - requestedConfig: components['schemas']['SslEnforcements'] - } - TypescriptResponse: { - types: string - } - VanitySubdomainConfigResponse: { - /** @enum {string} */ - status: 'not-used' | 'custom-domain-used' | 'active' - custom_domain?: string - } - VanitySubdomainBody: { - vanity_subdomain: string - } - SubdomainAvailabilityResponse: { - available: boolean - } - ActivateVanitySubdomainResponse: { - custom_domain: string - } - UpgradeDatabaseBody: { - target_version: number - } - ProjectUpgradeInitiateResponse: { - tracking_id: string - } - ProjectVersion: { - postgres_version: number - app_version: string - } - ProjectUpgradeEligibilityResponse: { - eligible: boolean - current_app_version: string - latest_app_version: string - target_upgrade_versions: components['schemas']['ProjectVersion'][] - potential_breaking_changes: string[] - duration_estimate_hours: number - legacy_auth_custom_roles: string[] - extension_dependent_objects: string[] - } - DatabaseUpgradeStatus: { - initiated_at: string - target_version: number - /** @enum {string} */ - error?: - | '1_upgraded_instance_launch_failed' - | '2_volume_detachchment_from_upgraded_instance_failed' - | '3_volume_attachment_to_original_instance_failed' - | '4_data_upgrade_initiation_failed' - | '5_data_upgrade_completion_failed' - | '6_volume_detachchment_from_original_instance_failed' - | '7_volume_attachment_to_upgraded_instance_failed' - | '8_upgrade_completion_failed' - /** @enum {string} */ - progress?: - | '0_requested' - | '1_started' - | '2_launched_upgraded_instance' - | '3_detached_volume_from_upgraded_instance' - | '4_attached_volume_to_original_instance' - | '5_initiated_data_upgrade' - | '6_completed_data_upgrade' - | '7_detached_volume_from_original_instance' - | '8_attached_volume_to_upgraded_instance' - | '9_completed_upgrade' - /** @enum {number} */ - status: 0 | 1 | 2 - } - DatabaseUpgradeStatusResponse: { - databaseUpgradeStatus: components['schemas']['DatabaseUpgradeStatus'] | null - } - ReadOnlyStatusResponse: { - enabled: boolean - override_enabled: boolean - override_active_until: string - } - SetUpReadReplicaBody: { - /** - * @description Region you want your read replica to reside in - * @example us-east-1 - * @enum {string} - */ - read_replica_region: - | 'us-east-1' - | 'us-west-1' - | 'us-west-2' - | 'ap-east-1' - | 'ap-southeast-1' - | 'ap-northeast-1' - | 'ap-northeast-2' - | 'ap-southeast-2' - | 'eu-west-1' - | 'eu-west-2' - | 'eu-west-3' - | 'eu-central-1' - | 'ca-central-1' - | 'ap-south-1' - | 'sa-east-1' - } - RemoveReadReplicaBody: { - database_identifier: string - } - AuthHealthResponse: { - name: string - version: string - description: string - } - RealtimeHealthResponse: { - healthy: boolean - db_connected: boolean - connected_cluster: number - } - V1ServiceHealthResponse: { - info?: - | components['schemas']['AuthHealthResponse'] - | components['schemas']['RealtimeHealthResponse'] - /** @enum {string} */ - name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage' - healthy: boolean - /** @enum {string} */ - status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY' - error?: string - } - V1PgbouncerConfigResponse: { - /** @enum {string} */ - pool_mode?: 'transaction' | 'session' | 'statement' - default_pool_size?: number - ignore_startup_parameters?: string - max_client_conn?: number - connection_string?: string - } - AuthConfigResponse: { - disable_signup: boolean | null - external_anonymous_users_enabled: boolean | null - external_apple_additional_client_ids: string | null - external_apple_client_id: string | null - external_apple_enabled: boolean | null - external_apple_secret: string | null - external_azure_client_id: string | null - external_azure_enabled: boolean | null - external_azure_secret: string | null - external_azure_url: string | null - external_bitbucket_client_id: string | null - external_bitbucket_enabled: boolean | null - external_bitbucket_secret: string | null - external_discord_client_id: string | null - external_discord_enabled: boolean | null - external_discord_secret: string | null - external_email_enabled: boolean | null - external_facebook_client_id: string | null - external_facebook_enabled: boolean | null - external_facebook_secret: string | null - external_figma_client_id: string | null - external_figma_enabled: boolean | null - external_figma_secret: string | null - external_github_client_id: string | null - external_github_enabled: boolean | null - external_github_secret: string | null - external_gitlab_client_id: string | null - external_gitlab_enabled: boolean | null - external_gitlab_secret: string | null - external_gitlab_url: string | null - external_google_additional_client_ids: string | null - external_google_client_id: string | null - external_google_enabled: boolean | null - external_google_secret: string | null - external_google_skip_nonce_check: boolean | null - external_kakao_client_id: string | null - external_kakao_enabled: boolean | null - external_kakao_secret: string | null - external_keycloak_client_id: string | null - external_keycloak_enabled: boolean | null - external_keycloak_secret: string | null - external_keycloak_url: string | null - external_linkedin_oidc_client_id: string | null - external_linkedin_oidc_enabled: boolean | null - external_linkedin_oidc_secret: string | null - external_notion_client_id: string | null - external_notion_enabled: boolean | null - external_notion_secret: string | null - external_phone_enabled: boolean | null - external_slack_client_id: string | null - external_slack_enabled: boolean | null - external_slack_secret: string | null - external_spotify_client_id: string | null - external_spotify_enabled: boolean | null - external_spotify_secret: string | null - external_twitch_client_id: string | null - external_twitch_enabled: boolean | null - external_twitch_secret: string | null - external_twitter_client_id: string | null - external_twitter_enabled: boolean | null - external_twitter_secret: string | null - external_workos_client_id: string | null - external_workos_enabled: boolean | null - external_workos_secret: string | null - external_workos_url: string | null - external_zoom_client_id: string | null - external_zoom_enabled: boolean | null - external_zoom_secret: string | null - hook_custom_access_token_enabled: boolean | null - hook_custom_access_token_uri: string | null - hook_mfa_verification_attempt_enabled: boolean | null - hook_mfa_verification_attempt_uri: string | null - hook_password_verification_attempt_enabled: boolean | null - hook_password_verification_attempt_uri: string | null - jwt_exp: number | null - mailer_allow_unverified_email_sign_ins: boolean | null - mailer_autoconfirm: boolean | null - mailer_otp_exp: number | null - mailer_secure_email_change_enabled: boolean | null - mailer_subjects_confirmation: string | null - mailer_subjects_email_change: string | null - mailer_subjects_invite: string | null - mailer_subjects_magic_link: string | null - mailer_subjects_recovery: string | null - mailer_subjects_reauthentication: string | null - mailer_templates_confirmation_content: string | null - mailer_templates_email_change_content: string | null - mailer_templates_invite_content: string | null - mailer_templates_magic_link_content: string | null - mailer_templates_recovery_content: string | null - mailer_templates_reauthentication_content: string | null - mfa_max_enrolled_factors: number | null - password_hibp_enabled: boolean | null - password_min_length: number | null - password_required_characters: string | null - rate_limit_anonymous_users: number | null - rate_limit_email_sent: number | null - rate_limit_sms_sent: number | null - rate_limit_token_refresh: number | null - rate_limit_verify: number | null - refresh_token_rotation_enabled: boolean | null - saml_enabled: boolean | null - security_captcha_enabled: boolean | null - security_captcha_provider: string | null - security_captcha_secret: string | null - security_manual_linking_enabled: boolean | null - security_refresh_token_reuse_interval: number | null - security_update_password_require_reauthentication: boolean | null - sessions_inactivity_timeout: number | null - sessions_single_per_user: boolean | null - sessions_tags: string | null - sessions_timebox: number | null - site_url: string | null - sms_autoconfirm: boolean | null - sms_max_frequency: number | null - sms_messagebird_access_key: string | null - sms_messagebird_originator: string | null - sms_otp_exp: number | null - sms_otp_length: number | null - sms_provider: string | null - sms_template: string | null - sms_test_otp: string | null - sms_test_otp_valid_until: string | null - sms_textlocal_api_key: string | null - sms_textlocal_sender: string | null - sms_twilio_account_sid: string | null - sms_twilio_auth_token: string | null - sms_twilio_content_sid: string | null - sms_twilio_message_service_sid: string | null - sms_twilio_verify_account_sid: string | null - sms_twilio_verify_auth_token: string | null - sms_twilio_verify_message_service_sid: string | null - sms_vonage_api_key: string | null - sms_vonage_api_secret: string | null - sms_vonage_from: string | null - smtp_admin_email: string | null - smtp_host: string | null - smtp_max_frequency: number | null - smtp_pass: string | null - smtp_port: string | null - smtp_sender_name: string | null - smtp_user: string | null - uri_allow_list: string | null - } - UpdateAuthConfigBody: { - site_url?: string - disable_signup?: boolean - jwt_exp?: number - smtp_admin_email?: string - smtp_host?: string - smtp_port?: string - smtp_user?: string - smtp_pass?: string - smtp_max_frequency?: number - smtp_sender_name?: string - mailer_allow_unverified_email_sign_ins?: boolean - mailer_autoconfirm?: boolean - mailer_subjects_invite?: string - mailer_subjects_confirmation?: string - mailer_subjects_recovery?: string - mailer_subjects_email_change?: string - mailer_subjects_magic_link?: string - mailer_subjects_reauthentication?: string - mailer_templates_invite_content?: string - mailer_templates_confirmation_content?: string - mailer_templates_recovery_content?: string - mailer_templates_email_change_content?: string - mailer_templates_magic_link_content?: string - mailer_templates_reauthentication_content?: string - mfa_max_enrolled_factors?: number - uri_allow_list?: string - external_anonymous_users_enabled?: boolean - external_email_enabled?: boolean - external_phone_enabled?: boolean - saml_enabled?: boolean - security_captcha_enabled?: boolean - security_captcha_provider?: string - security_captcha_secret?: string - sessions_timebox?: number - sessions_inactivity_timeout?: number - sessions_single_per_user?: boolean - sessions_tags?: string - rate_limit_anonymous_users?: number - rate_limit_email_sent?: number - rate_limit_sms_sent?: number - rate_limit_verify?: number - rate_limit_token_refresh?: number - mailer_secure_email_change_enabled?: boolean - refresh_token_rotation_enabled?: boolean - password_hibp_enabled?: boolean - password_min_length?: number - /** @enum {string} */ - password_required_characters?: - | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~' - | '' - security_manual_linking_enabled?: boolean - security_update_password_require_reauthentication?: boolean - security_refresh_token_reuse_interval?: number - mailer_otp_exp?: number - sms_autoconfirm?: boolean - sms_max_frequency?: number - sms_otp_exp?: number - sms_otp_length?: number - sms_provider?: string - sms_messagebird_access_key?: string - sms_messagebird_originator?: string - sms_test_otp?: string - sms_test_otp_valid_until?: string - sms_textlocal_api_key?: string - sms_textlocal_sender?: string - sms_twilio_account_sid?: string - sms_twilio_auth_token?: string - sms_twilio_content_sid?: string - sms_twilio_message_service_sid?: string - sms_twilio_verify_account_sid?: string - sms_twilio_verify_auth_token?: string - sms_twilio_verify_message_service_sid?: string - sms_vonage_api_key?: string - sms_vonage_api_secret?: string - sms_vonage_from?: string - sms_template?: string - hook_mfa_verification_attempt_enabled?: boolean - hook_mfa_verification_attempt_uri?: string - hook_password_verification_attempt_enabled?: boolean - hook_password_verification_attempt_uri?: string - hook_custom_access_token_enabled?: boolean - hook_custom_access_token_uri?: string - hook_custom_sms_provider_enabled?: boolean - hook_custom_sms_provider_uri?: string - external_apple_enabled?: boolean - external_apple_client_id?: string - external_apple_secret?: string - external_apple_additional_client_ids?: string - external_azure_enabled?: boolean - external_azure_client_id?: string - external_azure_secret?: string - external_azure_url?: string - external_bitbucket_enabled?: boolean - external_bitbucket_client_id?: string - external_bitbucket_secret?: string - external_discord_enabled?: boolean - external_discord_client_id?: string - external_discord_secret?: string - external_facebook_enabled?: boolean - external_facebook_client_id?: string - external_facebook_secret?: string - external_figma_enabled?: boolean - external_figma_client_id?: string - external_figma_secret?: string - external_github_enabled?: boolean - external_github_client_id?: string - external_github_secret?: string - external_gitlab_enabled?: boolean - external_gitlab_client_id?: string - external_gitlab_secret?: string - external_gitlab_url?: string - external_google_enabled?: boolean - external_google_client_id?: string - external_google_secret?: string - external_google_additional_client_ids?: string - external_google_skip_nonce_check?: boolean - external_kakao_enabled?: boolean - external_kakao_client_id?: string - external_kakao_secret?: string - external_keycloak_enabled?: boolean - external_keycloak_client_id?: string - external_keycloak_secret?: string - external_keycloak_url?: string - external_linkedin_oidc_enabled?: boolean - external_linkedin_oidc_client_id?: string - external_linkedin_oidc_secret?: string - external_notion_enabled?: boolean - external_notion_client_id?: string - external_notion_secret?: string - external_slack_enabled?: boolean - external_slack_client_id?: string - external_slack_secret?: string - external_spotify_enabled?: boolean - external_spotify_client_id?: string - external_spotify_secret?: string - external_twitch_enabled?: boolean - external_twitch_client_id?: string - external_twitch_secret?: string - external_twitter_enabled?: boolean - external_twitter_client_id?: string - external_twitter_secret?: string - external_workos_enabled?: boolean - external_workos_client_id?: string - external_workos_secret?: string - external_workos_url?: string - external_zoom_enabled?: boolean - external_zoom_client_id?: string - external_zoom_secret?: string - } - CreateThirdPartyAuthBody: { - oidc_issuer_url?: string - jwks_url?: string - custom_jwks?: Record - } - ThirdPartyAuth: { - id: string - type: string - oidc_issuer_url?: string | null - jwks_url?: string | null - custom_jwks?: unknown - resolved_jwks?: unknown - inserted_at: string - updated_at: string - resolved_at?: string | null - } - AttributeValue: { - default?: Record | number | string | boolean - name?: string - names?: string[] - } - AttributeMapping: { - keys: { - [key: string]: components['schemas']['AttributeValue'] - } - } - CreateProviderBody: { - /** - * @description What type of provider will be created - * @enum {string} - */ - type: 'saml' - metadata_xml?: string - metadata_url?: string - domains?: string[] - attribute_mapping?: components['schemas']['AttributeMapping'] - } - SamlDescriptor: { - id: string - entity_id: string - metadata_url?: string - metadata_xml?: string - attribute_mapping?: components['schemas']['AttributeMapping'] - } - Domain: { - id: string - domain?: string - created_at?: string - updated_at?: string - } - CreateProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - Provider: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - ListProvidersResponse: { - items: components['schemas']['Provider'][] - } - GetProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - UpdateProviderBody: { - metadata_xml?: string - metadata_url?: string - domains?: string[] - attribute_mapping?: components['schemas']['AttributeMapping'] - } - UpdateProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - DeleteProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - V1RunQueryBody: { - query: string - } - V1Backup: { - /** @enum {string} */ - status: 'COMPLETED' | 'FAILED' | 'PENDING' | 'REMOVED' | 'ARCHIVED' - is_physical_backup: boolean - inserted_at: string - } - V1PhysicalBackup: { - earliest_physical_backup_date_unix?: number - latest_physical_backup_date_unix?: number - } - V1BackupsResponse: { - region: string - walg_enabled: boolean - pitr_enabled: boolean - backups: components['schemas']['V1Backup'][] - physical_backup_data: components['schemas']['V1PhysicalBackup'] - } - V1RestorePitrBody: { - recovery_time_target_unix: number - } - V1CreateFunctionBody: { - slug: string - name: string - body: string - verify_jwt?: boolean - } - FunctionSlugResponse: { - id: string - slug: string - name: string - /** @enum {string} */ - status: 'ACTIVE' | 'REMOVED' | 'THROTTLED' - version: number - created_at: number - updated_at: number - verify_jwt?: boolean - import_map?: boolean - entrypoint_path?: string - import_map_path?: string - } - V1UpdateFunctionBody: { - name?: string - body?: string - verify_jwt?: boolean - } - V1StorageBucketResponse: { - id: string - name: string - owner: string - created_at: string - updated_at: string - public: boolean - } - OrganizationResponseV1: { - id: string - name: string - } - CreateOrganizationBodyV1: { - name: string - } - V1OrganizationMemberResponse: { - user_id: string - user_name: string - email?: string - role_name: string - mfa_enabled: boolean - } - V1OrganizationSlugResponse: { - plan?: components['schemas']['BillingPlanId'] - opt_in_tags: 'AI_SQL_GENERATOR_OPT_IN'[] - id: string - name: string - } - OAuthTokenBody: { - /** @enum {string} */ - grant_type: 'authorization_code' | 'refresh_token' - client_id: string - client_secret: string - code?: string - code_verifier?: string - redirect_uri?: string - refresh_token?: string - } - OAuthTokenResponse: { - /** @enum {string} */ - token_type: 'Bearer' - access_token: string - refresh_token: string - expires_in: number - } - SnippetProject: { - id: number - name: string - } - SnippetUser: { - id: number - username: string - } - SnippetMeta: { - id: string - inserted_at: string - updated_at: string - /** @enum {string} */ - type: 'sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - name: string - description: string | null - project: components['schemas']['SnippetProject'] - owner: components['schemas']['SnippetUser'] - updated_by: components['schemas']['SnippetUser'] - } - SnippetList: { - data: components['schemas']['SnippetMeta'][] - } - SnippetContent: { - favorite: boolean - schema_version: string - sql: string - } - SnippetResponse: { - id: string - inserted_at: string - updated_at: string - /** @enum {string} */ - type: 'sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - name: string - description: string | null - project: components['schemas']['SnippetProject'] - owner: components['schemas']['SnippetUser'] - updated_by: components['schemas']['SnippetUser'] - content: components['schemas']['SnippetContent'] - } - ServiceHealthResponse: { - /** - * @description Service name - * @enum {string} - */ - name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage' - /** @description Whether the service is healthy */ - healthy: boolean - /** - * @description Service health status - * @example COMING_UP - * @enum {string} - */ - status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY' - /** @description Service health check error */ - error?: string - } - ResourceWithServicesStatusResponse: { - /** @description Supabase project instance compute size */ - compute: string - /** @description Unique ID representing the fly extension */ - id: string - /** - * @description Supabase project status - * @example ACTIVE_HEALTHY - * @enum {string} - */ - status: - | 'REMOVED' - | 'COMING_UP' - | 'INACTIVE' - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'UNKNOWN' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'RESTORING' - | 'UPGRADING' - | 'PAUSING' - /** - * @description Supabase organization id - * @example fly_123456789 - */ - supabase_org_id: string - /** @description Supabase project services health status */ - services: components['schemas']['ServiceHealthResponse'][] - } - ResourceProvisioningConfigResponse: { - /** - * @description PSQL connection string - * @example postgresql://postgres:dbpass@db.abcdefghijklmnop.supabase.co:5432/postgres - */ - DATABASE_URL: string - /** - * @description Pooler connection string - * @example postgres://postgres.abcdefghijklmnop:dbpass@aws-0-us-east-1.pooler.supabase.com:6543/postgres - */ - DATABASE_POOLER_URL: string - } - ResourceProvisioningResponse: { - /** @description Supabase envs config */ - config: components['schemas']['ResourceProvisioningConfigResponse'] - /** - * @description The target Fly application for internal traffic - * @example ext-db-pgshhamktpsgnptvcadw - */ - fly_app_name: string - /** - * @description Supabase project id - * @example pgshhamktpsgnptvcadw - */ - id: string - /** @description Welcome message */ - message: string - /** - * @description Supabase organization id - * @example fly_123456789 - */ - supabase_org_id: string - } - FlyOrganization: { - plan: components['schemas']['BillingPlanId'] - id: string - supabase_org_id: string - name: string - } - OrganizationExtensionStatus: { - /** @description Supabase project instance compute size */ - compute: string - /** @description Unique ID representing the fly extension */ - id: string - /** - * @description Supabase project status - * @example ACTIVE_HEALTHY - * @enum {string} - */ - status: - | 'REMOVED' - | 'COMING_UP' - | 'INACTIVE' - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'UNKNOWN' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'RESTORING' - | 'UPGRADING' - | 'PAUSING' - /** - * @description Supabase organization id - * @example fly_123456789 - */ - supabase_org_id: string - } - ResourceBillingItem: { - /** - * @description Non-Unique identifier of the item - * @example usage_egress - */ - itemIdentifier: string - /** - * @description Descriptive name of the billing item - * @example Pro Plan - */ - itemName: string - /** @enum {string} */ - type: 'usage' | 'plan' | 'addon' | 'proration' | 'compute_credits' - /** - * @description In case of a usage item, the free usage included in the customers plan - * @example 100 - */ - freeUnitsInPlan?: number - /** - * @description In case of a usage item, the total usage - * @example 100 - */ - usageTotal?: number - /** - * @description In case of a usage item, the billable usage amount, free usage has been deducted - * @example 100 - */ - usageBillable?: number - /** - * @description Costs of the item in cents - * @example 100 - */ - costs: number - } - ResourceBillingResponse: { - /** @description Whether the user is exceeding the included quotas in the plan - only relevant for users on usage-capped plans. */ - exceedsPlanLimits: boolean - /** @description Whether the user is can have over-usage, which will be billed - this will be false on usage-capped plans. */ - overusageAllowed: boolean - items: components['schemas']['ResourceBillingItem'][] - } - } - responses: never - parameters: never - requestBodies: never - headers: never - pathItems: never -} - -export type $defs = Record - -export type external = Record - -export interface operations { - /** Get notifications */ - NotificationsController_getNotificationsV2: { - parameters: { - query: { - status: 'new' | 'seen' | 'archived' - priority: 'Critical' | 'Warning' | 'Info' - org_slug?: string[] - project_ref?: string[] - offset: number - limit: number - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['NotificationResponseV2'][] - } - } - /** @description Failed to retrieve notifications */ - 500: { - content: never - } - } - } - /** Delete notifications */ - NotificationsController_deleteNotifications: { - requestBody: { - content: { - 'application/json': components['schemas']['UpdateNotificationsBodyV1'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['NotificationResponseV1'][] - } - } - /** @description Failed to delete notifications */ - 500: { - content: never - } - } - } - /** Update notifications */ - NotificationsController_updateNotificationsV2: { - requestBody: { - content: { - 'application/json': components['schemas']['UpdateNotificationBodyV2'][] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['NotificationResponseV2'][] - } - } - /** @description Failed to update notifications */ - 500: { - content: never - } - } - } - /** Get an aggregated data of interest across all notifications for the user */ - NotificationsController_getNotificationsSummary: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['NotificationsSummary'] - } - } - } - } - /** Archives all notifications */ - NotificationsController_archiveAllNotifications: { - responses: { - 200: { - content: never - } - /** @description Failed to archive all notifications */ - 500: { - content: never - } - } - } - /** Reset password for email */ - ResetPasswordController_resetPassword: { - requestBody: { - content: { - 'application/json': components['schemas']['ResetPasswordBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** Send feedback */ - SendFeedbackController_sendFeedback: { - requestBody: { - content: { - 'application/json': components['schemas']['SendFeedbackBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SendFeedbackResponse'] - } - } - /** @description Failed to send feedback */ - 500: { - content: never - } - } - } - /** Send exit survey to HubSpot */ - SendExitSurveyController_sendExitSurvey: { - requestBody: { - content: { - 'application/json': components['schemas']['SendExitSurveyBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SendFeedbackResponse'] - } - } - /** @description Failed to send exit survey */ - 500: { - content: never - } - } - } - /** Send upgrade survey to survey_responses table */ - SendUpgradeSurveyController_sendUpgradeSurvey: { - requestBody: { - content: { - 'application/json': components['schemas']['SendUpgradeSurveyBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SendFeedbackResponse'] - } - } - /** @description Failed to send upgrade survey */ - 500: { - content: never - } - } - } - /** Send feedback on docs */ - SendDocsFeedbackController_sendDocsFeedback: { - requestBody: { - content: { - 'application/json': components['schemas']['SendDocsFeedbackBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SendFeedbackResponse'] - } - } - /** @description Failed to send feedback for docs */ - 500: { - content: never - } - } - } - /** Sign up with email and password */ - SignUpController_signUp: { - requestBody: { - content: { - 'application/json': components['schemas']['SignUpBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** Gets project's status */ - StatusController_getStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to get project's status */ - 500: { - content: never - } - } - } - /** - * Gets resource warnings for all projects accessible by the user - * @description Only returns the minimal project info - */ - ProjectsResourceWarningsController_getProjectsResourceWarnings: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectResourceWarningsResponse'][] - } - } - } - } - /** Redirects to Fly sso flow */ - TermsOfServiceController_flyTosAccepted: { - parameters: { - query: { - extension_id: string - organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets GoTrue config */ - GoTrueConfigController_getGoTrueConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GoTrueConfigResponse'] - } - } - /** @description Failed to retrieve GoTrue config */ - 500: { - content: never - } - } - } - /** Updates GoTrue config */ - GoTrueConfigController_updateGoTrueConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateGoTrueConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GoTrueConfigResponse'] - } - } - /** @description Failed to update GoTrue config */ - 500: { - content: never - } - } - } - /** Sends an invite to the given email */ - InviteController_sendInvite: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to send an invite to the given email */ - 500: { - content: never - } - } - } - /** Sends a magic link to the given email */ - MagicLinkController_sendMagicLink: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to send a magic link to the given email */ - 500: { - content: never - } - } - } - /** Sends an OTP to the given phone number */ - OtpController_sendOtp: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to send an OTP to the given phone number */ - 500: { - content: never - } - } - } - /** Sends a recovery email to the given email */ - RecoverController_sendRecover: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to send a recovery email to the given email */ - 500: { - content: never - } - } - } - /** Gets GoTrue template */ - TemplateController_getTemplate: { - parameters: { - path: { - ref: string - template: - | 'confirmation' - | 'email-change' - | 'invite' - | 'magic-link' - | 'recovery' - | 'reauthentication' - } - } - responses: { - 200: { - content: { - 'application/json': string - } - } - /** @description Failed to retrieve GoTrue template */ - 500: { - content: never - } - } - } - /** Gets users */ - UsersController_getUsers: { - parameters: { - query: { - keywords: string - limit: string - offset: string - verified: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UsersResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve users */ - 500: { - content: never - } - } - } - /** Delete user with given ID */ - UsersController_deleteUser: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to delete user */ - 500: { - content: never - } - } - } - /** Delete all factors associated to a user */ - FactorsController_deleteFactors: { - parameters: { - path: { - /** @description Project ref */ - ref: string - id: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to delete factors */ - 500: { - content: never - } - } - } - /** Gets project backups */ - BackupsController_getBackups: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['BackupsResponse'] - } - } - /** @description Failed to get project backups */ - 500: { - content: never - } - } - } - /** Enable usage of physical backups */ - BackupsController_enablePhysicalBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - /** @description Failed to enable usage of physical backups */ - 500: { - content: never - } - } - } - /** Download project backup */ - BackupsController_downloadBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DownloadBackupBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['DownloadBackupResponse'] - } - } - /** @description Failed to download project backup */ - 500: { - content: never - } - } - } - /** Restore project backup */ - BackupsController_restoreBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RestoreLogicalBackupBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to restore project backup */ - 500: { - content: never - } - } - } - /** Restore project with a physical backup */ - BackupsController_restorePhysicalBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RestorePhysicalBackupBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to restore project with physical backup */ - 500: { - content: never - } - } - } - /** Restore project to a previous point in time */ - BackupsController_restorePointInTimeBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['PointInTimeRestoreBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to restore project to a previous point in time */ - 500: { - content: never - } - } - } - /** Gets hook logs with the given ID */ - HooksController_getHookLogs: { - parameters: { - query: { - id: number - limit?: string - offset?: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to get hook logs with the given ID */ - 500: { - content: never - } - } - } - /** Enables Database Webhooks on the project */ - HooksController_enableHooks: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to enable Database Webhooks on the project */ - 500: { - content: never - } - } - } - /** Gets the status of owner reassignment */ - OwnerController_getOwnerReassignStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - /** @description Failed to get status of owner reassignment */ - 500: { - content: never - } - } - } - /** Reassigns object owner from supabase_admin to temp */ - OwnerController_applyOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** Rollback object owner from temp to supabase_admin */ - OwnerController_rollbackOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - 403: { - content: never - } - /** @description Failed to rollback owner on the project */ - 500: { - content: never - } - } - } - /** Reassigns object owner from temp to postgres */ - OwnerController_finaliseOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** - * List all organizations - * @description Returns a list of organizations that you currently belong to. - */ - OrganizationsController_getOrganizations: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['OrganizationResponseV1'][] - } - } - /** @description Unexpected error listing organizations */ - 500: { - content: never - } - } - } - /** Creates an organization */ - OrganizationsController_createOrganizationWithTier: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateOrganizationBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['OrganizationResponse'] - } - } - /** @description Unexpected error creating an organization */ - 500: { - content: never - } - } - } - /** Gets organization linked to fly organization id */ - OrganizationsController_getOrganizationByFlyOrganizationId: { - parameters: { - path: { - fly_organization_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetOrganizationByFlyOrganizationIdResponse'] - } - } - } - } - /** Deletes organization */ - OrganizationSlugController_deleteOrganization: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to delete organization */ - 500: { - content: never - } - } - } - /** Updates organization */ - OrganizationSlugController_updateOrganization: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateOrganizationBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OrganizationSlugResponse'] - } - } - /** @description Failed to update organization */ - 500: { - content: never - } - } - } - /** Gets the Stripe customer */ - CustomerController_getCustomer: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['CustomerResponse'] - } - } - /** @description Failed to retrieve the Stripe customer */ - 500: { - content: never - } - } - } - /** Updates the Stripe customer */ - CustomerController_updateCustomer: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['CustomerUpdateResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update the Stripe customer */ - 500: { - content: never - } - } - } - /** Gets the given organization's roles */ - RolesController_addMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['Role'][] - } - } - /** @description Failed to retrieve the organization's roles */ - 500: { - content: never - } - } - } - /** Gets the given organization's tax IDs */ - TaxIdsController_getTaxIds: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['TaxIdResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve the organization's tax IDs */ - 500: { - content: never - } - } - } - /** Creates a tax ID for the given organization */ - TaxIdsController_createTaxId: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateTaxIdBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['CreateTaxIdResponse'] - } - } - 403: { - content: never - } - /** @description Failed to create the tax ID */ - 500: { - content: never - } - } - } - /** Delete the tax ID with the given ID */ - TaxIdsController_deleteTaxId: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DeleteTaxIdBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['DeleteTaxIdResponse'] - } - } - 403: { - content: never - } - /** @description Failed to delete the tax ID */ - 500: { - content: never - } - } - } - /** Transfers the organization to the given member */ - TransferController_transferOrganization: { - requestBody: { - content: { - 'application/json': components['schemas']['TransferOrganizationBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to update owner */ - 500: { - content: never - } - } - } - /** Gets daily organization stats */ - OrgDailyStatsController_getDailyStats: { - parameters: { - query: { - metric: - | 'EGRESS' - | 'DATABASE_SIZE' - | 'STORAGE_SIZE' - | 'MONTHLY_ACTIVE_USERS' - | 'MONTHLY_ACTIVE_SSO_USERS' - | 'FUNCTION_INVOCATIONS' - | 'FUNCTION_COUNT' - | 'STORAGE_IMAGES_TRANSFORMED' - | 'REALTIME_MESSAGE_COUNT' - | 'REALTIME_PEAK_CONNECTIONS' - | 'COMPUTE_HOURS_BRANCH' - | 'COMPUTE_HOURS_XS' - | 'COMPUTE_HOURS_SM' - | 'COMPUTE_HOURS_MD' - | 'COMPUTE_HOURS_L' - | 'COMPUTE_HOURS_XL' - | 'COMPUTE_HOURS_2XL' - | 'COMPUTE_HOURS_4XL' - | 'COMPUTE_HOURS_8XL' - | 'COMPUTE_HOURS_12XL' - | 'COMPUTE_HOURS_16XL' - interval: string - endDate: string - startDate: string - projectRef?: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - /** @description Failed to get daily organization stats */ - 500: { - content: never - } - } - } - /** Gets daily organization stats for compute */ - OrgDailyStatsController_getDailyStatsCompute: { - parameters: { - query: { - endDate: string - startDate: string - projectRef?: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to get daily organization stats for compute */ - 500: { - content: never - } - } - } - /** Gets usage stats */ - OrgUsageController_getOrgUsage: { - parameters: { - query?: { - project_ref?: string - start?: string - end?: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OrgUsageResponse'] - } - } - /** @description Failed to get usage stats */ - 500: { - content: never - } - } - } - /** Get standard security questionnaire URL */ - OrgDocumentsController_getStandardSecurityQuestionnaireUrl: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OrgDocumentUrlResponse'] - } - } - } - } - /** Get SOC2 Type 2 report URL */ - OrgDocumentsController_getSoc2Type2ReportUrl: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OrgDocumentUrlResponse'] - } - } - } - } - /** Gets an organization's audit logs */ - OrgAuditLogsController_getAuditLogs: { - parameters: { - query?: { - /** @description Start timestamp */ - iso_timestamp_start?: string - /** @description End timestamp */ - iso_timestamp_end?: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AuditLogsResponse'] - } - } - /** @description Failed to get an organization's audit logs */ - 500: { - content: never - } - } - } - /** Gets invited users */ - InviteController_getInvitedUsers: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['Invite'][] - } - } - /** @description Failed to get invited users */ - 500: { - content: never - } - } - } - /** Invites user */ - InviteController_inviteUser: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['InviteUserBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SendInviteResponse'] - } - } - /** @description Failed to invite user */ - 500: { - content: never - } - } - } - /** Delete invited user */ - InviteController_deleteInvitedUser: { - parameters: { - query: { - invited_id: number - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to delete invited user */ - 500: { - content: never - } - } - } - /** Gets invite */ - JoinController_getInvite: { - parameters: { - query: { - token: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['InviteResponse'] - } - } - /** @description Failed to get invite */ - 500: { - content: never - } - } - } - /** Joins organization */ - JoinController_joinOrganization: { - parameters: { - query: { - token: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['JoinResponse'] - } - } - /** @description Failed to join organization */ - 500: { - content: never - } - } - } - /** Leaves the given organization */ - MembersDeprecatedController_leaveOrganization: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - /** @description Failed to leave organization */ - 500: { - content: never - } - } - } - /** Leaves the given organization */ - MembersDeprecatedController_removeMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RemoveMemberBody'] - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - /** @description Failed to leave organization */ - 500: { - content: never - } - } - } - /** Gets organization's members */ - MembersController_getMembers: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['Member'][] - } - } - /** @description Failed to retrieve organization's members */ - 500: { - content: never - } - } - } - /** Removes organization member */ - MembersController_deleteMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - gotrue_id: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to remove organization member */ - 500: { - content: never - } - } - } - /** Updates organization member */ - MembersController_updateMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - gotrue_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateMemberBody'] - } - } - responses: { - 200: { - content: never - } - /** @description Failed to update organization member */ - 500: { - content: never - } - } - } - /** Gets organization members who have reached their free project limit */ - ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['MemberWithFreeProjectLimit'][] - } - } - /** @description Failed to retrieve organization members who have reached their free project limit */ - 500: { - content: never - } - } - } - /** Gets Stripe payment methods for the given organization */ - PaymentsController_getPaymentMethods: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PaymentsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get Stripe payment methods */ - 500: { - content: never - } - } - } - /** Detach Stripe payment method with the given card ID */ - PaymentsController_detachPaymentMethod: { - requestBody: { - content: { - 'application/json': components['schemas']['DetachPaymentMethodBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['DetachPaymentResponse'] - } - } - 403: { - content: never - } - /** @description Failed to detach Stripe payment method */ - 500: { - content: never - } - } - } - /** Sets up a payment method */ - SetupIntentOrgController_setUpPaymentMethod: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['HCaptchaBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SetupIntentResponse'] - } - } - 403: { - content: never - } - /** @description Failed to set up a payment method */ - 500: { - content: never - } - } - } - /** Gets the current subscription */ - SubscriptionController_getSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetSubscriptionResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve subscription */ - 500: { - content: never - } - } - } - /** Updates subscription */ - SubscriptionController_updateSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSubscriptionBody'] - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to update subscription change */ - 500: { - content: never - } - } - } - /** Preview subscription changes */ - SubscriptionController_previewSubscriptionChange: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSubscriptionBody'] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to preview subscription changes */ - 500: { - content: never - } - } - } - /** Deletes any upcoming subscription schedule */ - SubscriptionController_deleteSubscriptionSchedule: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to update subscription change */ - 500: { - content: never - } - } - } - /** Gets subscription plans */ - OrgPlansController_getAvailablePlans: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PlansResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get subscription plans */ - 500: { - content: never - } - } - } - /** Gets the upcoming invoice */ - OrgInvoicesController_getUpcomingInvoice: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpcomingInvoice'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve upcoming invoice */ - 500: { - content: never - } - } - } - /** Retrieve column privileges */ - ColumnPrivilegesController_getColumnPrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresColumnPrivileges'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve column privileges */ - 500: { - content: never - } - } - } - /** Grant column privileges */ - ColumnPrivilegesController_grantColumnPrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GrantColumnPrivilegesBody'][] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresColumnPrivileges'][] - } - } - 403: { - content: never - } - /** @description Failed to grant column privileges */ - 500: { - content: never - } - } - } - /** Revoke column privileges */ - ColumnPrivilegesController_revokeColumnPrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RevokeColumnPrivilegesBody'][] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresColumnPrivileges'][] - } - } - 403: { - content: never - } - /** @description Failed to revoke column privileges */ - 500: { - content: never - } - } - } - /** Gets project pg.columns */ - ColumnsController_getColumns: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresColumn'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.columns */ - 500: { - content: never - } - } - } - /** Creates project pg.column */ - ColumnsController_createColumn: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateColumnBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresColumn'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.column */ - 500: { - content: never - } - } - } - /** Deletes project pg.column with the given ID */ - ColumnsController_deleteColumn: { - parameters: { - query: { - /** @description Column ID */ - id: string - cascade?: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresColumn'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.column with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.column with the given ID */ - ColumnsController_updateColumn: { - parameters: { - query: { - /** @description Column ID */ - id: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateColumnBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresColumn'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.column with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.extensions */ - ExtensionsController_getExtensions: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresExtension'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.extensions */ - 500: { - content: never - } - } - } - /** Creates project pg.extension */ - ExtensionsController_createExtension: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateExtensionBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresExtension'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.extension */ - 500: { - content: never - } - } - } - /** Deletes project pg.extension with the given ID */ - ExtensionsController_deleteExtension: { - parameters: { - query: { - /** @description Extension ID */ - id: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresExtension'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.extension with the given ID */ - 500: { - content: never - } - } - } - /** Retrieve database foreign tables */ - ForeignTablesController_getForeignTables: { - parameters: { - query: { - id: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresForeignTable'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve database foreign tables */ - 500: { - content: never - } - } - } - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - FunctionsController_getFunctions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['FunctionResponse'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's functions */ - 500: { - content: never - } - } - } - /** - * Create a function - * @description Creates a function and adds it to the specified project. - */ - FunctionsController_createFunction: { - parameters: { - query?: { - slug?: string - name?: string - verify_jwt?: boolean - import_map?: boolean - entrypoint_path?: string - import_map_path?: string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1CreateFunctionBody'] - 'application/vnd.denoland.eszip': components['schemas']['V1CreateFunctionBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['FunctionResponse'] - } - } - 403: { - content: never - } - /** @description Failed to create project's function */ - 500: { - content: never - } - } - } - /** Deletes project pg.function with the given ID */ - FunctionsController_deleteFunction: { - parameters: { - query: { - /** @description Function ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresFunction'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.function with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.function with the given ID */ - FunctionsController_updateFunction: { - parameters: { - query: { - /** @description Function ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateFunctionBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresFunction'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.function with the given ID */ - 500: { - content: never - } - } - } - /** Retrieve database materialized views */ - MaterializedViewsController_getMaterializedViews: { - parameters: { - query: { - id: string - included_schemas: string - excluded_schemas: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresMaterializedView'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve database materialized views */ - 500: { - content: never - } - } - } - /** Gets project pg.policies */ - PoliciesController_getPolicies: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresPolicy'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.policies */ - 500: { - content: never - } - } - } - /** Creates project pg.policy */ - PoliciesController_createPolicy: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreatePolicyBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresPolicy'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.policy */ - 500: { - content: never - } - } - } - /** Deletes project pg.policy with the given ID */ - PoliciesController_deletePolicy: { - parameters: { - query: { - /** @description Policy ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresPolicy'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.policy with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.policy with the given ID */ - PoliciesController_updatePolicy: { - parameters: { - query: { - /** @description Policy ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePolicyBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresPolicy'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.policy with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.publications */ - PublicationsController_getPublications: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresPublication'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.publications */ - 500: { - content: never - } - } - } - /** Gets project pg.publications */ - PublicationsController_createPublication: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreatePublicationBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresPublication'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.publication */ - 500: { - content: never - } - } - } - /** Deletes project pg.publication with the given ID */ - PublicationsController_deletePublication: { - parameters: { - query: { - /** @description Publication ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresPublication'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.publication with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.publication with the given ID */ - PublicationsController_updatePublication: { - parameters: { - query: { - /** @description Publication ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePublicationBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresPublication'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.publication with the given ID */ - 500: { - content: never - } - } - } - /** Run sql query */ - QueryController_runQuery: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RunQueryBody'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to run sql query */ - 500: { - content: never - } - } - } - /** Format sql query */ - QueryController_formatQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['FormatQueryBody'] - } - } - responses: { - 201: { - content: { - 'application/json': string - } - } - /** @description Failed to format sql query */ - 500: { - content: never - } - } - } - /** Validate sql query */ - QueryController_validateQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['ValidateQueryBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['ValidateQueryResponse'] - } - } - /** @description Failed to validate sql query */ - 500: { - content: never - } - } - } - /** Gets project pg.roles */ - RolesController_getRoles: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresRole'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.roles */ - 500: { - content: never - } - } - } - /** Creates project pg.role */ - RolesController_createRole: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateRoleBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresRole'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.role */ - 500: { - content: never - } - } - } - /** Deletes project pg.role with the given ID */ - RolesController_deleteRole: { - parameters: { - query: { - /** @description Role ID */ - id: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresRole'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.role with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.role with the given ID */ - RolesController_updateRole: { - parameters: { - query: { - /** @description Role ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateRoleBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresRole'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.role with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.schemas */ - SchemasController_getSchemas: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresSchema'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.schemas */ - 500: { - content: never - } - } - } - /** Creates project pg.schema */ - SchemasController_createSchema: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateSchemaBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresSchema'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.schema */ - 500: { - content: never - } - } - } - /** Deletes project pg.schema with the given ID */ - SchemasController_deleteSchema: { - parameters: { - query: { - /** @description Schema ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresSchema'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.schema with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.schema with the given ID */ - SchemasController_updateSchema: { - parameters: { - query: { - /** @description Schema ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSchemaBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresSchema'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.schema with the given ID */ - 500: { - content: never - } - } - } - /** Searches project pg.tables. Return maximum 50 results. */ - SearchController_searchTables: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SearchTableBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['Table'][] - } - } - 403: { - content: never - } - /** @description Failed to search pg.tables */ - 500: { - content: never - } - } - } - /** Searches project pg.columns. Return maximum 50 results. */ - SearchController_searchColumns: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SearchColumnBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['Column'][] - } - } - 403: { - content: never - } - /** @description Failed to search pg.columns */ - 500: { - content: never - } - } - } - /** Retrieve table privileges */ - TablePrivilegesController_getTablePrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTablePrivileges'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve table privileges */ - 500: { - content: never - } - } - } - /** Grant table privileges */ - TablePrivilegesController_grantTablePrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GrantTablePrivilegesBody'][] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresTablePrivileges'][] - } - } - 403: { - content: never - } - /** @description Failed to grant table privileges */ - 500: { - content: never - } - } - } - /** Revoke table privileges */ - TablePrivilegesController_revokeTablePrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RevokeTablePrivilegesBody'][] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTablePrivileges'][] - } - } - 403: { - content: never - } - /** @description Failed to revoke table privileges */ - 500: { - content: never - } - } - } - /** Gets project pg.tables or pg.table with the given ID */ - TablesController_getTables: { - parameters: { - query: { - /** @description Table ID */ - id?: string - include_system_schemas: string - included_schemas: string - excluded_schemas: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTable'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.tables or pg.table with the given ID */ - 500: { - content: never - } - } - } - /** Creates project pg.table */ - TablesController_createTable: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateTableBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresTable'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.table */ - 500: { - content: never - } - } - } - /** Deletes project pg.table with the given ID */ - TablesController_deleteTable: { - parameters: { - query: { - /** @description Table ID */ - id: number - cascade: boolean - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTable'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.table with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.table with the given ID */ - TablesController_updateTable: { - parameters: { - query: { - /** @description Table ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateTableBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTable'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.table with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.triggers */ - TriggersController_getTriggers: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTrigger'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.triggers */ - 500: { - content: never - } - } - } - /** Creates project pg.trigger */ - TriggersController_createTrigger: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateTriggerBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PostgresTrigger'] - } - } - 403: { - content: never - } - /** @description Failed to create pg.trigger */ - 500: { - content: never - } - } - } - /** Deletes project pg.trigger with the given ID */ - TriggersController_deleteTrigger: { - parameters: { - query: { - /** @description Trigger ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTrigger'] - } - } - 403: { - content: never - } - /** @description Failed to delete pg.trigger with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.trigger with the given ID */ - TriggersController_updateTrigger: { - parameters: { - query: { - /** @description Trigger ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateTriggerBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresTrigger'] - } - } - 403: { - content: never - } - /** @description Failed to update pg.trigger with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.types */ - TypesController_getTypes: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresType'][] - } - } - 403: { - content: never - } - /** @description Failed to get pg.types */ - 500: { - content: never - } - } - } - /** Retrieve database views */ - ViewsController_getViews: { - parameters: { - query: { - id: string - include_system_schemas: string - included_schemas: string - excluded_schemas: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresView'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve database views */ - 500: { - content: never - } - } - } - /** Gets the user's access tokens */ - AccessTokensController_getAccessTokens: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['AccessToken'][] - } - } - /** @description Failed to get user's access tokens */ - 500: { - content: never - } - } - } - /** Creates a new access token */ - AccessTokensController_createAccessToken: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateAccessTokenBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['CreateAccessTokenResponse'] - } - } - /** @description Failed to create access token */ - 500: { - content: never - } - } - } - /** Gets the access token with the given ID */ - AccessTokensController_getAccessToken: { - parameters: { - path: { - /** @description Access token ID */ - id: number - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AccessToken'] - } - } - /** @description Failed to get access token */ - 500: { - content: never - } - } - } - /** Deletes the access token with the given ID */ - AccessTokensController_deleteAccessToken: { - parameters: { - path: { - /** @description Access token ID */ - id: number - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AccessToken'] - } - } - /** @description Failed to delete access token */ - 500: { - content: never - } - } - } - /** Gets a user's audit logs */ - UserAuditLogsController_getAuditLogs: { - parameters: { - query?: { - /** @description Start timestamp */ - iso_timestamp_start?: string - /** @description End timestamp */ - iso_timestamp_end?: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AuditLogsResponse'] - } - } - /** @description Failed to get a user's audit logs */ - 500: { - content: never - } - } - } - /** Search profiles by username, email with the given keywords */ - SearchProfileController_searchProfile: { - requestBody: { - content: { - 'application/json': components['schemas']['SearchProfileBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['Profile'][] - } - } - /** @description Failed to search profiles with the given keywords */ - 500: { - content: never - } - } - } - /** Gets the user's subscription statistics */ - SubscriptionsController_getSubscriptionsStatistics: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['SubscriptionStatisticsResponse'] - } - } - /** @description Failed to retrieve user's subscription statistics */ - 500: { - content: never - } - } - } - /** Check password strength */ - PasswordCheckController_checkPassword: { - requestBody: { - content: { - 'application/json': components['schemas']['PasswordCheckBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PasswordCheckResponse'] - } - } - /** @description Failed to check password strength */ - 500: { - content: never - } - } - } - /** Gets all the user's permissions */ - PermissionsController_getPermissions: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['Permission'][] - } - } - /** @description Failed to retrieve permissions */ - 500: { - content: never - } - } - } - /** Gets the user's profile */ - ProfileController_getProfile: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProfileResponse'] - } - } - /** @description Failed to retrieve user's profile */ - 500: { - content: never - } - } - } - /** Creates user's profile */ - ProfileController_createProfile: { - responses: { - 201: { - content: { - 'application/json': components['schemas']['ProfileResponse'] - } - } - /** @description Failed to create user's profile */ - 500: { - content: never - } - } - } - /** Deletes user's profile */ - ProfileController_deleteProfile: { - responses: { - 200: { - content: never - } - /** @description Forbidden action */ - 403: { - content: never - } - /** @description Failed to delete user's profile */ - 500: { - content: never - } - } - } - /** Updates user's profile */ - ProfileController_updateProfile: { - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProfileBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProfileResponse'] - } - } - /** @description Failed to update user's profile */ - 500: { - content: never - } - } - } - /** - * Gets all projects that belong to the authenticated user - * @description Only returns the minimal project info - */ - ProjectsController_getProjects: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectInfo'][] - } - } - } - } - /** Creates a project */ - ProjectsController_createProject: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateProjectBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['CreateProjectResponse'] - } - } - } - } - /** Gets project linked to fly extension id */ - ProjectsController_getProjectByFlyExtensionId: { - parameters: { - path: { - fly_extension_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetProjectByFlyExtensionIdResponse'] - } - } - } - } - /** Gets project's content */ - ContentController_getContent: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetUserContentResponse'] - } - } - /** @description Failed to retrieve project's content */ - 500: { - content: never - } - } - } - /** Updates project's content */ - ContentController_updateWholeContent: { - requestBody: { - content: { - 'application/json': components['schemas']['UpsertContentParams'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UserContentObject'] - } - } - /** @description Failed to update project's content */ - 500: { - content: never - } - } - } - /** Creates project's content */ - ContentController_createContent: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateContentParams'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['UserContentObject'][] - } - } - /** @description Failed to create project's content */ - 500: { - content: never - } - } - } - /** Deletes project's contents */ - ContentController_deleteContents: { - parameters: { - query: { - ids: string[] - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['BulkDeleteUserContentResponse'][] - } - } - /** @description Failed to delete project's contents */ - 500: { - content: never - } - } - } - /** Updates project's content */ - ContentController_updateContent: { - parameters: { - query: { - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateContentParams'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UserContentObject'][] - } - } - /** @description Failed to update project's content */ - 500: { - content: never - } - } - } - /** Gets daily project stats */ - DailyStatsController_getDailyStats: { - parameters: { - query: { - attribute: string - interval: string - endDate: string - startDate: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - /** @description Failed to get daily project stats */ - 500: { - content: never - } - } - } - /** Gets non-removed databases of a specified project */ - DatabasesController_getDatabases: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['DatabaseDetailResponse'][] - } - } - } - } - /** Gets statuses of databases within a project */ - DatabasesStatusesController_getStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['DatabaseStatusResponse'][] - } - } - /** @description Failed to get statuses of databases of a project */ - 500: { - content: never - } - } - } - /** Updates the database password */ - DbPasswordController_updatePassword: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePasswordBody'] - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to update database password */ - 500: { - content: never - } - } - } - /** Gets project health check */ - HealthCheckController_projectHealthCheck: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to get project health check */ - 500: { - content: never - } - } - } - /** Gets non-removed databases of a specified project */ - LoadBalancersController_getLoadBalancers: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['LoadBalancerDetailResponse'][] - } - } - } - } - /** Gets project OpenApi */ - ApiController_projectOpenApi: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to get project OpenApi */ - 500: { - content: never - } - } - } - /** Queries project Graphql */ - ApiController_projectGraphql: { - parameters: { - header: { - 'x-graphql-authorization': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['Buffer'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to query project Graphql */ - 500: { - content: never - } - } - } - /** Gets project's usage metrics */ - InfraMonitoringController_getUsageMetrics: { - parameters: { - query: { - attribute: - | 'cpu_usage' - | 'max_cpu_usage' - | 'avg_cpu_usage' - | 'disk_io_budget' - | 'disk_io_consumption' - | 'ram_usage' - | 'swap_usage' - startDate: string - endDate: string - interval?: '1m' | '5m' | '10m' | '30m' | '1h' | '1d' - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - /** @description Failed to get project's usage metrics */ - 500: { - content: never - } - } - } - /** Pauses the project */ - PauseController_pauseProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - /** @description Failed to pause the project */ - 500: { - content: never - } - } - } - /** Resize database disk */ - ResizeController_resizeDatabase: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['ResizeBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to resize database disk */ - 500: { - content: never - } - } - } - /** Restarts project */ - RestartController_restartProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to restart project */ - 500: { - content: never - } - } - } - /** Gets a specific project that belongs to the authenticated user */ - ProjectsRefController_getProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectDetailResponse'] - } - } - } - } - /** Deletes the given project */ - ProjectsRefController_deleteProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1ProjectRefResponse'] - } - } - 403: { - content: never - } - } - } - /** Updates the given project */ - ProjectsRefController_updateProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProjectBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectRefResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project */ - 500: { - content: never - } - } - } - /** Restores project */ - RestoreController_restoreProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['RestoreProjectInfo'] - } - } - /** @description Failed to restore project */ - 500: { - content: never - } - } - } - /** Restarts given services */ - RestartServicesController_restartServices: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RestartServicesBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to restart given services */ - 500: { - content: never - } - } - } - /** Gets project's settings */ - SettingsController_getProjectApi: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectSettingsResponse'] - } - } - /** @description Failed to retrieve project's settings */ - 500: { - content: never - } - } - } - /** - * Updates the project - * @deprecated - * @description Replaced by PATCH /platform/projects/:ref - */ - UpdateController_updateProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProjectBody'] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to update project */ - 500: { - content: never - } - } - } - /** Previews transfering a project to a different organizations, shows eligibility and impact. */ - ProjectTransferController_previewTransfer: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['TransferProjectBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PreviewProjectTransferResponse'] - } - } - 403: { - content: never - } - } - } - /** Transfers a project to a different organization. */ - ProjectTransferController_transferProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['TransferProjectBody'] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - } - } - /** Gets a project's function invocation statistics */ - FunctionInvocationLogsController_getStatus: { - parameters: { - query: { - interval: '5min' | '15min' | '1hr' | '1day' | '7day' - function_id: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AnalyticsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project's function invocation statistics */ - 500: { - content: never - } - } - } - /** Gets a project's function request statistics */ - FunctionRequestLogsController_getStatus: { - parameters: { - query: { - interval: '5min' | '15min' | '1hr' | '1day' | '7day' - function_id: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AnalyticsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project's function request statistics */ - 500: { - content: never - } - } - } - /** Gets a project's function resource usage */ - FunctionResourceLogsController_getStatus: { - parameters: { - query: { - interval: '5min' | '15min' | '1hr' | '1day' | '7day' - function_id: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AnalyticsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project's function resource usage */ - 500: { - content: never - } - } - } - /** Gets project's logs */ - LogsController_getApiPaths: { - parameters: { - query: { - sql: string - project: string - iso_timestamp_start: string - iso_timestamp_end: string - timestamp_start: string - timestamp_end: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AnalyticsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project's logs */ - 500: { - content: never - } - } - } - /** Gets project's usage api counts */ - UsageApiController_getApiCounts: { - parameters: { - query: { - interval: 'minutely' | 'hourly' | 'daily' - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AnalyticsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project's usage api counts */ - 500: { - content: never - } - } - } - /** Gets project's usage api requests count */ - UsageApiController_getApiRequestsCount: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AnalyticsResponse'] - } - } - /** @description Failed to get project's usage api requests count */ - 500: { - content: never - } - } - } - /** Gets project's pgbouncer config */ - PgbouncerConfigController_getPgbouncerConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PgbouncerConfigResponse'] - } - } - /** @description Failed to retrieve project's pgbouncer config */ - 500: { - content: never - } - } - } - /** Updates project's pgbouncer config */ - PgbouncerConfigController_updatePgbouncerConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePgbouncerConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpdatePoolingConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project's pgbouncer config */ - 500: { - content: never - } - } - } - /** Gets project's pgbouncer status */ - PgbouncerConfigController_getPgbouncerStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PgbouncerStatusResponse'] - } - } - /** @description Failed to retrieve project's pgbouncer status */ - 500: { - content: never - } - } - } - /** Gets project's postgrest config */ - PostgrestConfigController_getPostgRESTConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgrestConfigWithJWTSecretResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's postgrest config */ - 500: { - content: never - } - } - } - /** Updates project's postgrest config */ - PostgrestConfigController_updatePostgRESTConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePostgrestConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1PostgrestConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project's postgrest config */ - 500: { - content: never - } - } - } - /** Gets project's Postgres config */ - PostgresConfigController_getConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresConfigResponse'] - } - } - /** @description Failed to retrieve project's Postgres config */ - 500: { - content: never - } - } - } - /** Updates project's Postgres config */ - PostgresConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePostgresConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresConfigResponse'] - } - } - /** @description Failed to update project's Postgres config */ - 500: { - content: never - } - } - } - /** Updates project's secrets config */ - SecretsConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSecretsConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpdateSecretsResponse'] - } - } - /** @description Failed to update project's secrets config */ - 500: { - content: never - } - } - } - /** Gets project's storage config */ - StorageConfigController_getConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['StorageConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's storage config */ - 500: { - content: never - } - } - } - /** Updates project's storage config */ - StorageConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateStorageConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpdateStorageConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project's storage config */ - 500: { - content: never - } - } - } - /** Gets project's supavisor config */ - SupavisorConfigController_getSupavisorConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['SupavisorConfigResponse'][] - } - } - /** @description Failed to retrieve project's supavisor config */ - 500: { - content: never - } - } - } - /** Updates project's supavisor config */ - SupavisorConfigController_updateSupavisorConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSupavisorConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpdateSupavisorConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project's supavisor config */ - 500: { - content: never - } - } - } - /** Gets project addons */ - ProjectAddonController_getProjectAddons: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectAddonsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project addons */ - 500: { - content: never - } - } - } - /** Updates project addon */ - ProjectAddonController_updateAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateAddonBody'] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to update project addon */ - 500: { - content: never - } - } - } - /** Removes project addon */ - ProjectAddonController_removeAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - addon_variant: components['schemas']['AddonVariantId'] - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to remove project addon */ - 500: { - content: never - } - } - } - /** - * Gets project's api info - * @deprecated - */ - ApiController_getProjectApi: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ApiResponse'] - } - } - /** @description Failed to retrieve project's api info */ - 500: { - content: never - } - } - } - /** Gets the last JWT secret update status */ - JwtSecretUpdateStatusController_getJwtSecretUpdateStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['JwtSecretUpdateStatus'] - } - } - /** @description Failed to retrieve JWT secret update status */ - 500: { - content: never - } - } - } - /** Gets bucket */ - StorageBucketIdController_getBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['StorageBucket'] - } - } - 403: { - content: never - } - /** @description Failed to get bucket */ - 500: { - content: never - } - } - } - /** Deletes bucket */ - StorageBucketIdController_deleteBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to delete bucket */ - 500: { - content: never - } - } - } - /** Updates bucket */ - StorageBucketIdController_updateBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateStorageBucketBody'] - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to update bucket */ - 500: { - content: never - } - } - } - /** Removes all objects inside a single bucket. */ - StorageBucketIdController_emptyBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to empty bucket */ - 500: { - content: never - } - } - } - /** Gets list of buckets */ - StorageBucketsController_getBuckets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['StorageBucket'][] - } - } - 403: { - content: never - } - /** @description Failed to get list of buckets */ - 500: { - content: never - } - } - } - /** Create bucket */ - StorageBucketsController_createBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateStorageBucketBody'] - } - } - responses: { - 201: { - content: { - 'application/json': string - } - } - 403: { - content: never - } - /** @description Failed to create bucket */ - 500: { - content: never - } - } - } - /** Gets list of objects with the given bucket */ - StorageObjectsController_getObjects: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetObjectsBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['StorageObject'][] - } - } - 403: { - content: never - } - /** @description Failed to get list of objects with the given bucket */ - 500: { - content: never - } - } - } - /** Creates URL for an asset in a public bucket */ - StorageObjectsController_createPublicUrl: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetPublicUrlBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['PublicUrlResponse'] - } - } - 403: { - content: never - } - /** @description Failed to create public URL */ - 500: { - content: never - } - } - } - /** Downloads a file from a private bucket */ - StorageObjectsController_download: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DownloadObjectBody'] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to download the file */ - 500: { - content: never - } - } - } - /** Creates a signed URL */ - StorageObjectsController_createSignedUrl: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetSignedUrlBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SignedUrlResponse'] - } - } - 403: { - content: never - } - /** @description Failed to create a signed URL */ - 500: { - content: never - } - } - } - /** Gets multiple signed URLs */ - StorageObjectsController_createSignedUrls: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetSignedUrlsBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SignedUrlsResponse'][] - } - } - 403: { - content: never - } - /** @description Failed to get multiple signed URLs */ - 500: { - content: never - } - } - } - /** Copys object */ - StorageObjectsController_copyObject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CopyObjectBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['CopyObjectResponse'] - } - } - 403: { - content: never - } - /** @description Failed to copy object */ - 500: { - content: never - } - } - } - /** Move object */ - StorageObjectsController_moveObject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['MoveObjectBody'] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to move object */ - 500: { - content: never - } - } - } - /** Deletes objects */ - StorageObjectsController_deleteObjects: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DeleteObjectsBody'] - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to delete objects */ - 500: { - content: never - } - } - } - /** Gets invoices for the given customer */ - InvoicesController_getInvoices: { - parameters: { - query: { - customer: string - slug?: string - limit: string - offset: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['Invoice'][] - } - } - /** @description Failed to retrieve invoices */ - 500: { - content: never - } - } - } - /** Gets the total count of invoices for the given customer */ - InvoicesController_countInvoices: { - parameters: { - query: { - customer: string - slug?: string - } - } - responses: { - 200: { - headers: { - /** @description total count value */ - 'X-Total-Count'?: unknown - } - content: never - } - /** @description Failed to retrieve the total count of invoices */ - 500: { - content: never - } - } - } - /** Gets information about overdue invoices that relate to the authenticated user */ - InvoicesController_getOverdueInvoices: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['OverdueInvoiceCount'][] - } - } - } - } - /** Gets invoice with the given invoice ID */ - InvoicesController_getInvoice: { - parameters: { - path: { - id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['Invoice'] - } - } - /** @description Failed to retrieve invoice */ - 500: { - content: never - } - } - } - /** Sets up a payment method */ - SetupIntentController_setUpPaymentMethod: { - requestBody: { - content: { - 'application/json': components['schemas']['HCaptchaBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SetupIntentResponse'] - } - } - /** @description Failed to set up a payment method */ - 500: { - content: never - } - } - } - /** Sends analytics server event */ - TelemetryEventController_sendServerEvent: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryEventBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to send analytics server event */ - 500: { - content: never - } - } - } - /** Send analytics identify event */ - TelemetryIdentifyController_identify: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryIdentifyBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to send analytics identify event */ - 500: { - content: never - } - } - } - /** Send server page event */ - TelemetryPageController_sendServerPage: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryPageBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to send server page event */ - 500: { - content: never - } - } - } - /** Sends mixpanel server activity */ - TelemetryActivityController_sendServerActivity: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryActivityBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to send mixpanel server activity */ - 500: { - content: never - } - } - } - /** Send mixpanel page event */ - TelemetryPageviewController_sendServerPageViewed: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryPageviewBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to send mixpanel page event */ - 500: { - content: never - } - } - } - /** Gets the Vercel access token for the given code */ - VercelAccessTokenController_getAccessToken: { - parameters: { - query: { - code: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to get Vercel access token */ - 500: { - content: never - } - } - } - /** Gets the list of Vercel projects */ - VercelProjectsController_getVercelProjects: { - parameters: { - query: { - id: string - teamId: string - } - header: { - vercel_authorization: string - } - } - responses: { - 200: { - content: { - 'application/json': Record[] - } - } - /** @description Failed to get projects */ - 500: { - content: never - } - } - } - /** Gets the Vercel project with the given ID */ - VercelProjectsController_getVercelProject: { - parameters: { - query: { - id: string - teamId: string - } - header: { - vercel_authorization: string - } - path: { - id: string - teamId: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - /** @description Failed to get project */ - 500: { - content: never - } - } - } - /** Gets the environment variables for the given project ID on behalf of the given team ID */ - VercelEnvironmentVariablesController_getEnvironmentVariables: { - parameters: { - query: { - projectId: string - teamId?: string - } - header: { - vercel_authorization: string - } - } - responses: { - 200: { - content: { - 'application/json': Record[] - } - } - /** @description Failed to get Vercel environment variables */ - 500: { - content: never - } - } - } - /** Creates the environment variable for the given project ID on behalf of the given team ID */ - VercelEnvironmentVariablesController_createEnvironmentVariable: { - parameters: { - query: { - projectId: string - teamId?: string - } - header: { - vercel_authorization: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateVercelEnvironmentVariableBody'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - /** @description Failed to get the environment variables */ - 500: { - content: never - } - } - } - /** Gets user's integrations */ - IntegrationsController_getProjectConnections: { - parameters: { - query: { - /** @description Filter results by integration name. Optional */ - integration_name: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetUserOrganizationIntegrationResponse'][] - } - } - /** @description Failed to get user's integrations */ - 500: { - content: never - } - } - } - /** Gets integration with the given organization slug */ - IntegrationsController_getProjectConnectionsForOrg: { - parameters: { - path: { - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetOrganizationIntegrationResponse'][] - } - } - /** @description Failed to get integration with the given organization slug */ - 500: { - content: never - } - } - } - /** - * Create vercel integration - * @description Exchanges a vercel code for an access token and saves the access token to the new integration record - */ - VercelIntegrationController_createVercelIntegration: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateVercelIntegrationBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to create vercel integration */ - 500: { - content: never - } - } - } - /** Removes Vercel organization integration with the given id */ - VercelIntegrationController_removeVercelIntegration: { - parameters: { - path: { - organization_integration_id: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to remove Vercel organization integration with the given id */ - 500: { - content: never - } - } - } - /** Gets vercel projects with the given organization integration id */ - VercelProjectController_getVercelProjects: { - parameters: { - query: { - search?: string - from?: string - limit: string - } - path: { - organization_integration_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetVercelProjectsResponse'] - } - } - /** @description Failed to get vercel projects with the given organization integration id */ - 500: { - content: never - } - } - } - /** Gets installed vercel project connections for the given organization integration */ - VercelConnectionsController_getVercelConnections: { - parameters: { - path: { - organization_integration_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetVercelConnections'][] - } - } - /** @description Failed to get installed vercel connections for the given organization integration */ - 500: { - content: never - } - } - } - /** Connects a Vercel project to a supabase project */ - VercelConnectionsController_createVercelConnection: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateVercelConnectionsBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['CreateVercelConnectionResponse'] - } - } - /** @description Failed to create project connection */ - 500: { - content: never - } - } - } - /** Syncs supabase project envs with given connection id */ - VercelConnectionsController_syncVercelConnectionEnvironments: { - parameters: { - path: { - connection_id: string - } - } - responses: { - 201: { - content: never - } - /** @description Failed to sync supabase project envs with given connection id */ - 500: { - content: never - } - } - } - /** Deletes vercel project connection */ - VercelConnectionsController_deleteVercelConnection: { - parameters: { - path: { - connection_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['DeleteVercelConnectionResponse'] - } - } - /** @description Failed to delete vercel integration project connection */ - 500: { - content: never - } - } - } - /** Updates a Vercel connection for a supabase project */ - VercelConnectionsController_updateVercelConnection: { - parameters: { - path: { - connection_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateVercelConnectionsBody'] - } - } - responses: { - 200: { - content: never - } - /** @description Failed to update Vercel connection */ - 500: { - content: never - } - } - } - /** Get GitHub authorization */ - GitHubAuthorizationsController_getGitHubAuthorization: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['GitHubAuthorization'] - } - } - /** @description Failed to get GitHub authorization */ - 500: { - content: never - } - } - } - /** Create GitHub authorization */ - GitHubAuthorizationsController_createGitHubAuthorization: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateGitHubAuthorizationBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to create GitHub authorization */ - 500: { - content: never - } - } - } - /** List organization GitHub connections */ - GitHubConnectionsController_listOrganizationGitHubConnections: { - parameters: { - query: { - organization_id: number - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ListGitHubConnectionsResponse'] - } - } - /** @description Failed to list organization GitHub connections */ - 500: { - content: never - } - } - } - /** Connects a GitHub project to a supabase project */ - GitHubConnectionsController_createGitHubConnection: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateGitHubConnectionsBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to create project connections */ - 500: { - content: never - } - } - } - /** Deletes github project connection */ - GitHubConnectionsController_deleteGitHubConnection: { - parameters: { - path: { - connection_id: string - } - } - responses: { - 204: { - content: never - } - /** @description Failed to delete github integration project connection */ - 500: { - content: never - } - } - } - /** Updates a GitHub connection for a supabase project */ - GitHubConnectionsController_updateGitHubConnection: { - parameters: { - path: { - connection_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateGitHubConnectionsBody'] - } - } - responses: { - 204: { - content: never - } - /** @description Failed to update GitHub connection */ - 500: { - content: never - } - } - } - /** List GitHub connection branches */ - GitHubBranchesController_listConnectionBranches: { - parameters: { - query?: { - per_page?: number - page?: number - } - path: { - connectionId: number - } - } - responses: { - 200: { - content: { - 'application/json': Record[] - } - } - /** @description Failed to list GitHub connection branches */ - 500: { - content: never - } - } - } - /** Get GitHub connection branch */ - GitHubBranchesController_getConnectionBranch: { - parameters: { - path: { - connectionId: number - branchName: string - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - /** @description Failed to get GitHub connection branch */ - 500: { - content: never - } - } - } - /** Gets GitHub repositories for user */ - GitHubRepositoriesController_listRepositories: { - responses: { - 200: { - content: never - } - /** @description Failed to get GitHub repositories for user */ - 500: { - content: never - } - } - } - /** Create CLI login session */ - CliLoginController_createCliLoginSession: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateCliLoginSessionBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to create CLI login session */ - 500: { - content: never - } - } - } - /** Retrieve CLI login session */ - CliLoginController_getCliLoginSession: { - parameters: { - path: { - session_id: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to retrieve CLI login session */ - 500: { - content: never - } - } - } - /** Gets GoTrue template */ - AuthTemplateController_getTemplate: { - parameters: { - path: { - ref: string - template: - | 'confirmation' - | 'email-change' - | 'invite' - | 'magic-link' - | 'recovery' - | 'reauthentication' - } - } - responses: { - 200: { - content: { - 'application/json': string - } - } - /** @description Failed to retrieve GoTrue template */ - 500: { - content: never - } - } - } - /** Gets the status of owner reassignment */ - DatabaseOwnerController_getOwnerReassignStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - /** @description Failed to get status of owner reassignment */ - 500: { - content: never - } - } - } - /** Reassigns object owner from supabase_admin to temp */ - DatabaseOwnerController_applyOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** Rollback object owner from temp to supabase_admin */ - DatabaseOwnerController_rollbackOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - 403: { - content: never - } - /** @description Failed to rollback owner on the project */ - 500: { - content: never - } - } - } - /** Reassigns object owner from temp to postgres */ - DatabaseOwnerController_finaliseOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OwnerResponse'] - } - } - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** Updates the database password */ - DatabasePasswordController_updatePassword: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePasswordBody'] - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to update database password */ - 500: { - content: never - } - } - } - /** Reset JWT if leaked keys found by GitHub secret scanning */ - GithubSecretAlertController_resetJwt: { - parameters: { - header: { - 'github-public-key-identifier': string - 'github-public-key-signature': string - } - } - requestBody: { - content: { - 'application/json': string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to reset JWT */ - 500: { - content: never - } - } - } - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - SystemFunctionsController_getFunctions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['FunctionResponse'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's functions */ - 500: { - content: never - } - } - } - /** Deletes all Edge Functions from a project */ - SystemFunctionsController_systemDeleteAllFunctions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - } - } - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - SystemSecretsController_getSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['SecretResponse'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - SystemSecretsController_createSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateSecretBody'][] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to create project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - SystemSecretsController_deleteSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': string[] - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to delete secrets with given names */ - 500: { - content: never - } - } - } - /** Refreshes secrets */ - SecretsRefreshController_refreshSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - /** @description Failed to refresh secrets */ - 500: { - content: never - } - } - } - /** Get API health status */ - HealthController_getStatus: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['HealthResponse'] - } - } - /** @description Failed to retrieve API health status */ - 500: { - content: never - } - } - } - /** Updates a project's health status. */ - HealthReportingController_updateStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['ReportStatusBody'] - } - } - responses: { - 200: { - content: never - } - /** @description Failed to update health status. */ - 500: { - content: never - } - } - } - /** Records an HA event */ - HaEventsController_updateStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['EventBody'] - } - } - responses: { - 200: { - content: never - } - /** @description Failed to record HA event. */ - 500: { - content: never - } - } - } - /** Allows a project to obtain temporary credentials. */ - AwsCredentialsController_getTemporaryCredentials: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CredentialsRequestBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['CredentialsResponseBody'] - } - } - /** @description Failed to obtain temporary credentials. */ - 500: { - content: never - } - } - } - /** Updates project addon */ - AddonsController_updateAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateAddonAdminBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to update project addon */ - 500: { - content: never - } - } - } - /** Removes project addon */ - AddonsController_removeAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - addon_variant: components['schemas']['AddonVariantId'] - } - } - responses: { - 200: { - content: never - } - /** @description Failed to remove project addon */ - 500: { - content: never - } - } - } - /** Handle update project jwt on completion */ - ProjectUpdateJwtController_completeUpdateJwt: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - } - } - /** Gets usage stats */ - OrgUsageSystemController_getOrgUsage: { - parameters: { - query?: { - project_ref?: string - start?: string - end?: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OrgUsageResponse'] - } - } - /** @description Failed to get usage stats */ - 500: { - content: never - } - } - } - /** Gets the partner usage and costs */ - PartnerBillingSystemController_getPartnerUsageAndCosts: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to retrieve subscription */ - 500: { - content: never - } - } - } - /** Gets the current subscription */ - OrgSubscriptionSystemController_getSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to retrieve subscription */ - 500: { - content: never - } - } - } - /** Updates subscription */ - OrgSubscriptionSystemController_updateSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSubscriptionV2AdminBody'] - } - } - responses: { - 200: { - content: never - } - /** @description Failed to update subscription */ - 500: { - content: never - } - } - } - /** Updates restriction status of an org */ - OrgRestrictionsSystemController_updateRestriction: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateRestrictionsBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpdateRestrictionsResponse'] - } - } - /** @description Failed to update restriction status */ - 500: { - content: never - } - } - } - /** Processes Vercel event */ - VercelWebhooksController_processEvent: { - parameters: { - header: { - 'x-vercel-signature': string - } - } - responses: { - 201: { - content: never - } - /** @description Failed to process Vercel event */ - 500: { - content: never - } - } - } - /** Processes GitHub event */ - GitHubWebhooksController_processEvent: { - parameters: { - header: { - 'x-github-delivery': string - 'x-github-event': string - 'x-hub-signature-256': string - } - } - responses: { - 201: { - content: never - } - /** @description Failed to process GitHub event */ - 500: { - content: never - } - } - } - /** Processes Stripe event */ - StripeWebhooksController_processEvent: { - parameters: { - header: { - 'stripe-signature': string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['Buffer'] - } - } - responses: { - 200: { - content: never - } - /** @description Failed to process Stripe event */ - 500: { - content: never - } - } - } - /** - * Get metrics - * @description At most 50 projects can be queried at a time. - * Currently supports '1d', '3d', and '7d' intervals. - */ - V0ProjectsMetricsController_getProjectsMetrics: { - requestBody: { - content: { - 'application/json': components['schemas']['GetMetricsBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetMetricsResponse'] - } - } - } - } - /** - * Get database branch config - * @description Fetches configurations of the specified database branch - */ - BranchController_getBranchDetails: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['BranchDetailResponse'] - } - } - /** @description Failed to retrieve database branch */ - 500: { - content: never - } - } - } - /** - * Delete a database branch - * @description Deletes the specified database branch - */ - BranchController_deleteBranch: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['BranchDeleteResponse'] - } - } - /** @description Failed to delete database branch */ - 500: { - content: never - } - } - } - /** - * Update database branch config - * @description Updates the configuration of the specified database branch - */ - BranchController_updateBranch: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateBranchBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['BranchResponse'] - } - } - /** @description Failed to update database branch */ - 500: { - content: never - } - } - } - /** - * Resets a database branch - * @description Resets the specified database branch - */ - BranchController_resetBranch: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['BranchResetResponse'] - } - } - /** @description Failed to reset database branch */ - 500: { - content: never - } - } - } - /** - * List all projects - * @description Returns a list of all projects you've previously created. - */ - V1ProjectsController_getProjects: { - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1ProjectResponse'][] - } - } - } - } - /** Create a project */ - V1ProjectsController_createProject: { - requestBody: { - content: { - 'application/json': components['schemas']['V1CreateProjectBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['V1ProjectResponse'] - } - } - } - } - /** Get project api keys */ - ApiKeysController_getProjectApiKeys: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ApiKeyResponse'][] - } - } - 403: { - content: never - } - } - } - /** - * List all database branches - * @description Returns all database branches of the specified project. - */ - BranchesController_getBranches: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['BranchResponse'][] - } - } - /** @description Failed to retrieve database branches */ - 500: { - content: never - } - } - } - /** - * Create a database branch - * @description Creates a database branch from the specified project. - */ - BranchesController_createBranch: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateBranchBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['BranchResponse'] - } - } - /** @description Failed to create database branch */ - 500: { - content: never - } - } - } - /** - * Disables preview branching - * @description Disables preview branching for the specified project - */ - BranchesController_disableBranch: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - /** @description Failed to disable preview branching */ - 500: { - content: never - } - } - } - /** Gets project's custom hostname config */ - CustomHostnamesController_getCustomHostnameConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpdateCustomHostnameResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's custom hostname config */ - 500: { - content: never - } - } - } - /** Deletes a project's custom hostname configuration */ - CustomHostnamesController_removeCustomHostnameConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to delete project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Updates project's custom hostname configuration */ - CustomHostnamesController_createCustomHostnameConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateCustomHostnameBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['UpdateCustomHostnameResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Attempts to verify the DNS configuration for project's custom hostname configuration */ - CustomHostnamesController_reverify: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['UpdateCustomHostnameResponse'] - } - } - 403: { - content: never - } - /** @description Failed to verify project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Activates a custom hostname for a project. */ - CustomHostnamesController_activate: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['UpdateCustomHostnameResponse'] - } - } - 403: { - content: never - } - /** @description Failed to activate project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Gets project's network bans */ - NetworkBansController_getNetworkBans: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['NetworkBanResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's network bans */ - 500: { - content: never - } - } - } - /** Remove network bans. */ - NetworkBansController_removeNetworkBan: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RemoveNetworkBanRequest'] - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to remove network bans. */ - 500: { - content: never - } - } - } - /** Gets project's network restrictions */ - NetworkRestrictionsController_getNetworkRestrictions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['NetworkRestrictionsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's network restrictions */ - 500: { - content: never - } - } - } - /** Updates project's network restrictions */ - NetworkRestrictionsController_applyNetworkRestrictions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['NetworkRestrictionsRequest'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['NetworkRestrictionsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project network restrictions */ - 500: { - content: never - } - } - } - /** Gets project's pgsodium config */ - PgsodiumConfigController_getPgsodiumConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PgsodiumConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's pgsodium config */ - 500: { - content: never - } - } - } - /** Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */ - PgsodiumConfigController_updatePgsodiumConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePgsodiumConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PgsodiumConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project's pgsodium config */ - 500: { - content: never - } - } - } - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - SecretsController_getSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['SecretResponse'][] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - SecretsController_createSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateSecretBody'][] - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to create project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - SecretsController_deleteSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': string[] - } - } - responses: { - 200: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to delete secrets with given names */ - 500: { - content: never - } - } - } - /** Get project's SSL enforcement configuration. */ - SslEnforcementController_getSslEnforcementConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['SslEnforcementResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's SSL enforcement config */ - 500: { - content: never - } - } - } - /** Update project's SSL enforcement configuration. */ - SslEnforcementController_updateSslEnforcementConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SslEnforcementRequest'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['SslEnforcementResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project's SSL enforcement configuration. */ - 500: { - content: never - } - } - } - /** - * Generate TypeScript types - * @description Returns the TypeScript types of your schema for use with supabase-js. - */ - TypesController_getTypescriptTypes: { - parameters: { - query?: { - included_schemas?: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['TypescriptResponse'] - } - } - 403: { - content: never - } - /** @description Failed to generate TypeScript types */ - 500: { - content: never - } - } - } - /** Gets current vanity subdomain config */ - VanitySubdomainsController_getVanitySubdomainConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['VanitySubdomainConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Deletes a project's vanity subdomain configuration */ - VanitySubdomainsController_removeVanitySubdomainConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to delete project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Checks vanity subdomain availability */ - VanitySubdomainsController_checkVanitySubdomainAvailability: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['VanitySubdomainBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['SubdomainAvailabilityResponse'] - } - } - 403: { - content: never - } - /** @description Failed to check project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Activates a vanity subdomain for a project. */ - VanitySubdomainsController_activateVanitySubdomainPlease: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['VanitySubdomainBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['ActivateVanitySubdomainResponse'] - } - } - 403: { - content: never - } - /** @description Failed to activate project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Upgrades the project's Postgres version */ - UpgradeController_upgradeProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpgradeDatabaseBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['ProjectUpgradeInitiateResponse'] - } - } - 403: { - content: never - } - /** @description Failed to initiate project upgrade */ - 500: { - content: never - } - } - } - /** Returns the project's eligibility for upgrades */ - UpgradeController_upgradeEligibilityInformation: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectUpgradeEligibilityResponse'] - } - } - 403: { - content: never - } - /** @description Failed to determine project upgrade eligibility */ - 500: { - content: never - } - } - } - /** Gets the latest status of the project's upgrade */ - UpgradeController_getUpgradeStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['DatabaseUpgradeStatusResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project upgrade status */ - 500: { - content: never - } - } - } - /** Returns project's readonly mode status */ - ReadOnlyController_getReadOnlyModeStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ReadOnlyStatusResponse'] - } - } - /** @description Failed to get project readonly mode status */ - 500: { - content: never - } - } - } - /** Disables project's readonly mode for the next 15 minutes */ - ReadOnlyController_temporarilyDisableReadonlyMode: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - /** @description Failed to disable project's readonly mode */ - 500: { - content: never - } - } - } - /** Set up a read replica */ - ReadReplicaController_setUpReadReplica: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SetUpReadReplicaBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to set up read replica */ - 500: { - content: never - } - } - } - /** Remove a read replica */ - ReadReplicaController_removeReadReplica: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RemoveReadReplicaBody'] - } - } - responses: { - 201: { - content: never - } - /** @description Failed to remove read replica */ - 500: { - content: never - } - } - } - /** Gets project's service health status */ - ServiceHealthController_checkServiceHealth: { - parameters: { - query: { - timeout_ms?: number - services: ('auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage')[] - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1ServiceHealthResponse'][] - } - } - /** @description Failed to retrieve project's service health status */ - 500: { - content: never - } - } - } - /** Gets project's Postgres config */ - AuthPostgresConfigController_getConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresConfigResponse'] - } - } - /** @description Failed to retrieve project's Postgres config */ - 500: { - content: never - } - } - } - /** Updates project's Postgres config */ - AuthPostgresConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePostgresConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['PostgresConfigResponse'] - } - } - /** @description Failed to update project's Postgres config */ - 500: { - content: never - } - } - } - /** Get project's pgbouncer config */ - V1PgbouncerConfigController_v1GetPgbouncerConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1PgbouncerConfigResponse'] - } - } - /** @description Failed to retrieve project's pgbouncer config */ - 500: { - content: never - } - } - } - /** Gets project's auth config */ - V1AuthConfigController_getV1AuthConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AuthConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve project's auth config */ - 500: { - content: never - } - } - } - /** Updates a project's auth config */ - V1AuthConfigController_updateV1AuthConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateAuthConfigBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['AuthConfigResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update project's auth config */ - 500: { - content: never - } - } - } - /** Lists all third-party auth integrations */ - ThirdPartyAuthController_listTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'][] - } - } - 403: { - content: never - } - } - } - /** Creates a new third-party auth integration */ - ThirdPartyAuthController_createTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateThirdPartyAuthBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'] - } - } - 403: { - content: never - } - } - } - /** Get a third-party integration */ - ThirdPartyAuthController_getTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - tpa_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'] - } - } - 403: { - content: never - } - } - } - /** Removes a third-party auth integration */ - ThirdPartyAuthController_deleteTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - tpa_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'] - } - } - 403: { - content: never - } - } - } - /** Lists all SSO providers */ - ProvidersController_listAllProviders: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ListProvidersResponse'] - } - } - 403: { - content: never - } - /** @description SAML 2.0 support is not enabled for this project */ - 404: { - content: never - } - } - } - /** Creates a new SSO provider */ - ProvidersController_createProviderForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateProviderBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['CreateProviderResponse'] - } - } - 403: { - content: never - } - /** @description SAML 2.0 support is not enabled for this project */ - 404: { - content: never - } - } - } - /** Gets a SSO provider by its UUID */ - ProvidersController_getProviderById: { - parameters: { - path: { - /** @description Project ref */ - ref: string - provider_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetProviderResponse'] - } - } - 403: { - content: never - } - /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ - 404: { - content: never - } - } - } - /** Updates a SSO provider by its UUID */ - ProvidersController_updateProviderById: { - parameters: { - path: { - /** @description Project ref */ - ref: string - provider_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProviderBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['UpdateProviderResponse'] - } - } - 403: { - content: never - } - /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ - 404: { - content: never - } - } - } - /** Removes a SSO provider by its UUID */ - ProvidersController_removeProviderById: { - parameters: { - path: { - /** @description Project ref */ - ref: string - provider_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['DeleteProviderResponse'] - } - } - 403: { - content: never - } - /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ - 404: { - content: never - } - } - } - /** Run sql query */ - V1QueryController_v1RunQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1RunQueryBody'] - } - } - responses: { - 201: { - content: { - 'application/json': Record - } - } - 403: { - content: never - } - /** @description Failed to run sql query */ - 500: { - content: never - } - } - } - /** Enables Database Webhooks on the project */ - V1DatabaseWebhooksController_v1EnableDatabaseWebhooks: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - 403: { - content: never - } - /** @description Failed to enable Database Webhooks on the project */ - 500: { - content: never - } - } - } - /** Lists all backups */ - V1BackupsController_getBackups: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1BackupsResponse'] - } - } - /** @description Failed to get backups */ - 500: { - content: never - } - } - } - /** Restores a PITR backup for a database */ - V1RestorePitrController_v1RestorePitr: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1RestorePitrBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** - * Retrieve a function - * @description Retrieves a function with the specified slug and project. - */ - FunctionSlugController_getFunction: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['FunctionSlugResponse'] - } - } - 403: { - content: never - } - /** @description Failed to retrieve function with given slug */ - 500: { - content: never - } - } - } - /** - * Delete a function - * @description Deletes a function with the specified slug from the specified project. - */ - FunctionSlugController_deleteFunction: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to delete function with given slug */ - 500: { - content: never - } - } - } - /** - * Update a function - * @description Updates a function with the specified slug and project. - */ - FunctionSlugController_updateFunction: { - parameters: { - query?: { - slug?: string - name?: string - verify_jwt?: boolean - import_map?: boolean - entrypoint_path?: string - import_map_path?: string - } - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1UpdateFunctionBody'] - 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['FunctionResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update function with given slug */ - 500: { - content: never - } - } - } - /** - * Retrieve a function body - * @description Retrieves a function body for the specified slug and project. - */ - FunctionSlugController_getFunctionBody: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to retrieve function body with given slug */ - 500: { - content: never - } - } - } - /** Lists all buckets */ - V1StorageBucketsController_getBuckets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1StorageBucketResponse'][] - } - } - 403: { - content: never - } - /** @description Failed to get list of buckets */ - 500: { - content: never - } - } - } - /** Create an organization */ - OrganizationsController_createOrganization: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateOrganizationBodyV1'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['OrganizationResponseV1'] - } - } - /** @description Unexpected error creating an organization */ - 500: { - content: never - } - } - } - /** List members of an organization */ - V1OrganizationMembersController_v1ListOrganizationMembers: { - parameters: { - path: { - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1OrganizationMemberResponse'][] - } - } - } - } - /** Gets information about the organization */ - V1OrganizationSlugController_getOrganization: { - parameters: { - path: { - slug: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1OrganizationSlugResponse'] - } - } - } - } - /** Authorize user through oauth */ - OAuthController_authorize: { - parameters: { - query: { - client_id: string - response_type: 'code' | 'token' | 'id_token token' - redirect_uri: string - scope?: string - state?: string - response_mode?: string - code_challenge?: string - code_challenge_method?: 'plain' | 'sha256' | 'S256' - } - } - responses: { - 303: { - content: never - } - } - } - /** Exchange auth code for user's access and refresh token */ - OAuthController_token: { - requestBody: { - content: { - 'application/x-www-form-urlencoded': components['schemas']['OAuthTokenBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['OAuthTokenResponse'] - } - } - } - } - /** Lists SQL snippets for the logged in user */ - SnippetsController_listSnippets: { - parameters: { - query?: { - project_ref?: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['SnippetList'] - } - } - /** @description Failed to list user's SQL snippets */ - 500: { - content: never - } - } - } - /** Gets a specific SQL snippet */ - SnippetsController_getSnippet: { - parameters: { - path: { - id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['SnippetResponse'] - } - } - /** @description Failed to retrieve SQL snippet */ - 500: { - content: never - } - } - } - /** Redirects to Supabase dashboard after completing Fly sso */ - CallbackController_redirectToDashboardFlyioExtensionScreen: { - responses: { - 200: { - content: never - } - } - } - /** Gets database status */ - ExtensionController_getResourceStatus: { - parameters: { - path: { - extension_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ResourceWithServicesStatusResponse'] - } - } - } - } - /** Deletes a database */ - ExtensionController_deleteResource: { - parameters: { - path: { - extension_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Starts Fly single sign on */ - ExtensionController_startFlyioSSO: { - parameters: { - path: { - extension_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Creates a database */ - ExtensionsController_provisionResource: { - responses: { - 201: { - content: { - 'application/json': components['schemas']['ResourceProvisioningResponse'] - } - } - } - } - /** Gets information about the organization */ - OrganizationsController_getOrganization: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['FlyOrganization'] - } - } - } - } - /** Gets all databases that belong to the Fly organization */ - OrganizationsController_getOrgExtensions: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['OrganizationExtensionStatus'][] - } - } - } - } - /** Starts Fly single sign on */ - OrganizationsController_startFlyioSSO: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets the organizations current unbilled charges */ - FlyBillingController_getResourceBilling: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ResourceBillingResponse'] - } - } - } - } -} +export * from 'api-types' diff --git a/apps/studio/components/interfaces/Auth/AuthProvidersFormValidation.tsx b/apps/studio/components/interfaces/Auth/AuthProvidersFormValidation.tsx index fd8186c108b..650933b6470 100644 --- a/apps/studio/components/interfaces/Auth/AuthProvidersFormValidation.tsx +++ b/apps/studio/components/interfaces/Auth/AuthProvidersFormValidation.tsx @@ -35,25 +35,24 @@ const PROVIDER_EMAIL = { type: 'boolean', }, MAILER_OTP_EXP: { - title: 'Mailer OTP Expiration', + title: 'Email OTP Expiration', type: 'number', description: 'Duration before an email otp / link expires.', units: 'seconds', }, - PASSWORD_MIN_LENGTH: { - title: 'Min password length', - description: 'Users will not be able to use a password shorter than this.', + MAILER_OTP_LENGTH: { + title: 'Email OTP Length', type: 'number', + description: 'Number of digits in the email OTP', + units: 'number', }, }, validationSchema: object().shape({ - PASSWORD_MIN_LENGTH: number() - .required('A password is required.') - .min(6, 'Password length must be at least 6 characters long'), MAILER_OTP_EXP: number() .min(0, 'Must be more than 0') .max(86400, 'Must be no more than 86400') .required('This is required'), + MAILER_OTP_LENGTH: number().min(6, 'Must be at least 6').max(10, 'Must be no more than 10'), }), misc: { iconKey: 'email-icon2', diff --git a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/PolicyDetailsV2.tsx b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/PolicyDetailsV2.tsx index a7d1e848a92..5958378c28d 100644 --- a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/PolicyDetailsV2.tsx +++ b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/PolicyDetailsV2.tsx @@ -1,15 +1,26 @@ -import { useEffect } from 'react' +import { useEffect, useState } from 'react' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { useDatabaseRolesQuery } from 'data/database-roles/database-roles-query' import { useTablesQuery } from 'data/tables/tables-query' +import { Check, ChevronsUpDown } from 'lucide-react' import { + Button, + CommandEmpty_Shadcn_, + CommandGroup_Shadcn_, + CommandInput_Shadcn_, + CommandItem_Shadcn_, + CommandList_Shadcn_, + Command_Shadcn_, FormControl_Shadcn_, FormField_Shadcn_, FormItem_Shadcn_, FormLabel_Shadcn_, FormMessage_Shadcn_, Input_Shadcn_, + PopoverContent_Shadcn_, + PopoverTrigger_Shadcn_, + Popover_Shadcn_, RadioGroupLargeItem_Shadcn_, RadioGroup_Shadcn_, ScrollArea, @@ -24,6 +35,7 @@ import { MultiSelectV2 } from 'ui-patterns/MultiSelect/MultiSelectV2' interface PolicyDetailsV2Props { schema: string searchString?: string + selectedTable?: string isEditing: boolean form: any onUpdateCommand: (command: string) => void @@ -32,11 +44,13 @@ interface PolicyDetailsV2Props { export const PolicyDetailsV2 = ({ schema, searchString, + selectedTable, isEditing, form, onUpdateCommand, }: PolicyDetailsV2Props) => { const { project } = useProjectContext() + const [open, setOpen] = useState(false) const { data: tables, isSuccess: isSuccessTables } = useTablesQuery({ projectRef: project?.ref, @@ -62,7 +76,7 @@ export const PolicyDetailsV2 = ({ .sort((a, b) => a.name.localeCompare(b.name)) useEffect(() => { - if (!isEditing) { + if (!isEditing && selectedTable === undefined) { const table = tables?.find( (table) => table.schema === schema && @@ -74,7 +88,7 @@ export const PolicyDetailsV2 = ({ form.setValue('table', tables[0].name) } } - }, [isEditing, form, searchString, tables, isSuccessTables]) + }, [isEditing, form, searchString, tables, isSuccessTables, selectedTable]) return ( <> @@ -110,30 +124,63 @@ export const PolicyDetailsV2 = ({

- form.setValue('table', value)} - > - - {schema}.{field.value} - - - - 7 ? 'h-[200px]' : ''}> - {(tables ?? []).map((table) => ( - - {table.name} - - ))} - - - - + + + + + + + + + No tables found + + 7 ? 'h-[200px]' : ''}> + {(tables ?? []).map((table) => ( + { + form.setValue('table', table.name) + setOpen(false) + }} + onClick={() => { + form.setValue('table', table.name) + setOpen(false) + }} + > + + {field.value === table.name ? : ''} + {table.name} + + + ))} + + + + + + diff --git a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx index 730e5ce1e5e..6c905ed4de4 100644 --- a/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx +++ b/apps/studio/components/interfaces/Auth/Policies/AIPolicyEditorPanel/index.tsx @@ -70,6 +70,7 @@ interface AIPolicyEditorPanelProps { visible: boolean schema: string searchString?: string + selectedTable?: string selectedPolicy?: PostgresPolicy onSelectCancel: () => void } @@ -81,6 +82,7 @@ export const AIPolicyEditorPanel = memo(function ({ visible, schema, searchString, + selectedTable, selectedPolicy, onSelectCancel, }: AIPolicyEditorPanelProps) { @@ -415,6 +417,8 @@ export const AIPolicyEditorPanel = memo(function ({ if (selectedPolicy.check && selectedPolicy.command !== 'INSERT') { setShowCheckBlock(true) } + } else if (selectedTable !== undefined) { + form.reset({ ...defaultValues, table: selectedTable }) } } }, [visible]) @@ -535,6 +539,7 @@ export const AIPolicyEditorPanel = memo(function ({ { diff --git a/apps/studio/components/interfaces/Auth/Policies/Policies.tsx b/apps/studio/components/interfaces/Auth/Policies/Policies.tsx index 62c9dfe12e6..a299ea11ac1 100644 --- a/apps/studio/components/interfaces/Auth/Policies/Policies.tsx +++ b/apps/studio/components/interfaces/Auth/Policies/Policies.tsx @@ -21,6 +21,7 @@ interface PoliciesProps { tables: PostgresTable[] hasTables: boolean isLocked: boolean + onSelectCreatePolicy: (table: string) => void onSelectEditPolicy: (policy: PostgresPolicy) => void } @@ -29,6 +30,7 @@ const Policies = ({ tables, hasTables, isLocked, + onSelectCreatePolicy, onSelectEditPolicy: onSelectEditPolicyAI, }: PoliciesProps) => { const router = useRouter() @@ -139,12 +141,13 @@ const Policies = ({
{isLocked && } {tables.length > 0 ? ( - tables.map((table: any) => ( + tables.map((table) => (
onSelectCreatePolicy(table.name)} onSelectEditPolicy={onSelectEditPolicy} onSelectDeletePolicy={onSelectDeletePolicy} /> diff --git a/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx b/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx index 314434d2662..cfee481bc00 100644 --- a/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx +++ b/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx @@ -2,25 +2,31 @@ import * as Tooltip from '@radix-ui/react-tooltip' import type { PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { noop } from 'lodash' +import { Lock } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' +import { useIsRLSAIAssistantEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { useCheckPermissions } from 'hooks' -import { Badge, Button, IconLock } from 'ui' +import { Badge, Button } from 'ui' interface PolicyTableRowHeaderProps { table: PostgresTable isLocked: boolean onSelectToggleRLS: (table: PostgresTable) => void + onSelectCreatePolicy: () => void } const PolicyTableRowHeader = ({ table, isLocked, onSelectToggleRLS = noop, + onSelectCreatePolicy, }: PolicyTableRowHeaderProps) => { const router = useRouter() const { ref } = router.query + + const isAiAssistantEnabled = useIsRLSAIAssistantEnabled() const canToggleRLS = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') return ( @@ -33,7 +39,7 @@ const PolicyTableRowHeader = ({ {isLocked && ( - Locked + Locked )} @@ -73,6 +79,15 @@ const PolicyTableRowHeader = ({ )} + {!isAiAssistantEnabled && ( + + )}
)} diff --git a/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx b/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx index 999a83a735e..6c6d8c19ae0 100644 --- a/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx +++ b/apps/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx @@ -13,6 +13,7 @@ interface PolicyTableRowProps { table: PostgresTable isLocked: boolean onSelectToggleRLS: (table: PostgresTable) => void + onSelectCreatePolicy: () => void onSelectEditPolicy: (policy: PostgresPolicy) => void onSelectDeletePolicy: (policy: PostgresPolicy) => void } @@ -21,6 +22,7 @@ const PolicyTableRow = ({ table, isLocked, onSelectToggleRLS = noop, + onSelectCreatePolicy, onSelectEditPolicy = noop, onSelectDeletePolicy = noop, }: PolicyTableRowProps) => { @@ -41,6 +43,7 @@ const PolicyTableRow = ({ table={table} isLocked={isLocked} onSelectToggleRLS={onSelectToggleRLS} + onSelectCreatePolicy={onSelectCreatePolicy} /> } > diff --git a/apps/studio/components/interfaces/BranchManagement/BranchStatusBadge.tsx b/apps/studio/components/interfaces/BranchManagement/BranchStatusBadge.tsx index 8267e633682..fb4a9f5112a 100644 --- a/apps/studio/components/interfaces/BranchManagement/BranchStatusBadge.tsx +++ b/apps/studio/components/interfaces/BranchManagement/BranchStatusBadge.tsx @@ -40,6 +40,8 @@ const STATUS_TO_LABEL: Record = { RUNNING_MIGRATIONS: 'Running migrations', MIGRATIONS_FAILED: 'Migrations failed', MIGRATIONS_PASSED: 'Migrations applied successfully', + FUNCTIONS_DEPLOYED: 'Functions deployed', + FUNCTIONS_FAILED: 'Functions failed to deploy', } const BranchStatusBadge = ({ status }: BranchStatusBadgeProps) => { diff --git a/apps/studio/components/interfaces/Database/EnumeratedTypes/CreateEnumeratedTypeSidePanel.tsx b/apps/studio/components/interfaces/Database/EnumeratedTypes/CreateEnumeratedTypeSidePanel.tsx index a52ea05ad7a..03c3602605a 100644 --- a/apps/studio/components/interfaces/Database/EnumeratedTypes/CreateEnumeratedTypeSidePanel.tsx +++ b/apps/studio/components/interfaces/Database/EnumeratedTypes/CreateEnumeratedTypeSidePanel.tsx @@ -1,6 +1,6 @@ import { zodResolver } from '@hookform/resolvers/zod' import Link from 'next/link' -import { useRef } from 'react' +import { useEffect, useRef } from 'react' import { DragDropContext, Droppable, DroppableProvided } from 'react-beautiful-dnd' import { useFieldArray, useForm } from 'react-hook-form' import toast from 'react-hot-toast' @@ -51,6 +51,10 @@ const CreateEnumeratedTypeSidePanel = ({ }, }) + useEffect(() => { + form.reset(initialValues) + }, [visible]) + const FormSchema = z.object({ name: z .string() diff --git a/apps/studio/components/interfaces/Database/Extensions/Extensions.constants.ts b/apps/studio/components/interfaces/Database/Extensions/Extensions.constants.ts index d2df793eefc..7f71f7c684a 100644 --- a/apps/studio/components/interfaces/Database/Extensions/Extensions.constants.ts +++ b/apps/studio/components/interfaces/Database/Extensions/Extensions.constants.ts @@ -17,3 +17,7 @@ export const HIDDEN_EXTENSIONS = [ 'xml2', 'pg_tle', ] + +export const SEARCH_TERMS: Record = { + vector: ['pgvector', 'pg_vector'], +} diff --git a/apps/studio/components/interfaces/Database/Extensions/Extensions.tsx b/apps/studio/components/interfaces/Database/Extensions/Extensions.tsx index b85ed367187..f49b0a0a3cb 100644 --- a/apps/studio/components/interfaces/Database/Extensions/Extensions.tsx +++ b/apps/studio/components/interfaces/Database/Extensions/Extensions.tsx @@ -13,7 +13,7 @@ import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-ex import { useCheckPermissions, usePermissionsLoaded } from 'hooks' import ExtensionCard from './ExtensionCard' import ExtensionCardSkeleton from './ExtensionCardSkeleton' -import { HIDDEN_EXTENSIONS } from './Extensions.constants' +import { HIDDEN_EXTENSIONS, SEARCH_TERMS } from './Extensions.constants' const Extensions = () => { const { filter } = useParams() @@ -28,11 +28,13 @@ const Extensions = () => { const extensions = filterString.length === 0 ? data ?? [] - : (data ?? []).filter((ext) => - // if the filter string contains pg, ignore it since some of the extensions may be listed without the - // pg prefix (pgvector is listed as vector) - ext.name.includes(filterString.replace('pg', '')) - ) + : (data ?? []).filter((ext) => { + const nameMatchesSearch = ext.name.toLowerCase().includes(filterString.toLowerCase()) + const searchTermsMatchesSearch = (SEARCH_TERMS[ext.name] || []).some((x) => + x.includes(filterString.toLowerCase()) + ) + return nameMatchesSearch || searchTermsMatchesSearch + }) const extensionsWithoutHidden = extensions.filter((ext) => !HIDDEN_EXTENSIONS.includes(ext.name)) const [enabledExtensions, disabledExtensions] = partition( extensionsWithoutHidden, diff --git a/apps/studio/components/interfaces/Database/Functions/CreateFunction/index.tsx b/apps/studio/components/interfaces/Database/Functions/CreateFunction/index.tsx index 22b26ae53ac..c299d209d8a 100644 --- a/apps/studio/components/interfaces/Database/Functions/CreateFunction/index.tsx +++ b/apps/studio/components/interfaces/Database/Functions/CreateFunction/index.tsx @@ -60,7 +60,7 @@ const FormSchema = z.object({ schema: z.string().trim().min(1), args: z.array(z.object({ name: z.string().trim().min(1), type: z.string().trim() })), behavior: z.enum(['IMMUTABLE', 'STABLE', 'VOLATILE']), - definition: z.string().trim(), + definition: z.string().trim().min(1), language: z.string().trim(), return_type: z.string().trim(), security_definer: z.boolean(), @@ -255,7 +255,9 @@ const CreateFunction = ({ func, visible, setVisible }: CreateFunctionProps) => { Definition -

The language below should be written in `plpgsql`.

+

+ The language below should be written in plpgsql. +

{!isEditing &&

Change the language in the Advanced Settings below.

}
@@ -272,7 +274,7 @@ const CreateFunction = ({ func, visible, setVisible }: CreateFunctionProps) => { /> - + )} /> diff --git a/apps/studio/components/interfaces/Database/Functions/DeleteFunction.tsx b/apps/studio/components/interfaces/Database/Functions/DeleteFunction.tsx index 8b15c1e5c9d..0120b0caf11 100644 --- a/apps/studio/components/interfaces/Database/Functions/DeleteFunction.tsx +++ b/apps/studio/components/interfaces/Database/Functions/DeleteFunction.tsx @@ -46,8 +46,8 @@ const DeleteFunction = ({ func, visible, setVisible }: DeleteFunctionProps) => { confirmString={name} text={ <> - This will delete the function - {name} from the schema + This will delete the function{' '} + {name} from the schema{' '} {schema} } diff --git a/apps/studio/components/interfaces/Database/Roles/Roles.constants.ts b/apps/studio/components/interfaces/Database/Roles/Roles.constants.ts index 377dd9589c6..11235249aac 100644 --- a/apps/studio/components/interfaces/Database/Roles/Roles.constants.ts +++ b/apps/studio/components/interfaces/Database/Roles/Roles.constants.ts @@ -6,10 +6,11 @@ export const SUPABASE_ROLES = [ 'dashboard_user', 'supabase_admin', 'supabase_auth_admin', + 'supabase_functions_admin', 'supabase_read_only_user', + 'supabase_realtime_admin', 'supabase_replication_admin', 'supabase_storage_admin', - 'supabase_functions_admin', 'pgbouncer', 'pgsodium_keyholder', 'pgsodium_keyiduser', diff --git a/apps/studio/components/interfaces/Database/Tables/TableList.tsx b/apps/studio/components/interfaces/Database/Tables/TableList.tsx index c973aa89c73..d7b8558e492 100644 --- a/apps/studio/components/interfaces/Database/Tables/TableList.tsx +++ b/apps/studio/components/interfaces/Database/Tables/TableList.tsx @@ -230,9 +230,11 @@ const TableList = ({

{x.name}

)} - + {x.comment !== null ? ( -

{x.comment}

+ + {x.comment} + ) : (

No description

)} diff --git a/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx b/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx index f2ee1a1dba4..1c4d4546a40 100644 --- a/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx +++ b/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx @@ -13,6 +13,7 @@ import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { usePermissionsQuery } from 'data/permissions/permissions-query' import { ProjectInfo, useProjectsQuery } from 'data/projects/projects-query' import { ResourceWarning, useResourceWarningsQuery } from 'data/usage/resource-warnings-query' +import { useIsFeatureEnabled } from 'hooks' import { IS_PLATFORM } from 'lib/constants' import { makeRandomString } from 'lib/helpers' import type { Organization, ResponseError } from 'types' @@ -244,17 +245,20 @@ const OrganizationProjects = ({ } const NoProjectsState = ({ slug }: { slug: string }) => { + const projectCreationEnabled = useIsFeatureEnabled('projects:create') + return (

No projects

Get started by creating a new project.

-
+ + {projectCreationEnabled && ( -
+ )}
) } diff --git a/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelGitHubRepoLinker.tsx b/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelGitHubRepoLinker.tsx index 33a98e7185a..9ec66da24f9 100644 --- a/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelGitHubRepoLinker.tsx +++ b/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelGitHubRepoLinker.tsx @@ -5,6 +5,7 @@ import ProjectLinker from 'components/interfaces/Integrations/ProjectLinker' import { Markdown } from 'components/interfaces/Markdown' import { useGitHubAuthorizationQuery } from 'data/integrations/github-authorization-query' import { useGitHubConnectionCreateMutation } from 'data/integrations/github-connection-create-mutation' +import { useGitHubConnectionDeleteMutation } from 'data/integrations/github-connection-delete-mutation' import { useGitHubConnectionsQuery } from 'data/integrations/github-connections-query' import { useGitHubRepositoriesQuery } from 'data/integrations/github-repositories-query' import type { IntegrationConnectionsCreateVariables } from 'data/integrations/integrations.types' @@ -14,7 +15,6 @@ import { openInstallGitHubIntegrationWindow } from 'lib/github' import { EMPTY_ARR } from 'lib/void' import { useSidePanelsStateSnapshot } from 'state/side-panels' import { Button, SidePanel } from 'ui' -import { useGitHubConnectionDeleteMutation } from 'data/integrations/github-connection-delete-mutation' const GITHUB_ICON = ( @@ -39,8 +39,11 @@ const SidePanelGitHubRepoLinker = ({ projectRef }: SidePanelGitHubRepoLinkerProp useGitHubAuthorizationQuery() // [Alaister]: temp override with until the typegen is fixed - const { data: githubReposData, isLoading: isLoadingGitHubRepos } = - useGitHubRepositoriesQuery() + const { data: githubReposData, isLoading: isLoadingGitHubRepos } = useGitHubRepositoriesQuery< + any[] + >({ + enabled: Boolean(gitHubAuthorization), + }) /** * Supabase projects available diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/MemberRow.tsx b/apps/studio/components/interfaces/Organization/TeamSettings/MemberRow.tsx new file mode 100644 index 00000000000..0a015c644b7 --- /dev/null +++ b/apps/studio/components/interfaces/Organization/TeamSettings/MemberRow.tsx @@ -0,0 +1,223 @@ +import * as Tooltip from '@radix-ui/react-tooltip' +import Image from 'next/legacy/image' +import { Dispatch, SetStateAction, useState } from 'react' +import toast from 'react-hot-toast' + +import Table from 'components/to-be-cleaned/Table' +import { OrganizationMember } from 'data/organizations/organization-members-query' +import { usePermissionsQuery } from 'data/permissions/permissions-query' +import { useSelectedOrganization } from 'hooks' +import { useProfile } from 'lib/profile' +import { Role } from 'types' +import { Badge, IconAlertCircle, IconCheck, IconLoader, IconUser, IconX, Listbox } from 'ui' +import { getUserDisplayName, isInviteExpired } from '../Organization.utils' +import MemberActions from './MemberActions' +import { useGetRolesManagementPermissions } from './TeamSettings.utils' + +export interface SelectedMember extends OrganizationMember { + oldRoleId: number + newRoleId: number +} + +interface MemberRowProps { + member: OrganizationMember + roles: Role[] + isLoadingRoles?: boolean + showMfaEnabledColumn?: boolean + setUserRoleChangeModalVisible: Dispatch> + setSelectedMember: Dispatch> +} + +const MemberRow = ({ + member, + roles, + isLoadingRoles = false, + showMfaEnabledColumn = false, + setUserRoleChangeModalVisible, + setSelectedMember, +}: MemberRowProps) => { + const { profile } = useProfile() + const selectedOrganization = useSelectedOrganization() + + const { data: permissions } = usePermissionsQuery() + + const { rolesAddable, rolesRemovable } = useGetRolesManagementPermissions( + selectedOrganization?.id, + roles, + permissions ?? [] + ) + + const [memberRoleId] = member.role_ids ?? [] + const role = (roles || []).find((role) => role.id === memberRoleId) + const memberIsUser = member.primary_email == profile?.primary_email + const isInvitedUser = Boolean(member.invited_id) + const canRemoveRole = rolesRemovable.includes(memberRoleId) + const disableRoleEdit = !canRemoveRole || memberIsUser || isInvitedUser + const isEmailUser = member.username === member.primary_email + + const validateSelectedRoleToChange = (roleId: any) => { + if (!role || role.id === roleId) return + + const selectedRole = (roles || []).find((role) => role.id === roleId) + const canAddRole = rolesAddable.includes(selectedRole?.id ?? -1) + + if (!canAddRole) { + return toast.error( + `You do not have permission to update this team member to ${selectedRole!.name}` + ) + } + + setUserRoleChangeModalVisible(true) + setSelectedMember({ ...member, oldRoleId: role.id, newRoleId: roleId }) + } + + const [hasInvalidImg, setHasInvalidImg] = useState(false) + + return ( + + +
+
+ {isInvitedUser || isEmailUser || hasInvalidImg ? ( +
+ +
+ ) : ( + {member.username} { + setHasInvalidImg(true) + }} + /> + )} +
+
+

{getUserDisplayName(member)}

+ {isInvitedUser === undefined && ( +

{member.primary_email}

+ )} +
+
+
+ + + {isInvitedUser && member.invited_at && ( + + {isInviteExpired(member.invited_at) ? 'Expired' : 'Invited'} + + )} + + + {showMfaEnabledColumn && ( + +
+ {member.mfa_enabled ? ( + + ) : ( + + )} +
+
+ )} + + + {isLoadingRoles ? ( +
+ +
+ ) : role !== undefined ? ( + + +
+ + {roles.map((r: any) => ( + + {r.name} + + ))} + +
+
+ {isInvitedUser ? ( + + + +
+ + Role can only be changed after the user has accepted the invite + +
+
+
+ ) : !memberIsUser && !canRemoveRole ? ( + + + +
+ + You need additional permissions to manage this team member + +
+
+
+ ) : ( + <> + )} +
+ ) : ( +
+

Invalid role

+ + + + + + + +
+ + This user has an invalid role, please reach out to us via support + +
+
+
+
+
+ )} +
+ {!memberIsUser && } + + ) +} + +export default MemberRow diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx b/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx index 32f6dce0d4e..6fa2df79664 100644 --- a/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx +++ b/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx @@ -1,6 +1,4 @@ -import * as Tooltip from '@radix-ui/react-tooltip' -import Image from 'next/legacy/image' -import { Fragment, useState } from 'react' +import { useState } from 'react' import toast from 'react-hot-toast' import { useParams } from 'common' @@ -8,35 +6,12 @@ import Table from 'components/to-be-cleaned/Table' import AlertError from 'components/ui/AlertError' import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader' import { useOrganizationMemberUpdateMutation } from 'data/organizations/organization-member-update-mutation' -import { - OrganizationMember, - useOrganizationMembersQuery, -} from 'data/organizations/organization-members-query' +import { useOrganizationMembersQuery } from 'data/organizations/organization-members-query' import { useOrganizationRolesQuery } from 'data/organizations/organization-roles-query' -import { usePermissionsQuery } from 'data/permissions/permissions-query' -import { useSelectedOrganization } from 'hooks' -import { useProfile } from 'lib/profile' -import { - Badge, - Button, - IconAlertCircle, - IconCheck, - IconLoader, - IconUser, - IconX, - Listbox, - Loading, - Modal, -} from 'ui' -import { getUserDisplayName, isInviteExpired } from '../Organization.utils' -import MemberActions from './MemberActions' +import { Button, IconAlertCircle, Loading, Modal } from 'ui' +import { getUserDisplayName } from '../Organization.utils' +import MemberRow, { SelectedMember } from './MemberRow' import RolesHelperModal from './RolesHelperModal/RolesHelperModal' -import { useGetRolesManagementPermissions } from './TeamSettings.utils' - -interface SelectedMember extends OrganizationMember { - oldRoleId: number - newRoleId: number -} export interface MembersViewProps { searchString: string @@ -44,10 +19,7 @@ export interface MembersViewProps { const MembersView = ({ searchString }: MembersViewProps) => { const { slug } = useParams() - const selectedOrganization = useSelectedOrganization() - const { profile } = useProfile() - const { data: permissions } = usePermissionsQuery() const { data: members, error: membersError, @@ -75,11 +47,6 @@ const MembersView = ({ searchString }: MembersViewProps) => { const allMembers = members ?? [] const roles = rolesData?.roles ?? [] - const { rolesAddable, rolesRemovable } = useGetRolesManagementPermissions( - selectedOrganization?.id, - roles, - permissions ?? [] - ) // [Joshen] Proactively adding this, can be removed once infra API changes are in const showMfaEnabledColumn = allMembers.some( @@ -91,21 +58,23 @@ const MembersView = ({ searchString }: MembersViewProps) => { const filteredMembers = ( !searchString ? allMembers - : allMembers.filter((x: any) => { - if (x.invited_at) { - return x.primary_email.includes(searchString) + : allMembers.filter((member) => { + if (member.invited_at) { + return member.primary_email?.includes(searchString) } - if (x.id || x.gotrue_id) { - return x.username.includes(searchString) || x.primary_email.includes(searchString) + if (member.gotrue_id) { + return ( + member.username.includes(searchString) || member.primary_email?.includes(searchString) + ) } }) ) .slice() - .sort((a: any, b: any) => a.username.localeCompare(b.username)) + .sort((a, b) => a.username.localeCompare(b.username)) const getRoleNameById = (id: number | undefined) => { if (!roles) return id - return roles.find((x: any) => x.id === id)?.name + return roles.find((member) => member.id === id)?.name } const handleRoleChange = async () => { @@ -150,188 +119,17 @@ const MembersView = ({ searchString }: MembersViewProps) => { , ]} body={[ - ...filteredMembers.map((x, i: number) => { - const [memberRoleId] = x.role_ids ?? [] - const role = (roles || []).find((role) => role.id === memberRoleId) - const memberIsUser = x.primary_email == profile?.primary_email - const memberIsPendingInvite = !!x.invited_id - const canRemoveRole = rolesRemovable.includes(memberRoleId) - const disableRoleEdit = !canRemoveRole || memberIsUser || memberIsPendingInvite - const isEmailUser = x.username === x.primary_email - - const validateSelectedRoleToChange = (roleId: any) => { - if (!role || role.id === roleId) return - - const selectedRole = (roles || []).find((role) => role.id === roleId) - const canAddRole = rolesAddable.includes(selectedRole?.id ?? -1) - - if (!canAddRole) { - return toast.error( - `You do not have permission to update this team member to ${ - selectedRole!.name - }` - ) - } - - setUserRoleChangeModalVisible(true) - setSelectedMember({ ...x, oldRoleId: role.id, newRoleId: roleId }) - } - - return ( - - - -
-
- {x.invited_id ? ( - - - - ) : isEmailUser ? ( -
- -
- ) : ( - {x.username} - )} -
-
-

{getUserDisplayName(x)}

- {x.invited_id === undefined && ( -

{x.primary_email}

- )} -
-
-
- - - {x.invited_id && x.invited_at && ( - - {isInviteExpired(x.invited_at) ? 'Expired' : 'Invited'} - - )} - - - {showMfaEnabledColumn && ( - -
- {x.mfa_enabled ? ( - - ) : ( - - )} -
-
- )} - - - {isLoadingRoles ? ( -
- -
- ) : role !== undefined ? ( - - -
- - {roles.map((r: any) => ( - - {r.name} - - ))} - -
-
- {memberIsPendingInvite ? ( - - - -
- - Role can only be changed after the user has accepted the - invite - -
-
-
- ) : !memberIsUser && !canRemoveRole ? ( - - - -
- - You need additional permissions to manage this team member - -
-
-
- ) : ( - <> - )} -
- ) : ( -
-

Invalid role

- - - - - - - -
- - This user has an invalid role, please reach out to us via - support - -
-
-
-
-
- )} -
- - {!memberIsUser && } - -
-
- ) - }), + ...filteredMembers.map((member) => ( + + )), ...(searchString.length > 0 && filteredMembers.length === 0 ? [ diff --git a/apps/studio/components/interfaces/ProjectAPIDocs/ProjectAPIDocs.tsx b/apps/studio/components/interfaces/ProjectAPIDocs/ProjectAPIDocs.tsx index 6143c0de31e..fd6a143b758 100644 --- a/apps/studio/components/interfaces/ProjectAPIDocs/ProjectAPIDocs.tsx +++ b/apps/studio/components/interfaces/ProjectAPIDocs/ProjectAPIDocs.tsx @@ -50,7 +50,7 @@ const ProjectAPIDocs = () => { : 'SUPABASE_CLIENT_ANON_KEY' const endpoint = customDomainData?.customDomain?.status === 'active' - ? `https://${customDomainData.customDomain?.hostname}/auth/v1/callback` + ? `https://${customDomainData.customDomain?.hostname}` : `https://${data?.autoApiService.endpoint ?? ''}` return ( diff --git a/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceFilterBar.tsx b/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceFilterBar.tsx index 514b38331a2..fdcebfbcb18 100644 --- a/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceFilterBar.tsx +++ b/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceFilterBar.tsx @@ -28,7 +28,7 @@ export const QueryPerformanceFilterBar = ({ }) => { const router = useRouter() const { project } = useProjectContext() - const [showBottomSection, setShowBottomSection] = useLocalStorageQuery( + const [showBottomSection] = useLocalStorageQuery( LOCAL_STORAGE_KEYS.QUERY_PERF_SHOW_BOTTOM_SECTION, true ) diff --git a/apps/studio/components/interfaces/Realtime/Inspector/useRealtimeMessages.ts b/apps/studio/components/interfaces/Realtime/Inspector/useRealtimeMessages.ts index cb4c57e7e18..46ceb7e3ad1 100644 --- a/apps/studio/components/interfaces/Realtime/Inspector/useRealtimeMessages.ts +++ b/apps/studio/components/interfaces/Realtime/Inspector/useRealtimeMessages.ts @@ -161,7 +161,7 @@ export const useRealtimeMessages = ( } // Finally, subscribe to the Channel we just setup - newChannel.subscribe(async (status, error) => { + newChannel.subscribe(async (status) => { if (status === 'SUBSCRIBED') { // Let LiveView know we connected so we can update the button text // pushMessageTo('#conn_info', 'broadcast_subscribed', { host: host }) @@ -174,8 +174,6 @@ export const useRealtimeMessages = ( payload: { name: name, t: performance.now() }, }) } - } else if (status === 'CLOSED') { - // console.log(`Realtime Channel status: ${status}`) } else if (status === 'CHANNEL_ERROR') { toast.error( 'Failed to connect to the channel: This may be due to restrictive RLS policies. Check your role and try again.' @@ -184,9 +182,6 @@ export const useRealtimeMessages = ( newChannel.unsubscribe() setChannel(undefined) setRealtimeConfig({ ...config, enabled: false }) - } else { - // console.error(`Realtime Channel error status: ${status}`) - // console.error(`Realtime Channel error: ${error}`) } }) diff --git a/apps/studio/components/interfaces/Reports/Reports.queries.ts b/apps/studio/components/interfaces/Reports/Reports.queries.ts index 64486f1a41f..9d3eea6d6de 100644 --- a/apps/studio/components/interfaces/Reports/Reports.queries.ts +++ b/apps/studio/components/interfaces/Reports/Reports.queries.ts @@ -37,7 +37,7 @@ export const useQueryPerformanceQuery = ({ searchQuery.length > 0 ? `statements.query ~ '${searchQuery}'` : '', ] .filter((x) => x.length > 0) - .join(' OR ') + .join(' AND ') const orderBySql = orderBy && `ORDER BY ${orderBy.column} ${orderBy.order}` const sql = baseSQL.sql([], whereSql.length > 0 ? `WHERE ${whereSql}` : undefined, orderBySql) diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/ChartConfig.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/ChartConfig.tsx index b996596a834..b970ac05519 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/ChartConfig.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/ChartConfig.tsx @@ -164,10 +164,7 @@ export function ChartConfig({ results = { rows: [] }, config, onConfigChange }: id="cumulative" name="cumulative" checked={config.cumulative} - onClick={(e) => { - console.log(e) - onConfigChange({ ...config, cumulative: !config.cumulative }) - }} + onClick={() => onConfigChange({ ...config, cumulative: !config.cumulative })} /> Cumulative diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx index 87f2e91fbbb..3e3d751c76d 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx @@ -55,23 +55,35 @@ const Results = ({ id, rows }: { id: string; rows: readonly any[] }) => { return
{name}
} - const columns: CalculatedColumn[] = Object.keys(rows?.[0] ?? []).map((key, idx) => ({ - idx, - key, - name: key, - resizable: true, - parent: undefined, - level: 0, - width: 120, - minWidth: 120, - maxWidth: undefined, - draggable: false, - frozen: false, - sortable: false, - isLastFrozenColumn: false, - renderCell: ({ row }: any) => formatter(key, row), - renderHeaderCell: () => columnRender(key), - })) + const EST_CHAR_WIDTH = 8.25 + const MIN_COLUMN_WIDTH = 100 + const MAX_COLUMN_WIDTH = 500 + + const columns: CalculatedColumn[] = Object.keys(rows?.[0] ?? []).map((key, idx) => { + const maxColumnValueLength = Math.max(...rows.map((row) => String(row[key]).length)) + const columnWidth = Math.max( + Math.min(maxColumnValueLength * EST_CHAR_WIDTH, MAX_COLUMN_WIDTH), + MIN_COLUMN_WIDTH + ) + + return { + idx, + key, + name: key, + resizable: true, + parent: undefined, + level: 0, + width: columnWidth, + minWidth: MIN_COLUMN_WIDTH, + maxWidth: undefined, + draggable: false, + frozen: false, + sortable: false, + isLastFrozenColumn: false, + renderCell: ({ row }: any) => formatter(key, row), + renderHeaderCell: () => columnRender(key), + } + }) function onSelectedCellChange(position: any) { setCellPosition(position) diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityPanel.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityPanel.tsx index e976d4c9587..01c8f235ed5 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityPanel.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityPanel.tsx @@ -2,7 +2,6 @@ import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' import toast from 'react-hot-toast' -import { useContentQuery } from 'data/content/content-query' import { useContentUpsertMutation } from 'data/content/content-upsert-mutation' import { contentKeys } from 'data/content/keys' import { useSqlEditorStateSnapshot } from 'state/sql-editor' @@ -38,7 +37,6 @@ const UtilityPanel = ({ }: UtilityPanelProps) => { const snap = useSqlEditorStateSnapshot() const { ref } = useParams() - const { data } = useContentQuery(ref) const snippet = snap.snippets[id]?.snippet const queryKeys = contentKeys.list(ref) diff --git a/apps/studio/components/interfaces/Settings/Database/DiskSizeConfiguration.tsx b/apps/studio/components/interfaces/Settings/Database/DiskSizeConfiguration.tsx index 40a026c0417..8ed19d53aa5 100644 --- a/apps/studio/components/interfaces/Settings/Database/DiskSizeConfiguration.tsx +++ b/apps/studio/components/interfaces/Settings/Database/DiskSizeConfiguration.tsx @@ -1,30 +1,42 @@ import * as Tooltip from '@radix-ui/react-tooltip' -import { PermissionAction } from '@supabase/shared-types/out/constants' +import { PermissionAction, SupportCategories } from '@supabase/shared-types/out/constants' import dayjs from 'dayjs' +import { Info } from 'lucide-react' import Link from 'next/link' import { useState } from 'react' import toast from 'react-hot-toast' import { number, object } from 'yup' import { useParams } from 'common' +import { Markdown } from 'components/interfaces/Markdown' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { FormHeader } from 'components/ui/Forms' import Panel from 'components/ui/Panel' import { useProjectDiskResizeMutation } from 'data/config/project-disk-resize-mutation' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' import { useCheckPermissions, useSelectedOrganization } from 'hooks' -import { Alert, Button, Form, InputNumber, Modal } from 'ui' +import { + AlertDescription_Shadcn_, + AlertTitle_Shadcn_, + Alert_Shadcn_, + Button, + Form, + InputNumber, + Modal, +} from 'ui' +import { WarningIcon } from 'ui-patterns/Icons/StatusIcons' export interface DiskSizeConfigurationProps { disabled?: boolean } const DiskSizeConfiguration = ({ disabled = false }: DiskSizeConfigurationProps) => { - const { project } = useProjectContext() - const organization = useSelectedOrganization() const { ref: projectRef } = useParams() + const { project } = useProjectContext() const { lastDatabaseResizeAt } = project ?? {} + const organization = useSelectedOrganization() + const timeTillNextAvailableDatabaseResize = lastDatabaseResizeAt === null ? 0 : 6 * 60 - dayjs().diff(lastDatabaseResizeAt, 'minutes') const isAbleToResizeDatabase = timeTillNextAvailableDatabaseResize <= 0 @@ -68,9 +80,9 @@ const DiskSizeConfiguration = ({ disabled = false }: DiskSizeConfigurationProps) const diskSizeValidationSchema = object({ 'new-disk-size': number() .required('Please enter a GB amount you want to resize the disk up to.') - .moreThan(Number(currentDiskSize ?? 0), `Must be more than ${currentDiskSize} GB`) + .min(Number(currentDiskSize ?? 0), `Must be more than ${currentDiskSize} GB`) // to do, update with max_disk_volume_size_gb - .lessThan(Number(maxDiskSize), 'Must be no more than 200 GB'), + .max(Number(maxDiskSize), 'Must not be more than 200 GB'), }) return ( @@ -129,51 +141,33 @@ const DiskSizeConfiguration = ({ disabled = false }: DiskSizeConfigurationProps) - -

- We auto-scale your disk as you need more storage, but can only do this every 6 hours. - If you upload more than 1.5x the current size of your storage, your database will go - into read-only mode. If you know how big your database is going to be, you can - manually increase the size here. -

+ + + Importing a lot of data? + + - Read more about{' '} - - disk management - - . -

-
+Read more about [disk management](https://supabase.com/docs/guides/platform/database-size#disk-management). +`} + /> + + ) : ( - + + + {projectSubscriptionData?.plan?.id === 'free' ? 'Disk size configuration is not available for projects on the Free plan' - : 'Disk size configuration is only available when disabling the spend cap.' - } - actions={ - - } - > -
+ : 'Disk size configuration is only available when the spend cap has been disabled'} + + {projectSubscriptionData?.plan?.id === 'free' ? (

If you are intending to use more than 500MB of disk space, then you will need to @@ -185,8 +179,20 @@ const DiskSizeConfiguration = ({ disabled = false }: DiskSizeConfigurationProps) disable your spend cap.

)} -
-
+ + + )} {() => currentDiskSize >= maxDiskSize ? ( - <> - - You cannot manually expand the disk size any more than {maxDiskSize} GB. If you - need more than this, contact us to learn more about the Enterprise plan. - - + + + Maximum manual disk size increase reached + +

+ You cannot manually expand the disk size any more than {maxDiskSize}GB. If you + need more than this, contact us via support for help. +

+ +
+
) : ( <>
- - {isAbleToResizeDatabase - ? `Upon updating your disk size, the next disk size update will only be available from ${dayjs().format( - 'DD MMM YYYY, HH:mm (ZZ)' - )}` - : `Your database was last resized at ${dayjs(lastDatabaseResizeAt).format( - 'DD MMM YYYY, HH:mm (ZZ)' - )}. You can resize your database again in approximately ${formattedTimeTillNextAvailableResize}`} - + + + + This operation is only possible every 6 hours + + + {isAbleToResizeDatabase + ? `Upon updating your disk size, the next disk size update will only be available from ${dayjs().format( + 'DD MMM YYYY, HH:mm (ZZ)' + )}` + : `Your database was last resized at ${dayjs(lastDatabaseResizeAt).format( + 'DD MMM YYYY, HH:mm (ZZ)' + )}. You can resize your database again in approximately ${formattedTimeTillNextAvailableResize}`} + + { )} diff --git a/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx b/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx index 65ebad425ba..0c5630b9007 100644 --- a/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx +++ b/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx @@ -20,7 +20,7 @@ const ForgotPasswordForm = () => { const { mutate: resetPassword, isLoading } = useResetPasswordMutation({ onSuccess: async () => { toast.success( - `If you registered using your email and password, you will receive a password reset email.` + `If you registered using your email and password, you will receive a password reset email. The password reset link expires in 10 minutes.` ) await router.push('/sign-in') }, diff --git a/apps/studio/components/interfaces/SignIn/SignUpForm.tsx b/apps/studio/components/interfaces/SignIn/SignUpForm.tsx index 17bcfbb61e2..10856dd563a 100644 --- a/apps/studio/components/interfaces/SignIn/SignUpForm.tsx +++ b/apps/studio/components/interfaces/SignIn/SignUpForm.tsx @@ -60,7 +60,7 @@ const SignUpForm = () => { > You've successfully signed up. Please check your email to confirm your account before - signing in to the Supabase dashboard + signing in to the Supabase dashboard. The confirmation link expires in 10 minutes.
fk.columns.find(({ source }) => source === columnFields?.name)) + ) { + setFkRelations( + fkRelations.map((relation) => ({ + ...relation, + columns: relation.columns.map((col) => + col.source === columnFields?.name ? { ...col, source: changes.name! } : col + ), + })) + ) + } + const updatedColumnFields = { ...columnFields, ...changes } as ColumnField setColumnFields(updatedColumnFields) updateEditorDirty() @@ -225,7 +238,7 @@ const ColumnEditor = ({ asChild type="default" size="tiny" - icon={} + icon={} > Create enum types @@ -235,7 +248,7 @@ const ColumnEditor = ({ asChild type="default" size="tiny" - icon={} + icon={} > - + Column encryption has been removed from the GUI @@ -376,7 +389,7 @@ const ColumnEditor = ({ {' '} Transparent Column Encryption (TCE).

- + ) : ( + + + + + +
+ Involved in {relations.length} foreign key{relations.length > 1 ? 's' : ''} +
+ + + + {relations.map((relation, idx) => { + const key = String(relation?.id ?? `${column.id}-relation-${idx}`) + const status = getRelationStatus(relation) + if (status === 'REMOVE') return null + + return ( + onEditForeignKey(relation)} + onClick={() => onEditForeignKey(relation)} + > + {status === undefined ? ( +
+ {relation.name} +
+ ) : ( +
+ + {status} + +

+ {relation.name || ( + <> + To{' '} + {relation.columns + .filter((c) => c.source === column.name) + .map((c) => { + return ( + + {relation.schema}.{relation.table}.{c.target} + + ) + })} + {relation.columns.length > 1 && ( + <> + and {relation.columns.length - 1} other column + {relation.columns.length > 2 ? 's' : ''} + + )} + + )} +

+
+ )} +
+ ) + })} +
+ + + onEditForeignKey()} + onClick={() => onEditForeignKey()} + > + +

Add foreign key relation

+
+
+
+
+
+
+ )}
@@ -200,12 +342,12 @@ const Column = ({ >
{settingsCount > 0 && ( -
+
{settingsCount}
)}
- +
@@ -215,7 +357,7 @@ const Column = ({ {!hasImportContent && (
)} diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx index c0c183f9956..dedde050505 100644 --- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx +++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx @@ -1,5 +1,7 @@ import * as Tooltip from '@radix-ui/react-tooltip' import { isEmpty, noop, partition } from 'lodash' +import { HelpCircle, Key } from 'lucide-react' +import { useState } from 'react' import { DragDropContext, Draggable, @@ -7,18 +9,29 @@ import { Droppable, DroppableProvided, } from 'react-beautiful-dnd' -import { Alert, Button, IconEdit, IconExternalLink, IconHelpCircle, IconKey, IconTrash } from 'ui' import InformationBox from 'components/ui/InformationBox' import type { EnumeratedType } from 'data/enumerated-types/enumerated-types-query' +import { + AlertDescription_Shadcn_, + AlertTitle_Shadcn_, + Alert_Shadcn_, + Button, + IconEdit, + IconExternalLink, + IconTrash, +} from 'ui' +import { WarningIcon } from 'ui-patterns/Icons/StatusIcons' import { generateColumnField } from '../ColumnEditor/ColumnEditor.utils' +import { ForeignKeySelector } from '../ForeignKeySelector/ForeignKeySelector' import type { ForeignKey } from '../ForeignKeySelector/ForeignKeySelector.types' import { TEXT_TYPES } from '../SidePanelEditor.constants' import type { ColumnField, ExtendedPostgresRelationship } from '../SidePanelEditor.types' import Column from './Column' -import type { ImportContent } from './TableEditor.types' +import type { ImportContent, TableField } from './TableEditor.types' interface ColumnManagementProps { + table: TableField columns?: ColumnField[] relations: ForeignKey[] enumTypes: EnumeratedType[] @@ -27,9 +40,11 @@ interface ColumnManagementProps { onColumnsUpdated: (columns: ColumnField[]) => void onSelectImportData: () => void onClearImportContent: () => void + onUpdateFkRelations: (relations: ForeignKey[]) => void } const ColumnManagement = ({ + table, columns = [], relations, enumTypes = [], @@ -38,7 +53,12 @@ const ColumnManagement = ({ onColumnsUpdated = noop, onSelectImportData = noop, onClearImportContent = noop, + onUpdateFkRelations, }: ColumnManagementProps) => { + const [open, setOpen] = useState(false) + const [selectedColumn, setSelectedColumn] = useState() + const [selectedFk, setSelectedFk] = useState() + const hasImportContent = !isEmpty(importContent) const [primaryKeyColumns, otherColumns] = partition( columns, @@ -154,20 +174,22 @@ const ColumnManagement = ({ )} {primaryKeyColumns.length === 0 && ( - - Tables require at least one column as a primary key in order to uniquely identify each - row. Without a primary key, you will not be able to update or delete rows from the - table. - + + + Warning: No primary keys selected + + Tables should have at least one column as the primary key to identify each row. + Without a primary key, you will not be able to update or delete rows from the table. + + )} {primaryKeyColumns.length > 1 && ( } + icon={} title="Composite primary key selected" - description="The columns that you've selected will be grouped as a primary key, and will serve - as the unique identifier for the rows in your table" + description="The columns that you've selected will be grouped as a primary key, and will serve as the unique identifier for the rows in your table" /> )} @@ -181,7 +203,7 @@ const ColumnManagement = ({
- +
@@ -211,7 +233,7 @@ const ColumnManagement = ({
- +
@@ -262,6 +284,9 @@ const ColumnManagement = ({ > { + return relation.columns.some((x) => x.source === column.name) + })} enumTypes={enumTypes} hasForeignKeys={checkIfHaveForeignKeys(column)} isNewRecord={isNewRecord} @@ -269,6 +294,11 @@ const ColumnManagement = ({ dragHandleProps={draggableProvided.dragHandleProps} onUpdateColumn={(changes) => onUpdateColumn(column, changes)} onRemoveColumn={() => onRemoveColumn(column)} + onEditForeignKey={(fk) => { + setOpen(true) + setSelectedColumn(column) + if (fk) setSelectedFk(fk) + }} />
)} @@ -294,6 +324,9 @@ const ColumnManagement = ({
{ + return relation.columns.some((x) => x.source === column.name) + })} enumTypes={enumTypes} isNewRecord={isNewRecord} hasForeignKeys={checkIfHaveForeignKeys(column)} @@ -301,6 +334,11 @@ const ColumnManagement = ({ dragHandleProps={draggableProvided.dragHandleProps} onUpdateColumn={(changes) => onUpdateColumn(column, changes)} onRemoveColumn={() => onRemoveColumn(column)} + onEditForeignKey={(fk) => { + setOpen(true) + setSelectedColumn(column) + if (fk) setSelectedFk(fk) + }} />
)} @@ -321,6 +359,31 @@ const ColumnManagement = ({
)} + + { + setOpen(false) + setSelectedFk(undefined) + setSelectedColumn(undefined) + }} + onSaveRelation={(fk) => { + const existingRelationIds = relations.map((x) => x.id) + if (fk.id !== undefined && existingRelationIds.includes(fk.id)) { + onUpdateFkRelations( + relations.map((x) => { + if (x.id === fk.id) return fk + return x + }) + ) + } else { + onUpdateFkRelations(relations.concat([fk])) + } + }} + /> ) } diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ForeignKeysManagement/ForeignKeyRow.tsx b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ForeignKeysManagement/ForeignKeyRow.tsx index 33f41e76e87..82d0142d26a 100644 --- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ForeignKeysManagement/ForeignKeyRow.tsx +++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ForeignKeysManagement/ForeignKeyRow.tsx @@ -2,7 +2,8 @@ import clsx from 'clsx' import { useParams } from 'common' import Link from 'next/link' import SVG from 'react-inlinesvg' -import { Badge, Button, IconArrowRight } from 'ui' +import { Badge, Button, cn } from 'ui' +import { ArrowRight } from 'lucide-react' import { BASE_PATH } from 'lib/constants' import type { ForeignKey } from '../../ForeignKeySelector/ForeignKeySelector.types' @@ -89,8 +90,12 @@ export const ForeignKeyRow = ({
{foreignKey.columns.map((x, idx) => (
- {x.source} - + + {x.source || '[column_name]'} + + {foreignKey.schema}.{foreignKey.table}.{x.target} diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx index fb40e8e7a05..d45c5761e0c 100644 --- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx +++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx @@ -1,9 +1,8 @@ import type { PostgresTable } from '@supabase/postgres-meta' import { isEmpty, isUndefined, noop } from 'lodash' -import Link from 'next/link' import { useEffect, useState } from 'react' import toast from 'react-hot-toast' -import { Alert, Badge, Button, Checkbox, IconBookOpen, Input, Modal, SidePanel } from 'ui' +import { Alert, Badge, Button, Checkbox, Input, SidePanel } from 'ui' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' @@ -20,6 +19,7 @@ import { import { useEnumeratedTypesQuery } from 'data/enumerated-types/enumerated-types-query' import { useIsFeatureEnabled } from 'hooks' import { EXCLUDED_SCHEMAS_WITHOUT_EXTENSIONS } from 'lib/constants/schemas' +import { ExternalLink } from 'lucide-react' import { useTableEditorStateSnapshot } from 'state/table-editor' import { SpreadsheetImport } from '../' import ActionBar from '../ActionBar' @@ -306,23 +306,20 @@ const TableEditor = ({ title="Policies are required to query data" >

- You need to write an access policy before you can query data from this table. Without - a policy, querying this table will result in an empty array of results. -

- {isNewRecord && ( -

You can create policies after you create this table.

- )} -

- + You need to create an access policy before you can query data from this table. Without + a policy, querying this table will return an{' '} + empty array of results.{' '} + {isNewRecord ? 'You can create policies after saving this table.' : ''}

+ ) : ( -

- -

+
)} {realtimeEnabled && ( @@ -363,6 +358,7 @@ const TableEditor = ({ {!isDuplicating && ( )} {isDuplicating && ( diff --git a/apps/studio/components/layouts/AppLayout/EnableBranchingButton/EnableBranchingModal.tsx b/apps/studio/components/layouts/AppLayout/EnableBranchingButton/EnableBranchingModal.tsx index 13ae40e6c0d..a1920b1de5f 100644 --- a/apps/studio/components/layouts/AppLayout/EnableBranchingButton/EnableBranchingModal.tsx +++ b/apps/studio/components/layouts/AppLayout/EnableBranchingButton/EnableBranchingModal.tsx @@ -23,7 +23,6 @@ import { useBranchCreateMutation } from 'data/branches/branch-create-mutation' import { useProjectUpgradeEligibilityQuery } from 'data/config/project-upgrade-eligibility-query' import { useCheckGithubBranchValidity } from 'data/integrations/github-branch-check-query' import { useGitHubConnectionsQuery } from 'data/integrations/github-connections-query' -import { useGitHubRepositoriesQuery } from 'data/integrations/github-repositories-query' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' import { useSelectedOrganization } from 'hooks' @@ -43,14 +42,6 @@ const EnableBranchingModal = () => { // and makes the validation run onChange instead. This is a workaround const [isValid, setIsValid] = useState(false) - const { - data: repositories, - error: repositoriesError, - isLoading: isLoadingRepositories, - isSuccess: isSuccessRepositories, - isError: isErrorRepositories, - } = useGitHubRepositoriesQuery() - const { data: connections, error: connectionsError, @@ -123,9 +114,9 @@ const EnableBranchingModal = () => { defaultValues: { branchName: '' }, }) - const isLoading = isLoadingRepositories - const isError = isErrorRepositories || isErrorUpgradeEligibility - const isSuccess = isSuccessRepositories && isSuccessUpgradeEligibility + const isLoading = isLoadingConnections || isLoadingUpgradeEligibility + const isError = isErrorConnections || isErrorUpgradeEligibility + const isSuccess = isSuccessConnections && isSuccessUpgradeEligibility const canSubmit = form.getValues('branchName').length > 0 && !isChecking && isValid const onSubmit = (data: z.infer) => { @@ -187,11 +178,8 @@ const EnableBranchingModal = () => { <> - {isErrorRepositories ? ( - + {isErrorConnections ? ( + ) : isErrorUpgradeEligibility ? ( { Supabase { const [selectedQueries, setSelectedQueries] = useState([]) const snap = useSqlEditorStateSnapshot() - const { isLoading, isSuccess } = useSqlSnippetsQuery(ref, { + const { isLoading, isSuccess, isError, error } = useSqlSnippetsQuery(ref, { refetchOnWindowFocus: false, staleTime: 300, // 5 minutes onSuccess(data) { @@ -205,37 +197,43 @@ const SideBarContent = () => { return ( <>
- {isLoading ? ( - - ) : isSuccess ? ( -
-
- +
+ -
- - Templates - - - Quickstarts - -
+
+ + Templates + + + Quickstarts + +
+ {isLoading && } + + {isError && ( +
+ +
+ )} + + {isSuccess && ( + <> {snippets.length > 0 && ( { )} -
-
- ) : null} + + )} +
{ @@ -56,8 +50,8 @@ const StorageMenu = () => { block type="default" icon={ -
- +
+
} disabled={!canCreateBuckets} @@ -152,6 +146,14 @@ const StorageMenu = () => {

Policies

+ + +
+

Settings

+ +
+
+
diff --git a/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.tsx b/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.tsx index 9c6f0f2be6b..95e4943af50 100644 --- a/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.tsx +++ b/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.tsx @@ -7,7 +7,7 @@ import toast from 'react-hot-toast' import { useProjectSettingsQuery } from 'data/config/project-settings-query' import { useCustomDomainsQuery } from 'data/custom-domains/custom-domains-query' import type { Bucket } from 'data/storage/buckets-query' -import { DEFAULT_PROJECT_API_SERVICE_ID } from 'lib/constants' +import { DEFAULT_PROJECT_API_SERVICE_ID, IS_PLATFORM } from 'lib/constants' import { copyToClipboard } from 'lib/helpers' import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' import { STORAGE_ROW_TYPES, STORAGE_VIEWS } from '../Storage.constants' @@ -18,6 +18,7 @@ import FileExplorerHeader from './FileExplorerHeader' import FileExplorerHeaderSelection from './FileExplorerHeaderSelection' import MoveItemsModal from './MoveItemsModal' import PreviewPane from './PreviewPane' +import { useProjectStorageConfigQuery } from 'data/config/project-storage-config-query' interface StorageExplorerProps { bucket: Bucket @@ -58,6 +59,11 @@ const StorageExplorer = ({ bucket }: StorageExplorerProps) => { const { ref } = useParams() const { data: customDomainData } = useCustomDomainsQuery({ projectRef: ref }) const { data: projectSettings } = useProjectSettingsQuery({ projectRef: ref }) + + // [Joshen] This is to ensure that StorageExplorerStore can get the storage file size limit + // Will be better once we deprecate the mobx store entirely, which we will get there + useProjectStorageConfigQuery({ projectRef: ref }, { enabled: IS_PLATFORM }) + const apiService = (projectSettings?.services ?? []).find( (x) => x.app.id == DEFAULT_PROJECT_API_SERVICE_ID ) diff --git a/apps/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx b/apps/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx index 660819eb671..4bbde7e7e4b 100644 --- a/apps/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx +++ b/apps/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx @@ -30,7 +30,7 @@ const StorageSettings = () => { isError, } = useProjectStorageConfigQuery({ projectRef }, { enabled: IS_PLATFORM }) const { fileSizeLimit, isFreeTier } = config || {} - const { value, unit } = convertFromBytes(fileSizeLimit) + const { value, unit } = convertFromBytes(fileSizeLimit ?? 0) const [selectedUnit, setSelectedUnit] = useState(unit) let initialValues = { fileSizeLimit: value, unformattedFileSizeLimit: fileSizeLimit } diff --git a/apps/studio/data/api.d.ts b/apps/studio/data/api.d.ts index 36751c96d84..ef41f7bc31e 100644 --- a/apps/studio/data/api.d.ts +++ b/apps/studio/data/api.d.ts @@ -1,12949 +1,4 @@ /** - * This file was auto-generated by openapi-typescript. - * Do not make direct changes to the file. + * Avoid importing this file and import the types directly from api-types */ - -export interface paths { - '/platform/notifications': { - /** Get notifications */ - get: operations['NotificationsController_getNotificationsV2'] - /** Delete notifications */ - delete: operations['NotificationsController_deleteNotifications'] - /** Update notifications */ - patch: operations['NotificationsController_updateNotificationsV2'] - } - '/platform/notifications/summary': { - /** Get an aggregated data of interest across all notifications for the user */ - get: operations['NotificationsController_getNotificationsSummary'] - } - '/platform/notifications/archive-all': { - /** Archives all notifications */ - patch: operations['NotificationsController_archiveAllNotifications'] - } - '/platform/reset-password': { - /** Reset password for email */ - post: operations['ResetPasswordController_resetPassword'] - } - '/platform/feedback/send': { - /** Send feedback */ - post: operations['SendFeedbackController_sendFeedback'] - } - '/platform/feedback/downgrade': { - /** Send exit survey to HubSpot */ - post: operations['SendExitSurveyController_sendExitSurvey'] - } - '/platform/feedback/upgrade': { - /** Send upgrade survey to survey_responses table */ - post: operations['SendUpgradeSurveyController_sendUpgradeSurvey'] - } - '/platform/feedback/docs': { - /** Send feedback on docs */ - post: operations['SendDocsFeedbackController_sendDocsFeedback'] - } - '/platform/signup': { - /** Sign up with email and password */ - post: operations['SignUpController_signUp'] - } - '/platform/status': { - /** Get infrastructure status */ - get: operations['StatusController_getStatus'] - } - '/platform/projects-resource-warnings': { - /** - * Gets resource warnings for all projects accessible by the user - * @description Only returns the minimal project info - */ - get: operations['ProjectsResourceWarningsController_getProjectsResourceWarnings'] - } - '/platform/tos/fly': { - /** Redirects to Fly sso flow */ - get: operations['TermsOfServiceController_flyTosAccepted'] - } - '/platform/auth/{ref}/config': { - /** Gets GoTrue config */ - get: operations['GoTrueConfigController_getGoTrueConfig'] - /** Updates GoTrue config */ - patch: operations['GoTrueConfigController_updateGoTrueConfig'] - } - '/platform/auth/{ref}/invite': { - /** Sends an invite to the given email */ - post: operations['InviteController_sendInvite'] - } - '/platform/auth/{ref}/magiclink': { - /** Sends a magic link to the given email */ - post: operations['MagicLinkController_sendMagicLink'] - } - '/platform/auth/{ref}/otp': { - /** Sends an OTP to the given phone number */ - post: operations['OtpController_sendOtp'] - } - '/platform/auth/{ref}/recover': { - /** Sends a recovery email to the given email */ - post: operations['RecoverController_sendRecover'] - } - '/platform/auth/{ref}/templates/{template}': { - /** Gets GoTrue template */ - get: operations['TemplateController_getTemplate'] - } - '/platform/auth/{ref}/users': { - /** Gets users */ - get: operations['UsersController_getUsers'] - /** Delete user with given ID */ - delete: operations['UsersController_deleteUser'] - } - '/platform/auth/{ref}/users/{id}/factors': { - /** Delete all factors associated to a user */ - delete: operations['FactorsController_deleteFactors'] - } - '/platform/database/{ref}/backups': { - /** Gets project backups */ - get: operations['BackupsController_getBackups'] - } - '/platform/database/{ref}/backups/enable-physical-backups': { - /** Enable usage of physical backups */ - post: operations['BackupsController_enablePhysicalBackup'] - } - '/platform/database/{ref}/backups/download': { - /** Download project backup */ - post: operations['BackupsController_downloadBackup'] - } - '/platform/database/{ref}/backups/restore': { - /** Restore project backup */ - post: operations['BackupsController_restoreBackup'] - } - '/platform/database/{ref}/backups/restore-physical': { - /** Restore project with a physical backup */ - post: operations['BackupsController_restorePhysicalBackup'] - } - '/platform/database/{ref}/backups/pitr': { - /** Restore project to a previous point in time */ - post: operations['BackupsController_restorePointInTimeBackup'] - } - '/platform/database/{ref}/hook-logs': { - /** Gets hook logs with the given ID */ - get: operations['HooksController_getHookLogs'] - } - '/platform/database/{ref}/hook-enable': { - /** Enables Database Webhooks on the project */ - post: operations['HooksController_enableHooks'] - } - '/platform/database/{ref}/owner-reassign': { - /** Gets the status of owner reassignment */ - get: operations['OwnerController_getOwnerReassignStatus'] - /** Reassigns object owner from supabase_admin to temp */ - post: operations['OwnerController_applyOwnerReassign'] - /** Rollback object owner from temp to supabase_admin */ - delete: operations['OwnerController_rollbackOwnerReassign'] - /** Reassigns object owner from temp to postgres */ - patch: operations['OwnerController_finaliseOwnerReassign'] - } - '/platform/organizations': { - /** Gets user's organizations */ - get: operations['OrganizationsController_getOrganizations'] - /** Creates an organization */ - post: operations['OrganizationsController_createOrganizationWithTier'] - } - '/platform/organizations/fly/{fly_organization_id}': { - /** Gets organization linked to fly organization id */ - get: operations['OrganizationsController_getOrganizationByFlyOrganizationId'] - } - '/platform/organizations/{slug}': { - /** Deletes organization */ - delete: operations['OrganizationSlugController_deleteOrganization'] - /** Updates organization */ - patch: operations['OrganizationSlugController_updateOrganization'] - } - '/platform/organizations/{slug}/customer': { - /** Gets the Stripe customer */ - get: operations['CustomerController_getCustomer'] - /** Updates the Stripe customer */ - patch: operations['CustomerController_updateCustomer'] - } - '/platform/organizations/{slug}/roles': { - /** Gets the given organization's roles */ - get: operations['RolesController_addMember'] - } - '/platform/organizations/{slug}/tax-ids': { - /** Gets the given organization's tax IDs */ - get: operations['TaxIdsController_getTaxIds'] - /** Creates a tax ID for the given organization */ - post: operations['TaxIdsController_createTaxId'] - /** Delete the tax ID with the given ID */ - delete: operations['TaxIdsController_deleteTaxId'] - } - '/platform/organizations/{slug}/transfer': { - /** Transfers the organization to the given member */ - post: operations['TransferController_transferOrganization'] - } - '/platform/organizations/{slug}/daily-stats': { - /** Gets daily organization stats */ - get: operations['OrgDailyStatsController_getDailyStats'] - } - '/platform/organizations/{slug}/daily-stats/compute': { - /** Gets daily organization stats for compute */ - get: operations['OrgDailyStatsController_getDailyStatsCompute'] - } - '/platform/organizations/{slug}/usage': { - /** Gets usage stats */ - get: operations['OrgUsageController_getOrgUsage'] - } - '/platform/organizations/{slug}/documents/standard-security-questionnaire': { - /** Get standard security questionnaire URL */ - get: operations['OrgDocumentsController_getStandardSecurityQuestionnaireUrl'] - } - '/platform/organizations/{slug}/documents/soc2-type-2-report': { - /** Get SOC2 Type 2 report URL */ - get: operations['OrgDocumentsController_getSoc2Type2ReportUrl'] - } - '/platform/organizations/{slug}/audit': { - /** Gets an organization's audit logs */ - get: operations['OrgAuditLogsController_getAuditLogs'] - } - '/platform/organizations/{slug}/members/invite': { - /** Gets invited users */ - get: operations['InviteController_getInvitedUsers'] - /** Invites user */ - post: operations['InviteController_inviteUser'] - /** Delete invited user */ - delete: operations['InviteController_deleteInvitedUser'] - } - '/platform/organizations/{slug}/members/join': { - /** Gets invite */ - get: operations['JoinController_getInvite'] - /** Joins organization */ - post: operations['JoinController_joinOrganization'] - } - '/platform/organizations/{slug}/members/leave': { - /** Leaves the given organization */ - post: operations['MembersDeprecatedController_leaveOrganization'] - } - '/platform/organizations/{slug}/members/remove': { - /** Leaves the given organization */ - delete: operations['MembersDeprecatedController_removeMember'] - } - '/platform/organizations/{slug}/members': { - /** Gets organization's members */ - get: operations['MembersController_getMembers'] - } - '/platform/organizations/{slug}/members/{gotrue_id}': { - /** Removes organization member */ - delete: operations['MembersController_deleteMember'] - /** Updates organization member */ - patch: operations['MembersController_updateMember'] - } - '/platform/organizations/{slug}/members/reached-free-project-limit': { - /** Gets organization members who have reached their free project limit */ - get: operations['ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit'] - } - '/platform/organizations/{slug}/payments': { - /** Gets Stripe payment methods for the given organization */ - get: operations['PaymentsController_getPaymentMethods'] - /** Detach Stripe payment method with the given card ID */ - delete: operations['PaymentsController_detachPaymentMethod'] - } - '/platform/organizations/{slug}/payments/setup-intent': { - /** Sets up a payment method */ - post: operations['SetupIntentOrgController_setUpPaymentMethod'] - } - '/platform/organizations/{slug}/billing/subscription': { - /** Gets the current subscription */ - get: operations['SubscriptionController_getSubscription'] - /** Updates subscription */ - put: operations['SubscriptionController_updateSubscription'] - } - '/platform/organizations/{slug}/billing/subscription/preview': { - /** Preview subscription changes */ - post: operations['SubscriptionController_previewSubscriptionChange'] - } - '/platform/organizations/{slug}/billing/subscription/schedule': { - /** Deletes any upcoming subscription schedule */ - delete: operations['SubscriptionController_deleteSubscriptionSchedule'] - } - '/platform/organizations/{slug}/billing/plans': { - /** Gets subscription plans */ - get: operations['OrgPlansController_getAvailablePlans'] - } - '/platform/organizations/{slug}/billing/invoices/upcoming': { - /** Gets the upcoming invoice */ - get: operations['OrgInvoicesController_getUpcomingInvoice'] - } - '/platform/pg-meta/{ref}/column-privileges': { - /** Retrieve column privileges */ - get: operations['ColumnPrivilegesController_getColumnPrivileges'] - /** Grant column privileges */ - post: operations['ColumnPrivilegesController_grantColumnPrivileges'] - /** Revoke column privileges */ - delete: operations['ColumnPrivilegesController_revokeColumnPrivileges'] - } - '/platform/pg-meta/{ref}/columns': { - /** Gets project pg.columns */ - get: operations['ColumnsController_getColumns'] - /** Creates project pg.column */ - post: operations['ColumnsController_createColumn'] - /** Deletes project pg.column with the given ID */ - delete: operations['ColumnsController_deleteColumn'] - /** Updates project pg.column with the given ID */ - patch: operations['ColumnsController_updateColumn'] - } - '/platform/pg-meta/{ref}/extensions': { - /** Gets project pg.extensions */ - get: operations['ExtensionsController_getExtensions'] - /** Creates project pg.extension */ - post: operations['ExtensionsController_createExtension'] - /** Deletes project pg.extension with the given ID */ - delete: operations['ExtensionsController_deleteExtension'] - } - '/platform/pg-meta/{ref}/foreign-tables': { - /** Retrieve database foreign tables */ - get: operations['ForeignTablesController_getForeignTables'] - } - '/platform/pg-meta/{ref}/functions': { - /** Gets project pg.functions */ - get: operations['FunctionsController_getFunctions'] - /** Creates project pg.function */ - post: operations['FunctionsController_createFunction'] - /** Deletes project pg.function with the given ID */ - delete: operations['FunctionsController_deleteFunction'] - /** Updates project pg.function with the given ID */ - patch: operations['FunctionsController_updateFunction'] - } - '/platform/pg-meta/{ref}/materialized-views': { - /** Retrieve database materialized views */ - get: operations['MaterializedViewsController_getMaterializedViews'] - } - '/platform/pg-meta/{ref}/policies': { - /** Gets project pg.policies */ - get: operations['PoliciesController_getPolicies'] - /** Creates project pg.policy */ - post: operations['PoliciesController_createPolicy'] - /** Deletes project pg.policy with the given ID */ - delete: operations['PoliciesController_deletePolicy'] - /** Updates project pg.policy with the given ID */ - patch: operations['PoliciesController_updatePolicy'] - } - '/platform/pg-meta/{ref}/publications': { - /** Gets project pg.publications */ - get: operations['PublicationsController_getPublications'] - /** Gets project pg.publications */ - post: operations['PublicationsController_createPublication'] - /** Deletes project pg.publication with the given ID */ - delete: operations['PublicationsController_deletePublication'] - /** Updates project pg.publication with the given ID */ - patch: operations['PublicationsController_updatePublication'] - } - '/platform/pg-meta/{ref}/query': { - /** Run sql query */ - post: operations['QueryController_runQuery'] - } - '/platform/pg-meta/{ref}/query/format': { - /** Format sql query */ - post: operations['QueryController_formatQuery'] - } - '/platform/pg-meta/{ref}/query/validate': { - /** Validate sql query */ - post: operations['QueryController_validateQuery'] - } - '/platform/pg-meta/{ref}/roles': { - /** Gets project pg.roles */ - get: operations['RolesController_getRoles'] - /** Creates project pg.role */ - post: operations['RolesController_createRole'] - /** Deletes project pg.role with the given ID */ - delete: operations['RolesController_deleteRole'] - /** Updates project pg.role with the given ID */ - patch: operations['RolesController_updateRole'] - } - '/platform/pg-meta/{ref}/schemas': { - /** Gets project pg.schemas */ - get: operations['SchemasController_getSchemas'] - /** Creates project pg.schema */ - post: operations['SchemasController_createSchema'] - /** Deletes project pg.schema with the given ID */ - delete: operations['SchemasController_deleteSchema'] - /** Updates project pg.schema with the given ID */ - patch: operations['SchemasController_updateSchema'] - } - '/platform/pg-meta/{ref}/search/tables': { - /** Searches project pg.tables. Return maximum 50 results. */ - post: operations['SearchController_searchTables'] - } - '/platform/pg-meta/{ref}/search/columns': { - /** Searches project pg.columns. Return maximum 50 results. */ - post: operations['SearchController_searchColumns'] - } - '/platform/pg-meta/{ref}/table-privileges': { - /** Retrieve table privileges */ - get: operations['TablePrivilegesController_getTablePrivileges'] - /** Grant table privileges */ - post: operations['TablePrivilegesController_grantTablePrivileges'] - /** Revoke table privileges */ - delete: operations['TablePrivilegesController_revokeTablePrivileges'] - } - '/platform/pg-meta/{ref}/tables': { - /** Gets project pg.tables or pg.table with the given ID */ - get: operations['TablesController_getTables'] - /** Creates project pg.table */ - post: operations['TablesController_createTable'] - /** Deletes project pg.table with the given ID */ - delete: operations['TablesController_deleteTable'] - /** Updates project pg.table with the given ID */ - patch: operations['TablesController_updateTable'] - } - '/platform/pg-meta/{ref}/triggers': { - /** Gets project pg.triggers */ - get: operations['TriggersController_getTriggers'] - /** Creates project pg.trigger */ - post: operations['TriggersController_createTrigger'] - /** Deletes project pg.trigger with the given ID */ - delete: operations['TriggersController_deleteTrigger'] - /** Updates project pg.trigger with the given ID */ - patch: operations['TriggersController_updateTrigger'] - } - '/platform/pg-meta/{ref}/types': { - /** Gets project pg.types */ - get: operations['TypesController_getTypes'] - } - '/platform/pg-meta/{ref}/views': { - /** Retrieve database views */ - get: operations['ViewsController_getViews'] - } - '/platform/profile/access-tokens': { - /** Gets the user's access tokens */ - get: operations['AccessTokensController_getAccessTokens'] - /** Creates a new access token */ - post: operations['AccessTokensController_createAccessToken'] - } - '/platform/profile/access-tokens/{id}': { - /** Gets the access token with the given ID */ - get: operations['AccessTokensController_getAccessToken'] - /** Deletes the access token with the given ID */ - delete: operations['AccessTokensController_deleteAccessToken'] - } - '/platform/profile/audit': { - /** Gets a user's audit logs */ - get: operations['UserAuditLogsController_getAuditLogs'] - } - '/platform/profile/search': { - /** Search profiles by username, email with the given keywords */ - post: operations['SearchProfileController_searchProfile'] - } - '/platform/profile/subscriptions': { - /** Gets the user's subscription statistics */ - get: operations['SubscriptionsController_getSubscriptionsStatistics'] - } - '/platform/profile/password-check': { - /** Check password strength */ - post: operations['PasswordCheckController_checkPassword'] - } - '/platform/profile/permissions': { - /** Gets all the user's permissions */ - get: operations['PermissionsController_getPermissions'] - } - '/platform/profile': { - /** Gets the user's profile */ - get: operations['ProfileController_getProfile'] - /** Creates user's profile */ - post: operations['ProfileController_createProfile'] - /** Deletes user's profile */ - delete: operations['ProfileController_deleteProfile'] - /** Updates user's profile */ - patch: operations['ProfileController_updateProfile'] - } - '/platform/projects': { - /** - * Gets all projects that belong to the authenticated user - * @description Only returns the minimal project info - */ - get: operations['ProjectsController_getProjects'] - /** Creates a project */ - post: operations['ProjectsController_createProject'] - } - '/platform/projects/fly/{fly_extension_id}': { - /** Gets project linked to fly extension id */ - get: operations['ProjectsController_getProjectByFlyExtensionId'] - } - '/platform/projects/{ref}/content': { - /** Gets project's content */ - get: operations['ContentController_getContent'] - /** Updates project's content */ - put: operations['ContentController_updateWholeContent'] - /** Creates project's content */ - post: operations['ContentController_createContent'] - /** Deletes project's contents */ - delete: operations['ContentController_deleteContents'] - /** Updates project's content */ - patch: operations['ContentController_updateContent'] - } - '/platform/projects/{ref}/daily-stats': { - /** Gets daily project stats */ - get: operations['DailyStatsController_getDailyStats'] - } - '/platform/projects/{ref}/databases': { - /** Gets non-removed databases of a specified project */ - get: operations['DatabasesController_getDatabases'] - } - '/platform/projects/{ref}/databases-statuses': { - /** Gets statuses of databases within a project */ - get: operations['DatabasesStatusesController_getStatus'] - } - '/platform/projects/{ref}/db-password': { - /** Updates the database password */ - patch: operations['DbPasswordController_updatePassword'] - } - '/platform/projects/{ref}/live': { - /** Gets project health check */ - get: operations['HealthCheckController_projectHealthCheck'] - } - '/platform/projects/{ref}/load-balancers': { - /** Gets non-removed databases of a specified project */ - get: operations['LoadBalancersController_getLoadBalancers'] - } - '/platform/projects/{ref}/api/rest': { - /** Gets project OpenApi */ - get: operations['ApiController_projectOpenApi'] - } - '/platform/projects/{ref}/api/graphql': { - /** Queries project Graphql */ - post: operations['ApiController_projectGraphql'] - } - '/platform/projects/{ref}/infra-monitoring': { - /** Gets project's usage metrics */ - get: operations['InfraMonitoringController_getUsageMetrics'] - } - '/platform/projects/{ref}/pause': { - /** Pauses the project */ - post: operations['PauseController_pauseProject'] - } - '/platform/projects/{ref}/resize': { - /** Resize database disk */ - post: operations['ResizeController_resizeDatabase'] - } - '/platform/projects/{ref}/restart': { - /** Restarts project */ - post: operations['RestartController_restartProject'] - } - '/platform/projects/{ref}': { - /** Gets a specific project that belongs to the authenticated user */ - get: operations['ProjectsRefController_getProject'] - /** Deletes the given project */ - delete: operations['ProjectsRefController_deleteProject'] - /** Updates the given project */ - patch: operations['ProjectsRefController_updateProject'] - } - '/platform/projects/{ref}/restore': { - /** Restores project */ - post: operations['RestoreController_restoreProject'] - } - '/platform/projects/{ref}/restart-services': { - /** Restarts given services */ - post: operations['RestartServicesController_restartServices'] - } - '/platform/projects/{ref}/settings': { - /** Gets project's settings */ - get: operations['SettingsController_getProjectApi'] - } - '/platform/projects/{ref}/status': { - /** Gets project's status */ - get: operations['StatusController_getStatus'] - } - '/platform/projects/{ref}/update': { - /** - * Updates the project - * @deprecated - * @description Replaced by PATCH /platform/projects/:ref - */ - post: operations['UpdateController_updateProject'] - } - '/platform/projects/{ref}/transfer/preview': { - /** Previews transfering a project to a different organizations, shows eligibility and impact. */ - post: operations['ProjectTransferController_previewTransfer'] - } - '/platform/projects/{ref}/transfer': { - /** Transfers a project to a different organization. */ - post: operations['ProjectTransferController_transferProject'] - } - '/platform/projects/{ref}/analytics/endpoints/functions.inv-stats': { - /** Gets a project's function invocation statistics */ - get: operations['FunctionInvocationLogsController_getStatus'] - } - '/platform/projects/{ref}/analytics/endpoints/functions.req-stats': { - /** Gets a project's function request statistics */ - get: operations['FunctionRequestLogsController_getStatus'] - } - '/platform/projects/{ref}/analytics/endpoints/functions.resource-usage': { - /** Gets a project's function resource usage */ - get: operations['FunctionResourceLogsController_getStatus'] - } - '/platform/projects/{ref}/analytics/endpoints/logs.all': { - /** Gets project's logs */ - get: operations['LogsController_getApiPaths'] - } - '/platform/projects/{ref}/analytics/endpoints/usage.api-counts': { - /** Gets project's usage api counts */ - get: operations['UsageApiController_getApiCounts'] - } - '/platform/projects/{ref}/analytics/endpoints/usage.api-requests-count': { - /** Gets project's usage api requests count */ - get: operations['UsageApiController_getApiRequestsCount'] - } - '/platform/projects/{ref}/analytics/warehouse/tenant': { - /** Gets project's warehouse tenant from logflare */ - get: operations['TenantController_getTenant'] - } - '/platform/projects/{ref}/analytics/warehouse/collections': { - /** Lists project's warehouse collections from logflare */ - get: operations['CollectionController_listCollections'] - /** Create a warehouse collection */ - post: operations['CollectionController_createCollection'] - } - '/platform/projects/{ref}/analytics/warehouse/collections/{token}': { - /** Get a warehouse collection */ - get: operations['CollectionController_getCollection'] - /** Delete a warehouse collection */ - delete: operations['CollectionController_deleteCollection'] - /** Update a warehouse collection */ - patch: operations['CollectionController_updateCollection'] - } - '/platform/projects/{ref}/analytics/warehouse/access-tokens': { - /** Lists project's warehouse access tokens from logflare */ - get: operations['AccessTokenController_listAccessTokens'] - /** Create a warehouse access token */ - post: operations['AccessTokenController_createAccessToken'] - } - '/platform/projects/{ref}/analytics/warehouse/access-tokens/{token}': { - /** Delete a warehouse access token */ - delete: operations['AccessTokenController_deleteAccessToken'] - } - '/platform/projects/{ref}/analytics/warehouse/endpoints': { - /** Lists project's warehouse endpoints from logflare */ - get: operations['EndpointController_listEndpoints'] - /** Create a warehouse endpoint */ - post: operations['EndpointController_createEndpoint'] - } - '/platform/projects/{ref}/analytics/warehouse/endpoints/{token}': { - /** Update a warehouse endpoint */ - put: operations['EndpointController_updateEndpoint'] - /** Delete a warehouse endpoint */ - delete: operations['EndpointController_deleteEndpoint'] - } - '/platform/projects/{ref}/analytics/warehouse/query': { - /** Lists project's warehouse queries from logflare */ -<<<<<<< HEAD - get: operations['WarehouseQueryController_runQuery'] -======= - get: operations['QueryController_runQuery'] ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - } - '/platform/projects/{ref}/config/pgbouncer': { - /** Gets project's pgbouncer config */ - get: operations['PgbouncerConfigController_getPgbouncerConfig'] - /** Updates project's pgbouncer config */ - patch: operations['PgbouncerConfigController_updatePgbouncerConfig'] - } - '/platform/projects/{ref}/config/pgbouncer/status': { - /** Gets project's pgbouncer status */ - get: operations['PgbouncerConfigController_getPgbouncerStatus'] - } - '/platform/projects/{ref}/config/postgrest': { - /** Gets project's postgrest config */ - get: operations['PostgrestConfigController_getPostgRESTConfig'] - /** Updates project's postgrest config */ - patch: operations['PostgrestConfigController_updatePostgRESTConfig'] - } - '/platform/projects/{ref}/config/postgres': { - /** Gets project's Postgres config */ - get: operations['PostgresConfigController_getConfig'] - /** Updates project's Postgres config */ - put: operations['PostgresConfigController_updateConfig'] - } - '/platform/projects/{ref}/config/secrets': { - /** Updates project's secrets config */ - patch: operations['SecretsConfigController_updateConfig'] - } - '/platform/projects/{ref}/config/storage': { - /** Gets project's storage config */ - get: operations['StorageConfigController_getConfig'] - /** Updates project's storage config */ - patch: operations['StorageConfigController_updateConfig'] - } - '/platform/projects/{ref}/config/supavisor': { - /** Gets project's supavisor config */ - get: operations['SupavisorConfigController_getSupavisorConfig'] - /** Updates project's supavisor config */ - patch: operations['SupavisorConfigController_updateSupavisorConfig'] - } - '/platform/projects/{ref}/billing/addons': { - /** Gets project addons */ - get: operations['ProjectAddonController_getProjectAddons'] - /** Updates project addon */ - post: operations['ProjectAddonController_updateAddon'] - } - '/platform/projects/{ref}/billing/addons/{addon_variant}': { - /** Removes project addon */ - delete: operations['ProjectAddonController_removeAddon'] - } - '/platform/props/project/{ref}/api': { - /** - * Gets project's api info - * @deprecated - */ - get: operations['ApiController_getProjectApi'] - } - '/platform/props/project/{ref}/jwt-secret-update-status': { - /** Gets the last JWT secret update status */ - get: operations['JwtSecretUpdateStatusController_getJwtSecretUpdateStatus'] - } - '/platform/props/project/{ref}/settings': { - /** - * Gets project's settings - * @deprecated - */ - get: operations['SettingsController_getProjectApi'] - } - '/platform/storage/{ref}/buckets/{id}': { - /** Gets bucket */ - get: operations['StorageBucketIdController_getBucket'] - /** Deletes bucket */ - delete: operations['StorageBucketIdController_deleteBucket'] - /** Updates bucket */ - patch: operations['StorageBucketIdController_updateBucket'] - } - '/platform/storage/{ref}/buckets/{id}/empty': { - /** Removes all objects inside a single bucket. */ - post: operations['StorageBucketIdController_emptyBucket'] - } - '/platform/storage/{ref}/buckets': { - /** Gets list of buckets */ - get: operations['StorageBucketsController_getBuckets'] - /** Create bucket */ - post: operations['StorageBucketsController_createBucket'] - } - '/platform/storage/{ref}/buckets/{id}/objects/list': { - /** Gets list of objects with the given bucket */ - post: operations['StorageObjectsController_getObjects'] - } - '/platform/storage/{ref}/buckets/{id}/objects/public-url': { - /** Creates URL for an asset in a public bucket */ - post: operations['StorageObjectsController_createPublicUrl'] - } - '/platform/storage/{ref}/buckets/{id}/objects/download': { - /** Downloads a file from a private bucket */ - post: operations['StorageObjectsController_download'] - } - '/platform/storage/{ref}/buckets/{id}/objects/sign': { - /** Creates a signed URL */ - post: operations['StorageObjectsController_createSignedUrl'] - } - '/platform/storage/{ref}/buckets/{id}/objects/sign-multi': { - /** Gets multiple signed URLs */ - post: operations['StorageObjectsController_createSignedUrls'] - } - '/platform/storage/{ref}/buckets/{id}/objects/copy': { - /** Copys object */ - post: operations['StorageObjectsController_copyObject'] - } - '/platform/storage/{ref}/buckets/{id}/objects/move': { - /** Move object */ - post: operations['StorageObjectsController_moveObject'] - } - '/platform/storage/{ref}/buckets/{id}/objects': { - /** Deletes objects */ - delete: operations['StorageObjectsController_deleteObjects'] - } - '/platform/storage/{ref}/credentials': { - /** Gets project storage credentials */ - get: operations['StorageS3CredentialsController_getAllCredentials'] - /** Creates project storage credential */ - post: operations['StorageS3CredentialsController_createCredential'] - } - '/platform/storage/{ref}/credentials/{id}': { - /** Deletes project storage credential */ - delete: operations['StorageS3CredentialsController_deleteCredential'] - } - '/platform/stripe/invoices': { - /** Gets invoices for the given customer */ - get: operations['InvoicesController_getInvoices'] - /** Gets the total count of invoices for the given customer */ - head: operations['InvoicesController_countInvoices'] - } - '/platform/stripe/invoices/overdue': { - /** Gets information about overdue invoices that relate to the authenticated user */ - get: operations['InvoicesController_getOverdueInvoices'] - } - '/platform/stripe/invoices/{id}': { - /** Gets invoice with the given invoice ID */ - get: operations['InvoicesController_getInvoice'] - } - '/platform/stripe/setup-intent': { - /** Sets up a payment method */ - post: operations['SetupIntentController_setUpPaymentMethod'] - } - '/platform/telemetry/event': { - /** Sends analytics server event */ - post: operations['TelemetryEventController_sendServerEvent'] - } - '/platform/telemetry/identify': { - /** Send analytics identify event */ - post: operations['TelemetryIdentifyController_identify'] - } - '/platform/telemetry/page': { - /** Send server page event */ - post: operations['TelemetryPageController_sendServerPage'] - } - '/platform/telemetry/activity': { - /** Sends mixpanel server activity */ - post: operations['TelemetryActivityController_sendServerActivity'] - } - '/platform/telemetry/pageview': { - /** Send mixpanel page event */ - post: operations['TelemetryPageviewController_sendServerPageViewed'] - } - '/platform/vercel/token': { - /** Gets the Vercel access token for the given code */ - get: operations['VercelAccessTokenController_getAccessToken'] - } - '/platform/vercel/projects': { - /** Gets the list of Vercel projects */ - get: operations['VercelProjectsController_getVercelProjects'] - } - '/platform/vercel/projects/{id}': { - /** Gets the Vercel project with the given ID */ - get: operations['VercelProjectsController_getVercelProject'] - } - '/platform/vercel/projects/envs': { - /** Gets the environment variables for the given project ID on behalf of the given team ID */ - get: operations['VercelEnvironmentVariablesController_getEnvironmentVariables'] - /** Creates the environment variable for the given project ID on behalf of the given team ID */ - post: operations['VercelEnvironmentVariablesController_createEnvironmentVariable'] - } - '/platform/integrations': { - /** Gets user's integrations */ - get: operations['IntegrationsController_getProjectConnections'] - } - '/platform/integrations/{slug}': { - /** Gets integration with the given organization slug */ - get: operations['IntegrationsController_getProjectConnectionsForOrg'] - } - '/platform/integrations/vercel': { - /** - * Create vercel integration - * @description Exchanges a vercel code for an access token and saves the access token to the new integration record - */ - post: operations['VercelIntegrationController_createVercelIntegration'] - } - '/platform/integrations/vercel/{organization_integration_id}': { - /** Removes Vercel organization integration with the given id */ - delete: operations['VercelIntegrationController_removeVercelIntegration'] - } - '/platform/integrations/vercel/projects/{organization_integration_id}': { - /** Gets vercel projects with the given organization integration id */ - get: operations['VercelProjectController_getVercelProjects'] - } - '/platform/integrations/vercel/connections/{organization_integration_id}': { - /** Gets installed vercel project connections for the given organization integration */ - get: operations['VercelConnectionsController_getVercelConnections'] - } - '/platform/integrations/vercel/connections': { - /** Connects a Vercel project to a supabase project */ - post: operations['VercelConnectionsController_createVercelConnection'] - } - '/platform/integrations/vercel/connections/{connection_id}/sync-envs': { - /** Syncs supabase project envs with given connection id */ - post: operations['VercelConnectionsController_syncVercelConnectionEnvironments'] - } - '/platform/integrations/vercel/connections/{connection_id}': { - /** Deletes vercel project connection */ - delete: operations['VercelConnectionsController_deleteVercelConnection'] - /** Updates a Vercel connection for a supabase project */ - patch: operations['VercelConnectionsController_updateVercelConnection'] - } - '/platform/integrations/github/authorization': { - /** Get GitHub authorization */ - get: operations['GitHubAuthorizationsController_getGitHubAuthorization'] - /** Create GitHub authorization */ - post: operations['GitHubAuthorizationsController_createGitHubAuthorization'] - } - '/platform/integrations/github/connections': { - /** List organization GitHub connections */ - get: operations['GitHubConnectionsController_listOrganizationGitHubConnections'] - /** Connects a GitHub project to a supabase project */ - post: operations['GitHubConnectionsController_createGitHubConnection'] - } - '/platform/integrations/github/connections/{connection_id}': { - /** Deletes github project connection */ - delete: operations['GitHubConnectionsController_deleteGitHubConnection'] - /** Updates a GitHub connection for a supabase project */ - patch: operations['GitHubConnectionsController_updateGitHubConnection'] - } - '/platform/integrations/github/branches/{connectionId}': { - /** List GitHub connection branches */ - get: operations['GitHubBranchesController_listConnectionBranches'] - } - '/platform/integrations/github/branches/{connectionId}/{branchName}': { - /** Get GitHub connection branch */ - get: operations['GitHubBranchesController_getConnectionBranch'] - } - '/platform/integrations/github/repositories': { - /** Gets GitHub repositories for user */ - get: operations['GitHubRepositoriesController_listRepositories'] - } - '/platform/cli/login': { - /** Create CLI login session */ - post: operations['CliLoginController_createCliLoginSession'] - } - '/platform/cli/login/{session_id}': { - /** Retrieve CLI login session */ - get: operations['CliLoginController_getCliLoginSession'] - } - '/system/auth/{ref}/templates/{template}': { - /** Gets GoTrue template */ - get: operations['AuthTemplateController_getTemplate'] - } - '/system/database/{ref}/owner/owner-reassign': { - /** Gets the status of owner reassignment */ - get: operations['DatabaseOwnerController_getOwnerReassignStatus'] - /** Reassigns object owner from supabase_admin to temp */ - post: operations['DatabaseOwnerController_applyOwnerReassign'] - /** Rollback object owner from temp to supabase_admin */ - delete: operations['DatabaseOwnerController_rollbackOwnerReassign'] - /** Reassigns object owner from temp to postgres */ - patch: operations['DatabaseOwnerController_finaliseOwnerReassign'] - } - '/system/database/{ref}/password': { - /** Updates the database password */ - patch: operations['DatabasePasswordController_updatePassword'] - } - '/system/github-secret-alert': { - /** Reset JWT if leaked keys found by GitHub secret scanning */ - post: operations['GithubSecretAlertController_resetJwt'] - } - '/system/projects/{ref}/functions/{function_slug}': { - /** - * Update a function - * @description Updates a function with the specified slug and project. - */ - patch: operations['SystemFunctionSlugController_updateFunction'] - } - '/system/projects/{ref}/functions': { - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - get: operations['SystemFunctionsController_getFunctions'] - /** - * Create a function - * @description Creates a function and adds it to the specified project. - */ - post: operations['SystemFunctionsController_createFunction'] - /** Deletes all Edge Functions from a project */ - delete: operations['SystemFunctionsController_systemDeleteAllFunctions'] - } - '/system/projects/{ref}/secrets': { - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - get: operations['SystemSecretsController_getSecrets'] - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - post: operations['SystemSecretsController_createSecrets'] - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - delete: operations['SystemSecretsController_deleteSecrets'] - } - '/system/projects/{ref}/secrets/refresh': { - /** Refreshes secrets */ - post: operations['SecretsRefreshController_refreshSecrets'] - } - '/system/health': { - /** Get API health status */ - get: operations['HealthController_getStatus'] - } - '/system/projects/{ref}/health-reporting': { - /** Updates a project's health status. */ - put: operations['HealthReportingController_updateStatus'] - } - '/system/projects/{ref}/ha-events': { - /** Records an HA event */ - put: operations['HaEventsController_updateStatus'] - } - '/system/projects/{ref}/credentials/aws': { - /** Allows a project to obtain temporary credentials. */ - post: operations['AwsCredentialsController_getTemporaryCredentials'] - } - '/system/projects/{ref}/billing/addons': { - /** Updates project addon */ - post: operations['AddonsController_updateAddon'] - } - '/system/projects/{ref}/billing/addons/{addon_variant}': { - /** Removes project addon */ - delete: operations['AddonsController_removeAddon'] - } - '/system/projects/{ref}/config/update-jwt/complete': { - /** Handle update project jwt on completion */ - post: operations['ProjectUpdateJwtController_completeUpdateJwt'] - } - '/system/projects': { - /** Create a project */ - post: operations['ProjectsController_createProject'] - } - '/system/organizations/{slug}/usage': { - /** Gets usage stats */ - get: operations['OrgUsageSystemController_getOrgUsage'] - } - '/system/organizations/{slug}/billing/partner/usage-and-costs': { - /** Gets the partner usage and costs */ - get: operations['PartnerBillingSystemController_getPartnerUsageAndCosts'] - } - '/system/organizations/{slug}/billing/subscription': { - /** Gets the current subscription */ - get: operations['OrgSubscriptionSystemController_getSubscription'] - /** Updates subscription */ - put: operations['OrgSubscriptionSystemController_updateSubscription'] - } - '/system/organizations/{slug}/restrictions': { - /** Updates restriction status of an org */ - put: operations['OrgRestrictionsSystemController_updateRestriction'] - } - '/system/partner-organizations': { - /** Creates a partner organization */ - post: operations['AwsPartnerOrganizationsSystemController_createPartnerOrganization'] - } - '/system/integrations/vercel/webhooks': { - /** Processes Vercel event */ - post: operations['VercelWebhooksController_processEvent'] - } - '/system/integrations/github/webhooks': { - /** Processes GitHub event */ - post: operations['GitHubWebhooksController_processEvent'] - } - '/system/stripe/webhooks-v2': { - /** Processes Stripe event */ - post: operations['StripeWebhooksController_processEvent'] - } - '/system/stripe/webhooks': { - /** Processes Stripe event */ - post: operations['StripeWebhooksController_processEvent'] - } - '/v0/notifications': { - /** Get notifications */ - get: operations['NotificationsController_getNotificationsV2'] - /** Delete notifications */ - delete: operations['NotificationsController_deleteNotifications'] - /** Update notifications */ - patch: operations['NotificationsController_updateNotificationsV2'] - } - '/v0/notifications/summary': { - /** Get an aggregated data of interest across all notifications for the user */ - get: operations['NotificationsController_getNotificationsSummary'] - } - '/v0/notifications/archive-all': { - /** Archives all notifications */ - patch: operations['NotificationsController_archiveAllNotifications'] - } - '/v0/status': { - /** Get infrastructure status */ - get: operations['StatusController_getStatus'] - } - '/v0/auth/{ref}/config': { - /** Gets GoTrue config */ - get: operations['GoTrueConfigController_getGoTrueConfig'] - /** Updates GoTrue config */ - patch: operations['GoTrueConfigController_updateGoTrueConfig'] - } - '/v0/auth/{ref}/invite': { - /** Sends an invite to the given email */ - post: operations['InviteController_sendInvite'] - } - '/v0/auth/{ref}/magiclink': { - /** Sends a magic link to the given email */ - post: operations['MagicLinkController_sendMagicLink'] - } - '/v0/auth/{ref}/otp': { - /** Sends an OTP to the given phone number */ - post: operations['OtpController_sendOtp'] - } - '/v0/auth/{ref}/recover': { - /** Sends a recovery email to the given email */ - post: operations['RecoverController_sendRecover'] - } - '/v0/auth/{ref}/templates/{template}': { - /** Gets GoTrue template */ - get: operations['TemplateController_getTemplate'] - } - '/v0/auth/{ref}/users': { - /** Gets users */ - get: operations['UsersController_getUsers'] - /** Delete user with given ID */ - delete: operations['UsersController_deleteUser'] - } - '/v0/auth/{ref}/users/{id}/factors': { - /** Delete all factors associated to a user */ - delete: operations['FactorsController_deleteFactors'] - } - '/v0/database/{ref}/backups': { - /** Gets project backups */ - get: operations['BackupsController_getBackups'] - } - '/v0/database/{ref}/backups/enable-physical-backups': { - /** Enable usage of physical backups */ - post: operations['BackupsController_enablePhysicalBackup'] - } - '/v0/database/{ref}/backups/download': { - /** Download project backup */ - post: operations['BackupsController_downloadBackup'] - } - '/v0/database/{ref}/backups/restore': { - /** Restore project backup */ - post: operations['BackupsController_restoreBackup'] - } - '/v0/database/{ref}/backups/restore-physical': { - /** Restore project with a physical backup */ - post: operations['BackupsController_restorePhysicalBackup'] - } - '/v0/database/{ref}/backups/pitr': { - /** Restore project to a previous point in time */ - post: operations['BackupsController_restorePointInTimeBackup'] - } - '/v0/database/{ref}/hook-logs': { - /** Gets hook logs with the given ID */ - get: operations['HooksController_getHookLogs'] - } - '/v0/database/{ref}/hook-enable': { - /** Enables Database Webhooks on the project */ - post: operations['HooksController_enableHooks'] - } - '/v0/organizations': { - /** Gets user's organizations */ - get: operations['OrganizationsController_getOrganizations'] - /** Creates an organization */ - post: operations['OrganizationsController_createOrganizationWithTier'] - } - '/v0/organizations/fly/{fly_organization_id}': { - /** Gets organization linked to fly organization id */ - get: operations['OrganizationsController_getOrganizationByFlyOrganizationId'] - } - '/v0/organizations/{slug}': { - /** Deletes organization */ - delete: operations['OrganizationSlugController_deleteOrganization'] - /** Updates organization */ - patch: operations['OrganizationSlugController_updateOrganization'] - } - '/v0/organizations/{slug}/roles': { - /** Gets the given organization's roles */ - get: operations['RolesController_addMember'] - } - '/v0/organizations/{slug}/members/invite': { - /** Gets invited users */ - get: operations['InviteController_getInvitedUsers'] - /** Invites user */ - post: operations['InviteController_inviteUser'] - /** Delete invited user */ - delete: operations['InviteController_deleteInvitedUser'] - } - '/v0/organizations/{slug}/members/join': { - /** Gets invite */ - get: operations['JoinController_getInvite'] - /** Joins organization */ - post: operations['JoinController_joinOrganization'] - } - '/v0/organizations/{slug}/members': { - /** Gets organization's members */ - get: operations['MembersController_getMembers'] - } - '/v0/organizations/{slug}/members/{gotrue_id}': { - /** Removes organization member */ - delete: operations['MembersController_deleteMember'] - /** Updates organization member */ - patch: operations['MembersController_updateMember'] - } - '/v0/pg-meta/{ref}/column-privileges': { - /** Retrieve column privileges */ - get: operations['ColumnPrivilegesController_getColumnPrivileges'] - /** Grant column privileges */ - post: operations['ColumnPrivilegesController_grantColumnPrivileges'] - /** Revoke column privileges */ - delete: operations['ColumnPrivilegesController_revokeColumnPrivileges'] - } - '/v0/pg-meta/{ref}/columns': { - /** Gets project pg.columns */ - get: operations['ColumnsController_getColumns'] - /** Creates project pg.column */ - post: operations['ColumnsController_createColumn'] - /** Deletes project pg.column with the given ID */ - delete: operations['ColumnsController_deleteColumn'] - /** Updates project pg.column with the given ID */ - patch: operations['ColumnsController_updateColumn'] - } - '/v0/pg-meta/{ref}/extensions': { - /** Gets project pg.extensions */ - get: operations['ExtensionsController_getExtensions'] - /** Creates project pg.extension */ - post: operations['ExtensionsController_createExtension'] - /** Deletes project pg.extension with the given ID */ - delete: operations['ExtensionsController_deleteExtension'] - } - '/v0/pg-meta/{ref}/foreign-tables': { - /** Retrieve database foreign tables */ - get: operations['ForeignTablesController_getForeignTables'] - } - '/v0/pg-meta/{ref}/functions': { - /** Gets project pg.functions */ - get: operations['FunctionsController_getFunctions'] - /** Creates project pg.function */ - post: operations['FunctionsController_createFunction'] - /** Deletes project pg.function with the given ID */ - delete: operations['FunctionsController_deleteFunction'] - /** Updates project pg.function with the given ID */ - patch: operations['FunctionsController_updateFunction'] - } - '/v0/pg-meta/{ref}/materialized-views': { - /** Retrieve database materialized views */ - get: operations['MaterializedViewsController_getMaterializedViews'] - } - '/v0/pg-meta/{ref}/policies': { - /** Gets project pg.policies */ - get: operations['PoliciesController_getPolicies'] - /** Creates project pg.policy */ - post: operations['PoliciesController_createPolicy'] - /** Deletes project pg.policy with the given ID */ - delete: operations['PoliciesController_deletePolicy'] - /** Updates project pg.policy with the given ID */ - patch: operations['PoliciesController_updatePolicy'] - } - '/v0/pg-meta/{ref}/publications': { - /** Gets project pg.publications */ - get: operations['PublicationsController_getPublications'] - /** Gets project pg.publications */ - post: operations['PublicationsController_createPublication'] - /** Deletes project pg.publication with the given ID */ - delete: operations['PublicationsController_deletePublication'] - /** Updates project pg.publication with the given ID */ - patch: operations['PublicationsController_updatePublication'] - } - '/v0/pg-meta/{ref}/query': { - /** Run sql query */ - post: operations['QueryController_runQuery'] - } - '/v0/pg-meta/{ref}/query/format': { - /** Format sql query */ - post: operations['QueryController_formatQuery'] - } - '/v0/pg-meta/{ref}/query/validate': { - /** Validate sql query */ - post: operations['QueryController_validateQuery'] - } - '/v0/pg-meta/{ref}/roles': { - /** Gets project pg.roles */ - get: operations['RolesController_getRoles'] - /** Creates project pg.role */ - post: operations['RolesController_createRole'] - /** Deletes project pg.role with the given ID */ - delete: operations['RolesController_deleteRole'] - /** Updates project pg.role with the given ID */ - patch: operations['RolesController_updateRole'] - } - '/v0/pg-meta/{ref}/schemas': { - /** Gets project pg.schemas */ - get: operations['SchemasController_getSchemas'] - /** Creates project pg.schema */ - post: operations['SchemasController_createSchema'] - /** Deletes project pg.schema with the given ID */ - delete: operations['SchemasController_deleteSchema'] - /** Updates project pg.schema with the given ID */ - patch: operations['SchemasController_updateSchema'] - } - '/v0/pg-meta/{ref}/search/tables': { - /** Searches project pg.tables. Return maximum 50 results. */ - post: operations['SearchController_searchTables'] - } - '/v0/pg-meta/{ref}/search/columns': { - /** Searches project pg.columns. Return maximum 50 results. */ - post: operations['SearchController_searchColumns'] - } - '/v0/pg-meta/{ref}/table-privileges': { - /** Retrieve table privileges */ - get: operations['TablePrivilegesController_getTablePrivileges'] - /** Grant table privileges */ - post: operations['TablePrivilegesController_grantTablePrivileges'] - /** Revoke table privileges */ - delete: operations['TablePrivilegesController_revokeTablePrivileges'] - } - '/v0/pg-meta/{ref}/tables': { - /** Gets project pg.tables or pg.table with the given ID */ - get: operations['TablesController_getTables'] - /** Creates project pg.table */ - post: operations['TablesController_createTable'] - /** Deletes project pg.table with the given ID */ - delete: operations['TablesController_deleteTable'] - /** Updates project pg.table with the given ID */ - patch: operations['TablesController_updateTable'] - } - '/v0/pg-meta/{ref}/triggers': { - /** Gets project pg.triggers */ - get: operations['TriggersController_getTriggers'] - /** Creates project pg.trigger */ - post: operations['TriggersController_createTrigger'] - /** Deletes project pg.trigger with the given ID */ - delete: operations['TriggersController_deleteTrigger'] - /** Updates project pg.trigger with the given ID */ - patch: operations['TriggersController_updateTrigger'] - } - '/v0/pg-meta/{ref}/types': { - /** Gets project pg.types */ - get: operations['TypesController_getTypes'] - } - '/v0/pg-meta/{ref}/views': { - /** Retrieve database views */ - get: operations['ViewsController_getViews'] - } - '/v0/projects': { - /** - * Gets all projects that belong to the authenticated user - * @description Only returns the minimal project info - */ - get: operations['ProjectsController_getProjects'] - /** Creates a project */ - post: operations['ProjectsController_createProject'] - } - '/v0/projects/fly/{fly_extension_id}': { - /** Gets project linked to fly extension id */ - get: operations['ProjectsController_getProjectByFlyExtensionId'] - } - '/v0/projects/metrics': { - /** - * Get metrics - * @description At most 50 projects can be queried at a time. - * Currently supports '1d', '3d', and '7d' intervals. - */ - get: operations['V0ProjectsMetricsController_getProjectsMetrics'] - } - '/v0/projects/{ref}/content': { - /** Gets project's content */ - get: operations['ContentController_getContent'] - /** Updates project's content */ - put: operations['ContentController_updateWholeContent'] - /** Creates project's content */ - post: operations['ContentController_createContent'] - /** Deletes project's contents */ - delete: operations['ContentController_deleteContents'] - /** Updates project's content */ - patch: operations['ContentController_updateContent'] - } - '/v0/projects/{ref}/databases': { - /** Gets non-removed databases of a specified project */ - get: operations['DatabasesController_getDatabases'] - } - '/v0/projects/{ref}/databases-statuses': { - /** Gets statuses of databases within a project */ - get: operations['DatabasesStatusesController_getStatus'] - } - '/v0/projects/{ref}/db-password': { - /** Updates the database password */ - patch: operations['DbPasswordController_updatePassword'] - } - '/v0/projects/{ref}/live': { - /** Gets project health check */ - get: operations['HealthCheckController_projectHealthCheck'] - } - '/v0/projects/{ref}/load-balancers': { - /** Gets non-removed databases of a specified project */ - get: operations['LoadBalancersController_getLoadBalancers'] - } - '/v0/projects/{ref}/api/rest': { - /** Gets project OpenApi */ - get: operations['ApiController_projectOpenApi'] - } - '/v0/projects/{ref}/api/graphql': { - /** Queries project Graphql */ - post: operations['ApiController_projectGraphql'] - } - '/v0/projects/{ref}/infra-monitoring': { - /** Gets project's usage metrics */ - get: operations['InfraMonitoringController_getUsageMetrics'] - } - '/v0/projects/{ref}/pause': { - /** Pauses the project */ - post: operations['PauseController_pauseProject'] - } - '/v0/projects/{ref}/resize': { - /** Resize database disk */ - post: operations['ResizeController_resizeDatabase'] - } - '/v0/projects/{ref}/restart': { - /** Restarts project */ - post: operations['RestartController_restartProject'] - } - '/v0/projects/{ref}': { - /** Gets a specific project that belongs to the authenticated user */ - get: operations['ProjectsRefController_getProject'] - /** Deletes the given project */ - delete: operations['ProjectsRefController_deleteProject'] - /** Updates the given project */ - patch: operations['ProjectsRefController_updateProject'] - } - '/v0/projects/{ref}/restore': { - /** Restores project */ - post: operations['RestoreController_restoreProject'] - } - '/v0/projects/{ref}/restart-services': { - /** Restarts given services */ - post: operations['RestartServicesController_restartServices'] - } - '/v0/projects/{ref}/settings': { - /** Gets project's settings */ - get: operations['SettingsController_getProjectApi'] - } - '/v0/projects/{ref}/status': { - /** Gets project's status */ - get: operations['StatusController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/functions.inv-stats': { - /** Gets a project's function invocation statistics */ - get: operations['FunctionInvocationLogsController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/functions.req-stats': { - /** Gets a project's function request statistics */ - get: operations['FunctionRequestLogsController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/functions.resource-usage': { - /** Gets a project's function resource usage */ - get: operations['FunctionResourceLogsController_getStatus'] - } - '/v0/projects/{ref}/analytics/endpoints/logs.all': { - /** Gets project's logs */ - get: operations['LogsController_getApiPaths'] - } - '/v0/projects/{ref}/analytics/endpoints/usage.api-counts': { - /** Gets project's usage api counts */ - get: operations['UsageApiController_getApiCounts'] - } - '/v0/projects/{ref}/analytics/endpoints/usage.api-requests-count': { - /** Gets project's usage api requests count */ - get: operations['UsageApiController_getApiRequestsCount'] - } - '/v0/projects/{ref}/analytics/warehouse/tenant': { - /** Gets project's warehouse tenant from logflare */ - get: operations['TenantController_getTenant'] - } - '/v0/projects/{ref}/analytics/warehouse/collections': { - /** Lists project's warehouse collections from logflare */ - get: operations['CollectionController_listCollections'] - /** Create a warehouse collection */ - post: operations['CollectionController_createCollection'] - } - '/v0/projects/{ref}/analytics/warehouse/collections/{token}': { - /** Get a warehouse collection */ - get: operations['CollectionController_getCollection'] - /** Delete a warehouse collection */ - delete: operations['CollectionController_deleteCollection'] - /** Update a warehouse collection */ - patch: operations['CollectionController_updateCollection'] - } - '/v0/projects/{ref}/analytics/warehouse/access-tokens': { - /** Lists project's warehouse access tokens from logflare */ - get: operations['AccessTokenController_listAccessTokens'] - /** Create a warehouse access token */ - post: operations['AccessTokenController_createAccessToken'] - } - '/v0/projects/{ref}/analytics/warehouse/access-tokens/{token}': { - /** Delete a warehouse access token */ - delete: operations['AccessTokenController_deleteAccessToken'] - } - '/v0/projects/{ref}/analytics/warehouse/endpoints': { - /** Lists project's warehouse endpoints from logflare */ - get: operations['EndpointController_listEndpoints'] - /** Create a warehouse endpoint */ - post: operations['EndpointController_createEndpoint'] - } - '/v0/projects/{ref}/analytics/warehouse/endpoints/{token}': { - /** Update a warehouse endpoint */ - put: operations['EndpointController_updateEndpoint'] - /** Delete a warehouse endpoint */ - delete: operations['EndpointController_deleteEndpoint'] - } - '/v0/projects/{ref}/analytics/warehouse/query': { - /** Lists project's warehouse queries from logflare */ -<<<<<<< HEAD - get: operations['WarehouseQueryController_runQuery'] -======= - get: operations['QueryController_runQuery'] ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - } - '/v0/projects/{ref}/config/pgbouncer': { - /** Gets project's pgbouncer config */ - get: operations['PgbouncerConfigController_getPgbouncerConfig'] - /** Updates project's pgbouncer config */ - patch: operations['PgbouncerConfigController_updatePgbouncerConfig'] - } - '/v0/projects/{ref}/config/pgbouncer/status': { - /** Gets project's pgbouncer status */ - get: operations['PgbouncerConfigController_getPgbouncerStatus'] - } - '/v0/projects/{ref}/config/postgrest': { - /** Gets project's postgrest config */ - get: operations['PostgrestConfigController_getPostgRESTConfig'] - /** Updates project's postgrest config */ - patch: operations['PostgrestConfigController_updatePostgRESTConfig'] - } - '/v0/projects/{ref}/config/postgres': { - /** Gets project's Postgres config */ - get: operations['PostgresConfigController_getConfig'] - /** Updates project's Postgres config */ - put: operations['PostgresConfigController_updateConfig'] - } - '/v0/projects/{ref}/config/secrets': { - /** Updates project's secrets config */ - patch: operations['SecretsConfigController_updateConfig'] - } - '/v0/projects/{ref}/config/storage': { - /** Gets project's storage config */ - get: operations['StorageConfigController_getConfig'] - /** Updates project's storage config */ - patch: operations['StorageConfigController_updateConfig'] - } - '/v0/projects/{ref}/config/supavisor': { - /** Gets project's supavisor config */ - get: operations['SupavisorConfigController_getSupavisorConfig'] - /** Updates project's supavisor config */ - patch: operations['SupavisorConfigController_updateSupavisorConfig'] - } - '/v0/projects/{ref}/billing/addons': { - /** Gets project addons */ - get: operations['ProjectAddonController_getProjectAddons'] - /** Updates project addon */ - post: operations['ProjectAddonController_updateAddon'] - } - '/v0/projects/{ref}/billing/addons/{addon_variant}': { - /** Removes project addon */ - delete: operations['ProjectAddonController_removeAddon'] - } - '/v0/storage/{ref}/buckets/{id}': { - /** Gets bucket */ - get: operations['StorageBucketIdController_getBucket'] - /** Deletes bucket */ - delete: operations['StorageBucketIdController_deleteBucket'] - /** Updates bucket */ - patch: operations['StorageBucketIdController_updateBucket'] - } - '/v0/storage/{ref}/buckets/{id}/empty': { - /** Removes all objects inside a single bucket. */ - post: operations['StorageBucketIdController_emptyBucket'] - } - '/v0/storage/{ref}/buckets': { - /** Gets list of buckets */ - get: operations['StorageBucketsController_getBuckets'] - /** Create bucket */ - post: operations['StorageBucketsController_createBucket'] - } - '/v0/storage/{ref}/buckets/{id}/objects/list': { - /** Gets list of objects with the given bucket */ - post: operations['StorageObjectsController_getObjects'] - } - '/v0/storage/{ref}/buckets/{id}/objects/public-url': { - /** Creates URL for an asset in a public bucket */ - post: operations['StorageObjectsController_createPublicUrl'] - } - '/v0/storage/{ref}/buckets/{id}/objects/download': { - /** Downloads a file from a private bucket */ - post: operations['StorageObjectsController_download'] - } - '/v0/storage/{ref}/buckets/{id}/objects/sign': { - /** Creates a signed URL */ - post: operations['StorageObjectsController_createSignedUrl'] - } - '/v0/storage/{ref}/buckets/{id}/objects/sign-multi': { - /** Gets multiple signed URLs */ - post: operations['StorageObjectsController_createSignedUrls'] - } - '/v0/storage/{ref}/buckets/{id}/objects/copy': { - /** Copys object */ - post: operations['StorageObjectsController_copyObject'] - } - '/v0/storage/{ref}/buckets/{id}/objects/move': { - /** Move object */ - post: operations['StorageObjectsController_moveObject'] - } - '/v0/storage/{ref}/buckets/{id}/objects': { - /** Deletes objects */ - delete: operations['StorageObjectsController_deleteObjects'] - } - '/v0/storage/{ref}/credentials': { - /** Gets project storage credentials */ - get: operations['StorageS3CredentialsController_getAllCredentials'] - /** Creates project storage credential */ - post: operations['StorageS3CredentialsController_createCredential'] - } - '/v0/storage/{ref}/credentials/{id}': { - /** Deletes project storage credential */ - delete: operations['StorageS3CredentialsController_deleteCredential'] - } - '/v1/branches/{branch_id}': { - /** - * Get database branch config - * @description Fetches configurations of the specified database branch - */ - get: operations['BranchController_getBranchDetails'] - /** - * Delete a database branch - * @description Deletes the specified database branch - */ - delete: operations['BranchController_deleteBranch'] - /** - * Update database branch config - * @description Updates the configuration of the specified database branch - */ - patch: operations['BranchController_updateBranch'] - } - '/v1/branches/{branch_id}/reset': { - /** - * Resets a database branch - * @description Resets the specified database branch - */ - post: operations['BranchController_resetBranch'] - } - '/v1/projects': { - /** - * List all projects - * @description Returns a list of all projects you've previously created. - */ - get: operations['V1ProjectsController_getProjects'] - /** Create a project */ - post: operations['V1ProjectsController_createProject'] - } - '/v1/projects/{ref}/api-keys': { - /** Get project api keys */ - get: operations['ApiKeysController_getProjectApiKeys'] - } - '/v1/projects/{ref}/branches': { - /** - * List all database branches - * @description Returns all database branches of the specified project. - */ - get: operations['BranchesController_getBranches'] - /** - * Create a database branch - * @description Creates a database branch from the specified project. - */ - post: operations['BranchesController_createBranch'] - /** - * Disables preview branching - * @description Disables preview branching for the specified project - */ - delete: operations['BranchesController_disableBranch'] - } - '/v1/projects/{ref}/custom-hostname': { - /** Gets project's custom hostname config */ - get: operations['CustomHostnamesController_getCustomHostnameConfig'] - /** Deletes a project's custom hostname configuration */ - delete: operations['CustomHostnamesController_removeCustomHostnameConfig'] - } - '/v1/projects/{ref}/custom-hostname/initialize': { - /** Updates project's custom hostname configuration */ - post: operations['CustomHostnamesController_createCustomHostnameConfig'] - } - '/v1/projects/{ref}/custom-hostname/reverify': { - /** Attempts to verify the DNS configuration for project's custom hostname configuration */ - post: operations['CustomHostnamesController_reverify'] - } - '/v1/projects/{ref}/custom-hostname/activate': { - /** Activates a custom hostname for a project. */ - post: operations['CustomHostnamesController_activate'] - } - '/v1/projects/{ref}/network-bans/retrieve': { - /** Gets project's network bans */ - post: operations['NetworkBansController_getNetworkBans'] - } - '/v1/projects/{ref}/network-bans': { - /** Remove network bans. */ - delete: operations['NetworkBansController_removeNetworkBan'] - } - '/v1/projects/{ref}/network-restrictions': { - /** Gets project's network restrictions */ - get: operations['NetworkRestrictionsController_getNetworkRestrictions'] - } - '/v1/projects/{ref}/network-restrictions/apply': { - /** Updates project's network restrictions */ - post: operations['NetworkRestrictionsController_applyNetworkRestrictions'] - } - '/v1/projects/{ref}/pgsodium': { - /** Gets project's pgsodium config */ - get: operations['PgsodiumConfigController_getPgsodiumConfig'] - /** Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */ - put: operations['PgsodiumConfigController_updatePgsodiumConfig'] - } - '/v1/projects/{ref}/postgrest': { - /** Gets project's postgrest config */ - get: operations['PostgrestConfigController_getPostgRESTConfig'] - /** Updates project's postgrest config */ - patch: operations['PostgrestConfigController_updatePostgRESTConfig'] - } - '/v1/projects/{ref}': { - /** Deletes the given project */ - delete: operations['ProjectsRefController_deleteProject'] - } - '/v1/projects/{ref}/secrets': { - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - get: operations['SecretsController_getSecrets'] - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - post: operations['SecretsController_createSecrets'] - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - delete: operations['SecretsController_deleteSecrets'] - } - '/v1/projects/{ref}/ssl-enforcement': { - /** Get project's SSL enforcement configuration. */ - get: operations['SslEnforcementController_getSslEnforcementConfig'] - /** Update project's SSL enforcement configuration. */ - put: operations['SslEnforcementController_updateSslEnforcementConfig'] - } - '/v1/projects/{ref}/types/typescript': { - /** - * Generate TypeScript types - * @description Returns the TypeScript types of your schema for use with supabase-js. - */ - get: operations['TypesController_getTypescriptTypes'] - } - '/v1/projects/{ref}/vanity-subdomain': { - /** Gets current vanity subdomain config */ - get: operations['VanitySubdomainsController_getVanitySubdomainConfig'] - /** Deletes a project's vanity subdomain configuration */ - delete: operations['VanitySubdomainsController_removeVanitySubdomainConfig'] - } - '/v1/projects/{ref}/vanity-subdomain/check-availability': { - /** Checks vanity subdomain availability */ - post: operations['VanitySubdomainsController_checkVanitySubdomainAvailability'] - } - '/v1/projects/{ref}/vanity-subdomain/activate': { - /** Activates a vanity subdomain for a project. */ - post: operations['VanitySubdomainsController_activateVanitySubdomainPlease'] - } - '/v1/projects/{ref}/upgrade': { - /** Upgrades the project's Postgres version */ - post: operations['UpgradeController_upgradeProject'] - } - '/v1/projects/{ref}/upgrade/eligibility': { - /** Returns the project's eligibility for upgrades */ - get: operations['UpgradeController_upgradeEligibilityInformation'] - } - '/v1/projects/{ref}/upgrade/status': { - /** Gets the latest status of the project's upgrade */ - get: operations['UpgradeController_getUpgradeStatus'] - } - '/v1/projects/{ref}/readonly': { - /** Returns project's readonly mode status */ - get: operations['ReadOnlyController_getReadOnlyModeStatus'] - } - '/v1/projects/{ref}/readonly/temporary-disable': { - /** Disables project's readonly mode for the next 15 minutes */ - post: operations['ReadOnlyController_temporarilyDisableReadonlyMode'] - } - '/v1/projects/{ref}/read-replicas/setup': { - /** Set up a read replica */ - post: operations['ReadReplicaController_setUpReadReplica'] - } - '/v1/projects/{ref}/read-replicas/remove': { - /** Remove a read replica */ - post: operations['ReadReplicaController_removeReadReplica'] - } - '/v1/projects/{ref}/health': { - /** Gets project's service health status */ - get: operations['ServiceHealthController_checkServiceHealth'] - } - '/v1/projects/{ref}/config/database/postgres': { - /** Gets project's Postgres config */ - get: operations['AuthPostgresConfigController_getConfig'] - /** Updates project's Postgres config */ - put: operations['AuthPostgresConfigController_updateConfig'] - } - '/v1/projects/{ref}/config/database/pgbouncer': { - /** Get project's pgbouncer config */ - get: operations['V1PgbouncerConfigController_v1GetPgbouncerConfig'] - } - '/v1/projects/{ref}/config/auth': { - /** Gets project's auth config */ - get: operations['V1AuthConfigController_getV1AuthConfig'] - /** Updates a project's auth config */ - patch: operations['V1AuthConfigController_updateV1AuthConfig'] - } - '/v1/projects/{ref}/config/auth/third-party-auth': { - /** Lists all third-party auth integrations */ - get: operations['ThirdPartyAuthController_listTPAForProject'] - /** Creates a new third-party auth integration */ - post: operations['ThirdPartyAuthController_createTPAForProject'] - } - '/v1/projects/{ref}/config/auth/third-party-auth/{tpa_id}': { - /** Get a third-party integration */ - get: operations['ThirdPartyAuthController_getTPAForProject'] - /** Removes a third-party auth integration */ - delete: operations['ThirdPartyAuthController_deleteTPAForProject'] - } - '/v1/projects/{ref}/config/auth/sso/providers': { - /** Lists all SSO providers */ - get: operations['ProvidersController_listAllProviders'] - /** Creates a new SSO provider */ - post: operations['ProvidersController_createProviderForProject'] - } - '/v1/projects/{ref}/config/auth/sso/providers/{provider_id}': { - /** Gets a SSO provider by its UUID */ - get: operations['ProvidersController_getProviderById'] - /** Updates a SSO provider by its UUID */ - put: operations['ProvidersController_updateProviderById'] - /** Removes a SSO provider by its UUID */ - delete: operations['ProvidersController_removeProviderById'] - } - '/v1/projects/{ref}/database/query': { - /** Run sql query */ - post: operations['V1QueryController_v1RunQuery'] - } - '/v1/projects/{ref}/database/webhooks/enable': { - /** Enables Database Webhooks on the project */ - post: operations['V1DatabaseWebhooksController_v1EnableDatabaseWebhooks'] - } - '/v1/projects/{ref}/database/backups': { - /** Lists all backups */ - get: operations['V1BackupsController_getBackups'] - } - '/v1/projects/{ref}/database/backups/restore-pitr': { - /** Restores a PITR backup for a database */ - post: operations['V1RestorePitrController_v1RestorePitr'] - } - '/v1/projects/{ref}/functions': { - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - get: operations['FunctionsController_getFunctions'] - /** - * Create a function - * @description Creates a function and adds it to the specified project. - */ - post: operations['FunctionsController_createFunction'] - } - '/v1/projects/{ref}/functions/{function_slug}': { - /** - * Retrieve a function - * @description Retrieves a function with the specified slug and project. - */ - get: operations['FunctionSlugController_getFunction'] - /** - * Delete a function - * @description Deletes a function with the specified slug from the specified project. - */ - delete: operations['FunctionSlugController_deleteFunction'] - /** - * Update a function - * @description Updates a function with the specified slug and project. - */ - patch: operations['FunctionSlugController_updateFunction'] - } - '/v1/projects/{ref}/functions/{function_slug}/body': { - /** - * Retrieve a function body - * @description Retrieves a function body for the specified slug and project. - */ - get: operations['FunctionSlugController_getFunctionBody'] - } - '/v1/projects/{ref}/storage/buckets': { - /** Lists all buckets */ - get: operations['V1StorageBucketsController_getBuckets'] - } - '/v1/organizations': { - /** - * List all organizations - * @description Returns a list of organizations that you currently belong to. - */ - get: operations['OrganizationsController_getOrganizations'] - /** Create an organization */ - post: operations['OrganizationsController_createOrganization'] - } - '/v1/organizations/{slug}/members': { - /** List members of an organization */ - get: operations['V1OrganizationMembersController_v1ListOrganizationMembers'] - } - '/v1/organizations/{slug}': { - /** Gets information about the organization */ - get: operations['V1OrganizationSlugController_getOrganization'] - } - '/v1/oauth/authorize': { - /** Authorize user through oauth */ - get: operations['OAuthController_authorize'] - } - '/v1/oauth/token': { - /** Exchange auth code for user's access and refresh token */ - post: operations['OAuthController_token'] - } - '/v1/snippets': { - /** Lists SQL snippets for the logged in user */ - get: operations['SnippetsController_listSnippets'] - } - '/v1/snippets/{id}': { - /** Gets a specific SQL snippet */ - get: operations['SnippetsController_getSnippet'] - } - '/partners/flyio/callback': { - /** Redirects to Supabase dashboard after completing Fly sso */ - get: operations['CallbackController_redirectToDashboardFlyioExtensionScreen'] - } - '/partners/flyio/extensions/{extension_id}': { - /** Gets database status */ - get: operations['ExtensionController_getResourceStatus'] - /** Deletes a database */ - delete: operations['ExtensionController_deleteResource'] - } - '/partners/flyio/extensions/{extension_id}/sso': { - /** Starts Fly single sign on */ - get: operations['ExtensionController_startFlyioSSO'] - } - '/partners/flyio/extensions': { - /** Creates a database */ - post: operations['ExtensionsController_provisionResource'] - } - '/partners/flyio/organizations/{organization_id}': { - /** Gets information about the organization */ - get: operations['OrganizationsController_getOrganization'] - } - '/partners/flyio/organizations/{organization_id}/extensions': { - /** Gets all databases that belong to the Fly organization */ - get: operations['OrganizationsController_getOrgExtensions'] - } - '/partners/flyio/organizations/{organization_id}/sso': { - /** Starts Fly single sign on */ - get: operations['OrganizationsController_startFlyioSSO'] - } - '/partners/flyio/organizations/{organization_id}/billing': { - /** Gets the organizations current unbilled charges */ - get: operations['FlyBillingController_getResourceBilling'] - } -} - -export type webhooks = Record - -export interface components { - schemas: { -<<<<<<< HEAD - UpdateNotificationsBodyV1: Record - UpdateNotificationBodyV2: Record - ResetPasswordBody: Record - SendFeedbackBody: Record - SendExitSurveyBody: Record - SendUpgradeSurveyBody: Record - SendDocsFeedbackBody: Record - SignUpBody: Record - UpdateGoTrueConfigBody: Record - UserBody: Record - DownloadBackupBody: Record - RestoreLogicalBackupBody: Record - RestorePhysicalBackupBody: Record - PointInTimeRestoreBody: Record - CreateOrganizationBody: Record - UpdateOrganizationBody: Record - CreateTaxIdBody: Record - DeleteTaxIdBody: Record - TransferOrganizationBody: Record - InviteUserBody: Record - RemoveMemberBody: Record - UpdateMemberBody: Record - DetachPaymentMethodBody: Record -======= - NotificationResponseV1: { - id: string - inserted_at: string - project_id: number - notification_name: string - notification_status: string - data: Record - meta: Record - } - UpdateNotificationsBodyV1: { - ids: string[] - } - NotificationAction: { - label: string - url?: string - action_type?: string - } - NotificationData: { - org_slug?: string - project_ref?: string - title: string - message?: string - actions?: components['schemas']['NotificationAction'][] - } - NotificationResponseV2: { - /** @enum {string} */ - status: 'new' | 'seen' | 'archived' - /** @enum {string} */ - priority: 'Critical' | 'Warning' | 'Info' - data: components['schemas']['NotificationData'] - id: string - inserted_at: string - name: string - meta: Record - } - NotificationsSummary: { - unread_count: number - has_warning: boolean - has_critical: boolean - } - UpdateNotificationBodyV2: { - id: string - /** @enum {string} */ - status: 'new' | 'seen' | 'archived' - } - ResetPasswordBody: { - email: string - redirectTo?: string - } - SendFeedbackBody: { - message: string - affectedServices?: string - library?: string - category: string - subject?: string - tags: string[] - additionalRedirectUrls?: string - pathname?: string - projectRef?: string - organizationSlug?: string - severity?: string - siteUrl?: string - urlToAirTable?: string - allowSupportAccess?: boolean - verified?: boolean - browserInformation?: string - } - SendFeedbackResponse: { - result: string - } - SendExitSurveyBody: { - projectRef?: string - orgSlug?: string - reasons: string - additionalFeedback?: string - exitAction?: string - } - SendUpgradeSurveyBody: { - orgSlug?: string - prevPlan?: string - currentPlan?: string - reasons: string[] - additionalFeedback?: string - } - SendDocsFeedbackBody: { - page: string - isHelpful: boolean - title: string - feedback: string - } - SignUpBody: { - email: string - password: string - redirectTo?: string - } - ProjectResourceWarningsResponse: { - /** @enum {string|null} */ - need_pitr: 'critical' | 'warning' | null - /** @enum {string|null} */ - disk_io_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - disk_space_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - cpu_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - memory_and_swap_exhaustion: 'critical' | 'warning' | null - /** @enum {string|null} */ - auth_rate_limit_exhaustion: 'critical' | 'warning' | null - project: string - is_readonly_mode_enabled: boolean - } - GoTrueConfigResponse: { - SITE_URL: string - DISABLE_SIGNUP: boolean - JWT_EXP: number - SMTP_ADMIN_EMAIL: string - SMTP_HOST: string - SMTP_PORT: string - SMTP_USER: string - SMTP_PASS: string - SMTP_MAX_FREQUENCY: number - SMTP_SENDER_NAME: string - MAILER_AUTOCONFIRM: boolean - MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS: boolean - MAILER_SUBJECTS_INVITE: string - MAILER_SUBJECTS_CONFIRMATION: string - MAILER_SUBJECTS_RECOVERY: string - MAILER_SUBJECTS_EMAIL_CHANGE: string - MAILER_SUBJECTS_MAGIC_LINK: string - MAILER_SUBJECTS_REAUTHENTICATION: string - MAILER_TEMPLATES_INVITE_CONTENT: string - MAILER_TEMPLATES_CONFIRMATION_CONTENT: string - MAILER_TEMPLATES_RECOVERY_CONTENT: string - MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT: string - MAILER_TEMPLATES_MAGIC_LINK_CONTENT: string - MAILER_TEMPLATES_REAUTHENTICATION_CONTENT: string - MFA_MAX_ENROLLED_FACTORS: number - URI_ALLOW_LIST: string - EXTERNAL_ANONYMOUS_USERS_ENABLED: boolean - EXTERNAL_EMAIL_ENABLED: boolean - EXTERNAL_PHONE_ENABLED: boolean - SAML_ENABLED: boolean - SECURITY_CAPTCHA_ENABLED: boolean - SECURITY_CAPTCHA_PROVIDER: string - SECURITY_CAPTCHA_SECRET: string - SESSIONS_TIMEBOX: number - SESSIONS_INACTIVITY_TIMEOUT: number - SESSIONS_SINGLE_PER_USER: boolean - SESSIONS_TAGS: string - RATE_LIMIT_ANONYMOUS_USERS: number - RATE_LIMIT_EMAIL_SENT: number - RATE_LIMIT_SMS_SENT: number - RATE_LIMIT_VERIFY: number - RATE_LIMIT_TOKEN_REFRESH: number - MAILER_SECURE_EMAIL_CHANGE_ENABLED: boolean - REFRESH_TOKEN_ROTATION_ENABLED: boolean - PASSWORD_HIBP_ENABLED: boolean - PASSWORD_MIN_LENGTH: number - PASSWORD_REQUIRED_CHARACTERS: string - SECURITY_MANUAL_LINKING_ENABLED: boolean - SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION: boolean - SECURITY_REFRESH_TOKEN_REUSE_INTERVAL: number - MAILER_OTP_EXP: number - SMS_AUTOCONFIRM: boolean - SMS_MAX_FREQUENCY: number - SMS_OTP_EXP: number - SMS_OTP_LENGTH: number - SMS_PROVIDER: string - SMS_MESSAGEBIRD_ACCESS_KEY: string - SMS_MESSAGEBIRD_ORIGINATOR: string - SMS_TEXTLOCAL_API_KEY: string - SMS_TEXTLOCAL_SENDER: string - SMS_TWILIO_ACCOUNT_SID: string - SMS_TWILIO_AUTH_TOKEN: string - SMS_TWILIO_CONTENT_SID: string - SMS_TWILIO_MESSAGE_SERVICE_SID: string - SMS_TWILIO_VERIFY_ACCOUNT_SID: string - SMS_TWILIO_VERIFY_AUTH_TOKEN: string - SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID: string - SMS_VONAGE_API_KEY: string - SMS_VONAGE_API_SECRET: string - SMS_VONAGE_FROM: string - SMS_TEMPLATE: string - SMS_TEST_OTP: string - SMS_TEST_OTP_VALID_UNTIL: string - HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED: boolean - HOOK_MFA_VERIFICATION_ATTEMPT_URI: string - HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED: boolean - HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI: string - HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: boolean - HOOK_CUSTOM_ACCESS_TOKEN_URI: string - HOOK_SEND_SMS_ENABLED: boolean - HOOK_SEND_SMS_URI: string - HOOK_SEND_EMAIL_ENABLED: boolean - HOOK_SEND_EMAIL_URI: string - EXTERNAL_APPLE_ENABLED: boolean - EXTERNAL_APPLE_CLIENT_ID: string - EXTERNAL_APPLE_SECRET: string - EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS: string - EXTERNAL_AZURE_ENABLED: boolean - EXTERNAL_AZURE_CLIENT_ID: string - EXTERNAL_AZURE_SECRET: string - EXTERNAL_AZURE_URL: string - EXTERNAL_BITBUCKET_ENABLED: boolean - EXTERNAL_BITBUCKET_CLIENT_ID: string - EXTERNAL_BITBUCKET_SECRET: string - EXTERNAL_DISCORD_ENABLED: boolean - EXTERNAL_DISCORD_CLIENT_ID: string - EXTERNAL_DISCORD_SECRET: string - EXTERNAL_FACEBOOK_ENABLED: boolean - EXTERNAL_FACEBOOK_CLIENT_ID: string - EXTERNAL_FACEBOOK_SECRET: string - EXTERNAL_FIGMA_ENABLED: boolean - EXTERNAL_FIGMA_CLIENT_ID: string - EXTERNAL_FIGMA_SECRET: string - EXTERNAL_GITHUB_ENABLED: boolean - EXTERNAL_GITHUB_CLIENT_ID: string - EXTERNAL_GITHUB_SECRET: string - EXTERNAL_GITLAB_ENABLED: boolean - EXTERNAL_GITLAB_CLIENT_ID: string - EXTERNAL_GITLAB_SECRET: string - EXTERNAL_GITLAB_URL: string - EXTERNAL_GOOGLE_ENABLED: boolean - EXTERNAL_GOOGLE_CLIENT_ID: string - EXTERNAL_GOOGLE_SECRET: string - EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS: string - EXTERNAL_GOOGLE_SKIP_NONCE_CHECK: boolean - EXTERNAL_KAKAO_ENABLED: boolean - EXTERNAL_KAKAO_CLIENT_ID: string - EXTERNAL_KAKAO_SECRET: string - EXTERNAL_KEYCLOAK_ENABLED: boolean - EXTERNAL_KEYCLOAK_CLIENT_ID: string - EXTERNAL_KEYCLOAK_SECRET: string - EXTERNAL_KEYCLOAK_URL: string - EXTERNAL_LINKEDIN_OIDC_ENABLED: boolean - EXTERNAL_LINKEDIN_OIDC_CLIENT_ID: string - EXTERNAL_LINKEDIN_OIDC_SECRET: string - EXTERNAL_NOTION_ENABLED: boolean - EXTERNAL_NOTION_CLIENT_ID: string - EXTERNAL_NOTION_SECRET: string - EXTERNAL_SLACK_ENABLED: boolean - EXTERNAL_SLACK_CLIENT_ID: string - EXTERNAL_SLACK_SECRET: string - EXTERNAL_SPOTIFY_ENABLED: boolean - EXTERNAL_SPOTIFY_CLIENT_ID: string - EXTERNAL_SPOTIFY_SECRET: string - EXTERNAL_TWITCH_ENABLED: boolean - EXTERNAL_TWITCH_CLIENT_ID: string - EXTERNAL_TWITCH_SECRET: string - EXTERNAL_TWITTER_ENABLED: boolean - EXTERNAL_TWITTER_CLIENT_ID: string - EXTERNAL_TWITTER_SECRET: string - EXTERNAL_WORKOS_ENABLED: boolean - EXTERNAL_WORKOS_CLIENT_ID: string - EXTERNAL_WORKOS_SECRET: string - EXTERNAL_WORKOS_URL: string - EXTERNAL_ZOOM_ENABLED: boolean - EXTERNAL_ZOOM_CLIENT_ID: string - EXTERNAL_ZOOM_SECRET: string - } - UpdateGoTrueConfigBody: { - SITE_URL?: string - DISABLE_SIGNUP?: boolean - JWT_EXP?: number - SMTP_ADMIN_EMAIL?: string - SMTP_HOST?: string - SMTP_PORT?: string - SMTP_USER?: string - SMTP_PASS?: string - SMTP_MAX_FREQUENCY?: number - SMTP_SENDER_NAME?: string - MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS?: boolean - MAILER_AUTOCONFIRM?: boolean - MAILER_SUBJECTS_INVITE?: string - MAILER_SUBJECTS_CONFIRMATION?: string - MAILER_SUBJECTS_RECOVERY?: string - MAILER_SUBJECTS_EMAIL_CHANGE?: string - MAILER_SUBJECTS_MAGIC_LINK?: string - MAILER_SUBJECTS_REAUTHENTICATION?: string - MAILER_TEMPLATES_INVITE_CONTENT?: string - MAILER_TEMPLATES_REAUTHENTICATION_CONTENT?: string - MAILER_TEMPLATES_CONFIRMATION_CONTENT?: string - MAILER_TEMPLATES_RECOVERY_CONTENT?: string - MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT?: string - MAILER_TEMPLATES_MAGIC_LINK_CONTENT?: string - MFA_MAX_ENROLLED_FACTORS?: number - URI_ALLOW_LIST?: string - EXTERNAL_ANONYMOUS_USERS_ENABLED?: boolean - EXTERNAL_EMAIL_ENABLED?: boolean - EXTERNAL_PHONE_ENABLED?: boolean - SAML_ENABLED?: boolean - SECURITY_CAPTCHA_ENABLED?: boolean - SECURITY_CAPTCHA_PROVIDER?: string - SECURITY_CAPTCHA_SECRET?: string - SESSIONS_TIMEBOX?: number - SESSIONS_INACTIVITY_TIMEOUT?: number - SESSIONS_SINGLE_PER_USER?: boolean - SESSIONS_TAGS?: string - RATE_LIMIT_ANONYMOUS_USERS?: number - RATE_LIMIT_EMAIL_SENT?: number - RATE_LIMIT_SMS_SENT?: number - RATE_LIMIT_VERIFY?: number - RATE_LIMIT_TOKEN_REFRESH?: number - MAILER_SECURE_EMAIL_CHANGE_ENABLED?: boolean - REFRESH_TOKEN_ROTATION_ENABLED?: boolean - PASSWORD_HIBP_ENABLED?: boolean - PASSWORD_MIN_LENGTH?: number - /** @enum {string} */ - PASSWORD_REQUIRED_CHARACTERS?: - | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~' - | '' - SECURITY_MANUAL_LINKING_ENABLED?: boolean - SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION?: boolean - SECURITY_REFRESH_TOKEN_REUSE_INTERVAL?: number - MAILER_OTP_EXP?: number - SMS_AUTOCONFIRM?: boolean - SMS_MAX_FREQUENCY?: number - SMS_OTP_EXP?: number - SMS_OTP_LENGTH?: number - SMS_PROVIDER?: string - SMS_MESSAGEBIRD_ACCESS_KEY?: string - SMS_MESSAGEBIRD_ORIGINATOR?: string - SMS_TEST_OTP?: string - SMS_TEST_OTP_VALID_UNTIL?: string - SMS_TEXTLOCAL_API_KEY?: string - SMS_TEXTLOCAL_SENDER?: string - SMS_TWILIO_ACCOUNT_SID?: string - SMS_TWILIO_AUTH_TOKEN?: string - SMS_TWILIO_CONTENT_SID?: string - SMS_TWILIO_MESSAGE_SERVICE_SID?: string - SMS_TWILIO_VERIFY_ACCOUNT_SID?: string - SMS_TWILIO_VERIFY_AUTH_TOKEN?: string - SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID?: string - SMS_VONAGE_API_KEY?: string - SMS_VONAGE_API_SECRET?: string - SMS_VONAGE_FROM?: string - SMS_TEMPLATE?: string - HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED?: boolean - HOOK_MFA_VERIFICATION_ATTEMPT_URI?: string - HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED?: boolean - HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI?: string - HOOK_CUSTOM_ACCESS_TOKEN_ENABLED?: boolean - HOOK_CUSTOM_ACCESS_TOKEN_URI?: string - HOOK_SEND_SMS_ENABLED?: boolean - HOOK_SEND_SMS_URI?: string - HOOK_SEND_EMAIL_ENABLED?: boolean - HOOK_SEND_EMAIL_URI?: string - EXTERNAL_APPLE_ENABLED?: boolean - EXTERNAL_APPLE_CLIENT_ID?: string - EXTERNAL_APPLE_SECRET?: string - EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS?: string - EXTERNAL_AZURE_ENABLED?: boolean - EXTERNAL_AZURE_CLIENT_ID?: string - EXTERNAL_AZURE_SECRET?: string - EXTERNAL_AZURE_URL?: string - EXTERNAL_BITBUCKET_ENABLED?: boolean - EXTERNAL_BITBUCKET_CLIENT_ID?: string - EXTERNAL_BITBUCKET_SECRET?: string - EXTERNAL_DISCORD_ENABLED?: boolean - EXTERNAL_DISCORD_CLIENT_ID?: string - EXTERNAL_DISCORD_SECRET?: string - EXTERNAL_FACEBOOK_ENABLED?: boolean - EXTERNAL_FACEBOOK_CLIENT_ID?: string - EXTERNAL_FACEBOOK_SECRET?: string - EXTERNAL_FIGMA_ENABLED?: boolean - EXTERNAL_FIGMA_CLIENT_ID?: string - EXTERNAL_FIGMA_SECRET?: string - EXTERNAL_GITHUB_ENABLED?: boolean - EXTERNAL_GITHUB_CLIENT_ID?: string - EXTERNAL_GITHUB_SECRET?: string - EXTERNAL_GITLAB_ENABLED?: boolean - EXTERNAL_GITLAB_CLIENT_ID?: string - EXTERNAL_GITLAB_SECRET?: string - EXTERNAL_GITLAB_URL?: string - EXTERNAL_GOOGLE_ENABLED?: boolean - EXTERNAL_GOOGLE_CLIENT_ID?: string - EXTERNAL_GOOGLE_SECRET?: string - EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS?: string - EXTERNAL_GOOGLE_SKIP_NONCE_CHECK?: boolean - EXTERNAL_KAKAO_ENABLED?: boolean - EXTERNAL_KAKAO_CLIENT_ID?: string - EXTERNAL_KAKAO_SECRET?: string - EXTERNAL_KEYCLOAK_ENABLED?: boolean - EXTERNAL_KEYCLOAK_CLIENT_ID?: string - EXTERNAL_KEYCLOAK_SECRET?: string - EXTERNAL_KEYCLOAK_URL?: string - EXTERNAL_LINKEDIN_OIDC_ENABLED?: boolean - EXTERNAL_LINKEDIN_OIDC_CLIENT_ID?: string - EXTERNAL_LINKEDIN_OIDC_SECRET?: string - EXTERNAL_NOTION_ENABLED?: boolean - EXTERNAL_NOTION_CLIENT_ID?: string - EXTERNAL_NOTION_SECRET?: string - EXTERNAL_SLACK_ENABLED?: boolean - EXTERNAL_SLACK_CLIENT_ID?: string - EXTERNAL_SLACK_SECRET?: string - EXTERNAL_SPOTIFY_ENABLED?: boolean - EXTERNAL_SPOTIFY_CLIENT_ID?: string - EXTERNAL_SPOTIFY_SECRET?: string - EXTERNAL_TWITCH_ENABLED?: boolean - EXTERNAL_TWITCH_CLIENT_ID?: string - EXTERNAL_TWITCH_SECRET?: string - EXTERNAL_TWITTER_ENABLED?: boolean - EXTERNAL_TWITTER_CLIENT_ID?: string - EXTERNAL_TWITTER_SECRET?: string - EXTERNAL_WORKOS_ENABLED?: boolean - EXTERNAL_WORKOS_CLIENT_ID?: string - EXTERNAL_WORKOS_SECRET?: string - EXTERNAL_WORKOS_URL?: string - EXTERNAL_ZOOM_ENABLED?: boolean - EXTERNAL_ZOOM_CLIENT_ID?: string - EXTERNAL_ZOOM_SECRET?: string - } - UserBody: { - id?: string - aud?: string - banned_until?: string - confirmation_sent_at?: string - confirmation_token?: string - confirmed_at?: string - created_at?: string - email?: string - email_change?: string - email_change_confirm_status?: number - email_change_sent_at?: string - email_change_token_current?: string - email_change_token_new?: string - email_confirmed_at?: string - encrypted_password?: string - instance_id?: string - invited_at?: string - is_super_admin?: boolean - last_sign_in_at?: string - phone?: string - phone_change?: string - phone_change_sent_at?: string - phone_change_token?: string - phone_confirmed_at?: string - raw_app_meta_data?: Record - raw_user_meta_data?: Record - reauthentication_sent_at?: string - reauthentication_token?: string - recovery_sent_at?: string - recovery_token?: string - role?: string - updated_at?: string - is_sso_user?: boolean - deleted_at?: string - is_anonymous?: boolean - } - UsersResponse: { - total: number - users: components['schemas']['UserBody'][] - } - Backup: { - id: number - isPhysicalBackup: boolean - project_id: number - status: Record - inserted_at: string - } - BackupsResponse: { - tierKey: string - region: string - walg_enabled: boolean - pitr_enabled: boolean - backups: components['schemas']['Backup'][] - physicalBackupData: { - earliestPhysicalBackupDateUnix?: number - latestPhysicalBackupDateUnix?: number - } - } - DownloadBackupBody: { - id: number - data: Record - inserted_at: string - project_id: number - s3_bucket: string - s3_path: string - status: string - } - DownloadBackupResponse: { - fileUrl: string - } - RestoreLogicalBackupBody: { - id: number - } - RestorePhysicalBackupBody: { - id: number - recovery_time_target: string - } - PointInTimeRestoreBody: { - recovery_time_target_unix: number - } - OwnerResponse: { - project_ref: string - /** @enum {string} */ - current: 'unmigrated' | 'temp_role' | 'migrated' - /** @enum {string} */ - desired: 'unmigrated' | 'temp_role' | 'migrated' - created_at: string - modified_at: string - migrated_at: string | null - } - OrganizationResponse: { - /** @enum {string|null} */ - restriction_status: 'grace_period' | 'grace_period_over' | 'restricted' | null - id: number - slug: string - name: string - billing_email: string | null - is_owner: boolean - stripe_customer_id: string | null - subscription_id: string | null - opt_in_tags: string[] - restriction_data: Record - } - GetOrganizationByFlyOrganizationIdResponse: { - slug: string - } - CreateOrganizationBody: { - name: string - kind?: string - size?: string - /** @enum {string} */ - tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' - payment_method?: string - } - UpdateOrganizationBody: { - name: string - billing_email: string - opt_in_tags: string[] - } - OrganizationSlugResponse: { - id: number - slug: string - name: string - billing_email?: string - stripe_customer_id?: string - opt_in_tags: string[] - } - CustomerResponse: { - id: string - email: string - address: string - balance: number - invoice_settings: Record - billing_via_partner: boolean - } - CustomerUpdateResponse: { - id: string - object: string - address: Record - balance: number - cash_balance?: Record - created: number - currency: string - default_currency?: string - default_source: string - delinquent: boolean - description: string - discount: Record - email: string - invoice_credit_balance?: Record - invoice_prefix: string - invoice_settings: Record - livemode: boolean - metadata: Record - name: string - next_invoice_sequence?: number - phone: string - preferred_locales: string[] - shipping: Record - sources?: Record - subscriptions?: Record - tax?: Record - tax_exempt?: string - tax_ids?: Record - test_clock?: Record - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - Role: { - id: number - name: string - } - TaxId: { - id: string - object: string - country: string - created: number - customer: Record - deleted?: Record - livemode: boolean - type: string - value: string - verification: Record - } - TaxIdResponse: { - object: string - data: components['schemas']['TaxId'][] - has_more: boolean - url: string - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - CreateTaxIdBody: { - type: Record - value: string - } - CreateTaxIdResponse: { - id: string - object: string - country: string - created: number - customer: Record - livemode: boolean - type: string - value: string - verification: Record - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - DeleteTaxIdBody: { - id: string - } - DeleteTaxIdResponse: { - id: string - object: string - deleted: boolean - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - TransferOrganizationBody: { - member_gotrue_id: string - member_id: number - org_id: number - } - ProjectAllocation: { - ref: string - usage: number - name: string - } - OrgMetricUsage: { - usage: number - usage_original: number - cost: number - unit_price_desc: string - available_in_plan: boolean - unlimited: boolean - capped: boolean - /** @enum {string} */ - metric: - | 'EGRESS' - | 'DATABASE_SIZE' - | 'STORAGE_SIZE' - | 'MONTHLY_ACTIVE_USERS' - | 'MONTHLY_ACTIVE_SSO_USERS' - | 'FUNCTION_INVOCATIONS' - | 'FUNCTION_COUNT' - | 'STORAGE_IMAGES_TRANSFORMED' - | 'REALTIME_MESSAGE_COUNT' - | 'REALTIME_PEAK_CONNECTIONS' - | 'COMPUTE_HOURS_BRANCH' - | 'COMPUTE_HOURS_XS' - | 'COMPUTE_HOURS_SM' - | 'COMPUTE_HOURS_MD' - | 'COMPUTE_HOURS_L' - | 'COMPUTE_HOURS_XL' - | 'COMPUTE_HOURS_2XL' - | 'COMPUTE_HOURS_4XL' - | 'COMPUTE_HOURS_8XL' - | 'COMPUTE_HOURS_12XL' - | 'COMPUTE_HOURS_16XL' - /** @enum {string} */ - pricing_strategy: 'UNIT' | 'PACKAGE' | 'NONE' - pricing_free_units?: number - pricing_package_price?: number - pricing_package_size?: number - pricing_per_unit_price?: number - project_allocations: components['schemas']['ProjectAllocation'][] - } - OrgUsageResponse: { - usage_billing_enabled: boolean - slugs: string[] - usages: components['schemas']['OrgMetricUsage'][] - } - OrgDocumentUrlResponse: { - fileUrl: string - } - AuditLogsResponse: { - result: Record[] - retention_period: number - } - Invite: { - invited_id: number - invited_at: string - invited_email: string - role_id: number - } - InviteUserBody: { - invited_email: string - owner_id: number - role_id: number - } - SendInviteResponse: { - invited_at: string - invited_email: string - role_id: number - } - InviteResponse: { - organization_name: string - invite_id: string - token_does_not_exist: boolean - email_match: boolean - authorized_user: boolean - expired_token: boolean - } - JoinResponse: { - billing_email: string - id: number - name: string - slug: string - stripe_customer_id: string - } - RemoveMemberBody: { - member_id: number - } - Member: { - gotrue_id: string - primary_email: string | null - role_ids: number[] - username: string - mfa_enabled: boolean - } - UpdateMemberBody: { - role_id: number - } - MemberWithFreeProjectLimit: { - free_project_limit: number - primary_email: string - username: string - } - Payment: { - id: string - object: string - acss_debit?: Record - affirm?: Record - afterpay_clearpay?: Record - alipay?: Record - au_becs_debit?: Record - bacs_debit?: Record - bancontact?: Record - billing_details: Record - blik?: Record - boleto?: Record - card?: Record - card_present?: Record - created: number - customer: Record - customer_balance?: Record - eps?: Record - fpx?: Record - giropay?: Record - grabpay?: Record - ideal?: Record - interac_present?: Record - klarna?: Record - konbini?: Record - link?: Record - livemode: boolean - metadata: Record - oxxo?: Record - p24?: Record - paynow?: Record - promptpay?: Record - radar_options?: Record - sepa_debit?: Record - sofort?: Record - type: string - us_bank_account?: Record - wechat_pay?: Record - } - PaymentsResponse: { - object: string - data: components['schemas']['Payment'][] - has_more: boolean - url: string - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } - DetachPaymentMethodBody: { - card_id: string - } - DetachPaymentResponse: { - id: string - object: string - acss_debit?: Record - affirm?: Record - afterpay_clearpay?: Record - alipay?: Record - au_becs_debit?: Record - bacs_debit?: Record - bancontact?: Record - billing_details: Record - blik?: Record - boleto?: Record - card?: Record - card_present?: Record - created: number - customer: Record - customer_balance?: Record - eps?: Record - fpx?: Record - giropay?: Record - grabpay?: Record - ideal?: Record - interac_present?: Record - klarna?: Record - konbini?: Record - link?: Record - livemode: boolean - metadata: Record - oxxo?: Record - p24?: Record - paynow?: Record - promptpay?: Record - radar_options?: Record - sepa_debit?: Record - sofort?: Record - type: string - us_bank_account?: Record - wechat_pay?: Record - lastResponse: { - headers?: Record - requestId?: string - statusCode?: number - apiVersion?: string - idempotencyKey?: string - stripeAccount?: string - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - HCaptchaBody: { - hcaptchaToken: string - } - UpdateSubscriptionBody: Record - GrantColumnPrivilegesBody: Record - RevokeColumnPrivilegesBody: Record - CreateColumnBody: Record - UpdateColumnBody: Record - CreateExtensionBody: Record - CreateFunctionBody: Record - UpdateFunctionBody: Record - CreatePolicyBody: Record - UpdatePolicyBody: Record - CreatePublicationBody: Record - UpdatePublicationBody: Record - RunQueryBody: Record - FormatQueryBody: Record - ValidateQueryBody: Record - CreateRoleBody: Record - UpdateRoleBody: Record - CreateSchemaBody: Record - UpdateSchemaBody: Record - SearchTableBody: Record - SearchColumnBody: Record - GrantTablePrivilegesBody: Record - RevokeTablePrivilegesBody: Record - CreateTableBody: Record - UpdateTableBody: Record - CreateTriggerBody: Record - UpdateTriggerBody: Record - CreateAccessTokenBody: Record - SearchProfileBody: Record - PasswordCheckBody: Record - UpdateProfileBody: Record - /** @enum {string} */ - DesiredInstanceSize: - | 'micro' - | 'small' - | 'medium' - | 'large' - | 'xlarge' - | '2xlarge' - | '4xlarge' - | '8xlarge' - | '12xlarge' - | '16xlarge' - CreateProjectBody: { - /** @deprecated */ - kps_enabled: boolean - desired_instance_size: components['schemas']['DesiredInstanceSize'] - } - CreateContentParams: Record - UpsertContentParams: Record - UpdateContentParams: Record - UpdatePasswordBody: Record - Buffer: Record - ResizeBody: Record - UpdateProjectBody: Record - RestartServicesBody: Record - ProjectSettingsResponse: Record - TransferProjectBody: Record - UpdatePgbouncerConfigBody: { - default_pool_size: number - max_client_conn: number - } - UpdatePostgrestConfigBody: { - max_rows: number - db_pool: number - } - UpdatePostgresConfigBody: { - statement_timeout: string - effective_cache_size: string - maintenance_work_mem: string - max_connections: number - max_locks_per_transaction: number - max_parallel_maintenance_workers: number - max_parallel_workers: number - max_parallel_workers_per_gather: number - max_worker_processes: number - shared_buffers: string - work_mem: string - } - UpdateSecretsConfigBody: Record - UpdateStorageConfigBody: Record - UpdateSupavisorConfigBody: { - default_pool_size: number - } - /** @enum {string} */ - AddonVariantId: - | 'ci_micro' - | 'ci_small' - | 'ci_medium' - | 'ci_large' - | 'ci_xlarge' - | 'ci_2xlarge' - | 'ci_4xlarge' - | 'ci_8xlarge' - | 'ci_12xlarge' - | 'ci_16xlarge' - | 'cd_default' - | 'pitr_7' - | 'pitr_14' - | 'pitr_28' - | 'ipv4_default' - /** @enum {string} */ -<<<<<<< HEAD - ProjectAddonType: 'custom_domain' | 'compute_instance' | 'pitr' | 'ipv4' -======= - ProjectAddonVariantPricingType: 'fixed' | 'usage' - /** @enum {string} */ - ProjectAddonPricingInterval: 'monthly' | 'hourly' - ProjectAddonVariantResponse: { - identifier: components['schemas']['AddonVariantId'] - price_type: components['schemas']['ProjectAddonVariantPricingType'] - price_interval: components['schemas']['ProjectAddonPricingInterval'] - name: string - price_description: string - price: number - meta?: Record - } - SelectedAddonResponse: { - type: components['schemas']['ProjectAddonType'] - variant: components['schemas']['ProjectAddonVariantResponse'] - } - BillingProjectAddonResponse: { - addons: components['schemas']['SelectedAddonResponse'][] - name: string - ref: string - } - BillingPricingOptionsUnit: { - perUnitPrice: number - freeUnits?: number - } - BillingPricingOptionsPackage: { - packageSize: number - packagePrice: number - freeUnits?: number - } - BillingPricingOptionsNone: { - freeUnits?: number - } - BillingUsageBasedPrice: { - /** @enum {string} */ - metric: - | 'EGRESS' - | 'DATABASE_SIZE' - | 'STORAGE_SIZE' - | 'MONTHLY_ACTIVE_USERS' - | 'MONTHLY_ACTIVE_SSO_USERS' - | 'FUNCTION_INVOCATIONS' - | 'FUNCTION_COUNT' - | 'STORAGE_IMAGES_TRANSFORMED' - | 'REALTIME_MESSAGE_COUNT' - | 'REALTIME_PEAK_CONNECTIONS' - | 'COMPUTE_HOURS_BRANCH' - | 'COMPUTE_HOURS_XS' - | 'COMPUTE_HOURS_SM' - | 'COMPUTE_HOURS_MD' - | 'COMPUTE_HOURS_L' - | 'COMPUTE_HOURS_XL' - | 'COMPUTE_HOURS_2XL' - | 'COMPUTE_HOURS_4XL' - | 'COMPUTE_HOURS_8XL' - | 'COMPUTE_HOURS_12XL' - | 'COMPUTE_HOURS_16XL' - /** @enum {string} */ - pricingStrategy: 'UNIT' | 'PACKAGE' | 'NONE' - pricingOptions: - | components['schemas']['BillingPricingOptionsUnit'] - | components['schemas']['BillingPricingOptionsPackage'] - | components['schemas']['BillingPricingOptionsNone'] - name: string - unit: string - } - PaymentMethodCardDetails: { - last_4_digits: string - brand: string - expiry_month: number - expiry_year: number - } - ScheduledPlanChange: { - target_plan: components['schemas']['BillingPlanId'] - /** Format: date-time */ - at: string - usage_billing_enabled: boolean - } - GetSubscriptionResponse: { - billing_cycle_anchor: number - current_period_end: number - current_period_start: number - next_invoice_at: number - usage_billing_enabled: boolean - plan: components['schemas']['BillingSubscriptionPlan'] - addons: components['schemas']['BillingSubscriptionAddon'][] - project_addons: components['schemas']['BillingProjectAddonResponse'][] - usage_fees: components['schemas']['BillingUsageBasedPrice'][] - payment_method_type: string - payment_method_id?: string - payment_method_card_details?: components['schemas']['PaymentMethodCardDetails'] - billing_via_partner: boolean - /** @enum {string} */ - billing_partner: 'fly' | 'aws' - scheduled_plan_change: components['schemas']['ScheduledPlanChange'] | null - customer_balance: number - nano_enabled: boolean - } - UpdateSubscriptionBody: { - payment_method?: string - /** @enum {string} */ - tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' - } - /** @enum {string} */ - BillingPlanChangeType: 'upgrade' | 'downgrade' | 'none' - /** @enum {string} */ - BillingPlanEffectiveAt: 'now' | 'end_of_billing_period' | 'none' - PlanResponse: { - id: components['schemas']['BillingPlanId'] - change_type: components['schemas']['BillingPlanChangeType'] - effective_at: components['schemas']['BillingPlanEffectiveAt'] - name: string - price: number - is_current: boolean - } - PlansResponse: { - plans: components['schemas']['PlanResponse'][] - } - UpcomingInvoice: Record - ColumnPrivilege: { - grantor: string - grantee: string - /** @enum {string} */ - privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' - is_grantable: boolean - } - PostgresColumnPrivileges: { - column_id: string - relation_schema: string - relation_name: string - column_name: string - privileges: components['schemas']['ColumnPrivilege'][] - } - GrantColumnPrivilegesBody: { - is_grantable?: boolean - column_id: string - grantee: string - /** @enum {string} */ - privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' - } - RevokeColumnPrivilegesBody: { - column_id: string - grantee: string - /** @enum {string} */ - privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' - } - PostgresColumn: { - table_id: number - schema: string - table: string - id: string - ordinal_position: number - name: string - default_value: Record - data_type: string - format: string - is_identity: boolean - identity_generation: Record - is_generated: boolean - is_nullable: boolean - is_updatable: boolean - is_unique: boolean - enums: string[] - check: string | null - comment: string | null - } - CreateColumnBody: { - tableId: number - name: string - type: string - check?: string - comment?: string - defaultValue?: Record - /** @enum {string} */ - defaultValueFormat?: 'expression' | 'literal' - /** @enum {string} */ - identityGeneration?: 'BY DEFAULT' | 'ALWAYS' - isIdentity?: boolean - isNullable?: boolean - isPrimaryKey?: boolean - isUnique?: boolean - } - UpdateColumnBody: { - dropDefault?: boolean - name?: string - type?: string - id?: number - check?: string - comment?: string - defaultValue?: Record - /** @enum {string} */ - defaultValueFormat?: 'expression' | 'literal' - /** @enum {string} */ - identityGeneration?: 'BY DEFAULT' | 'ALWAYS' - isIdentity?: boolean - isNullable?: boolean - isUnique?: boolean - } - PostgresExtension: { - name: string - schema: string | null - default_version: string - installed_version: string | null - comment: string | null - } - CreateExtensionBody: { - cascade: boolean - name: string - schema: string - version: string - } - PostgresForeignTable: { - id: number - schema: string - name: string - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - } - PostgresFunction: { - id: number - schema: string - name: string - language: string - definition: string - complete_statement: string - argument_types: string - identity_argument_types: string - return_type: string - /** @enum {string} */ - behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' - security_definer: boolean - config_params: unknown - } - CreateFunctionBody: { - args: string[] - /** @enum {string} */ - behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' - config_params?: Record - definition: string - language: string - name: string - return_type: string - schema: string - security_definer: boolean - } - UpdateFunctionBody: { - id?: number - args?: string[] - /** @enum {string} */ - behavior?: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' - config_params?: Record - definition?: string - language?: string - name?: string - return_type?: string - schema?: string - security_definer?: boolean - } - PostgresMaterializedView: { - id: number - schema: string - name: string - is_populated: boolean - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - } - PostgresPolicy: { - id: number - schema: string - table: string - table_id: number - name: string - /** @enum {string} */ - action: 'PERMISSIVE' | 'RESTRICTIVE' - roles: string[] - /** @enum {string} */ - command: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL' - definition: string | null - check: string | null - } - CreatePolicyBody: { - name: string - table: string - schema?: string - definition?: string - check?: string - /** @enum {string} */ - action?: 'PERMISSIVE' | 'RESTRICTIVE' - /** @enum {string} */ - command?: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL' - roles?: string[] - } - UpdatePolicyBody: { - id?: number - name?: string - definition?: string - check?: string - roles?: string[] - } - Table: { - id: number - name: string - schema: string - } - PostgresPublication: { - id: number - name: string - owner: string - publish_insert: boolean - publish_update: boolean - publish_delete: boolean - publish_truncate: boolean - tables: components['schemas']['Table'][] | null - } - CreatePublicationBody: { - name: string - owner?: string - tables?: string[] | null - publish_insert?: boolean - publish_update?: boolean - publish_delete?: boolean - publish_truncate?: boolean - } - UpdatePublicationBody: { - id?: number - name?: string - owner?: string - tables?: string[] | null - publish_insert?: boolean - publish_update?: boolean - publish_delete?: boolean - publish_truncate?: boolean - } - RunQueryBody: { - query: string - } - FormatQueryBody: { - query: string - } - ValidateQueryBody: { - query: string - } - ValidateQueryResponse: { - valid: boolean - } - PostgresRole: { - id: number - name: string - is_superuser: boolean - can_create_db: boolean - can_create_role: boolean - inherit_role: boolean - can_login: boolean - is_replication_role: boolean - can_bypass_rls: boolean - active_connections: number - connection_limit: number - password: string - valid_until: string | null - config: string[] | null - } - CreateRoleBody: { - name: string - password?: string - inherit_role?: boolean - can_login?: boolean - is_superuser?: boolean - can_create_db?: boolean - can_create_role?: boolean - is_replication_role?: boolean - can_bypass_rls?: boolean - connection_limit?: number - member_of?: string[] - members?: string[] - admins?: string[] - valid_until?: string - config?: Record - } - UpdateRoleBody: { - name?: string - password?: string - inherit_role?: boolean - can_login?: boolean - is_superuser?: boolean - can_create_db?: boolean - can_create_role?: boolean - is_replication_role?: boolean - can_bypass_rls?: boolean - connection_limit?: number - valid_until?: string - config?: Record - } - PostgresSchema: { - id: number - name: string - owner: string - } - CreateSchemaBody: { - name: string - owner: string - } - UpdateSchemaBody: { - name?: string - owner?: string - } - SearchTableBody: { - name: string - schema: string - } - SearchColumnBody: { - name: string - schema: string - } - Column: { - id: number - name: string - schema: string - table_id: number - table: string - } - TablePrivilege: { - grantor: string - grantee: string - /** @enum {string} */ - privilege_type: - | 'ALL' - | 'SELECT' - | 'INSERT' - | 'UPDATE' - | 'DELETE' - | 'TRUNCATE' - | 'REFERENCES' - | 'TRIGGER' - is_grantable: boolean - } - PostgresTablePrivileges: { - schema: string - name: string - kind: string - privileges: components['schemas']['TablePrivilege'][] - } - GrantTablePrivilegesBody: { - is_grantable?: boolean - relation_id: number - grantee: string - /** @enum {string} */ - privilege_type: - | 'ALL' - | 'SELECT' - | 'INSERT' - | 'UPDATE' - | 'DELETE' - | 'TRUNCATE' - | 'REFERENCES' - | 'TRIGGER' - } - RevokeTablePrivilegesBody: { - relation_id: number - grantee: string - /** @enum {string} */ - privilege_type: - | 'ALL' - | 'SELECT' - | 'INSERT' - | 'UPDATE' - | 'DELETE' - | 'TRUNCATE' - | 'REFERENCES' - | 'TRIGGER' - } - PrimaryKey: { - schema: string - table_name: string - name: string - table_id: number - } - Relationship: { - id: number - constraint_name: string - source_schema: string - source_table_name: string - source_column_name: string - target_table_schema: string - target_table_name: string - target_column_name: string - } - PostgresTable: { - id: number - schema: string - name: string - rls_enabled: boolean - rls_forced: boolean - /** @enum {string} */ - replica_identity: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING' - bytes: number - size: string - live_rows_estimate: number - dead_rows_estimate: number - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - primary_keys: components['schemas']['PrimaryKey'][] - relationships: components['schemas']['Relationship'][] - } - CreateTableBody: { - name: string - schema?: string - comment?: string - } - UpdateTableBody: { - id?: number - rls_enabled?: boolean - rls_forced?: boolean - /** @enum {string} */ - replica_identity?: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING' - replica_identity_index?: string - name?: string - schema?: string - comment?: string - } - PostgresTrigger: { - id: number - table_id: number - /** @enum {string} */ - enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' - name: string - table: string - schema: string - condition: string | null - /** @enum {string} */ - orientation: 'ROW' | 'STATEMENT' - /** @enum {string} */ - activation: 'AFTER' | 'BEFORE' - events: string[] - function_schema: string - function_name: string - function_args: string[] - } - CreateTriggerBody: { - /** @enum {string} */ - activation: 'AFTER' | 'BEFORE' - /** @enum {string} */ - enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' - events: ('INSERT' | 'UPDATE' | 'DELETE')[] - function_args: string[] - function_name: string - function_schema: string - name: string - /** @enum {string} */ - orientation: 'ROW' | 'STATEMENT' - schema: string - table: string - table_id?: number - } - UpdateTriggerBody: { - id?: number - /** @enum {string} */ - activation?: 'AFTER' | 'BEFORE' - /** @enum {string} */ - enabled_mode?: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' - events?: ('INSERT' | 'UPDATE' | 'DELETE')[] - function_args?: string[] - function_name?: string - function_schema?: string - name?: string - /** @enum {string} */ - orientation?: 'ROW' | 'STATEMENT' - schema?: string - table?: string - table_id?: number - } - PostgresType: { - id: number - name: string - schema: string - format: string - enums: string[] - comment: string | null - } - PostgresView: { - id: number - schema: string - name: string - is_updatable: boolean - comment: string | null - columns?: components['schemas']['PostgresColumn'][] - } - AccessToken: { - created_at: string - id: number - token_alias: string - name: string - /** @enum {string} */ - scope?: 'V0' - } - CreateAccessTokenBody: { - name: string - /** @enum {string} */ - scope?: 'V0' - } - CreateAccessTokenResponse: { - created_at: string - id: number - token_alias: string - name: string - /** @enum {string} */ - scope?: 'V0' - token: string - } - SearchProfileBody: { - keywords: string - } - Profile: { - first_name: string - gotrue_id: string - id: number - last_name: string - username: string - } - SubscriptionStatisticsResponse: { - total_paid_projects: number - total_free_projects: number - total_active_free_projects: number - total_paused_free_projects: number - total_pro_projects: number - total_payg_projects: number - total_team_projects: number - total_enterprise_projects: number - } - PasswordCheckBody: { - password: string - } - PasswordCheckResponse: { - result: { - feedback?: { - warning?: string - suggestions?: string[] - } - score?: number - } - } - Permission: { - actions: ( - | 'analytics:Read' - | 'auth:Execute' - | 'billing:Read' - | 'billing:Write' - | 'write:Create' - | 'write:Delete' - | 'functions:Read' - | 'functions:Write' - | 'infra:Execute' - | 'read:Read' - | 'sql:Read:Select' - | 'sql:Write:Delete' - | 'sql:Write:Insert' - | 'sql:Write:Update' - | 'storage:Admin:Read' - | 'storage:Admin:Write' - | 'tenant:Sql:Admin:Read' - | 'tenant:Sql:Admin:Write' - | 'tenant:Sql:CreateTable' - | 'tenant:Sql:Write:Delete' - | 'tenant:Sql:Write:Insert' - | 'tenant:Sql:Query' - | 'tenant:Sql:Read:Select' - | 'tenant:Sql:Write:Update' - | 'write:Update' - )[] - condition: unknown - organization_id: number - resources: string[] - } - ProfileResponse: { - id: number - auth0_id: string - primary_email: string - username: string - first_name: string - last_name: string - mobile: string - is_alpha_user: boolean - gotrue_id: string - free_project_limit: number - disabled_features: ( - | 'organizations:create' - | 'organizations:delete' - | 'organization_members:create' - | 'organization_members:delete' - | 'projects:create' - | 'projects:transfer' - | 'project_auth:all' - | 'project_storage:all' - | 'project_edge_function:all' - | 'profile:update' - | 'billing:account_data' - | 'billing:credits' - | 'billing:invoices' - | 'billing:payment_methods' - | 'realtime:all' - )[] - } - UpdateProfileBody: { - first_name: string - last_name: string - } - /** @enum {string} */ - DbInstanceSize: - | 'nano' - | 'micro' - | 'small' - | 'medium' - | 'large' - | 'xlarge' - | '2xlarge' - | '4xlarge' - | '8xlarge' - | '12xlarge' - | '16xlarge' - ProjectInfo: { - infra_compute_size?: components['schemas']['DbInstanceSize'] - cloud_provider: string - id: number - inserted_at: string - name: string - organization_id: number - ref: string - region: string - status: string - subscription_id: string - is_branch_enabled: boolean - is_read_replicas_enabled: boolean - preview_branch_refs: string[] - disk_volume_size_gb?: number - } - GetProjectByFlyExtensionIdResponse: { - ref: string - } - /** @enum {string} */ - DesiredInstanceSize: - | 'micro' - | 'small' - | 'medium' - | 'large' - | 'xlarge' - | '2xlarge' - | '4xlarge' - | '8xlarge' - | '12xlarge' - | '16xlarge' - AmiSearchOptions: { - search_tags?: Record - } - CustomSupabaseInternalRequests: { - ami: components['schemas']['AmiSearchOptions'] - } - CreateProjectBody: { - /** @deprecated */ - kps_enabled?: boolean - desired_instance_size?: components['schemas']['DesiredInstanceSize'] - cloud_provider: string - org_id: number - name: string - db_pass: string - db_region: string - db_pricing_tier_id?: string - db_sql?: string - auth_site_url?: string - vercel_configuration_id?: string - custom_supabase_internal_requests?: components['schemas']['CustomSupabaseInternalRequests'] - } - CreateProjectResponse: { - infra_compute_size?: components['schemas']['DbInstanceSize'] - cloud_provider: string - id: number - inserted_at: string - name: string - organization_id: number - ref: string - region: string - status: string - subscription_id: string - is_branch_enabled: boolean - is_read_replicas_enabled: boolean - preview_branch_refs: string[] - disk_volume_size_gb?: number - endpoint: string - anon_key: string - service_key: string - } - GetUserContentObject: { - owner: { - id?: number - username?: string - } - updated_by: { - id?: number - username?: string - } - id: string - inserted_at: string - updated_at: string - type: Record - visibility: Record - name: string - description?: string - project_id: number - owner_id: number - last_updated_by: number - } - GetUserContentResponse: { - data: components['schemas']['GetUserContentObject'][] - } - CreateContentParams: { - id: string - name: string - description: string - /** @enum {string} */ - type: 'sql' | 'report' | 'log_sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - content?: Record - owner_id?: number - } - UserContentObject: { - id: string - inserted_at: string - updated_at: string - type: Record - visibility: Record - name: string - description?: string - project_id: number - owner_id: number - last_updated_by: number - } - UpsertContentParams: { - id: string - name: string - description: string - /** @enum {string} */ - type: 'sql' | 'report' | 'log_sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - content?: Record - owner_id?: number - project_id: number - } - UpdateContentParams: { - id?: string - name?: string - description?: string - /** @enum {string} */ - type?: 'sql' | 'report' | 'log_sql' - /** @enum {string} */ - visibility?: 'user' | 'project' | 'org' | 'public' - content?: Record - owner_id?: number - } - BulkDeleteUserContentResponse: { - id: string - } - DatabaseDetailResponse: { - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'INIT_READ_REPLICA' - | 'INIT_READ_REPLICA_FAILED' - /** @enum {string} */ - cloud_provider: 'AWS' | 'FLY' - db_port: number - db_name: string - db_user: string - restUrl: string - db_host: string - connectionString: string - identifier: string - inserted_at: string - size: string - region: string - } - DatabaseStatusResponse: { - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'INIT_READ_REPLICA' - | 'INIT_READ_REPLICA_FAILED' - identifier: string - } - UpdatePasswordBody: { - password: string - } - LoadBalancerDatabase: { - identifier: string - /** @enum {string} */ - type: 'PRIMARY' | 'READ_REPLICA' - status: string - } - LoadBalancerDetailResponse: { - endpoint: string - databases: components['schemas']['LoadBalancerDatabase'][] - } - Buffer: Record - ResizeBody: { - volume_size_gb: number - } - ServiceVersions: { - gotrue: string - postgrest: string - 'supabase-postgres': string - } - ProjectDetailResponse: { - infra_compute_size?: components['schemas']['DbInstanceSize'] - cloud_provider: string - db_host: string - id: number - inserted_at: string - name: string - organization_id: number - ref: string - region: string - /** @enum {string} */ - status: - | 'INACTIVE' - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'UNKNOWN' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UPGRADING' - subscription_id: string - connectionString: string - kpsVersion?: string - dbVersion?: string - restUrl: string - serviceVersions?: components['schemas']['ServiceVersions'] - volumeSizeGb?: number - maxDatabasePreprovisionGb?: number - lastDatabaseResizeAt?: string - is_branch_enabled: boolean - parent_project_ref?: string - is_read_replicas_enabled: boolean - v2MaintenanceWindow: { - start?: string - end?: string - } - } - ProjectRefResponse: { - id: number - ref: string - name: string - } - UpdateProjectBody: { - name: string - } - BackupId: { - id: number - } - RestoreProjectInfo: { - id: number - status: string - organization_id: number - subscription_id: string - region: string - cloud_provider: string - back_ups: components['schemas']['BackupId'][] - } - RestartServiceRequest: { - services: ( - | 'adminapi' - | 'api-gateway' - | 'envoy' - | 'functions' - | 'gotrue' - | 'kong' - | 'pgbouncer' - | 'pgsodium' - | 'postgresql' - | 'postgrest' - | 'realtime' - | 'storage' - | 'walg' - | 'autoshutdown' - )[] - source_notification_id?: string - region: string - } - RestartServicesBody: { - restartRequest: components['schemas']['RestartServiceRequest'] - } - ProjectAppConfigResponse: { - db_schema: string - endpoint: string - } - ProjectServiceApiKeyResponse: { - api_key: string - name: string - tags: string - } - ProjectSettingsResponse: { - name: string - ref: string - status: string - inserted_at: string - db_dns_name: string - db_host: string - db_name: string - db_user: string - db_port: string - ssl_enforced: boolean - cloud_provider: string - region: string - app_config?: components['schemas']['ProjectAppConfigResponse'] - jwt_secret?: string - service_api_keys?: components['schemas']['ProjectServiceApiKeyResponse'][] - /** @enum {string|null} */ - db_ip_addr_config: 'legacy' | 'static-ipv4' | 'concurrent-ipv6' | 'ipv6' | null - } - TransferProjectBody: { - target_organization_slug: string - } - PreviewTransferInfo: { - key: string - message: string - } - MemberExceedingFreeProjectLimit: { - name: string - limit: number - } - PreviewTransferInvoiceItem: { - description: string - quantity: number - amount: number - } - PreviewProjectTransferResponse: { - source_subscription_plan: components['schemas']['BillingPlanId'] - target_subscription_plan: components['schemas']['BillingPlanId'] - valid: boolean - warnings: components['schemas']['PreviewTransferInfo'][] - errors: components['schemas']['PreviewTransferInfo'][] - members_exceeding_free_project_limit: components['schemas']['MemberExceedingFreeProjectLimit'][] - has_permissions_on_source_organization: boolean - has_access_to_target_organization: boolean - source_project_eligible: boolean - target_organization_eligible: boolean | null - target_organization_has_free_project_slots: boolean | null - credits_on_source_organization: number - costs_on_target_organization: number - charge_on_target_organization: number - source_invoice_items: components['schemas']['PreviewTransferInvoiceItem'][] - target_invoice_items: components['schemas']['PreviewTransferInvoiceItem'][] - } - AnalyticsResponse: { - error?: OneOf< - [ - { - code?: number - errors?: { - domain?: string - location?: string - locationType?: string - message?: string - reason?: string - }[] - message?: string - status?: string - }, - string, - ] - > - result?: Record[] - } - LFUser: { - token: string - metadata: { - project_ref?: string - } - } - LFSource: { - token: string - id: number - name: string - } - LFEndpoint: { - token: string - id: number - name: string - description: string - query: string - language: Record - sandboxable: boolean | null - cache_duration_seconds: number - proactive_requerying_seconds: number - max_limit: number - enable_auth: number - } - PgbouncerConfigResponse: { - default_pool_size?: number - ignore_startup_parameters?: string - max_client_conn?: number - /** @enum {string} */ - pool_mode?: 'transaction' | 'session' | 'statement' - inserted_at: string - db_dns_name: string - db_user: string - db_host: string - db_port: number - db_name: string - ssl_enforced: boolean - pgbouncer_enabled: boolean - supavisor_enabled: boolean - /** @enum {string} */ - pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING' - connectionString: string - } - PgbouncerStatusResponse: { - active: boolean - } - UpdatePgbouncerConfigBody: { - default_pool_size?: number - max_client_conn?: number | null - ignore_startup_parameters: string - pgbouncer_enabled: boolean - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - } - UpdatePoolingConfigResponse: { - default_pool_size?: number - max_client_conn?: number | null - ignore_startup_parameters: string - pgbouncer_enabled: boolean - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - /** @enum {string} */ - pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING' - } - PostgrestConfigResponse: { - db_schema: string - db_anon_role: string - role_claim_key: string - jwt_secret: string - max_rows: number - db_extra_search_path: string - } - UpdatePostgrestConfigBody: { - max_rows?: number - db_extra_search_path?: string - db_schema?: string - } - V1PostgrestConfigResponse: { - max_rows: number - db_schema: string - db_extra_search_path: string - } - PostgresConfigResponse: { - statement_timeout?: string - effective_cache_size?: string - maintenance_work_mem?: string - max_connections?: number - max_locks_per_transaction?: number - max_parallel_maintenance_workers?: number - max_parallel_workers?: number - max_parallel_workers_per_gather?: number - max_worker_processes?: number - shared_buffers?: string - work_mem?: string - /** @enum {string} */ - session_replication_role?: 'origin' | 'replica' | 'local' - } - UpdatePostgresConfigBody: { - statement_timeout?: string - effective_cache_size?: string - maintenance_work_mem?: string - max_connections?: number - max_locks_per_transaction?: number - max_parallel_maintenance_workers?: number - max_parallel_workers?: number - max_parallel_workers_per_gather?: number - max_worker_processes?: number - shared_buffers?: string - work_mem?: string - /** @enum {string} */ - session_replication_role?: 'origin' | 'replica' | 'local' - } - UpdateSecretsConfigBody: { - jwt_secret: string - change_tracking_id: string - } - UpdateSecretsResponse: { - message: string - } - StorageConfigResponse: { - isFreeTier: boolean - fileSizeLimit: number - } - UpdateStorageConfigBody: { - fileSizeLimit: number - } - UpdateStorageConfigResponse: { - fileSizeLimit: number - } - SupavisorConfigResponse: { - identifier: string - /** @enum {string} */ - database_type: 'PRIMARY' | 'READ_REPLICA' - is_using_scram_auth: boolean - db_user: string - db_host: string - db_port: number - db_name: string - connectionString: string - default_pool_size: number | null - max_client_conn: number | null - /** @enum {string|null} */ - pool_mode: 'transaction' | 'session' | 'statement' | null - } - UpdateSupavisorConfigBody: { - default_pool_size?: number - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - } - UpdateSupavisorConfigResponse: { - default_pool_size?: number - /** @enum {string} */ - pool_mode: 'transaction' | 'session' | 'statement' - } - AvailableAddonResponse: { - type: components['schemas']['ProjectAddonType'] - name: string - variants: components['schemas']['ProjectAddonVariantResponse'][] - } - ProjectAddonsResponse: { - ref: string - selected_addons: components['schemas']['SelectedAddonResponse'][] - available_addons: components['schemas']['AvailableAddonResponse'][] - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - UpdateAddonBody: { - addon_variant: components['schemas']['AddonVariantId'] - addon_type: components['schemas']['ProjectAddonType'] - } -<<<<<<< HEAD - ApiResponse: Record - SettingsResponse: Record - UpdateStorageBucketBody: Record - CreateStorageBucketBody: Record - GetObjectsBody: Record - GetPublicUrlBody: Record - DownloadObjectBody: Record - GetSignedUrlBody: Record - GetSignedUrlsBody: Record - CopyObjectBody: Record - MoveObjectBody: Record - DeleteObjectsBody: Record - CreateStorageCredentialBody: Record - TelemetryEventBody: Record - TelemetryIdentifyBody: Record - TelemetryPageBody: Record - TelemetryActivityBody: Record - TelemetryPageviewBody: Record - CreateVercelEnvironmentVariableBody: Record - CreateVercelIntegrationBody: Record - CreateVercelConnectionsBody: Record - UpdateVercelConnectionsBody: Record - CreateGitHubAuthorizationBody: Record - CreateGitHubConnectionsBody: Record - UpdateGitHubConnectionsBody: Record - CreateCliLoginSessionBody: Record -======= - ServiceApiKey: { - api_key_encrypted?: string - tags: string - name: string - } - AutoApiService: { - protocol: string - endpoint: string - restUrl: string - project: { - ref?: string - } - defaultApiKey: string - serviceApiKey: string - id: number - name: string - app_config: Record - app: { - id?: number - name?: string - } - service_api_keys: components['schemas']['ServiceApiKey'][] - } - ApiResponse: { - autoApiService: components['schemas']['AutoApiService'] - } - JwtSecretUpdateStatus: { - jwtSecretUpdateStatus: { - change_tracking_id?: string - /** @enum {number} */ - error?: 0 | 1 | 2 | 3 | 4 | 5 - /** @enum {number} */ - progress?: 0 | 1 | 2 | 3 | 4 | 5 - /** @enum {number} */ - status?: 0 | 1 | 2 - } - } - ServiceApiKeyResponse: { - api_key_encrypted?: string - tags: string - name: string - api_key?: string - } - ServiceResponse: { - service_api_keys: components['schemas']['ServiceApiKeyResponse'][] - id: number - name: string - app_config: Record - app: { - id?: number - name?: string - } - } - ProjectResponse: { - jwt_secret: string - services?: components['schemas']['ServiceResponse'][] - id: number - name: string - ref: string - status: string - inserted_at: string - db_dns_name: string - db_host: string - db_name: string - db_user: string - db_port: string - ssl_enforced: boolean - cloud_provider: string - region: string - } - SettingsResponse: { - project: components['schemas']['ProjectResponse'] - services: components['schemas']['ServiceResponse'][] - } - StorageBucket: { - id: string - name: string - owner: string - created_at: string - updated_at: string - public: boolean - } - UpdateStorageBucketBody: { - public: boolean - file_size_limit: number - allowed_mime_types: string[] - } - CreateStorageBucketBody: { - id: string - public: boolean - file_size_limit: number - allowed_mime_types: string[] - } - StorageObjectSortBy: { - column?: string - order?: string - } - StorageObjectSearchOptions: { - limit?: number - offset?: number - sortBy?: components['schemas']['StorageObjectSortBy'] - search?: string - } - GetObjectsBody: { - path: string - options: components['schemas']['StorageObjectSearchOptions'] - } - StorageObject: { - name: string - bucket_id: string - owner: string - id: string - updated_at: string - created_at: string - last_accessed_at: string - metadata: Record - buckets: components['schemas']['StorageBucket'] - } - StorageObjectTransformOptions: { - width?: number - height?: number - /** @enum {string} */ - resize?: 'cover' | 'contain' | 'fill' - quality?: number - /** @enum {string} */ - format?: 'origin' - } - PublicUrlOptions: { - transform?: components['schemas']['StorageObjectTransformOptions'] - download?: boolean - downloadName?: string - } - GetPublicUrlBody: { - path: string - options?: components['schemas']['PublicUrlOptions'] - } - PublicUrlResponse: { - publicUrl: string - } - DownloadObjectOptions: { - transform?: components['schemas']['StorageObjectTransformOptions'] - download?: boolean - downloadName?: string - } - DownloadObjectBody: { - path: string - options?: components['schemas']['DownloadObjectOptions'] - } - SignedUrlOptions: { - transform?: components['schemas']['StorageObjectTransformOptions'] - download?: boolean - downloadName?: string - } - GetSignedUrlBody: { - path: string - expiresIn: number - options?: components['schemas']['SignedUrlOptions'] - } - SignedUrlResponse: { - signedUrl: string - } - SignedUrlsOptions: { - download?: boolean - downloadName?: string - } - GetSignedUrlsBody: { - path: string[] - expiresIn: number - options?: components['schemas']['SignedUrlsOptions'] - } - SignedUrlsResponse: { - signedUrl: string - error: string | null - path: string | null - } - CopyObjectBody: { - from: string - to: string - } - CopyObjectResponse: { - path: string - } - MoveObjectBody: { - from: string - to: string - } - DeleteObjectsBody: { - paths: string[] - } - GetStorageCredential: { - id: string - description: string - created_at: string - } - GetStorageCredentialsResponse: { - data: components['schemas']['GetStorageCredential'][] - } - CreateStorageCredentialBody: { - description: string - } - CreateStorageCredentialResponse: { - id: string - access_key: string - secret_key: string - description: string - } - Invoice: { - id: string - invoice_pdf: string - subscription: string - subtotal: number - number: string - period_end: number - status: string - } - OverdueInvoiceCount: { - organization_id: number - overdue_invoice_count: number - } - GoogleAnalyticBody: { - language?: string - screen_resolution?: string - session_id: string - } - TelemetryEventBody: { - category: string - action: string - label?: Record - value?: string - page_referrer?: string - page_title?: string - page_location?: string - ga?: components['schemas']['GoogleAnalyticBody'] - } - IdentifyUserBody: { - id: number - gotrue_id: string - mobile?: string - primary_email: string - username?: string - first_name?: string - last_name?: string - is_alpha_user?: boolean - free_project_limit?: number - auth0_id?: string - } - TelemetryIdentifyBody: { - user: components['schemas']['IdentifyUserBody'] - ga?: components['schemas']['GoogleAnalyticBody'] - } - TelemetryPageBody: { - referrer: string - title: string - route?: string - ga?: components['schemas']['GoogleAnalyticBody'] - } - PageBody: { - path: string - location: string - referrer?: string - title?: string - } - TelemetryActivityBody: { - activity: string - source: string - projectRef?: string - orgSlug?: string - data?: Record - page: components['schemas']['PageBody'] - } - TelemetryPageviewBody: { - projectRef?: string - orgSlug?: string - referrer: string - title: string - path: string - location: string - } - CreateVercelEnvironmentVariableBody: { - key: string - target: string[] - type: string - value: string - } - GetUserOrganizationIntegrationResponse: { - id: string - inserted_at: string - updated_at: string - metadata: Record - integration: { - name?: string - } - added_by: { - username?: string - primary_email?: string - } - organization: { - slug?: string - } - } - ProjectIntegrationConnection: { - id: string - inserted_at: string - updated_at: string - organization_integration_id: string - supabase_project_ref: string - added_by: { - username?: string - primary_email?: string - } - } - GetOrganizationIntegrationResponse: { - id: string - inserted_at: string - updated_at: string - metadata: Record - integration: { - name?: string - } - added_by: { - username?: string - primary_email?: string - } - organization: { - slug?: string - } - connections: components['schemas']['ProjectIntegrationConnection'][] - } - CreateVercelIntegrationBody: { - code: string - configuration_id: string - organization_slug: string - metadata: Record - source: string - teamId?: string - } - VercelProjectDeployHooks: { - createdAt?: number - id: string - name: string - ref: string - url: string - } - VercelProjectLink: { - type?: string - deployHooks: components['schemas']['VercelProjectDeployHooks'][] - gitCredentialId?: string - productionBranch?: string - } - IntegrationVercelProject: { - id: string - name: string - framework?: string | null - link?: components['schemas']['VercelProjectLink'] - } - GetVercelProjectsResponse: { - projects: components['schemas']['IntegrationVercelProject'][] - pagination: { - count?: number - next?: number | null - prev?: number | null - } - } - GetVercelConnections: { - id: string - inserted_at: string - updated_at: string - organization_integration_id: string - supabase_project_ref: string - foreign_project_id: string - metadata: Record - } - IntegrationConnectionVercel: { - foreign_project_id: string - supabase_project_ref: string - metadata: Record - } - CreateVercelConnectionsBody: { - organization_integration_id: string - connection: components['schemas']['IntegrationConnectionVercel'] - } - SyncVercelEnvError: { - message: string - } - CreateVercelConnectionResponse: { - id: string - env_sync_error?: components['schemas']['SyncVercelEnvError'] - } - UpdateVercelConnectionsBody: { - metadata: Record - } - DeleteVercelConnectionResponse: { - id: string - } - GitHubAuthorization: { - id: number - user_id: number - sender_id: number - } - CreateGitHubAuthorizationBody: { - code: string - } - ListGitHubConnectionsProject: { - id: number - ref: string - name: string - } - ListGitHubConnectionsRepository: { - id: number - name: string - } - ListGitHubConnectionsUser: { - id: number - username: string - primary_email: string | null - } - ListGitHubConnectionsConnection: { - id: number - inserted_at: string - updated_at: string - installation_id: number - project: components['schemas']['ListGitHubConnectionsProject'] - repository: components['schemas']['ListGitHubConnectionsRepository'] - user: components['schemas']['ListGitHubConnectionsUser'] | null - workdir: string - } - ListGitHubConnectionsResponse: { - connections: components['schemas']['ListGitHubConnectionsConnection'][] - } - CreateGitHubConnectionsBody: { - project_ref: string - installation_id: number - repository_id: number - } - UpdateGitHubConnectionsBody: { - workdir?: string - supabase_changes_only?: boolean - } - CreateCliLoginSessionBody: { - session_id: string - public_key: string - token_name?: string - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - V1UpdateFunctionBody: { - name?: string - body?: string - verify_jwt?: boolean - } -<<<<<<< HEAD - V1CreateFunctionBody: { -======= - FunctionResponse: { - id: string ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - slug: string - name: string - body: string - verify_jwt?: boolean -<<<<<<< HEAD -======= - import_map?: boolean - entrypoint_path?: string - import_map_path?: string - } - V1CreateFunctionBody: { - slug: string - name: string - body: string - verify_jwt?: boolean - } - SecretResponse: { - name: string - value: string ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - } - CreateSecretBody: { - /** - * @description Secret name must not start with the SUPABASE_ prefix. - * @example string - */ - name: string - } - ReportStatusBody: Record - EventBody: Record - CredentialsRequestBody: Record - UpdateAddonAdminBody: { - addon_variant: components['schemas']['AddonVariantId'] - addon_type: components['schemas']['ProjectAddonType'] - /** @enum {string} */ - proration_behaviour: 'prorate_and_invoice_end_of_cycle' | 'prorate_and_invoice_now' - } - SystemCreateProjectBody: { - /** @description Database password */ - db_pass: string - /** @description Name of your project, should not contain dots */ - name: string - /** @description Slug of your organization */ - organization_id: string - /** - * @description Subscription plan - * @example free - * @enum {string} - */ - plan: 'free' | 'pro' - /** - * @description Region you want your server to reside in - * @example us-east-1 - * @enum {string} - */ - region: - | 'us-east-1' - | 'us-west-1' - | 'us-west-2' - | 'ap-east-1' - | 'ap-southeast-1' - | 'ap-northeast-1' - | 'ap-northeast-2' - | 'ap-southeast-2' - | 'eu-west-1' - | 'eu-west-2' - | 'eu-west-3' - | 'eu-central-1' - | 'ca-central-1' - | 'ap-south-1' - | 'sa-east-1' - } - SystemDatabaseResponse: { - /** @description Database host */ - host: string - /** @description Database version */ - version: string - } - SystemProjectResponse: { - /** @description Id of your project */ - id: string - /** @description Slug of your organization */ - organization_id: string - /** @description Name of your project */ - name: string - /** - * @description Region of your project - * @example us-east-1 - */ - region: string - /** - * @description Creation timestamp - * @example 2023-03-29T16:32:59Z - */ - created_at: string - database?: components['schemas']['SystemDatabaseResponse'] - } -<<<<<<< HEAD - UpdateSubscriptionV2AdminBody: Record - UpdateRestrictionsBody: Record - CreateAwsPartnerOrganizationBody: Record - GetMetricsBody: Record - UpdateBranchBody: Record - V1CreateProjectBody: { - /** @description Database password */ - db_pass: string - /** @description Name of your project, should not contain dots */ -======= - UpdateSubscriptionV2AdminBody: { - payment_method?: string - /** @enum {string} */ - tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' - price_id?: string - } - RestrictionData: { - grace_period_end?: string - /** @enum {string} */ - restrictions?: 'drop_requests_402' - violations?: ( - | 'exceed_db_size_quota' - | 'exceed_egress_quota' - | 'exceed_edge_functions_count_quota' - | 'exceed_edge_functions_invocations_quota' - | 'exceed_monthly_active_users_quota' - | 'exceed_realtime_connection_count_quota' - | 'exceed_realtime_message_count_quota' - | 'exceed_storage_size_quota' - | 'overdue_payment' - )[] - } - UpdateRestrictionsBody: { - /** @enum {string} */ - restriction_status: 'grace_period' | 'grace_period_over' | 'null' | 'restricted' - restriction_data?: components['schemas']['RestrictionData'] - no_notification?: boolean - } - UpdateRestrictionsResponse: { - slug: string - /** @enum {string} */ - restriction_status?: 'grace_period' | 'grace_period_over' | 'null' | 'restricted' - restriction_data?: components['schemas']['RestrictionData'] - message?: string - } - CreateAwsPartnerOrganizationBody: { - primary_email: string - name: string - } - AwsPartnerOrganizationResponse: { - id: number - slug: string - name: string - } - GetMetricsBody: { - /** @enum {string} */ - metric: 'user_queries' - /** @enum {string} */ - interval: '1d' | '3d' | '7d' - project_refs: string[] - region: string - } - ProjectMetric: { - project_ref: string - metric: string - value: number - } - GetMetricsResponse: { - metrics: components['schemas']['ProjectMetric'][] - } - BranchDetailResponse: { - db_port: number - ref: string - postgres_version: string - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INACTIVE' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'PAUSING' - db_host: string - db_user?: string - db_pass?: string - jwt_secret?: string - } - UpdateBranchBody: { - branch_name?: string - git_branch?: string - reset_on_push?: boolean - persistent?: boolean - } - BranchResponse: { - id: string ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - name: string - /** @description Slug of your organization */ - organization_id: string - /** - * @deprecated - * @description Subscription plan is now set on organization level and is ignored in this request - * @example free - * @enum {string} - */ - plan: 'free' | 'pro' - /** - * @description Region you want your server to reside in - * @example us-east-1 - * @enum {string} - */ - region: - | 'us-east-1' - | 'us-west-1' - | 'us-west-2' - | 'ap-east-1' - | 'ap-southeast-1' - | 'ap-northeast-1' - | 'ap-northeast-2' - | 'ap-southeast-2' - | 'eu-west-1' - | 'eu-west-2' - | 'eu-west-3' - | 'eu-central-1' - | 'ca-central-1' - | 'ap-south-1' - | 'sa-east-1' - /** @deprecated */ - kps_enabled: boolean - desired_instance_size: components['schemas']['DesiredInstanceSize'] - /** - * @description Template URL used to create the project from the CLI. - * @example https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone - */ - template_url: string - } - V1DatabaseResponse: { - /** @description Database host */ - host: string - /** @description Database version */ - version: string - } - V1ProjectResponse: { - /** @description Id of your project */ - id: string - /** @description Slug of your organization */ - organization_id: string - /** @description Name of your project */ - name: string - /** - * @description Region of your project - * @example us-east-1 - */ - region: string - /** - * @description Creation timestamp - * @example 2023-03-29T16:32:59Z - */ - created_at: string - database?: components['schemas']['V1DatabaseResponse'] - /** @enum {string} */ - status: - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'COMING_UP' - | 'GOING_DOWN' - | 'INACTIVE' - | 'INIT_FAILED' - | 'REMOVED' - | 'RESTORING' - | 'UNKNOWN' - | 'UPGRADING' - | 'PAUSING' - } -<<<<<<< HEAD - CreateBranchBody: Record - UpdateCustomHostnameBody: Record - RemoveNetworkBanRequest: Record - NetworkRestrictionsRequest: Record - UpdatePgsodiumConfigBody: Record - SslEnforcementRequest: Record - VanitySubdomainBody: Record - UpgradeDatabaseBody: Record -======= - V1CreateProjectBody: { - /** @description Database password */ - db_pass: string - /** @description Name of your project, should not contain dots */ - name: string - /** @description Slug of your organization */ - organization_id: string - /** - * @deprecated - * @description Subscription plan is now set on organization level and is ignored in this request - * @example free - * @enum {string} - */ - plan?: 'free' | 'pro' - /** - * @description Region you want your server to reside in - * @example us-east-1 - * @enum {string} - */ - region: - | 'us-east-1' - | 'us-west-1' - | 'us-west-2' - | 'ap-east-1' - | 'ap-southeast-1' - | 'ap-northeast-1' - | 'ap-northeast-2' - | 'ap-southeast-2' - | 'eu-west-1' - | 'eu-west-2' - | 'eu-west-3' - | 'eu-central-1' - | 'ca-central-1' - | 'ap-south-1' - | 'sa-east-1' - /** @deprecated */ - kps_enabled?: boolean - desired_instance_size?: components['schemas']['DesiredInstanceSize'] - /** - * @description Template URL used to create the project from the CLI. - * @example https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone - */ - template_url?: string - } - ApiKeyResponse: { - name: string - api_key: string - } - CreateBranchBody: { - branch_name: string - git_branch?: string - region?: string - } - UpdateCustomHostnameResponse: { - /** @enum {string} */ - status: - | '1_not_started' - | '2_initiated' - | '3_challenge_verified' - | '4_origin_setup_completed' - | '5_services_reconfigured' - custom_hostname: string - data: Record - } - UpdateCustomHostnameBody: { - custom_hostname: string - } - NetworkBanResponse: { - banned_ipv4_addresses: string[] - } - RemoveNetworkBanRequest: { - ipv4_addresses: string[] - } - NetworkRestrictionsRequest: { - dbAllowedCidrs?: string[] - dbAllowedCidrsV6?: string[] - } - NetworkRestrictionsResponse: { - /** @enum {string} */ - entitlement: 'disallowed' | 'allowed' - config: components['schemas']['NetworkRestrictionsRequest'] - old_config?: components['schemas']['NetworkRestrictionsRequest'] - /** @enum {string} */ - status: 'stored' | 'applied' - } - PgsodiumConfigResponse: { - root_key: string - } - UpdatePgsodiumConfigBody: { - root_key: string - } - PostgrestConfigWithJWTSecretResponse: { - max_rows: number - db_schema: string - db_extra_search_path: string - jwt_secret?: string - } - V1ProjectRefResponse: { - id: number - ref: string - name: string - } - SslEnforcements: { - database: boolean - } - SslEnforcementResponse: { - currentConfig: components['schemas']['SslEnforcements'] - appliedSuccessfully: boolean - } - SslEnforcementRequest: { - requestedConfig: components['schemas']['SslEnforcements'] - } - TypescriptResponse: { - types: string - } - VanitySubdomainConfigResponse: { - /** @enum {string} */ - status: 'not-used' | 'custom-domain-used' | 'active' - custom_domain?: string - } - VanitySubdomainBody: { - vanity_subdomain: string - } - SubdomainAvailabilityResponse: { - available: boolean - } - ActivateVanitySubdomainResponse: { - custom_domain: string - } - UpgradeDatabaseBody: { - target_version: number - } - ProjectUpgradeInitiateResponse: { - tracking_id: string - } - ProjectVersion: { - postgres_version: number - app_version: string - } - ProjectUpgradeEligibilityResponse: { - eligible: boolean - current_app_version: string - latest_app_version: string - target_upgrade_versions: components['schemas']['ProjectVersion'][] - potential_breaking_changes: string[] - duration_estimate_hours: number - legacy_auth_custom_roles: string[] - extension_dependent_objects: string[] - } - DatabaseUpgradeStatus: { - initiated_at: string - target_version: number - /** @enum {string} */ - error?: - | '1_upgraded_instance_launch_failed' - | '2_volume_detachchment_from_upgraded_instance_failed' - | '3_volume_attachment_to_original_instance_failed' - | '4_data_upgrade_initiation_failed' - | '5_data_upgrade_completion_failed' - | '6_volume_detachchment_from_original_instance_failed' - | '7_volume_attachment_to_upgraded_instance_failed' - | '8_upgrade_completion_failed' - /** @enum {string} */ - progress?: - | '0_requested' - | '1_started' - | '2_launched_upgraded_instance' - | '3_detached_volume_from_upgraded_instance' - | '4_attached_volume_to_original_instance' - | '5_initiated_data_upgrade' - | '6_completed_data_upgrade' - | '7_detached_volume_from_original_instance' - | '8_attached_volume_to_upgraded_instance' - | '9_completed_upgrade' - /** @enum {number} */ - status: 0 | 1 | 2 - } - DatabaseUpgradeStatusResponse: { - databaseUpgradeStatus: components['schemas']['DatabaseUpgradeStatus'] | null - } - ReadOnlyStatusResponse: { - enabled: boolean - override_enabled: boolean - override_active_until: string - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - SetUpReadReplicaBody: { - /** - * @description Region you want your read replica to reside in - * @example us-east-1 - * @enum {string} - */ - read_replica_region: - | 'us-east-1' - | 'us-west-1' - | 'us-west-2' - | 'ap-east-1' - | 'ap-southeast-1' - | 'ap-northeast-1' - | 'ap-northeast-2' - | 'ap-southeast-2' - | 'eu-west-1' - | 'eu-west-2' - | 'eu-west-3' - | 'eu-central-1' - | 'ca-central-1' - | 'ap-south-1' - | 'sa-east-1' - } - RemoveReadReplicaBody: Record - AuthHealthResponse: { - name: string - version: string - description: string - } - RealtimeHealthResponse: { - healthy: boolean - db_connected: boolean - connected_cluster: number - } - V1ServiceHealthResponse: { - info: - | components['schemas']['AuthHealthResponse'] - | components['schemas']['RealtimeHealthResponse'] -<<<<<<< HEAD -======= - /** @enum {string} */ - name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage' - healthy: boolean - /** @enum {string} */ - status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY' - error?: string - } - V1PgbouncerConfigResponse: { - /** @enum {string} */ - pool_mode?: 'transaction' | 'session' | 'statement' - default_pool_size?: number - ignore_startup_parameters?: string - max_client_conn?: number - connection_string?: string - } - AuthConfigResponse: { - disable_signup: boolean | null - external_anonymous_users_enabled: boolean | null - external_apple_additional_client_ids: string | null - external_apple_client_id: string | null - external_apple_enabled: boolean | null - external_apple_secret: string | null - external_azure_client_id: string | null - external_azure_enabled: boolean | null - external_azure_secret: string | null - external_azure_url: string | null - external_bitbucket_client_id: string | null - external_bitbucket_enabled: boolean | null - external_bitbucket_secret: string | null - external_discord_client_id: string | null - external_discord_enabled: boolean | null - external_discord_secret: string | null - external_email_enabled: boolean | null - external_facebook_client_id: string | null - external_facebook_enabled: boolean | null - external_facebook_secret: string | null - external_figma_client_id: string | null - external_figma_enabled: boolean | null - external_figma_secret: string | null - external_github_client_id: string | null - external_github_enabled: boolean | null - external_github_secret: string | null - external_gitlab_client_id: string | null - external_gitlab_enabled: boolean | null - external_gitlab_secret: string | null - external_gitlab_url: string | null - external_google_additional_client_ids: string | null - external_google_client_id: string | null - external_google_enabled: boolean | null - external_google_secret: string | null - external_google_skip_nonce_check: boolean | null - external_kakao_client_id: string | null - external_kakao_enabled: boolean | null - external_kakao_secret: string | null - external_keycloak_client_id: string | null - external_keycloak_enabled: boolean | null - external_keycloak_secret: string | null - external_keycloak_url: string | null - external_linkedin_oidc_client_id: string | null - external_linkedin_oidc_enabled: boolean | null - external_linkedin_oidc_secret: string | null - external_notion_client_id: string | null - external_notion_enabled: boolean | null - external_notion_secret: string | null - external_phone_enabled: boolean | null - external_slack_client_id: string | null - external_slack_enabled: boolean | null - external_slack_secret: string | null - external_spotify_client_id: string | null - external_spotify_enabled: boolean | null - external_spotify_secret: string | null - external_twitch_client_id: string | null - external_twitch_enabled: boolean | null - external_twitch_secret: string | null - external_twitter_client_id: string | null - external_twitter_enabled: boolean | null - external_twitter_secret: string | null - external_workos_client_id: string | null - external_workos_enabled: boolean | null - external_workos_secret: string | null - external_workos_url: string | null - external_zoom_client_id: string | null - external_zoom_enabled: boolean | null - external_zoom_secret: string | null - hook_custom_access_token_enabled: boolean | null - hook_custom_access_token_uri: string | null - hook_mfa_verification_attempt_enabled: boolean | null - hook_mfa_verification_attempt_uri: string | null - hook_password_verification_attempt_enabled: boolean | null - hook_password_verification_attempt_uri: string | null - jwt_exp: number | null - mailer_allow_unverified_email_sign_ins: boolean | null - mailer_autoconfirm: boolean | null - mailer_otp_exp: number | null - mailer_secure_email_change_enabled: boolean | null - mailer_subjects_confirmation: string | null - mailer_subjects_email_change: string | null - mailer_subjects_invite: string | null - mailer_subjects_magic_link: string | null - mailer_subjects_recovery: string | null - mailer_subjects_reauthentication: string | null - mailer_templates_confirmation_content: string | null - mailer_templates_email_change_content: string | null - mailer_templates_invite_content: string | null - mailer_templates_magic_link_content: string | null - mailer_templates_recovery_content: string | null - mailer_templates_reauthentication_content: string | null - mfa_max_enrolled_factors: number | null - password_hibp_enabled: boolean | null - password_min_length: number | null - password_required_characters: string | null - rate_limit_anonymous_users: number | null - rate_limit_email_sent: number | null - rate_limit_sms_sent: number | null - rate_limit_token_refresh: number | null - rate_limit_verify: number | null - refresh_token_rotation_enabled: boolean | null - saml_enabled: boolean | null - security_captcha_enabled: boolean | null - security_captcha_provider: string | null - security_captcha_secret: string | null - security_manual_linking_enabled: boolean | null - security_refresh_token_reuse_interval: number | null - security_update_password_require_reauthentication: boolean | null - sessions_inactivity_timeout: number | null - sessions_single_per_user: boolean | null - sessions_tags: string | null - sessions_timebox: number | null - site_url: string | null - sms_autoconfirm: boolean | null - sms_max_frequency: number | null - sms_messagebird_access_key: string | null - sms_messagebird_originator: string | null - sms_otp_exp: number | null - sms_otp_length: number | null - sms_provider: string | null - sms_template: string | null - sms_test_otp: string | null - sms_test_otp_valid_until: string | null - sms_textlocal_api_key: string | null - sms_textlocal_sender: string | null - sms_twilio_account_sid: string | null - sms_twilio_auth_token: string | null - sms_twilio_content_sid: string | null - sms_twilio_message_service_sid: string | null - sms_twilio_verify_account_sid: string | null - sms_twilio_verify_auth_token: string | null - sms_twilio_verify_message_service_sid: string | null - sms_vonage_api_key: string | null - sms_vonage_api_secret: string | null - sms_vonage_from: string | null - smtp_admin_email: string | null - smtp_host: string | null - smtp_max_frequency: number | null - smtp_pass: string | null - smtp_port: string | null - smtp_sender_name: string | null - smtp_user: string | null - uri_allow_list: string | null - } - UpdateAuthConfigBody: { - site_url?: string - disable_signup?: boolean - jwt_exp?: number - smtp_admin_email?: string - smtp_host?: string - smtp_port?: string - smtp_user?: string - smtp_pass?: string - smtp_max_frequency?: number - smtp_sender_name?: string - mailer_allow_unverified_email_sign_ins?: boolean - mailer_autoconfirm?: boolean - mailer_subjects_invite?: string - mailer_subjects_confirmation?: string - mailer_subjects_recovery?: string - mailer_subjects_email_change?: string - mailer_subjects_magic_link?: string - mailer_subjects_reauthentication?: string - mailer_templates_invite_content?: string - mailer_templates_confirmation_content?: string - mailer_templates_recovery_content?: string - mailer_templates_email_change_content?: string - mailer_templates_magic_link_content?: string - mailer_templates_reauthentication_content?: string - mfa_max_enrolled_factors?: number - uri_allow_list?: string - external_anonymous_users_enabled?: boolean - external_email_enabled?: boolean - external_phone_enabled?: boolean - saml_enabled?: boolean - security_captcha_enabled?: boolean - security_captcha_provider?: string - security_captcha_secret?: string - sessions_timebox?: number - sessions_inactivity_timeout?: number - sessions_single_per_user?: boolean - sessions_tags?: string - rate_limit_anonymous_users?: number - rate_limit_email_sent?: number - rate_limit_sms_sent?: number - rate_limit_verify?: number - rate_limit_token_refresh?: number - mailer_secure_email_change_enabled?: boolean - refresh_token_rotation_enabled?: boolean - password_hibp_enabled?: boolean - password_min_length?: number - /** @enum {string} */ - password_required_characters?: - | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' - | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~' - | '' - security_manual_linking_enabled?: boolean - security_update_password_require_reauthentication?: boolean - security_refresh_token_reuse_interval?: number - mailer_otp_exp?: number - sms_autoconfirm?: boolean - sms_max_frequency?: number - sms_otp_exp?: number - sms_otp_length?: number - sms_provider?: string - sms_messagebird_access_key?: string - sms_messagebird_originator?: string - sms_test_otp?: string - sms_test_otp_valid_until?: string - sms_textlocal_api_key?: string - sms_textlocal_sender?: string - sms_twilio_account_sid?: string - sms_twilio_auth_token?: string - sms_twilio_content_sid?: string - sms_twilio_message_service_sid?: string - sms_twilio_verify_account_sid?: string - sms_twilio_verify_auth_token?: string - sms_twilio_verify_message_service_sid?: string - sms_vonage_api_key?: string - sms_vonage_api_secret?: string - sms_vonage_from?: string - sms_template?: string - hook_mfa_verification_attempt_enabled?: boolean - hook_mfa_verification_attempt_uri?: string - hook_password_verification_attempt_enabled?: boolean - hook_password_verification_attempt_uri?: string - hook_custom_access_token_enabled?: boolean - hook_custom_access_token_uri?: string - hook_send_sms_enabled?: boolean - hook_send_sms_uri?: string - hook_send_email_enabled?: boolean - hook_send_email_uri?: string - external_apple_enabled?: boolean - external_apple_client_id?: string - external_apple_secret?: string - external_apple_additional_client_ids?: string - external_azure_enabled?: boolean - external_azure_client_id?: string - external_azure_secret?: string - external_azure_url?: string - external_bitbucket_enabled?: boolean - external_bitbucket_client_id?: string - external_bitbucket_secret?: string - external_discord_enabled?: boolean - external_discord_client_id?: string - external_discord_secret?: string - external_facebook_enabled?: boolean - external_facebook_client_id?: string - external_facebook_secret?: string - external_figma_enabled?: boolean - external_figma_client_id?: string - external_figma_secret?: string - external_github_enabled?: boolean - external_github_client_id?: string - external_github_secret?: string - external_gitlab_enabled?: boolean - external_gitlab_client_id?: string - external_gitlab_secret?: string - external_gitlab_url?: string - external_google_enabled?: boolean - external_google_client_id?: string - external_google_secret?: string - external_google_additional_client_ids?: string - external_google_skip_nonce_check?: boolean - external_kakao_enabled?: boolean - external_kakao_client_id?: string - external_kakao_secret?: string - external_keycloak_enabled?: boolean - external_keycloak_client_id?: string - external_keycloak_secret?: string - external_keycloak_url?: string - external_linkedin_oidc_enabled?: boolean - external_linkedin_oidc_client_id?: string - external_linkedin_oidc_secret?: string - external_notion_enabled?: boolean - external_notion_client_id?: string - external_notion_secret?: string - external_slack_enabled?: boolean - external_slack_client_id?: string - external_slack_secret?: string - external_spotify_enabled?: boolean - external_spotify_client_id?: string - external_spotify_secret?: string - external_twitch_enabled?: boolean - external_twitch_client_id?: string - external_twitch_secret?: string - external_twitter_enabled?: boolean - external_twitter_client_id?: string - external_twitter_secret?: string - external_workos_enabled?: boolean - external_workos_client_id?: string - external_workos_secret?: string - external_workos_url?: string - external_zoom_enabled?: boolean - external_zoom_client_id?: string - external_zoom_secret?: string - } - CreateThirdPartyAuthBody: { - oidc_issuer_url?: string - jwks_url?: string - custom_jwks?: Record - } - ThirdPartyAuth: { - id: string - type: string - oidc_issuer_url?: string | null - jwks_url?: string | null - custom_jwks?: unknown - resolved_jwks?: unknown - inserted_at: string - updated_at: string - resolved_at?: string | null - } - AttributeValue: { - default?: Record | number | string | boolean - name?: string - names?: string[] - } - AttributeMapping: { - keys: { - [key: string]: components['schemas']['AttributeValue'] - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - } - UpdateAuthConfigBody: Record - CreateThirdPartyAuthBody: Record - CreateProviderBody: { - /** - * @description What type of provider will be created - * @enum {string} - */ - type: 'saml' -<<<<<<< HEAD -======= - metadata_xml?: string - metadata_url?: string - domains?: string[] - attribute_mapping?: components['schemas']['AttributeMapping'] - } - SamlDescriptor: { - id: string - entity_id: string - metadata_url?: string - metadata_xml?: string - attribute_mapping?: components['schemas']['AttributeMapping'] - } - Domain: { - id: string - domain?: string - created_at?: string - updated_at?: string - } - CreateProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - Provider: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - ListProvidersResponse: { - items: components['schemas']['Provider'][] - } - GetProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - UpdateProviderBody: { - metadata_xml?: string - metadata_url?: string - domains?: string[] - attribute_mapping?: components['schemas']['AttributeMapping'] - } - UpdateProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - DeleteProviderResponse: { - id: string - saml?: components['schemas']['SamlDescriptor'] - domains?: components['schemas']['Domain'][] - created_at?: string - updated_at?: string - } - V1RunQueryBody: { - query: string - } - V1Backup: { - /** @enum {string} */ - status: 'COMPLETED' | 'FAILED' | 'PENDING' | 'REMOVED' | 'ARCHIVED' - is_physical_backup: boolean - inserted_at: string - } - V1PhysicalBackup: { - earliest_physical_backup_date_unix?: number - latest_physical_backup_date_unix?: number - } - V1BackupsResponse: { - region: string - walg_enabled: boolean - pitr_enabled: boolean - backups: components['schemas']['V1Backup'][] - physical_backup_data: components['schemas']['V1PhysicalBackup'] - } - V1RestorePitrBody: { - recovery_time_target_unix: number - } - FunctionSlugResponse: { - id: string - slug: string - name: string - /** @enum {string} */ - status: 'ACTIVE' | 'REMOVED' | 'THROTTLED' - version: number - created_at: number - updated_at: number - verify_jwt?: boolean - import_map?: boolean - entrypoint_path?: string - import_map_path?: string - } - V1StorageBucketResponse: { - id: string - name: string - owner: string - created_at: string - updated_at: string - public: boolean - } - OrganizationResponseV1: { - id: string - name: string - } - CreateOrganizationBodyV1: { - name: string - } - V1OrganizationMemberResponse: { - user_id: string - user_name: string - email?: string - role_name: string - mfa_enabled: boolean - } - V1OrganizationSlugResponse: { - plan?: components['schemas']['BillingPlanId'] - opt_in_tags: 'AI_SQL_GENERATOR_OPT_IN'[] - id: string - name: string - } - OAuthTokenBody: { - /** @enum {string} */ - grant_type: 'authorization_code' | 'refresh_token' - client_id: string - client_secret: string - code?: string - code_verifier?: string - redirect_uri?: string - refresh_token?: string - } - OAuthTokenResponse: { - /** @enum {string} */ - token_type: 'Bearer' - access_token: string - refresh_token: string - expires_in: number - } - SnippetProject: { - id: number - name: string - } - SnippetUser: { - id: number - username: string - } - SnippetMeta: { - id: string - inserted_at: string - updated_at: string - /** @enum {string} */ - type: 'sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - name: string - description: string | null - project: components['schemas']['SnippetProject'] - owner: components['schemas']['SnippetUser'] - updated_by: components['schemas']['SnippetUser'] - } - SnippetList: { - data: components['schemas']['SnippetMeta'][] - } - SnippetContent: { - favorite: boolean - schema_version: string - sql: string - } - SnippetResponse: { - id: string - inserted_at: string - updated_at: string - /** @enum {string} */ - type: 'sql' - /** @enum {string} */ - visibility: 'user' | 'project' | 'org' | 'public' - name: string - description: string | null - project: components['schemas']['SnippetProject'] - owner: components['schemas']['SnippetUser'] - updated_by: components['schemas']['SnippetUser'] - content: components['schemas']['SnippetContent'] - } - ServiceHealthResponse: { - /** - * @description Service name - * @enum {string} - */ - name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage' - /** @description Whether the service is healthy */ - healthy: boolean - /** - * @description Service health status - * @example COMING_UP - * @enum {string} - */ - status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY' - /** @description Service health check error */ - error?: string - } - ResourceWithServicesStatusResponse: { - /** @description Supabase project instance compute size */ - compute: string - /** @description Unique ID representing the fly extension */ - id: string - /** - * @description Supabase project status - * @example ACTIVE_HEALTHY - * @enum {string} - */ - status: - | 'REMOVED' - | 'COMING_UP' - | 'INACTIVE' - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'UNKNOWN' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'RESTORING' - | 'UPGRADING' - | 'PAUSING' - /** - * @description Supabase organization id - * @example fly_123456789 - */ - supabase_org_id: string - /** @description Supabase project services health status */ - services: components['schemas']['ServiceHealthResponse'][] - } - ResourceProvisioningConfigResponse: { - /** - * @description PSQL connection string - * @example postgresql://postgres:dbpass@db.abcdefghijklmnop.supabase.co:5432/postgres - */ - DATABASE_URL: string - /** - * @description Pooler connection string - * @example postgres://postgres.abcdefghijklmnop:dbpass@aws-0-us-east-1.pooler.supabase.com:6543/postgres - */ - DATABASE_POOLER_URL: string - } - ResourceProvisioningResponse: { - /** @description Supabase envs config */ - config: components['schemas']['ResourceProvisioningConfigResponse'] - /** - * @description The target Fly application for internal traffic - * @example ext-db-pgshhamktpsgnptvcadw - */ - fly_app_name: string - /** - * @description Supabase project id - * @example pgshhamktpsgnptvcadw - */ - id: string - /** @description Welcome message */ - message: string - /** - * @description Supabase organization id - * @example fly_123456789 - */ - supabase_org_id: string - } - FlyOrganization: { - plan: components['schemas']['BillingPlanId'] - id: string - supabase_org_id: string - name: string - } - OrganizationExtensionStatus: { - /** @description Supabase project instance compute size */ - compute: string - /** @description Unique ID representing the fly extension */ - id: string - /** - * @description Supabase project status - * @example ACTIVE_HEALTHY - * @enum {string} - */ - status: - | 'REMOVED' - | 'COMING_UP' - | 'INACTIVE' - | 'ACTIVE_HEALTHY' - | 'ACTIVE_UNHEALTHY' - | 'UNKNOWN' - | 'GOING_DOWN' - | 'INIT_FAILED' - | 'RESTORING' - | 'UPGRADING' - | 'PAUSING' - /** - * @description Supabase organization id - * @example fly_123456789 - */ - supabase_org_id: string - } - ResourceBillingItem: { - /** - * @description Non-Unique identifier of the item - * @example usage_egress - */ - itemIdentifier: string - /** - * @description Descriptive name of the billing item - * @example Pro Plan - */ - itemName: string - /** @enum {string} */ - type: 'usage' | 'plan' | 'addon' | 'proration' | 'compute_credits' - /** - * @description In case of a usage item, the free usage included in the customers plan - * @example 100 - */ - freeUnitsInPlan?: number - /** - * @description In case of a usage item, the total usage - * @example 100 - */ - usageTotal?: number - /** - * @description In case of a usage item, the billable usage amount, free usage has been deducted - * @example 100 - */ - usageBillable?: number - /** - * @description Costs of the item in cents - * @example 100 - */ - costs: number - } - ResourceBillingResponse: { - /** @description Whether the user is exceeding the included quotas in the plan - only relevant for users on usage-capped plans. */ - exceedsPlanLimits: boolean - /** @description Whether the user is can have over-usage, which will be billed - this will be false on usage-capped plans. */ - overusageAllowed: boolean - items: components['schemas']['ResourceBillingItem'][] ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - } - UpdateProviderBody: Record - V1RunQueryBody: Record - V1RestorePitrBody: Record - CreateOrganizationBodyV1: Record - OAuthTokenBody: Record - } - responses: never - parameters: never - requestBodies: never - headers: never - pathItems: never -} - -export type $defs = Record - -export type external = Record - -export interface operations { - /** Get notifications */ - NotificationsController_getNotificationsV2: { - responses: { - /** @description Failed to retrieve notifications */ - 500: { - content: never - } - } - } - /** Delete notifications */ - NotificationsController_deleteNotifications: { - requestBody: { - content: { - 'application/json': components['schemas']['UpdateNotificationsBodyV1'] - } - } - responses: { - /** @description Failed to delete notifications */ - 500: { - content: never - } - } - } - /** Update notifications */ - NotificationsController_updateNotificationsV2: { - requestBody: { - content: { - 'application/json': components['schemas']['UpdateNotificationBodyV2'][] - } - } - responses: { - /** @description Failed to update notifications */ - 500: { - content: never - } - } - } - /** Get an aggregated data of interest across all notifications for the user */ - NotificationsController_getNotificationsSummary: { - responses: { - 200: { - content: never - } - } - } - /** Archives all notifications */ - NotificationsController_archiveAllNotifications: { - responses: { - /** @description Failed to archive all notifications */ - 500: { - content: never - } - } - } - /** Reset password for email */ - ResetPasswordController_resetPassword: { - requestBody: { - content: { - 'application/json': components['schemas']['ResetPasswordBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** Send feedback */ - SendFeedbackController_sendFeedback: { - requestBody: { - content: { - 'application/json': components['schemas']['SendFeedbackBody'] - } - } - responses: { - /** @description Failed to send feedback */ - 500: { - content: never - } - } - } - /** Send exit survey to HubSpot */ - SendExitSurveyController_sendExitSurvey: { - requestBody: { - content: { - 'application/json': components['schemas']['SendExitSurveyBody'] - } - } - responses: { - /** @description Failed to send exit survey */ - 500: { - content: never - } - } - } - /** Send upgrade survey to survey_responses table */ - SendUpgradeSurveyController_sendUpgradeSurvey: { - requestBody: { - content: { - 'application/json': components['schemas']['SendUpgradeSurveyBody'] - } - } - responses: { - /** @description Failed to send upgrade survey */ - 500: { - content: never - } - } - } - /** Send feedback on docs */ - SendDocsFeedbackController_sendDocsFeedback: { - requestBody: { - content: { - 'application/json': components['schemas']['SendDocsFeedbackBody'] - } - } - responses: { -<<<<<<< HEAD -======= - 201: { - content: { - 'application/json': components['schemas']['SendFeedbackResponse'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - /** @description Failed to send feedback for docs */ - 500: { - content: never - } - } - } - /** Sign up with email and password */ - SignUpController_signUp: { - requestBody: { - content: { - 'application/json': components['schemas']['SignUpBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** Gets project's status */ - StatusController_getStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get project's status */ - 500: { - content: never - } - } - } - /** - * Gets resource warnings for all projects accessible by the user - * @description Only returns the minimal project info - */ - ProjectsResourceWarningsController_getProjectsResourceWarnings: { - responses: { - 200: { - content: never - } - } - } - /** Redirects to Fly sso flow */ - TermsOfServiceController_flyTosAccepted: { - parameters: { - query: { - extension_id: string - organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets GoTrue config */ - GoTrueConfigController_getGoTrueConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve GoTrue config */ - 500: { - content: never - } - } - } - /** Updates GoTrue config */ - GoTrueConfigController_updateGoTrueConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateGoTrueConfigBody'] - } - } - responses: { - /** @description Failed to update GoTrue config */ - 500: { - content: never - } - } - } - /** Sends an invite to the given email */ - InviteController_sendInvite: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to send an invite to the given email */ - 500: { - content: never - } - } - } - /** Sends a magic link to the given email */ - MagicLinkController_sendMagicLink: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to send a magic link to the given email */ - 500: { - content: never - } - } - } - /** Sends an OTP to the given phone number */ - OtpController_sendOtp: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to send an OTP to the given phone number */ - 500: { - content: never - } - } - } - /** Sends a recovery email to the given email */ - RecoverController_sendRecover: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to send a recovery email to the given email */ - 500: { - content: never - } - } - } - /** Gets GoTrue template */ - TemplateController_getTemplate: { -<<<<<<< HEAD -======= - parameters: { - path: { - ref: string - template: - | 'confirmation' - | 'email-change' - | 'invite' - | 'magic-link' - | 'recovery' - | 'reauthentication' - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - responses: { - /** @description Failed to retrieve GoTrue template */ - 500: { - content: never - } - } - } - /** Gets users */ - UsersController_getUsers: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve users */ - 500: { - content: never - } - } - } - /** Delete user with given ID */ - UsersController_deleteUser: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UserBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete user */ - 500: { - content: never - } - } - } - /** Delete all factors associated to a user */ - FactorsController_deleteFactors: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete factors */ - 500: { - content: never - } - } - } - /** Gets project backups */ - BackupsController_getBackups: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get project backups */ - 500: { - content: never - } - } - } - /** Enable usage of physical backups */ - BackupsController_enablePhysicalBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to enable usage of physical backups */ - 500: { - content: never - } - } - } - /** Download project backup */ - BackupsController_downloadBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DownloadBackupBody'] - } - } - responses: { - /** @description Failed to download project backup */ - 500: { - content: never - } - } - } - /** Restore project backup */ - BackupsController_restoreBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RestoreLogicalBackupBody'] - } - } - responses: { - /** @description Failed to restore project backup */ - 500: { - content: never - } - } - } - /** Restore project with a physical backup */ - BackupsController_restorePhysicalBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RestorePhysicalBackupBody'] - } - } - responses: { - /** @description Failed to restore project with physical backup */ - 500: { - content: never - } - } - } - /** Restore project to a previous point in time */ - BackupsController_restorePointInTimeBackup: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['PointInTimeRestoreBody'] - } - } - responses: { - /** @description Failed to restore project to a previous point in time */ - 500: { - content: never - } - } - } - /** Gets hook logs with the given ID */ - HooksController_getHookLogs: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get hook logs with the given ID */ - 500: { - content: never - } - } - } - /** Enables Database Webhooks on the project */ - HooksController_enableHooks: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to enable Database Webhooks on the project */ - 500: { - content: never - } - } - } - /** Gets the status of owner reassignment */ - OwnerController_getOwnerReassignStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get status of owner reassignment */ - 500: { - content: never - } - } - } - /** Reassigns object owner from supabase_admin to temp */ - OwnerController_applyOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** Rollback object owner from temp to supabase_admin */ - OwnerController_rollbackOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to rollback owner on the project */ - 500: { - content: never - } - } - } - /** Reassigns object owner from temp to postgres */ - OwnerController_finaliseOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** - * List all organizations - * @description Returns a list of organizations that you currently belong to. - */ - OrganizationsController_getOrganizations: { - responses: { - /** @description Unexpected error listing organizations */ - 500: { - content: never - } - } - } - /** Creates an organization */ - OrganizationsController_createOrganizationWithTier: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateOrganizationBody'] - } - } - responses: { - /** @description Unexpected error creating an organization */ - 500: { - content: never - } - } - } - /** Gets organization linked to fly organization id */ - OrganizationsController_getOrganizationByFlyOrganizationId: { - parameters: { - path: { - fly_organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Deletes organization */ - OrganizationSlugController_deleteOrganization: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete organization */ - 500: { - content: never - } - } - } - /** Updates organization */ - OrganizationSlugController_updateOrganization: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateOrganizationBody'] - } - } - responses: { - /** @description Failed to update organization */ - 500: { - content: never - } - } - } - /** Gets the Stripe customer */ - CustomerController_getCustomer: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to retrieve the Stripe customer */ - 500: { - content: never - } - } - } - /** Updates the Stripe customer */ - CustomerController_updateCustomer: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update the Stripe customer */ - 500: { - content: never - } - } - } - /** Gets the given organization's roles */ - RolesController_addMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to retrieve the organization's roles */ - 500: { - content: never - } - } - } - /** Gets the given organization's tax IDs */ - TaxIdsController_getTaxIds: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve the organization's tax IDs */ - 500: { - content: never - } - } - } - /** Creates a tax ID for the given organization */ - TaxIdsController_createTaxId: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateTaxIdBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create the tax ID */ - 500: { - content: never - } - } - } - /** Delete the tax ID with the given ID */ - TaxIdsController_deleteTaxId: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DeleteTaxIdBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete the tax ID */ - 500: { - content: never - } - } - } - /** Transfers the organization to the given member */ - TransferController_transferOrganization: { - requestBody: { - content: { - 'application/json': components['schemas']['TransferOrganizationBody'] - } - } - responses: { - /** @description Failed to update owner */ - 500: { - content: never - } - } - } - /** Gets daily organization stats */ - OrgDailyStatsController_getDailyStats: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to get daily organization stats */ - 500: { - content: never - } - } - } - /** Gets daily organization stats for compute */ - OrgDailyStatsController_getDailyStatsCompute: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to get daily organization stats for compute */ - 500: { - content: never - } - } - } - /** Gets usage stats */ - OrgUsageController_getOrgUsage: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to get usage stats */ - 500: { - content: never - } - } - } - /** Get standard security questionnaire URL */ - OrgDocumentsController_getStandardSecurityQuestionnaireUrl: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Get SOC2 Type 2 report URL */ - OrgDocumentsController_getSoc2Type2ReportUrl: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets an organization's audit logs */ - OrgAuditLogsController_getAuditLogs: { - parameters: { - query?: { - /** @description Start timestamp */ - iso_timestamp_start?: string - /** @description End timestamp */ - iso_timestamp_end?: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to get an organization's audit logs */ - 500: { - content: never - } - } - } - /** Gets invited users */ - InviteController_getInvitedUsers: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to get invited users */ - 500: { - content: never - } - } - } - /** Invites user */ - InviteController_inviteUser: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['InviteUserBody'] - } - } - responses: { - /** @description Failed to invite user */ - 500: { - content: never - } - } - } - /** Delete invited user */ - InviteController_deleteInvitedUser: { - parameters: { - query: { - invited_id: number - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to delete invited user */ - 500: { - content: never - } - } - } - /** Gets invite */ - JoinController_getInvite: { - parameters: { - query: { - token: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to get invite */ - 500: { - content: never - } - } - } - /** Joins organization */ - JoinController_joinOrganization: { - parameters: { - query: { - token: string - } - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to join organization */ - 500: { - content: never - } - } - } - /** Leaves the given organization */ - MembersDeprecatedController_leaveOrganization: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to leave organization */ - 500: { - content: never - } - } - } - /** Leaves the given organization */ - MembersDeprecatedController_removeMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RemoveMemberBody'] - } - } - responses: { - /** @description Failed to leave organization */ - 500: { - content: never - } - } - } - /** Gets organization's members */ - MembersController_getMembers: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to retrieve organization's members */ - 500: { - content: never - } - } - } - /** Removes organization member */ - MembersController_deleteMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to remove organization member */ - 500: { - content: never - } - } - } - /** Updates organization member */ - MembersController_updateMember: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateMemberBody'] - } - } - responses: { - /** @description Failed to update organization member */ - 500: { - content: never - } - } - } - /** Gets organization members who have reached their free project limit */ - ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to retrieve organization members who have reached their free project limit */ - 500: { - content: never - } - } - } - /** Gets Stripe payment methods for the given organization */ - PaymentsController_getPaymentMethods: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get Stripe payment methods */ - 500: { - content: never - } - } - } - /** Detach Stripe payment method with the given card ID */ - PaymentsController_detachPaymentMethod: { - requestBody: { - content: { - 'application/json': components['schemas']['DetachPaymentMethodBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to detach Stripe payment method */ - 500: { - content: never - } - } - } - /** Sets up a payment method */ - SetupIntentOrgController_setUpPaymentMethod: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['HCaptchaBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to set up a payment method */ - 500: { - content: never - } - } - } - /** Gets the current subscription */ - SubscriptionController_getSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve subscription */ - 500: { - content: never - } - } - } - /** Updates subscription */ - SubscriptionController_updateSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSubscriptionBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update subscription change */ - 500: { - content: never - } - } - } - /** Preview subscription changes */ - SubscriptionController_previewSubscriptionChange: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSubscriptionBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to preview subscription changes */ - 500: { - content: never - } - } - } - /** Deletes any upcoming subscription schedule */ - SubscriptionController_deleteSubscriptionSchedule: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update subscription change */ - 500: { - content: never - } - } - } - /** Gets subscription plans */ - OrgPlansController_getAvailablePlans: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get subscription plans */ - 500: { - content: never - } - } - } - /** Gets the upcoming invoice */ - OrgInvoicesController_getUpcomingInvoice: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve upcoming invoice */ - 500: { - content: never - } - } - } - /** Retrieve column privileges */ - ColumnPrivilegesController_getColumnPrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve column privileges */ - 500: { - content: never - } - } - } - /** Grant column privileges */ - ColumnPrivilegesController_grantColumnPrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GrantColumnPrivilegesBody'][] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to grant column privileges */ - 500: { - content: never - } - } - } - /** Revoke column privileges */ - ColumnPrivilegesController_revokeColumnPrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RevokeColumnPrivilegesBody'][] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to revoke column privileges */ - 500: { - content: never - } - } - } - /** Gets project pg.columns */ - ColumnsController_getColumns: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.columns */ - 500: { - content: never - } - } - } - /** Creates project pg.column */ - ColumnsController_createColumn: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateColumnBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.column */ - 500: { - content: never - } - } - } - /** Deletes project pg.column with the given ID */ - ColumnsController_deleteColumn: { - parameters: { - query: { - /** @description Column ID */ - id: unknown - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.column with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.column with the given ID */ - ColumnsController_updateColumn: { - parameters: { - query: { - /** @description Column ID */ - id: unknown - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateColumnBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.column with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.extensions */ - ExtensionsController_getExtensions: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.extensions */ - 500: { - content: never - } - } - } - /** Creates project pg.extension */ - ExtensionsController_createExtension: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateExtensionBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.extension */ - 500: { - content: never - } - } - } - /** Deletes project pg.extension with the given ID */ - ExtensionsController_deleteExtension: { - parameters: { - query: { - /** @description Extension ID */ - id: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.extension with the given ID */ - 500: { - content: never - } - } - } - /** Retrieve database foreign tables */ - ForeignTablesController_getForeignTables: { - parameters: { - query: { - id: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve database foreign tables */ - 500: { - content: never - } - } - } - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - FunctionsController_getFunctions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's functions */ - 500: { - content: never - } - } - } - /** - * Create a function - * @description Creates a function and adds it to the specified project. - */ - FunctionsController_createFunction: { - parameters: { - query?: { - import_map_path?: string - entrypoint_path?: string - import_map?: boolean - verify_jwt?: boolean - name?: string - slug?: string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1CreateFunctionBody'] - 'application/vnd.denoland.eszip': components['schemas']['V1CreateFunctionBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create project's function */ - 500: { - content: never - } - } - } - /** Deletes project pg.function with the given ID */ - FunctionsController_deleteFunction: { - parameters: { - query: { - /** @description Function ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.function with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.function with the given ID */ - FunctionsController_updateFunction: { - parameters: { - query: { - /** @description Function ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateFunctionBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.function with the given ID */ - 500: { - content: never - } - } - } - /** Retrieve database materialized views */ - MaterializedViewsController_getMaterializedViews: { - parameters: { - query: { - id: string - included_schemas: string - excluded_schemas: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve database materialized views */ - 500: { - content: never - } - } - } - /** Gets project pg.policies */ - PoliciesController_getPolicies: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.policies */ - 500: { - content: never - } - } - } - /** Creates project pg.policy */ - PoliciesController_createPolicy: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreatePolicyBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.policy */ - 500: { - content: never - } - } - } - /** Deletes project pg.policy with the given ID */ - PoliciesController_deletePolicy: { - parameters: { - query: { - /** @description Policy ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.policy with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.policy with the given ID */ - PoliciesController_updatePolicy: { - parameters: { - query: { - /** @description Policy ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePolicyBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.policy with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.publications */ - PublicationsController_getPublications: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.publications */ - 500: { - content: never - } - } - } - /** Gets project pg.publications */ - PublicationsController_createPublication: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreatePublicationBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.publication */ - 500: { - content: never - } - } - } - /** Deletes project pg.publication with the given ID */ - PublicationsController_deletePublication: { - parameters: { - query: { - /** @description Publication ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.publication with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.publication with the given ID */ - PublicationsController_updatePublication: { - parameters: { - query: { - /** @description Publication ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePublicationBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.publication with the given ID */ - 500: { - content: never - } - } - } - /** Lists project's warehouse queries from logflare */ - QueryController_runQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { -<<<<<<< HEAD -======= - 200: { - content: never - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to fetch warehouse endpoints */ - 500: { - content: never - } - } - } - /** Format sql query */ - QueryController_formatQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['FormatQueryBody'] - } - } - responses: { - /** @description Failed to format sql query */ - 500: { - content: never - } - } - } - /** Validate sql query */ - QueryController_validateQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['ValidateQueryBody'] - } - } - responses: { - /** @description Failed to validate sql query */ - 500: { - content: never - } - } - } - /** Gets project pg.roles */ - RolesController_getRoles: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.roles */ - 500: { - content: never - } - } - } - /** Creates project pg.role */ - RolesController_createRole: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateRoleBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.role */ - 500: { - content: never - } - } - } - /** Deletes project pg.role with the given ID */ - RolesController_deleteRole: { - parameters: { - query: { - /** @description Role ID */ - id: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.role with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.role with the given ID */ - RolesController_updateRole: { - parameters: { - query: { - /** @description Role ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateRoleBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.role with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.schemas */ - SchemasController_getSchemas: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.schemas */ - 500: { - content: never - } - } - } - /** Creates project pg.schema */ - SchemasController_createSchema: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateSchemaBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.schema */ - 500: { - content: never - } - } - } - /** Deletes project pg.schema with the given ID */ - SchemasController_deleteSchema: { - parameters: { - query: { - /** @description Schema ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.schema with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.schema with the given ID */ - SchemasController_updateSchema: { - parameters: { - query: { - /** @description Schema ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSchemaBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.schema with the given ID */ - 500: { - content: never - } - } - } - /** Searches project pg.tables. Return maximum 50 results. */ - SearchController_searchTables: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SearchTableBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to search pg.tables */ - 500: { - content: never - } - } - } - /** Searches project pg.columns. Return maximum 50 results. */ - SearchController_searchColumns: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SearchColumnBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to search pg.columns */ - 500: { - content: never - } - } - } - /** Retrieve table privileges */ - TablePrivilegesController_getTablePrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve table privileges */ - 500: { - content: never - } - } - } - /** Grant table privileges */ - TablePrivilegesController_grantTablePrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GrantTablePrivilegesBody'][] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to grant table privileges */ - 500: { - content: never - } - } - } - /** Revoke table privileges */ - TablePrivilegesController_revokeTablePrivileges: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RevokeTablePrivilegesBody'][] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to revoke table privileges */ - 500: { - content: never - } - } - } - /** Gets project pg.tables or pg.table with the given ID */ - TablesController_getTables: { - parameters: { - query: { - /** @description Table ID */ - id?: string - include_system_schemas: string - included_schemas: string - excluded_schemas: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.tables or pg.table with the given ID */ - 500: { - content: never - } - } - } - /** Creates project pg.table */ - TablesController_createTable: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateTableBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.table */ - 500: { - content: never - } - } - } - /** Deletes project pg.table with the given ID */ - TablesController_deleteTable: { - parameters: { - query: { - /** @description Table ID */ - id: number - cascade: boolean - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.table with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.table with the given ID */ - TablesController_updateTable: { - parameters: { - query: { - /** @description Table ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateTableBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.table with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.triggers */ - TriggersController_getTriggers: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.triggers */ - 500: { - content: never - } - } - } - /** Creates project pg.trigger */ - TriggersController_createTrigger: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateTriggerBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create pg.trigger */ - 500: { - content: never - } - } - } - /** Deletes project pg.trigger with the given ID */ - TriggersController_deleteTrigger: { - parameters: { - query: { - /** @description Trigger ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete pg.trigger with the given ID */ - 500: { - content: never - } - } - } - /** Updates project pg.trigger with the given ID */ - TriggersController_updateTrigger: { - parameters: { - query: { - /** @description Trigger ID */ - id: number - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateTriggerBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update pg.trigger with the given ID */ - 500: { - content: never - } - } - } - /** Gets project pg.types */ - TypesController_getTypes: { - parameters: { - query: { - included_schemas: string - excluded_schemas: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get pg.types */ - 500: { - content: never - } - } - } - /** Retrieve database views */ - ViewsController_getViews: { - parameters: { - query: { - id: string - include_system_schemas: string - included_schemas: string - excluded_schemas: string - limit: string - offset: string - include_columns: string - } - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve database views */ - 500: { - content: never - } - } - } - /** Gets the user's access tokens */ - AccessTokensController_getAccessTokens: { - responses: { - /** @description Failed to get user's access tokens */ - 500: { - content: never - } - } - } - /** Creates a new access token */ - AccessTokensController_createAccessToken: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateAccessTokenBody'] - } - } - responses: { - /** @description Failed to create access token */ - 500: { - content: never - } - } - } - /** Gets the access token with the given ID */ - AccessTokensController_getAccessToken: { - parameters: { - path: { - /** @description Access token ID */ - id: number - } - } - responses: { - /** @description Failed to get access token */ - 500: { - content: never - } - } - } - /** Deletes the access token with the given ID */ - AccessTokensController_deleteAccessToken: { - parameters: { - path: { - /** @description Access token ID */ - id: number - } - } - responses: { - /** @description Failed to delete access token */ - 500: { - content: never - } - } - } - /** Gets a user's audit logs */ - UserAuditLogsController_getAuditLogs: { - parameters: { - query?: { - /** @description Start timestamp */ - iso_timestamp_start?: string - /** @description End timestamp */ - iso_timestamp_end?: string - } - } - responses: { - /** @description Failed to get a user's audit logs */ - 500: { - content: never - } - } - } - /** Search profiles by username, email with the given keywords */ - SearchProfileController_searchProfile: { - requestBody: { - content: { - 'application/json': components['schemas']['SearchProfileBody'] - } - } - responses: { - /** @description Failed to search profiles with the given keywords */ - 500: { - content: never - } - } - } - /** Gets the user's subscription statistics */ - SubscriptionsController_getSubscriptionsStatistics: { - responses: { - /** @description Failed to retrieve user's subscription statistics */ - 500: { - content: never - } - } - } - /** Check password strength */ - PasswordCheckController_checkPassword: { - requestBody: { - content: { - 'application/json': components['schemas']['PasswordCheckBody'] - } - } - responses: { - /** @description Failed to check password strength */ - 500: { - content: never - } - } - } - /** Gets all the user's permissions */ - PermissionsController_getPermissions: { - responses: { - /** @description Failed to retrieve permissions */ - 500: { - content: never - } - } - } - /** Gets the user's profile */ - ProfileController_getProfile: { - responses: { - /** @description Failed to retrieve user's profile */ - 500: { - content: never - } - } - } - /** Creates user's profile */ - ProfileController_createProfile: { - responses: { - /** @description Failed to create user's profile */ - 500: { - content: never - } - } - } - /** Deletes user's profile */ - ProfileController_deleteProfile: { - responses: { - /** @description Forbidden action */ - 403: { - content: never - } - /** @description Failed to delete user's profile */ - 500: { - content: never - } - } - } - /** Updates user's profile */ - ProfileController_updateProfile: { - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProfileBody'] - } - } - responses: { - /** @description Failed to update user's profile */ - 500: { - content: never - } - } - } - /** - * Gets all projects that belong to the authenticated user - * @description Only returns the minimal project info - */ - ProjectsController_getProjects: { - responses: { - 200: { - content: never - } - } - } - /** Creates a project */ - ProjectsController_createProject: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateProjectBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** Gets project linked to fly extension id */ - ProjectsController_getProjectByFlyExtensionId: { - parameters: { - path: { - fly_extension_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets project's content */ - ContentController_getContent: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve project's content */ - 500: { - content: never - } - } - } - /** Updates project's content */ - ContentController_updateWholeContent: { - requestBody: { - content: { - 'application/json': components['schemas']['UpsertContentParams'] - } - } - responses: { - /** @description Failed to update project's content */ - 500: { - content: never - } - } - } - /** Creates project's content */ - ContentController_createContent: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateContentParams'] - } - } - responses: { - /** @description Failed to create project's content */ - 500: { - content: never - } - } - } - /** Deletes project's contents */ - ContentController_deleteContents: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to delete project's contents */ - 500: { - content: never - } - } - } - /** Updates project's content */ - ContentController_updateContent: { - requestBody: { - content: { - 'application/json': components['schemas']['UpdateContentParams'] - } - } - responses: { - /** @description Failed to update project's content */ - 500: { - content: never - } - } - } - /** Gets daily project stats */ - DailyStatsController_getDailyStats: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get daily project stats */ - 500: { - content: never - } - } - } - /** Gets non-removed databases of a specified project */ - DatabasesController_getDatabases: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets statuses of databases within a project */ - DatabasesStatusesController_getStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get statuses of databases of a project */ - 500: { - content: never - } - } - } - /** Updates the database password */ - DbPasswordController_updatePassword: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePasswordBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update database password */ - 500: { - content: never - } - } - } - /** Gets project health check */ - HealthCheckController_projectHealthCheck: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project health check */ - 500: { - content: never - } - } - } - /** Gets non-removed databases of a specified project */ - LoadBalancersController_getLoadBalancers: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets project OpenApi */ - ApiController_projectOpenApi: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project OpenApi */ - 500: { - content: never - } - } - } - /** Queries project Graphql */ - ApiController_projectGraphql: { - parameters: { - header: { - 'x-graphql-authorization': string - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['Buffer'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to query project Graphql */ - 500: { - content: never - } - } - } - /** Gets project's usage metrics */ - InfraMonitoringController_getUsageMetrics: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get project's usage metrics */ - 500: { - content: never - } - } - } - /** Pauses the project */ - PauseController_pauseProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to pause the project */ - 500: { - content: never - } - } - } - /** Resize database disk */ - ResizeController_resizeDatabase: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['ResizeBody'] - } - } - responses: { - /** @description Failed to resize database disk */ - 500: { - content: never - } - } - } - /** Restarts project */ - RestartController_restartProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to restart project */ - 500: { - content: never - } - } - } - /** Gets a specific project that belongs to the authenticated user */ - ProjectsRefController_getProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Deletes the given project */ - ProjectsRefController_deleteProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - } - } - /** Updates the given project */ - ProjectsRefController_updateProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProjectBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project */ - 500: { - content: never - } - } - } - /** Restores project */ - RestoreController_restoreProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to restore project */ - 500: { - content: never - } - } - } - /** Restarts given services */ - RestartServicesController_restartServices: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RestartServicesBody'] - } - } - responses: { - /** @description Failed to restart given services */ - 500: { - content: never - } - } - } - /** Gets project's settings */ - SettingsController_getProjectApi: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ProjectSettingsResponse'] - } - } - /** @description Failed to retrieve project's settings */ - 500: { - content: never - } - } - } - /** - * Updates the project - * @deprecated - * @description Replaced by PATCH /platform/projects/:ref - */ - UpdateController_updateProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProjectBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project */ - 500: { - content: never - } - } - } - /** Previews transfering a project to a different organizations, shows eligibility and impact. */ - ProjectTransferController_previewTransfer: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['TransferProjectBody'] - } - } - responses: { - 403: { - content: never - } - } - } - /** Transfers a project to a different organization. */ - ProjectTransferController_transferProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['TransferProjectBody'] - } - } - responses: { - 403: { - content: never - } - } - } - /** Gets a project's function invocation statistics */ - FunctionInvocationLogsController_getStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project's function invocation statistics */ - 500: { - content: never - } - } - } - /** Gets a project's function request statistics */ - FunctionRequestLogsController_getStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project's function request statistics */ - 500: { - content: never - } - } - } - /** Gets a project's function resource usage */ - FunctionResourceLogsController_getStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project's function resource usage */ - 500: { - content: never - } - } - } - /** Gets project's logs */ - LogsController_getApiPaths: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project's logs */ - 500: { - content: never - } - } - } - /** Gets project's usage api counts */ - UsageApiController_getApiCounts: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project's usage api counts */ - 500: { - content: never - } - } - } - /** Gets project's usage api requests count */ - UsageApiController_getApiRequestsCount: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get project's usage api requests count */ - 500: { - content: never - } - } - } - /** Gets project's warehouse tenant from logflare */ - TenantController_getTenant: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFUser'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to fetch or provision warehouse tenant */ - 500: { - content: never - } - } - } - /** Lists project's warehouse collections from logflare */ - CollectionController_listCollections: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFSource'][] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to fetch warehouse collections */ - 500: { - content: never - } - } - } - /** Create a warehouse collection */ - CollectionController_createCollection: { - responses: { -<<<<<<< HEAD -======= - 201: { - content: { - 'application/json': components['schemas']['LFSource'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to create warehouse collection */ - 500: { - content: never - } - } - } - /** Get a warehouse collection */ - CollectionController_getCollection: { - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFSource'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to fetch warehouse collection */ - 500: { - content: never - } - } - } - /** Delete a warehouse collection */ - CollectionController_deleteCollection: { - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFSource'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to delete warehouse collection */ - 500: { - content: never - } - } - } - /** Update a warehouse collection */ - CollectionController_updateCollection: { - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFSource'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to update warehouse collection */ - 500: { - content: never - } - } - } - /** Lists project's warehouse access tokens from logflare */ - AccessTokenController_listAccessTokens: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFSource'][] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to fetch warehouse access tokens */ - 500: { - content: never - } - } - } - /** Create a warehouse access token */ - AccessTokenController_createAccessToken: { - responses: { -<<<<<<< HEAD -======= - 201: { - content: { - 'application/json': components['schemas']['LFSource'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to create warehouse access token */ - 500: { - content: never - } - } - } - /** Delete a warehouse access token */ - AccessTokenController_deleteAccessToken: { - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFSource'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to delete warehouse access token */ - 500: { - content: never - } - } - } - /** Lists project's warehouse endpoints from logflare */ - EndpointController_listEndpoints: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFEndpoint'][] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to fetch warehouse endpoints */ - 500: { - content: never - } - } - } - /** Create a warehouse endpoint */ - EndpointController_createEndpoint: { - responses: { -<<<<<<< HEAD -======= - 201: { - content: { - 'application/json': components['schemas']['LFEndpoint'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to create warehouse endpoint */ - 500: { - content: never - } - } - } - /** Update a warehouse endpoint */ - EndpointController_updateEndpoint: { - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['LFEndpoint'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to update warehouse endpoint */ - 500: { - content: never - } - } - } - /** Delete a warehouse endpoint */ - EndpointController_deleteEndpoint: { - responses: { -<<<<<<< HEAD -======= - 200: { - content: never - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to delete warehouse endpoint */ - 500: { - content: never - } - } - } -<<<<<<< HEAD - /** Lists project's warehouse queries from logflare */ - WarehouseQueryController_runQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to fetch warehouse endpoints */ - 500: { - content: never - } - } - } -======= ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - /** Gets project's pgbouncer config */ - PgbouncerConfigController_getPgbouncerConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve project's pgbouncer config */ - 500: { - content: never - } - } - } - /** Updates project's pgbouncer config */ - PgbouncerConfigController_updatePgbouncerConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePgbouncerConfigBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project's pgbouncer config */ - 500: { - content: never - } - } - } - /** Gets project's pgbouncer status */ - PgbouncerConfigController_getPgbouncerStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve project's pgbouncer status */ - 500: { - content: never - } - } - } - /** Gets project's postgrest config */ - PostgrestConfigController_getPostgRESTConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's postgrest config */ - 500: { - content: never - } - } - } - /** Updates project's postgrest config */ - PostgrestConfigController_updatePostgRESTConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePostgrestConfigBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project's postgrest config */ - 500: { - content: never - } - } - } - /** Gets project's Postgres config */ - PostgresConfigController_getConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve project's Postgres config */ - 500: { - content: never - } - } - } - /** Updates project's Postgres config */ - PostgresConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePostgresConfigBody'] - } - } - responses: { - /** @description Failed to update project's Postgres config */ - 500: { - content: never - } - } - } - /** Updates project's secrets config */ - SecretsConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSecretsConfigBody'] - } - } - responses: { - /** @description Failed to update project's secrets config */ - 500: { - content: never - } - } - } - /** Gets project's storage config */ - StorageConfigController_getConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's storage config */ - 500: { - content: never - } - } - } - /** Updates project's storage config */ - StorageConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateStorageConfigBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project's storage config */ - 500: { - content: never - } - } - } - /** Gets project's supavisor config */ - SupavisorConfigController_getSupavisorConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve project's supavisor config */ - 500: { - content: never - } - } - } - /** Updates project's supavisor config */ - SupavisorConfigController_updateSupavisorConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSupavisorConfigBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project's supavisor config */ - 500: { - content: never - } - } - } - /** Gets project addons */ - ProjectAddonController_getProjectAddons: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project addons */ - 500: { - content: never - } - } - } - /** Updates project addon */ - ProjectAddonController_updateAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateAddonBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project addon */ - 500: { - content: never - } - } - } - /** Removes project addon */ - ProjectAddonController_removeAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - addon_variant: components['schemas']['AddonVariantId'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to remove project addon */ - 500: { - content: never - } - } - } - /** - * Gets project's api info - * @deprecated - */ - ApiController_getProjectApi: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ApiResponse'] - } - } - /** @description Failed to retrieve project's api info */ - 500: { - content: never - } - } - } - /** Gets the last JWT secret update status */ - JwtSecretUpdateStatusController_getJwtSecretUpdateStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve JWT secret update status */ - 500: { - content: never - } - } - } - /** Gets bucket */ - StorageBucketIdController_getBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get bucket */ - 500: { - content: never - } - } - } - /** Deletes bucket */ - StorageBucketIdController_deleteBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete bucket */ - 500: { - content: never - } - } - } - /** Updates bucket */ - StorageBucketIdController_updateBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateStorageBucketBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update bucket */ - 500: { - content: never - } - } - } - /** Removes all objects inside a single bucket. */ - StorageBucketIdController_emptyBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to empty bucket */ - 500: { - content: never - } - } - } - /** Gets list of buckets */ - StorageBucketsController_getBuckets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get list of buckets */ - 500: { - content: never - } - } - } - /** Create bucket */ - StorageBucketsController_createBucket: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateStorageBucketBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create bucket */ - 500: { - content: never - } - } - } - /** Gets list of objects with the given bucket */ - StorageObjectsController_getObjects: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetObjectsBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get list of objects with the given bucket */ - 500: { - content: never - } - } - } - /** Creates URL for an asset in a public bucket */ - StorageObjectsController_createPublicUrl: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetPublicUrlBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create public URL */ - 500: { - content: never - } - } - } - /** Downloads a file from a private bucket */ - StorageObjectsController_download: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DownloadObjectBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to download the file */ - 500: { - content: never - } - } - } - /** Creates a signed URL */ - StorageObjectsController_createSignedUrl: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetSignedUrlBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create a signed URL */ - 500: { - content: never - } - } - } - /** Gets multiple signed URLs */ - StorageObjectsController_createSignedUrls: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['GetSignedUrlsBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get multiple signed URLs */ - 500: { - content: never - } - } - } - /** Copys object */ - StorageObjectsController_copyObject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CopyObjectBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to copy object */ - 500: { - content: never - } - } - } - /** Move object */ - StorageObjectsController_moveObject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['MoveObjectBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to move object */ - 500: { - content: never - } - } - } - /** Deletes objects */ - StorageObjectsController_deleteObjects: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage bucket id */ - id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['DeleteObjectsBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete objects */ - 500: { - content: never - } - } - } - /** Gets project storage credentials */ - StorageS3CredentialsController_getAllCredentials: { -<<<<<<< HEAD -======= - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['GetStorageCredentialsResponse'] - } - } - 403: { - content: never - } - /** @description Failed to get project storage credentials */ - 500: { - content: never - } - } - } - /** Creates project storage credential */ - StorageS3CredentialsController_createCredential: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateStorageCredentialBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['CreateStorageCredentialResponse'] - } - } - 403: { - content: never - } - /** @description Failed to create project storage credential */ - 500: { - content: never - } - } - } - /** Deletes project storage credential */ - StorageS3CredentialsController_deleteCredential: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage credential id */ - id: string - } - } - responses: { - 200: { - content: never - } - 403: { - content: never - } - /** @description Failed to delete project storage credential */ - 500: { - content: never - } - } - } - /** Gets invoices for the given customer */ - InvoicesController_getInvoices: { ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project storage credentials */ - 500: { - content: never - } - } - } - /** Creates project storage credential */ - StorageS3CredentialsController_createCredential: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateStorageCredentialBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create project storage credential */ - 500: { - content: never - } - } - } - /** Deletes project storage credential */ - StorageS3CredentialsController_deleteCredential: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Storage credential id */ - id: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete project storage credential */ - 500: { - content: never - } - } - } - /** Gets invoices for the given customer */ - InvoicesController_getInvoices: { - responses: { - /** @description Failed to retrieve invoices */ - 500: { - content: never - } - } - } - /** Gets the total count of invoices for the given customer */ - InvoicesController_countInvoices: { - responses: { - 200: { - headers: { - /** @description total count value */ - 'X-Total-Count'?: unknown - } - content: never - } - /** @description Failed to retrieve the total count of invoices */ - 500: { - content: never - } - } - } - /** Gets information about overdue invoices that relate to the authenticated user */ - InvoicesController_getOverdueInvoices: { - responses: { - 200: { - content: never - } - } - } - /** Gets invoice with the given invoice ID */ - InvoicesController_getInvoice: { - parameters: { - path: { - id: string - } - } - responses: { - /** @description Failed to retrieve invoice */ - 500: { - content: never - } - } - } - /** Sets up a payment method */ - SetupIntentController_setUpPaymentMethod: { - requestBody: { - content: { - 'application/json': components['schemas']['HCaptchaBody'] - } - } - responses: { - /** @description Failed to set up a payment method */ - 500: { - content: never - } - } - } - /** Sends analytics server event */ - TelemetryEventController_sendServerEvent: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryEventBody'] - } - } - responses: { - /** @description Failed to send analytics server event */ - 500: { - content: never - } - } - } - /** Send analytics identify event */ - TelemetryIdentifyController_identify: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryIdentifyBody'] - } - } - responses: { - /** @description Failed to send analytics identify event */ - 500: { - content: never - } - } - } - /** Send server page event */ - TelemetryPageController_sendServerPage: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryPageBody'] - } - } - responses: { - /** @description Failed to send server page event */ - 500: { - content: never - } - } - } - /** Sends mixpanel server activity */ - TelemetryActivityController_sendServerActivity: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryActivityBody'] - } - } - responses: { - /** @description Failed to send mixpanel server activity */ - 500: { - content: never - } - } - } - /** Send mixpanel page event */ - TelemetryPageviewController_sendServerPageViewed: { - requestBody: { - content: { - 'application/json': components['schemas']['TelemetryPageviewBody'] - } - } - responses: { - /** @description Failed to send mixpanel page event */ - 500: { - content: never - } - } - } - /** Gets the Vercel access token for the given code */ - VercelAccessTokenController_getAccessToken: { - responses: { - /** @description Failed to get Vercel access token */ - 500: { - content: never - } - } - } - /** Gets the list of Vercel projects */ - VercelProjectsController_getVercelProjects: { - parameters: { - header: { - vercel_authorization: string - } - } - responses: { - /** @description Failed to get projects */ - 500: { - content: never - } - } - } - /** Gets the Vercel project with the given ID */ - VercelProjectsController_getVercelProject: { - parameters: { - header: { - vercel_authorization: string - } - } - responses: { - /** @description Failed to get project */ - 500: { - content: never - } - } - } - /** Gets the environment variables for the given project ID on behalf of the given team ID */ - VercelEnvironmentVariablesController_getEnvironmentVariables: { - parameters: { - header: { - vercel_authorization: string - } - } - responses: { - /** @description Failed to get Vercel environment variables */ - 500: { - content: never - } - } - } - /** Creates the environment variable for the given project ID on behalf of the given team ID */ - VercelEnvironmentVariablesController_createEnvironmentVariable: { - parameters: { - header: { - vercel_authorization: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateVercelEnvironmentVariableBody'] - } - } - responses: { - /** @description Failed to get the environment variables */ - 500: { - content: never - } - } - } - /** Gets user's integrations */ - IntegrationsController_getProjectConnections: { - parameters: { - query: { - /** @description Filter results by integration name. Optional */ - integration_name: string - } - } - responses: { - /** @description Failed to get user's integrations */ - 500: { - content: never - } - } - } - /** Gets integration with the given organization slug */ - IntegrationsController_getProjectConnectionsForOrg: { - parameters: { - path: { - slug: string - } - } - responses: { - /** @description Failed to get integration with the given organization slug */ - 500: { - content: never - } - } - } - /** - * Create vercel integration - * @description Exchanges a vercel code for an access token and saves the access token to the new integration record - */ - VercelIntegrationController_createVercelIntegration: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateVercelIntegrationBody'] - } - } - responses: { - /** @description Failed to create vercel integration */ - 500: { - content: never - } - } - } - /** Removes Vercel organization integration with the given id */ - VercelIntegrationController_removeVercelIntegration: { - parameters: { - path: { - organization_integration_id: string - } - } - responses: { - /** @description Failed to remove Vercel organization integration with the given id */ - 500: { - content: never - } - } - } - /** Gets vercel projects with the given organization integration id */ - VercelProjectController_getVercelProjects: { - parameters: { - path: { - organization_integration_id: string - } - } - responses: { - /** @description Failed to get vercel projects with the given organization integration id */ - 500: { - content: never - } - } - } - /** Gets installed vercel project connections for the given organization integration */ - VercelConnectionsController_getVercelConnections: { - parameters: { - path: { - organization_integration_id: string - } - } - responses: { - /** @description Failed to get installed vercel connections for the given organization integration */ - 500: { - content: never - } - } - } - /** Connects a Vercel project to a supabase project */ - VercelConnectionsController_createVercelConnection: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateVercelConnectionsBody'] - } - } - responses: { - /** @description Failed to create project connection */ - 500: { - content: never - } - } - } - /** Syncs supabase project envs with given connection id */ - VercelConnectionsController_syncVercelConnectionEnvironments: { - parameters: { - path: { - connection_id: string - } - } - responses: { - /** @description Failed to sync supabase project envs with given connection id */ - 500: { - content: never - } - } - } - /** Deletes vercel project connection */ - VercelConnectionsController_deleteVercelConnection: { - parameters: { - path: { - connection_id: string - } - } - responses: { - /** @description Failed to delete vercel integration project connection */ - 500: { - content: never - } - } - } - /** Updates a Vercel connection for a supabase project */ - VercelConnectionsController_updateVercelConnection: { - parameters: { - path: { - connection_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateVercelConnectionsBody'] - } - } - responses: { - /** @description Failed to update Vercel connection */ - 500: { - content: never - } - } - } - /** Get GitHub authorization */ - GitHubAuthorizationsController_getGitHubAuthorization: { - responses: { - /** @description Failed to get GitHub authorization */ - 500: { - content: never - } - } - } - /** Create GitHub authorization */ - GitHubAuthorizationsController_createGitHubAuthorization: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateGitHubAuthorizationBody'] - } - } - responses: { - /** @description Failed to create GitHub authorization */ - 500: { - content: never - } - } - } - /** List organization GitHub connections */ - GitHubConnectionsController_listOrganizationGitHubConnections: { - responses: { - /** @description Failed to list organization GitHub connections */ - 500: { - content: never - } - } - } - /** Connects a GitHub project to a supabase project */ - GitHubConnectionsController_createGitHubConnection: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateGitHubConnectionsBody'] - } - } - responses: { - /** @description Failed to create project connections */ - 500: { - content: never - } - } - } - /** Deletes github project connection */ - GitHubConnectionsController_deleteGitHubConnection: { - parameters: { - path: { - connection_id: string - } - } - responses: { - /** @description Failed to delete github integration project connection */ - 500: { - content: never - } - } - } - /** Updates a GitHub connection for a supabase project */ - GitHubConnectionsController_updateGitHubConnection: { - parameters: { - path: { - connection_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateGitHubConnectionsBody'] - } - } - responses: { - /** @description Failed to update GitHub connection */ - 500: { - content: never - } - } - } - /** List GitHub connection branches */ - GitHubBranchesController_listConnectionBranches: { - responses: { - /** @description Failed to list GitHub connection branches */ - 500: { - content: never - } - } - } - /** Get GitHub connection branch */ - GitHubBranchesController_getConnectionBranch: { - responses: { - /** @description Failed to get GitHub connection branch */ - 500: { - content: never - } - } - } - /** Gets GitHub repositories for user */ - GitHubRepositoriesController_listRepositories: { - responses: { - /** @description Failed to get GitHub repositories for user */ - 500: { - content: never - } - } - } - /** Create CLI login session */ - CliLoginController_createCliLoginSession: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateCliLoginSessionBody'] - } - } - responses: { - /** @description Failed to create CLI login session */ - 500: { - content: never - } - } - } - /** Retrieve CLI login session */ - CliLoginController_getCliLoginSession: { - responses: { - /** @description Failed to retrieve CLI login session */ - 500: { - content: never - } - } - } - /** Gets GoTrue template */ - AuthTemplateController_getTemplate: { -<<<<<<< HEAD -======= - parameters: { - path: { - ref: string - template: - | 'confirmation' - | 'email-change' - | 'invite' - | 'magic-link' - | 'recovery' - | 'reauthentication' - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - responses: { - /** @description Failed to retrieve GoTrue template */ - 500: { - content: never - } - } - } - /** Gets the status of owner reassignment */ - DatabaseOwnerController_getOwnerReassignStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get status of owner reassignment */ - 500: { - content: never - } - } - } - /** Reassigns object owner from supabase_admin to temp */ - DatabaseOwnerController_applyOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** Rollback object owner from temp to supabase_admin */ - DatabaseOwnerController_rollbackOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to rollback owner on the project */ - 500: { - content: never - } - } - } - /** Reassigns object owner from temp to postgres */ - DatabaseOwnerController_finaliseOwnerReassign: { - parameters: { - header: { - 'x-connection-encrypted': string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to reassign owner on the project */ - 500: { - content: never - } - } - } - /** Updates the database password */ - DatabasePasswordController_updatePassword: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePasswordBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update database password */ - 500: { - content: never - } - } - } - /** Reset JWT if leaked keys found by GitHub secret scanning */ - GithubSecretAlertController_resetJwt: { - parameters: { - header: { - 'github-public-key-identifier': string - 'github-public-key-signature': string - } - } - requestBody: { - content: { - 'application/json': string - } - } - responses: { - /** @description Failed to reset JWT */ - 500: { - content: never - } - } - } - /** - * Update a function - * @description Updates a function with the specified slug and project. - */ - SystemFunctionSlugController_updateFunction: { - parameters: { - query?: { - import_map_path?: string - entrypoint_path?: string - import_map?: boolean - verify_jwt?: boolean - name?: string - } - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1UpdateFunctionBody'] - 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update function with given slug */ - 500: { - content: never - } - } - } - /** - * Update a function - * @description Updates a function with the specified slug and project. - */ - SystemFunctionSlugController_updateFunction: { - parameters: { - query?: { - slug?: string - name?: string - verify_jwt?: boolean - import_map?: boolean - entrypoint_path?: string - import_map_path?: string - } - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1UpdateFunctionBody'] - 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody'] - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['FunctionResponse'] - } - } - 403: { - content: never - } - /** @description Failed to update function with given slug */ - 500: { - content: never - } - } - } - /** - * List all functions - * @description Returns all functions you've previously added to the specified project. - */ - SystemFunctionsController_getFunctions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's functions */ - 500: { - content: never - } - } - } - /** - * Create a function - * @description Creates a function and adds it to the specified project. - */ - SystemFunctionsController_createFunction: { - parameters: { - query?: { -<<<<<<< HEAD - import_map_path?: string - entrypoint_path?: string - import_map?: boolean - verify_jwt?: boolean - name?: string - slug?: string -======= - slug?: string - name?: string - verify_jwt?: boolean - import_map?: boolean - entrypoint_path?: string - import_map_path?: string ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - } - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1CreateFunctionBody'] - 'application/vnd.denoland.eszip': components['schemas']['V1CreateFunctionBody'] - } - } - responses: { -<<<<<<< HEAD -======= - 201: { - content: { - 'application/json': components['schemas']['FunctionResponse'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - /** @description Failed to create project's function */ - 500: { - content: never - } - } - } - /** Deletes all Edge Functions from a project */ - SystemFunctionsController_systemDeleteAllFunctions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: never - } - } - } - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - SystemSecretsController_getSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - SystemSecretsController_createSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateSecretBody'][] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - SystemSecretsController_deleteSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': string[] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete secrets with given names */ - 500: { - content: never - } - } - } - /** Refreshes secrets */ - SecretsRefreshController_refreshSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to refresh secrets */ - 500: { - content: never - } - } - } - /** Get API health status */ - HealthController_getStatus: { - responses: { - /** @description Failed to retrieve API health status */ - 500: { - content: never - } - } - } - /** Updates a project's health status. */ - HealthReportingController_updateStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['ReportStatusBody'] - } - } - responses: { - /** @description Failed to update health status. */ - 500: { - content: never - } - } - } - /** Records an HA event */ - HaEventsController_updateStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['EventBody'] - } - } - responses: { - /** @description Failed to record HA event. */ - 500: { - content: never - } - } - } - /** Allows a project to obtain temporary credentials. */ - AwsCredentialsController_getTemporaryCredentials: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CredentialsRequestBody'] - } - } - responses: { - /** @description Failed to obtain temporary credentials. */ - 500: { - content: never - } - } - } - /** Updates project addon */ - AddonsController_updateAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateAddonAdminBody'] - } - } - responses: { - /** @description Failed to update project addon */ - 500: { - content: never - } - } - } - /** Removes project addon */ - AddonsController_removeAddon: { - parameters: { - path: { - /** @description Project ref */ - ref: string - addon_variant: components['schemas']['AddonVariantId'] - } - } - responses: { - /** @description Failed to remove project addon */ - 500: { - content: never - } - } - } - /** Handle update project jwt on completion */ - ProjectUpdateJwtController_completeUpdateJwt: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 201: { - content: never - } - } - } - /** Gets usage stats */ - OrgUsageSystemController_getOrgUsage: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to get usage stats */ - 500: { - content: never - } - } - } - /** Gets the partner usage and costs */ - PartnerBillingSystemController_getPartnerUsageAndCosts: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to retrieve subscription */ - 500: { - content: never - } - } - } - /** Gets the current subscription */ - OrgSubscriptionSystemController_getSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - responses: { - /** @description Failed to retrieve subscription */ - 500: { - content: never - } - } - } - /** Updates subscription */ - OrgSubscriptionSystemController_updateSubscription: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateSubscriptionV2AdminBody'] - } - } - responses: { - /** @description Failed to update subscription */ - 500: { - content: never - } - } - } - /** Updates restriction status of an org */ - OrgRestrictionsSystemController_updateRestriction: { - parameters: { - path: { - /** @description Organization slug */ - slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateRestrictionsBody'] - } - } - responses: { - /** @description Failed to update restriction status */ - 500: { - content: never - } - } - } - /** Creates a partner organization */ - AwsPartnerOrganizationsSystemController_createPartnerOrganization: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateAwsPartnerOrganizationBody'] - } - } - responses: { -<<<<<<< HEAD -======= - 201: { - content: { - 'application/json': components['schemas']['AwsPartnerOrganizationResponse'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - /** @description Unexpected error creating a partner organization */ - 500: { - content: never - } - } - } - /** Processes Vercel event */ - VercelWebhooksController_processEvent: { - parameters: { - header: { - 'x-vercel-signature': string - } - } - responses: { - /** @description Failed to process Vercel event */ - 500: { - content: never - } - } - } - /** Processes GitHub event */ - GitHubWebhooksController_processEvent: { - parameters: { - header: { - 'x-github-delivery': string - 'x-hub-signature-256': string - } - } - responses: { - /** @description Failed to process GitHub event */ - 500: { - content: never - } - } - } - /** Processes Stripe event */ - StripeWebhooksController_processEvent: { - parameters: { - header: { - 'stripe-signature': string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['Buffer'] - } - } - responses: { - /** @description Failed to process Stripe event */ - 500: { - content: never - } - } - } - /** - * Get metrics - * @description At most 50 projects can be queried at a time. - * Currently supports '1d', '3d', and '7d' intervals. - */ - V0ProjectsMetricsController_getProjectsMetrics: { - requestBody: { - content: { - 'application/json': components['schemas']['GetMetricsBody'] - } - } - responses: { - 200: { - content: never - } - } - } - /** - * Get database branch config - * @description Fetches configurations of the specified database branch - */ - BranchController_getBranchDetails: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - responses: { - /** @description Failed to retrieve database branch */ - 500: { - content: never - } - } - } - /** - * Delete a database branch - * @description Deletes the specified database branch - */ - BranchController_deleteBranch: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - responses: { - /** @description Failed to delete database branch */ - 500: { - content: never - } - } - } - /** - * Update database branch config - * @description Updates the configuration of the specified database branch - */ - BranchController_updateBranch: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateBranchBody'] - } - } - responses: { - /** @description Failed to update database branch */ - 500: { - content: never - } - } - } - /** - * Resets a database branch - * @description Resets the specified database branch - */ - BranchController_resetBranch: { - parameters: { - path: { - /** @description Branch ID */ - branch_id: string - } - } - responses: { - /** @description Failed to reset database branch */ - 500: { - content: never - } - } - } - /** - * List all projects - * @description Returns a list of all projects you've previously created. - */ - V1ProjectsController_getProjects: { - responses: { - 200: { - content: never - } - } - } - /** Create a project */ - V1ProjectsController_createProject: { - requestBody: { - content: { - 'application/json': components['schemas']['V1CreateProjectBody'] - } - } - responses: { - 201: { - content: { - 'application/json': components['schemas']['V1ProjectResponse'] - } - } - } - } - /** Get project api keys */ - ApiKeysController_getProjectApiKeys: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - } - } - /** - * List all database branches - * @description Returns all database branches of the specified project. - */ - BranchesController_getBranches: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve database branches */ - 500: { - content: never - } - } - } - /** - * Create a database branch - * @description Creates a database branch from the specified project. - */ - BranchesController_createBranch: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateBranchBody'] - } - } - responses: { - /** @description Failed to create database branch */ - 500: { - content: never - } - } - } - /** - * Disables preview branching - * @description Disables preview branching for the specified project - */ - BranchesController_disableBranch: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to disable preview branching */ - 500: { - content: never - } - } - } - /** Gets project's custom hostname config */ - CustomHostnamesController_getCustomHostnameConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's custom hostname config */ - 500: { - content: never - } - } - } - /** Deletes a project's custom hostname configuration */ - CustomHostnamesController_removeCustomHostnameConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Updates project's custom hostname configuration */ - CustomHostnamesController_createCustomHostnameConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateCustomHostnameBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Attempts to verify the DNS configuration for project's custom hostname configuration */ - CustomHostnamesController_reverify: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to verify project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Activates a custom hostname for a project. */ - CustomHostnamesController_activate: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to activate project custom hostname configuration */ - 500: { - content: never - } - } - } - /** Gets project's network bans */ - NetworkBansController_getNetworkBans: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's network bans */ - 500: { - content: never - } - } - } - /** Remove network bans. */ - NetworkBansController_removeNetworkBan: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RemoveNetworkBanRequest'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to remove network bans. */ - 500: { - content: never - } - } - } - /** Gets project's network restrictions */ - NetworkRestrictionsController_getNetworkRestrictions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's network restrictions */ - 500: { - content: never - } - } - } - /** Updates project's network restrictions */ - NetworkRestrictionsController_applyNetworkRestrictions: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['NetworkRestrictionsRequest'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project network restrictions */ - 500: { - content: never - } - } - } - /** Gets project's pgsodium config */ - PgsodiumConfigController_getPgsodiumConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's pgsodium config */ - 500: { - content: never - } - } - } - /** Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */ - PgsodiumConfigController_updatePgsodiumConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePgsodiumConfigBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project's pgsodium config */ - 500: { - content: never - } - } - } - /** - * List all secrets - * @description Returns all secrets you've previously added to the specified project. - */ - SecretsController_getSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk create secrets - * @description Creates multiple secrets and adds them to the specified project. - */ - SecretsController_createSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateSecretBody'][] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to create project's secrets */ - 500: { - content: never - } - } - } - /** - * Bulk delete secrets - * @description Deletes all secrets with the given names from the specified project - */ - SecretsController_deleteSecrets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': string[] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete secrets with given names */ - 500: { - content: never - } - } - } - /** Get project's SSL enforcement configuration. */ - SslEnforcementController_getSslEnforcementConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's SSL enforcement config */ - 500: { - content: never - } - } - } - /** Update project's SSL enforcement configuration. */ - SslEnforcementController_updateSslEnforcementConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SslEnforcementRequest'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project's SSL enforcement configuration. */ - 500: { - content: never - } - } - } - /** - * Generate TypeScript types - * @description Returns the TypeScript types of your schema for use with supabase-js. - */ - TypesController_getTypescriptTypes: { - parameters: { - query?: { - included_schemas?: string - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to generate TypeScript types */ - 500: { - content: never - } - } - } - /** Gets current vanity subdomain config */ - VanitySubdomainsController_getVanitySubdomainConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Deletes a project's vanity subdomain configuration */ - VanitySubdomainsController_removeVanitySubdomainConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Checks vanity subdomain availability */ - VanitySubdomainsController_checkVanitySubdomainAvailability: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['VanitySubdomainBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to check project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Activates a vanity subdomain for a project. */ - VanitySubdomainsController_activateVanitySubdomainPlease: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['VanitySubdomainBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to activate project vanity subdomain configuration */ - 500: { - content: never - } - } - } - /** Upgrades the project's Postgres version */ - UpgradeController_upgradeProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpgradeDatabaseBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to initiate project upgrade */ - 500: { - content: never - } - } - } - /** Returns the project's eligibility for upgrades */ - UpgradeController_upgradeEligibilityInformation: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to determine project upgrade eligibility */ - 500: { - content: never - } - } - } - /** Gets the latest status of the project's upgrade */ - UpgradeController_getUpgradeStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project upgrade status */ - 500: { - content: never - } - } - } - /** Returns project's readonly mode status */ - ReadOnlyController_getReadOnlyModeStatus: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get project readonly mode status */ - 500: { - content: never - } - } - } - /** Disables project's readonly mode for the next 15 minutes */ - ReadOnlyController_temporarilyDisableReadonlyMode: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to disable project's readonly mode */ - 500: { - content: never - } - } - } - /** Set up a read replica */ - ReadReplicaController_setUpReadReplica: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['SetUpReadReplicaBody'] - } - } - responses: { - /** @description Failed to set up read replica */ - 500: { - content: never - } - } - } - /** Remove a read replica */ - ReadReplicaController_removeReadReplica: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['RemoveReadReplicaBody'] - } - } - responses: { - /** @description Failed to remove read replica */ - 500: { - content: never - } - } - } - /** Gets project's service health status */ - ServiceHealthController_checkServiceHealth: { - parameters: { - query: { - timeout_ms: number - } - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['V1ServiceHealthResponse'][] - } - } - /** @description Failed to retrieve project's service health status */ - 500: { - content: never - } - } - } - /** Gets project's Postgres config */ - AuthPostgresConfigController_getConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve project's Postgres config */ - 500: { - content: never - } - } - } - /** Updates project's Postgres config */ - AuthPostgresConfigController_updateConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdatePostgresConfigBody'] - } - } - responses: { - /** @description Failed to update project's Postgres config */ - 500: { - content: never - } - } - } - /** Get project's pgbouncer config */ - V1PgbouncerConfigController_v1GetPgbouncerConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to retrieve project's pgbouncer config */ - 500: { - content: never - } - } - } - /** Gets project's auth config */ - V1AuthConfigController_getV1AuthConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve project's auth config */ - 500: { - content: never - } - } - } - /** Updates a project's auth config */ - V1AuthConfigController_updateV1AuthConfig: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateAuthConfigBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update project's auth config */ - 500: { - content: never - } - } - } - /** Lists all third-party auth integrations */ - ThirdPartyAuthController_listTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { -<<<<<<< HEAD -======= - 200: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'][] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - } - } - /** Creates a new third-party auth integration */ - ThirdPartyAuthController_createTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateThirdPartyAuthBody'] - } - } - responses: { -<<<<<<< HEAD -======= - 201: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - } - } - /** Get a third-party integration */ - ThirdPartyAuthController_getTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string -<<<<<<< HEAD - } - } - responses: { -======= - tpa_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - } - } - /** Removes a third-party auth integration */ - ThirdPartyAuthController_deleteTPAForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string -<<<<<<< HEAD - } - } - responses: { -======= - tpa_id: string - } - } - responses: { - 200: { - content: { - 'application/json': components['schemas']['ThirdPartyAuth'] - } - } ->>>>>>> 2bf347a585720719a9bd87adaafeb376154207f8 - 403: { - content: never - } - } - } - /** Lists all SSO providers */ - ProvidersController_listAllProviders: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description SAML 2.0 support is not enabled for this project */ - 404: { - content: never - } - } - } - /** Creates a new SSO provider */ - ProvidersController_createProviderForProject: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateProviderBody'] - } - } - responses: { - 403: { - content: never - } - /** @description SAML 2.0 support is not enabled for this project */ - 404: { - content: never - } - } - } - /** Gets a SSO provider by its UUID */ - ProvidersController_getProviderById: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ - 404: { - content: never - } - } - } - /** Updates a SSO provider by its UUID */ - ProvidersController_updateProviderById: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['UpdateProviderBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ - 404: { - content: never - } - } - } - /** Removes a SSO provider by its UUID */ - ProvidersController_removeProviderById: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ - 404: { - content: never - } - } - } - /** Run sql query */ - V1QueryController_v1RunQuery: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1RunQueryBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to run sql query */ - 500: { - content: never - } - } - } - /** Enables Database Webhooks on the project */ - V1DatabaseWebhooksController_v1EnableDatabaseWebhooks: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to enable Database Webhooks on the project */ - 500: { - content: never - } - } - } - /** Lists all backups */ - V1BackupsController_getBackups: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - /** @description Failed to get backups */ - 500: { - content: never - } - } - } - /** Restores a PITR backup for a database */ - V1RestorePitrController_v1RestorePitr: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1RestorePitrBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** - * Retrieve a function - * @description Retrieves a function with the specified slug and project. - */ - FunctionSlugController_getFunction: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve function with given slug */ - 500: { - content: never - } - } - } - /** - * Delete a function - * @description Deletes a function with the specified slug from the specified project. - */ - FunctionSlugController_deleteFunction: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to delete function with given slug */ - 500: { - content: never - } - } - } - /** - * Update a function - * @description Updates a function with the specified slug and project. - */ - FunctionSlugController_updateFunction: { - parameters: { - query?: { - import_map_path?: string - entrypoint_path?: string - import_map?: boolean - verify_jwt?: boolean - name?: string - } - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['V1UpdateFunctionBody'] - 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody'] - } - } - responses: { - 403: { - content: never - } - /** @description Failed to update function with given slug */ - 500: { - content: never - } - } - } - /** - * Retrieve a function body - * @description Retrieves a function body for the specified slug and project. - */ - FunctionSlugController_getFunctionBody: { - parameters: { - path: { - /** @description Project ref */ - ref: string - /** @description Function slug */ - function_slug: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to retrieve function body with given slug */ - 500: { - content: never - } - } - } - /** Lists all buckets */ - V1StorageBucketsController_getBuckets: { - parameters: { - path: { - /** @description Project ref */ - ref: string - } - } - responses: { - 403: { - content: never - } - /** @description Failed to get list of buckets */ - 500: { - content: never - } - } - } - /** Create an organization */ - OrganizationsController_createOrganization: { - requestBody: { - content: { - 'application/json': components['schemas']['CreateOrganizationBodyV1'] - } - } - responses: { - /** @description Unexpected error creating an organization */ - 500: { - content: never - } - } - } - /** List members of an organization */ - V1OrganizationMembersController_v1ListOrganizationMembers: { - responses: { - 200: { - content: never - } - } - } - /** Gets information about the organization */ - V1OrganizationSlugController_getOrganization: { - responses: { - 200: { - content: never - } - } - } - /** Authorize user through oauth */ - OAuthController_authorize: { - responses: { - 303: { - content: never - } - } - } - /** Exchange auth code for user's access and refresh token */ - OAuthController_token: { - requestBody: { - content: { - 'application/x-www-form-urlencoded': components['schemas']['OAuthTokenBody'] - } - } - responses: { - 201: { - content: never - } - } - } - /** Lists SQL snippets for the logged in user */ - SnippetsController_listSnippets: { - responses: { - /** @description Failed to list user's SQL snippets */ - 500: { - content: never - } - } - } - /** Gets a specific SQL snippet */ - SnippetsController_getSnippet: { - parameters: { - path: { - id: string - } - } - responses: { - /** @description Failed to retrieve SQL snippet */ - 500: { - content: never - } - } - } - /** Redirects to Supabase dashboard after completing Fly sso */ - CallbackController_redirectToDashboardFlyioExtensionScreen: { - responses: { - 200: { - content: never - } - } - } - /** Gets database status */ - ExtensionController_getResourceStatus: { - parameters: { - path: { - extension_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Deletes a database */ - ExtensionController_deleteResource: { - parameters: { - path: { - extension_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Starts Fly single sign on */ - ExtensionController_startFlyioSSO: { - parameters: { - path: { - extension_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Creates a database */ - ExtensionsController_provisionResource: { - responses: { - 201: { - content: never - } - } - } - /** Gets information about the organization */ - OrganizationsController_getOrganization: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets all databases that belong to the Fly organization */ - OrganizationsController_getOrgExtensions: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Starts Fly single sign on */ - OrganizationsController_startFlyioSSO: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } - /** Gets the organizations current unbilled charges */ - FlyBillingController_getResourceBilling: { - parameters: { - path: { - organization_id: string - } - } - responses: { - 200: { - content: never - } - } - } -} +export * from 'api-types' diff --git a/apps/studio/data/config/project-storage-config-query.ts b/apps/studio/data/config/project-storage-config-query.ts index 8408f0e74d9..ce8f0a09dbe 100644 --- a/apps/studio/data/config/project-storage-config-query.ts +++ b/apps/studio/data/config/project-storage-config-query.ts @@ -1,32 +1,29 @@ import { useQuery, UseQueryOptions } from '@tanstack/react-query' -import { get } from 'lib/common/fetch' +import { get, handleError } from 'data/fetchers' import { API_URL } from 'lib/constants' import { configKeys } from './keys' import type { ResponseError } from 'types' +import { components } from 'data/api' export type ProjectStorageConfigVariables = { projectRef?: string } -// TODO: Add proper type -export type ProjectStorageConfigResponse = any +export type ProjectStorageConfigResponse = components['schemas']['StorageConfigResponse'] export async function getProjectStorageConfig( { projectRef }: ProjectStorageConfigVariables, signal?: AbortSignal ) { - if (!projectRef) { - throw new Error('projectRef is required') - } + if (!projectRef) throw new Error('projectRef is required') - const response = await get(`${API_URL}/projects/${projectRef}/config/storage`, { + const { data, error } = await get('/platform/projects/{ref}/config/storage', { + params: { path: { ref: projectRef } }, signal, }) - if (response.error) { - throw response.error - } - return response as ProjectStorageConfigResponse + if (error) throw handleError(error) + return data } export type ProjectStorageConfigData = Awaited> diff --git a/apps/studio/data/lint/lint-query.ts b/apps/studio/data/lint/lint-query.ts index 938223f4b30..5c290d45e79 100644 --- a/apps/studio/data/lint/lint-query.ts +++ b/apps/studio/data/lint/lint-query.ts @@ -221,16 +221,16 @@ where and ( ( -- Example: auth.uid() - qual ~ '(auth)\.(uid|jwt|role|email)\(\)' + qual ~ '(auth)\\.(uid|jwt|role|email)\\(\\)' -- Example: select auth.uid() - and lower(qual) !~ 'select\s+(auth)\.(uid|jwt|role|email)\(\)' + and lower(qual) !~ 'select\\s+(auth)\\.(uid|jwt|role|email)\\(\\)' ) or ( -- Example: auth.uid() - with_check ~ '(auth)\.(uid|jwt|role|email)\(\)' + with_check ~ '(auth)\\.(uid|jwt|role|email)\\(\\)' -- Example: select auth.uid() - and lower(with_check) !~ 'select\s+(auth)\.(uid|jwt|role|email)\(\)' + and lower(with_check) !~ 'select\\s+(auth)\\.(uid|jwt|role|email)\\(\\)' ) )) union all diff --git a/apps/studio/localStores/storageExplorer/StorageExplorerStore.tsx b/apps/studio/localStores/storageExplorer/StorageExplorerStore.tsx index 88f72d9052e..1c099791c4e 100644 --- a/apps/studio/localStores/storageExplorer/StorageExplorerStore.tsx +++ b/apps/studio/localStores/storageExplorer/StorageExplorerStore.tsx @@ -12,7 +12,11 @@ import { STORAGE_SORT_BY, STORAGE_VIEWS, } from 'components/to-be-cleaned/Storage/Storage.constants' +import { convertFromBytes } from 'components/to-be-cleaned/Storage/StorageSettings/StorageSettings.utils' import { ToastLoader } from 'components/ui/ToastLoader' +import { configKeys } from 'data/config/keys' +import { ProjectStorageConfigResponse } from 'data/config/project-storage-config-query' +import { getQueryClient } from 'data/query-client' import { delete_, post } from 'lib/common/fetch' import { API_URL, IS_PLATFORM } from 'lib/constants' import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' @@ -459,6 +463,14 @@ class StorageExplorerStore { } uploadFiles = async (files, columnIndex, isDrop = false) => { + const queryClient = getQueryClient() + const storageConfiguration = queryClient + .getQueryCache() + .find(configKeys.storage(this.projectRef))?.state.data as + | ProjectStorageConfigResponse + | undefined + const fileSizeLimit = storageConfiguration?.fileSizeLimit + const t1 = new Date() const autofix = true @@ -468,12 +480,39 @@ class StorageExplorerStore { : Array.from(files) const derivedColumnIndex = columnIndex === -1 ? this.getLatestColumnIndex() : columnIndex + const filesWithinUploadLimit = + fileSizeLimit !== undefined + ? filesToUpload.filter((file) => file.size <= fileSizeLimit) + : filesToUpload + + if (filesWithinUploadLimit.length < filesToUpload.length) { + const numberOfFilesRejected = filesToUpload.length - filesWithinUploadLimit.length + const { value, unit } = convertFromBytes(fileSizeLimit) + + toast.error( +
+

+ Failed to upload {numberOfFilesRejected} file{numberOfFilesRejected > 1 ? 's' : ''} as{' '} + {numberOfFilesRejected > 1 ? 'their' : 'its'} size + {numberOfFilesRejected > 1 ? 's are' : ' is'} beyond the upload limit of {value} + {unit}. +

+

+ You may change the file size upload limit under Storage in Project Settings. +

+
, + { duration: 8000 } + ) + + if (numberOfFilesRejected === filesToUpload.length) return + } + // If we're uploading a folder which name already exists in the same folder that we're uploading to // We sanitize the folder name and let all file uploads through. (This is only via drag drop) const topLevelFolders = (this.columns?.[derivedColumnIndex]?.items ?? []) .filter((item) => !item.id) .map((item) => item.name) - const formattedFilesToUpload = filesToUpload.map((file) => { + const formattedFilesToUpload = filesWithinUploadLimit.map((file) => { // If the files are from clicking "Upload button", just take them as they are since users cannot // upload folders from clicking that button, only via drag drop if (!file.path) return file diff --git a/apps/studio/next.config.js b/apps/studio/next.config.js index 6aa8d8d2eee..36442f42961 100644 --- a/apps/studio/next.config.js +++ b/apps/studio/next.config.js @@ -24,6 +24,11 @@ if (SUPABASE_URL) { SUPABASE_LOCAL_PROJECTS_URL_WS = `ws://${wsUrl} wss://${wsUrl}` } +// Needed to test docs search in local dev +const SUPABASE_DOCS_PROJECT_URL = process.env.NEXT_PUBLIC_SUPABASE_URL + ? new URL(process.env.NEXT_PUBLIC_SUPABASE_URL).origin + : '' + const SUPABASE_STAGING_PROJECTS_URL = 'https://*.supabase.red' const SUPABASE_STAGING_PROJECTS_URL_WS = 'wss://*.supabase.red' const SUPABASE_COM_URL = 'https://supabase.com' @@ -58,7 +63,7 @@ const csp = [ process.env.NEXT_PUBLIC_ENVIRONMENT === 'local' || process.env.NEXT_PUBLIC_ENVIRONMENT === 'staging' ? [ - `default-src 'self' ${DEFAULT_SRC_URLS} ${SUPABASE_STAGING_PROJECTS_URL} ${SUPABASE_STAGING_PROJECTS_URL_WS} ${VERCEL_LIVE_URL} ${PUSHER_URL} ${PUSHER_URL_WS};`, + `default-src 'self' ${DEFAULT_SRC_URLS} ${SUPABASE_STAGING_PROJECTS_URL} ${SUPABASE_STAGING_PROJECTS_URL_WS} ${VERCEL_LIVE_URL} ${PUSHER_URL} ${PUSHER_URL_WS} ${SUPABASE_DOCS_PROJECT_URL};`, `script-src 'self' 'unsafe-eval' 'unsafe-inline' ${SCRIPT_SRC_URLS} ${VERCEL_LIVE_URL};`, `frame-src 'self' ${FRAME_SRC_URLS} ${VERCEL_LIVE_URL};`, `img-src 'self' blob: data: ${IMG_SRC_URLS} ${SUPABASE_STAGING_PROJECTS_URL} ${VERCEL_URL};`, @@ -424,7 +429,7 @@ const nextConfig = { 'vercel.com', ], }, - transpilePackages: ['ui', 'ui-patterns', 'common', 'shared-data', 'icons'], + transpilePackages: ['ui', 'ui-patterns', 'common', 'shared-data', 'api-types', 'icons'], webpack(config) { config.module?.rules .find((rule) => rule.oneOf) diff --git a/apps/studio/package.json b/apps/studio/package.json index 49dba5fe13d..c13292813bf 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -142,12 +142,11 @@ "jest": "^29.7.0", "jest-canvas-mock": "^2.5.2", "jest-environment-jsdom": "^29.7.0", - "openapi-types": "^12.1.3", - "openapi-typescript": "^6.7.4", "postcss": "^8.4.31", "prettier": "^4.0.0-alpha.8", "storybook-dark-mode": "^3.0.1", "tailwindcss": "^3.4.1", - "typescript": "^5.4.3" + "typescript": "^5.4.3", + "api-types": "*" } } diff --git a/apps/studio/pages/api/auth/[ref]/config.ts b/apps/studio/pages/api/auth/[ref]/config.ts index a01dcca261b..19ab6e288d8 100644 --- a/apps/studio/pages/api/auth/[ref]/config.ts +++ b/apps/studio/pages/api/auth/[ref]/config.ts @@ -41,7 +41,8 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { JWT_DEFAULT_GROUP_NAME: '', URI_ALLOW_LIST: '', MAILER_AUTOCONFIRM: mailer_autoconfirm ?? false, - MAILER_OTP_EXP: 86400, + MAILER_OTP_EXP: 3600, + MAILER_OTP_LENGTH: 6, MAILER_URLPATHS_INVITE: '', MAILER_URLPATHS_CONFIRMATION: '', MAILER_URLPATHS_RECOVERY: '', diff --git a/apps/studio/pages/project/[ref]/api/index.tsx b/apps/studio/pages/project/[ref]/api/index.tsx index 899fa9ef981..b9eec9a8bb6 100644 --- a/apps/studio/pages/project/[ref]/api/index.tsx +++ b/apps/studio/pages/project/[ref]/api/index.tsx @@ -7,6 +7,7 @@ import { GeneralContent, ResourceContent, RpcContent } from 'components/interfac import LangSelector from 'components/interfaces/Docs/LangSelector' import { DocsLayout } from 'components/layouts' import { useProjectApiQuery } from 'data/config/project-api-query' +import { useCustomDomainsQuery } from 'data/custom-domains/custom-domains-query' import { useProjectJsonSchemaQuery } from 'data/docs/project-json-schema-query' import { snakeToCamel } from 'lib/helpers' import type { NextPageWithLayout } from 'types' @@ -79,6 +80,7 @@ const DocView = observer(() => { error: jsonSchemaError, refetch, } = useProjectJsonSchemaQuery({ projectRef }) + const { data: customDomainData } = useCustomDomainsQuery({ projectRef }) useEffect(() => { PageState.setJsonSchema(jsonSchema) @@ -104,10 +106,15 @@ const DocView = observer(() => {
) + const endpoint = + customDomainData?.customDomain?.status === 'active' + ? `https://${customDomainData.customDomain?.hostname}` + : `${data.autoApiService.protocol ?? 'https'}://${data.autoApiService.endpoint ?? '-'}` + // Data Loaded const autoApiService = { ...data.autoApiService, - endpoint: `${data.autoApiService.protocol ?? 'https'}://${data.autoApiService.endpoint ?? '-'}`, + endpoint, } const { paths, definitions } = PageState.jsonSchema diff --git a/apps/studio/pages/project/[ref]/auth/policies.tsx b/apps/studio/pages/project/[ref]/auth/policies.tsx index 48b0060ca3f..71729cc5b64 100644 --- a/apps/studio/pages/project/[ref]/auth/policies.tsx +++ b/apps/studio/pages/project/[ref]/auth/policies.tsx @@ -1,7 +1,10 @@ import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { partition } from 'lodash' +import { ExternalLink, Search } from 'lucide-react' import { useState } from 'react' +import { useIsRLSAIAssistantEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { Policies } from 'components/interfaces/Auth/Policies' import { AIPolicyEditorPanel } from 'components/interfaces/Auth/Policies/AIPolicyEditorPanel' import { AuthLayout } from 'components/layouts' @@ -15,17 +18,8 @@ import { useSchemasQuery } from 'data/database/schemas-query' import { useTablesQuery } from 'data/tables/tables-query' import { useCheckPermissions, usePermissionsLoaded, useUrlState } from 'hooks' import { EXCLUDED_SCHEMAS } from 'lib/constants/schemas' -import { partition } from 'lodash' import type { NextPageWithLayout } from 'types' -import { - Button, - IconExternalLink, - IconSearch, - Input, - TooltipContent_Shadcn_, - TooltipTrigger_Shadcn_, - Tooltip_Shadcn_, -} from 'ui' +import { Button, Input, TooltipContent_Shadcn_, TooltipTrigger_Shadcn_, Tooltip_Shadcn_ } from 'ui' /** * Filter tables by table name and policy name @@ -69,7 +63,9 @@ const AuthPoliciesPage: NextPageWithLayout = () => { }>() const { schema = 'public', search: searchString = '' } = params const { project } = useProjectContext() + const isAiAssistantEnabled = useIsRLSAIAssistantEnabled() + const [selectedTable, setSelectedTable] = useState() const [showPolicyAiEditor, setShowPolicyAiEditor] = useState(false) const [selectedPolicyToEdit, setSelectedPolicyToEdit] = useState() @@ -133,11 +129,11 @@ const AuthPoliciesPage: NextPageWithLayout = () => { const str = e.target.value setParams({ ...params, search: str === '' ? undefined : str }) }} - icon={} + icon={} />
- - - - - - {(!canCreatePolicies || schemaHasNoTables) && ( - - {!canCreatePolicies - ? 'You need additional permissions to create RLS policies' - : schemaHasNoTables - ? `No table in schema ${schema} to create policies on` - : null} - - )} - + {isAiAssistantEnabled && ( + + + + + {(!canCreatePolicies || schemaHasNoTables) && ( + + {!canCreatePolicies + ? 'You need additional permissions to create RLS policies' + : schemaHasNoTables + ? `No table in schema ${schema} to create policies on` + : null} + + )} + + )}
@@ -181,6 +179,10 @@ const AuthPoliciesPage: NextPageWithLayout = () => { tables={filteredTables} hasTables={tables.length > 0} isLocked={isLocked} + onSelectCreatePolicy={(table: string) => { + setShowPolicyAiEditor(true) + setSelectedTable(table) + }} onSelectEditPolicy={(policy) => { setSelectedPolicyToEdit(policy) setShowPolicyAiEditor(true) @@ -192,8 +194,10 @@ const AuthPoliciesPage: NextPageWithLayout = () => { visible={showPolicyAiEditor} schema={schema} searchString={searchString} + selectedTable={selectedTable} selectedPolicy={selectedPolicyToEdit} onSelectCancel={() => { + setSelectedTable(undefined) setShowPolicyAiEditor(false) setSelectedPolicyToEdit(undefined) }} diff --git a/apps/studio/pages/project/[ref]/database/backups/pitr.tsx b/apps/studio/pages/project/[ref]/database/backups/pitr.tsx index dfd2e0b03c6..fb46c8dff0d 100644 --- a/apps/studio/pages/project/[ref]/database/backups/pitr.tsx +++ b/apps/studio/pages/project/[ref]/database/backups/pitr.tsx @@ -80,10 +80,10 @@ const PITR = () => { { const [loading, setLoading] = useState(true) @@ -51,10 +52,19 @@ const SignInFlyTos = () => { : setLoading(false) }, [isReady]) + const [isRedirecting, setIsRedirecting] = useState(false) + const onSignInWithFly = async () => { - window.location.href = fly_extension_id - ? `${API_URL}/tos/fly?extension_id=${fly_extension_id}` - : `${API_URL}/tos/fly?organization_id=${fly_organization_id}` + setIsRedirecting(true) + + try { + window.location.href = fly_extension_id + ? `${API_URL}/tos/fly?extension_id=${fly_extension_id}` + : `${API_URL}/tos/fly?organization_id=${fly_organization_id}` + } catch (error) { + setIsRedirecting(false) + throw error + } } return ( @@ -88,7 +98,11 @@ const SignInFlyTos = () => {

Checking your access rights...

) : (
- {isReady && !fly_extension_id && !fly_organization_id && ( diff --git a/apps/studio/styles/editor.scss b/apps/studio/styles/editor.scss index 9c9236d76b3..a863b40cafc 100644 --- a/apps/studio/styles/editor.scss +++ b/apps/studio/styles/editor.scss @@ -2,10 +2,6 @@ gap: 0rem !important; } -// .table-editor-columns-input .sbui-input { -// @apply border-none; -// } - .table-editor-column-type .sbui-listbox-option-container { width: 400px; } diff --git a/apps/www/_blog/2022-12-01-transparent-column-encryption-with-postgres.mdx b/apps/www/_blog/2022-12-01-transparent-column-encryption-with-postgres.mdx deleted file mode 100644 index 13399ce46d3..00000000000 --- a/apps/www/_blog/2022-12-01-transparent-column-encryption-with-postgres.mdx +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: Transparent Column Encryption with Postgres -description: Using pgsodium's Transparent Column Encryption to encrypt data and provide your users with row-level encryption. -author: michel -image: transparent-column-encryption-with-postgres.jpg -thumb: transparent-column-encryption-with-postgres.jpg -categories: - - postgres -tags: - - postgres - - planetpg -date: '2022-12-01' -toc_depth: 3 ---- - -One of the more common questions we receive at Supabase is “how do I encrypt sensitive data”? - -pgsodium's Transparent Column Encryption (TCE) is one of the safest ways, and can be used to encrypt one or more text columns in any number of tables. Using TCE, you can encrypt data so that it doesn't leak into logs as well as providing your users with row-level encryption. - -To understand how TCE works, let's first do a deep-dive into an important encryption topic: key derivation. - -
- -👀 Transparent Column Encryption (TCE) is the foundational feature of the Supabase Vault, a safe and easy way to store encrypted secrets and other data in your Postgres database. [Learn more about Supabase Vault](https://supabase.com/docs/guides/database/vault) - -
- -## How Key Derivation Works - -The current state-of-the-art in encryption libraries is [libsodium](https://doc.libsodium.org/). - -**libsodium** offers a range of APIs for authenticated secret and public key encryption, key derivation, encrypted streaming, [AEAD](https://en.wikipedia.org/wiki/Authenticated_encryption), various forms of hashing, and much more. - -This powerful API is available to PostgreSQL using the [**pgsodium**](https://github.com/michelp/pgsodium) extension. **pgsodium** provides all the functionality of the full **libsodium** API, but previously it required developers to set up database encryption themselves, which remained a challenge even for those familiar with database administration. - -To solve this problem, **pgsodium** now has a full key management API, primarily via the table `pgsodium.key` and the `pgsodium.create_key()` function. This key table contains no raw keys, but instead uses libsodium Key IDs to derive keys that are used internally for encryption. A [key derivation function](https://libsodium.gitbook.io/doc/key_derivation) is used with an internal root key that is unavailable to SQL and not stored in the database, but rather managed by you externally using flexible scripts, or by Supabase automatically as part of our service offering. - -The simplest way to use **pgsodium** to encrypt and decrypt data is to first create a **Key ID**. Valid Key IDs are stored in pgsodium in a special extension table, and they can be created using the `pgsodium.create_key()` function. This function takes a number of arguments depending on how it's used, but the simplest case is to create a new key with no arguments: - -```sql -select * from pgsodium.create_key(); --[ RECORD 1 ]---+------------------------------------- -id | eaa20d8c-c77c-4985-9f73-2a5f5d1f1e6d -name | -status | valid -key_type | aead-det -key_id | 2 -key_context | \x7067736f6469756d -created | 2022-11-13 21:19:35.765823+00 -expires | -associated_data | -``` - -This key can now be used with pgsodium encryption functions by its UUID (`eaa20d8c-c77c-4985-9f73-2a5f5d1f1e6d`). For example: - -```sql -select * from pgsodium.crypto_aead_det_encrypt ( - 'this is the message', -- a message to encrypt - 'this is associated data', -- some authenticated associated data - 'eaa20d8c-c77c-4985-9f73-2a5f5d1f1e6d'::uuid -- key ID -); -``` - -This produces the following encrypted “ciphertext” using the `aead-det` algorithm from the libsodium [XChaCha20-SIV](https://github.com/jedisct1/libsodium-xchacha20-siv) encryption function. - -``` --[ RECORD 1 ]-----------+--------------------------------------------------------------------------------------------------------- -crypto_aead_det_encrypt | \\x099baa820250d7375ed141f8f1936af384bc229f3de1010a6eff6ffdaf3998baffbae75b5cd83d1c469407ff2d3764a428b742 -``` - -Now to decrypt the ciphertext, pass it to the decryption function _with the same Key ID_: - -```sql -select * -from convert_from(pgsodium.crypto_aead_det_decrypt ( - '\\x099baa820250d7375ed141f8f1936af384bc229f3de1010a6eff6ffdaf3998baffbae75b5cd83d1c469407ff2d3764a428b742', - 'this is associated data', - 'eaa20d8c-c77c-4985-9f73-2a5f5d1f1e6d'::uuid -), 'utf8'); -``` - -Which recovers the original “plaintext” message: - -``` --[ RECORD 1 ]+-------------------- -convert_from | this is the message -``` - -In the above example, there is _no raw key_, only a Key ID which is used to derive the key used to encrypt the message and authenticate it with the associated data. In fact, it is impossible for a SQL user to derive the key used above, and if the Key ID is stored, then no encryption keys or decrypted information will leak into backups, disk storage, or the database WAL stream. - -## Transparent Column Encryption - -As of **pgsodium** 3.0.0 and up, the extension offers a simple and declarative Transparent Column Encryption feature (TCE). This feature is now shipped with all Supabase projects. TCE allows you to specify encrypted columns within a table and generates a new view that “wraps” that table to decrypt the contents. - -TCE works using two dynamically generated objects for tables that contain encrypted columns: - -- an `INSERT UPDATE` trigger that encrypts data when it is inserted or modified -- a view that is created to wrap the table to decrypt the data when it is accessed - -To “transparently” decrypt the table, access the dynamically generated view _instead of the table_. For every encrypted column in the table, the view will have an additional decrypted column that shows the decrypted result. - -It's worth noting at this point that sometimes there is some confusion about handling encrypted data with TCE. The `T` stands for **Transparent** which means, you can always see decrypted data through the view, where the decrypted data can't be see is when stored on disk, or in pg_dumps, backups, WAL streams, etc. This is often called **Encryption At Rest** and is one layer in many that may be used to encrypt and protect your data. - -Often Transparent encryption is understood to be “Transparent Disk Encryption” or “Full Disk Encryption”, this is where a drive is encrypted but reading and writing that drive is decrypted. TCE is similar to this, where data on disk is encrypted, but it is more fine grained, only particular columns are encrypted. The data is also encrypted in the sense that the table stored on disk contains encrypted data, without the view or the key, pg_dumps and backups still contain encrypted data, this is not possible with disk-only encryption. - -For the moment TCE only works for columns of type `text` (or types castable to `text` like `json`). Soon we will also support `bytea` and possibly more as use cases and tests get better. - -TCE uses one of PostgreSQL's lesser-known features: [`SECURITY LABEL`](https://www.postgresql.org/docs/current/sql-security-label.html). A security label can be thought of as a simple label which is attached to an object (a table, column, etc). Each label is scoped to an extension and that extension can provide security features depending on the label. - -Let's see a simple example of using `SECURITY LABEL` to encrypt a column using **pgsodium**. - -
- -Note: We're using “credit cards” in our examples below, because they are very easy to understand. Please don't store credit cards in your Supabase database - we are not a certified PCI Service Provider. - -
- -### One Key ID for the Entire Column - -For the simplest case, a column can be encrypted with one Key ID which must be of the type `aead-det` (as created above): - -```sql -CREATE TABLE credit_cards ( - id bigserial primary key, - credit_card_number text -); - -SECURITY LABEL FOR pgsodium - ON COLUMN credit_cards.credit_card_number - IS 'ENCRYPT WITH KEY ID e348034b-3f07-4878-aad6-000511d12826'; -``` - -The advantage of this approach is simplicity - the user creates one key and labels a column with it. The cryptographic algorithm for this approach uses a _nonceless_ encryption algorithm called `crypto_aead_det_xchacha20()`. This algorithm is written by the author of libsodium and can be found [here](https://github.com/jedisct1/libsodium-xchacha20-siv). - -Using one key for an entire column means that whoever can decrypt one row can decrypt them all from a database dump. Also changing (rotating) the key means rewriting the whole table. - -### One Key ID per Row - -A more fine grained approach would be storing one Key ID per row: - -```sql -CREATE TABLE credit_cards ( - id bigserial primary key, - credit_card_number text, - key_id uuid not null DEFAULT 'e348034b-3f07-4878-aad6-000511d12826'::uuid -); - -SECURITY LABEL FOR pgsodium - ON COLUMN credit_cards.credit_card_number - IS 'ENCRYPT WITH KEY COLUMN key_id'; -``` - -This approach ensures that a key for one user doesn't necessarily decrypt any others. While rows can share key IDs, they don't necessarily have to (unlike the first example above where one key id was used for the entire column). It also acts as a natural partition that can work in conjunction with Row Level Security to share distinct keys between owners. - -Notice also how there is a `DEFAULT` value for the `key_id`. In a way, this gives you the best of both approaches - encrypting the column when a per-row key ID is not provided. The downside to this approach is that you need to store one key ID per row, which takes up more disk space (but that's cheap!). - -### One Key ID per Row with Nonce Support - -The default cryptographic algorithm for the above approach uses a _nonceless_ encryption algorithm called [`crypto_aead_det_xchacha20()`](https://github.com/jedisct1/libsodium-xchacha20-siv). This algorithm has the advantage that it does not require nonce values, the disadvantage is that duplicate plaintexts will produce duplicate ciphertexts. - -Nonces are some extra cryptographic context that is used in many cryptographic algorithms to produce different ciphertexts, even if the plaintexts are the same. The nonce does not have to be secret, but it _does_ have to be unique. **pgsodium** comes with a useful function `pgsodium.crypto_aead_det_noncegen()` that will generate a cryptographically secure nonce for you, and in almost all cases it's best to use that function unless you know specifically what you are doing. In password hashing approaches, this is often similar to how a “salt” value is used to deduplicate password hashes. - -Duplicate ciphertexts cannot be used to “attack the key”, it can only reveal the duplication. However, duplication is still information. In our examples so far, an attacker might be able to use this information to determine that two accounts share the same credit card number. While not technically breaking the encryption, this still leaks information to an attacker. - -```sql -CREATE TABLE credit_cards ( - id bigserial primary key, - credit_card_number text, - key_id uuid not null DEFAULT 'e348034b-3f07-4878-aad6-000511d12826'::uuid, - nonce bytea default pgsodium.crypto_aead_det_noncegen() -); - -SECURITY LABEL FOR pgsodium - ON COLUMN credit_cards.credit_card_number - IS 'ENCRYPT WITH KEY COLUMN key_id NONCE nonce'; -``` - -This is the most secure form of TCE - there is a unique key ID and a unique nonce per row. - -### One Key ID per Row with Associated Data - -The encryption that is used for TCE is one of a family of functions provided by **libsodium** to do Authenticated Encryption with Associated Data or [AEAD Encryption](https://en.wikipedia.org/wiki/Authenticated_encryption). The “associated” data is plaintext (unencrypted) information that is mixed into the authentication signature of the encrypted data, such that when you authenticate the data, you also know that the associated data is authentic. - -AEAD is helpful because often you have metadata associated with a secret, which isn't confidential but must not be forged. - -In our credit card example, we might associate a "`credit_card_number`" with an "`account_id`". But what if a malicious actor wanted to use someone else's credit card on their own account? If someone could forge the `account_id` data column, swapping an `account_id` with their own `account_id`, then you could be tricked into using the wrong credit card. By “associating” the `account_id` with the `credit_card_number`, it cannot be forged without throwing an error. - -Like above, this is done simply by extending the security label with the associated data column: - -```sql -CREATE TABLE credit_cards ( - id bigserial primary key, - credit_card_number text, - account_id integer, - key_id uuid not null DEFAULT 'e348034b-3f07-4878-aad6-000511d12826'::uuid, - nonce bytea default pgsodium.crypto_aead_det_noncegen() -); - -SECURITY LABEL FOR pgsodium - ON COLUMN credit_cards.credit_card_number - IS 'ENCRYPT WITH KEY COLUMN key_id ASSOCIATED (account_id) NONCE nonce'; -``` - -The new label indicates which column is to be associated with the secret, and that's it! Your `account_id` and credit card number are now protected under the same authentication signature as the secret itself. - -## Using an Encrypted Table - -Now that you have TCE setup for a table, it's easy to use by simply inserting data into the table, and querying that data by looking at its generated view. The view is named `decrypted_` and by default is in the same schema as your table: - -```sql -insert into credit_cards - (credit_card_number, account_id) -values - ('1234-5678-8765-4321', 123); -``` - -Now that you have inserted data, look at the table and notice how the credit card number is encrypted. This is the data that is stored on disk, the encrypted card number, the key id, and the account id, **but the key itself is not stored**. This means if someone gets a backup or dump of your database, they cannot decrypt the credit card number, they do not have the key, only the key ID: - -```sql -> select * from credit_cards where account_id = 123; --[ RECORD 1 ]------+--------------------------------------------------------------------- -id | 1 -credit_card_number | jf8KfImkKTr+j4gzyDZQtLDEFL9eSlFuKjNlNEJvDg+OIKUr2wjF/8NnYcLisb5F9xiN -account_id | 123 -key_id | 7f753c4f-8c68-457a-8801-1798b2e9f44d -nonce | \x300a14aa721184ff7cf0f6bf088da267 -``` - -For you, the developer, you need the unencrypted credit card number for you application. No problem, you can access that data using the dynamically generated decryption view `decrypted_credit_cards`: - -```sql -> select * from decrypted_credit_cards where account_id = 123; --[ RECORD 1 ]----------------+--------------------------------------------------------------------- -id | 1 -credit_card_number | jf8KfImkKTr+j4gzyDZQtLDEFL9eSlFuKjNlNEJvDg+OIKUr2wjF/8NnYcLisb5F9xiN -decrypted_credit_card_number | 1234-5678-8765-4321 -account_id | 123 -key_id | 7f753c4f-8c68-457a-8801-1798b2e9f44d -nonce | \x300a14aa721184ff7cf0f6bf088da267 -``` - -Notice how there is a new column called `decrypted_credit_card_number`. This column is not stored in database or on disk at all, it is generated “on-the-fly” as you select from the view. Database dumps do not contain this information, only the view itself, and most importantly, **raw decryption keys are never stored**. - -## Future possibilities - -We're always thinking about the future possibilities for features and tools that we can bring to the PostgreSQL community, and we'd love to hear from you about what kind of encryption features you'd like to see. Some things we've considered but not yet explored yet are: - -- Built-in Key Management Server (KMS) with REST API ala AWS or GCP. -- Seamless Integration with external KMS services for key management. -- Signcryption-based Token formats for exchanging AEAD tokens. -- End-to-End encryption for user data using libsodium's `crypto_secretstream()` API. -- Group encryption using [signcryption](https://github.com/jedisct1/libsodium-signcryption) -- Your idea here? - -There's a lot of potential in the world of cryptography with Postgres and pgsodium, and we'd love to hear any ideas you may have as well. Join us in our [Discord #encryption channel](https://discord.com/channels/839993398554656828/1009906326480101417) if you want to chat more about it with us! - -## More Postgres Resources - -- [Postgres Full Text Search vs the rest](https://supabase.com/blog/postgres-full-text-search-vs-the-rest) -- [Postgres WASM by Snaplet and Supabase](https://supabase.com/blog/postgres-wasm) -- [Choosing a Postgres Primary Key](https://supabase.com/blog/choosing-a-postgres-primary-key) -- [Implementing "seen by" functionality with Postgres](https://supabase.com/blog/seen-by-in-postgresql) -- [Partial data dumps using Postgres Row Level Security](https://supabase.com/blog/partial-postgresql-data-dumps-with-rls) -- [Realtime Postgres RLS on Supabase](https://supabase.com/blog/realtime-row-level-security-in-postgresql) diff --git a/apps/www/_blog/2024-04-19-ga-week-summary.mdx b/apps/www/_blog/2024-04-19-ga-week-summary.mdx index e0946b89e61..710b4f3b777 100644 --- a/apps/www/_blog/2024-04-19-ga-week-summary.mdx +++ b/apps/www/_blog/2024-04-19-ga-week-summary.mdx @@ -83,7 +83,7 @@ There's been a few other highlights this week: In the previous Launch Week we started working on [Fly Postgres, a managed offering from Supabase](https://supabase.com/blog/postgres-on-fly-by-supabase). We've received a lot of feedback from early testers, and we're working hard to make the service available and as resilient for production workloads. -Today we're opening up access to everyone **for testing**. Testers can also try [Branching](/docs/guides/platform/branching), an opt-in feature which creates an ephemeral test environment for your git branches. These instances automatically pause when you aren't using them to save on costs. +Today we're opening up access to everyone **for testing**. Testers can also try [Branching](/docs/guides/platform/branching), an opt-in feature which creates an ephemeral test environment for your git branches. These instances automatically pause when you aren't using them. diff --git a/apps/www/lib/redirects.js b/apps/www/lib/redirects.js index 20919e9545e..2e664e4a487 100644 --- a/apps/www/lib/redirects.js +++ b/apps/www/lib/redirects.js @@ -2433,4 +2433,9 @@ module.exports = [ source: '/special-announcement/tickets/:path*', destination: '/ga-week/tickets/:path*', }, + { + permanent: true, + source: '/docs/guides/database/sql-to-api', + destination: '/docs/guides/api/sql-to-api', + }, ] diff --git a/apps/www/next.config.mjs b/apps/www/next.config.mjs index da0813e49a6..1fde9b0af42 100644 --- a/apps/www/next.config.mjs +++ b/apps/www/next.config.mjs @@ -1,11 +1,11 @@ import bundleAnalyzer from '@next/bundle-analyzer' import nextMdx from '@next/mdx' -import remarkGfm from 'remark-gfm' import rehypeSlug from 'rehype-slug' +import remarkGfm from 'remark-gfm' -import rewrites from './lib/rewrites.js' import redirects from './lib/redirects.js' +import rewrites from './lib/rewrites.js' import { remarkCodeHike } from '@code-hike/mdx' import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } @@ -41,7 +41,7 @@ const nextConfig = { basePath: '', pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'], trailingSlash: false, - transpilePackages: ['ui', 'ui-patterns', 'common', 'shared-data', 'icons'], + transpilePackages: ['ui', 'ui-patterns', 'common', 'shared-data', 'icons', 'api-types'], images: { dangerouslyAllowSVG: true, domains: [ diff --git a/apps/www/package.json b/apps/www/package.json index b106b7bf9a6..dda8d5c28ba 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -85,7 +85,8 @@ "autoprefixer": "^10.4.14", "config": "*", "postcss": "^8.4.31", - "tsconfig": "*" + "tsconfig": "*", + "api-types": "*" }, "license": "MIT" } diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3f68374f16a..19b1f0257d1 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -134,6 +134,20 @@ services: GOTRUE_EXTERNAL_PHONE_ENABLED: ${ENABLE_PHONE_SIGNUP} GOTRUE_SMS_AUTOCONFIRM: ${ENABLE_PHONE_AUTOCONFIRM} + # Uncomment to enable custom access token hook. You'll need to create a public.custom_access_token_hook function and grant necessary permissions. + # See: https://supabase.com/docs/guides/auth/auth-hooks#hook-custom-access-token for details + # GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_ENABLED="true" + # GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_URI="pg-functions://postgres/public/custom_access_token_hook" + + # GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED="true" + # GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_URI="pg-functions://postgres/public/mfa_verification_attempt" + + # GOTRUE_HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED="true" + # GOTRUE_HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI="pg-functions://postgres/public/password_verification_attempt" + + + + rest: container_name: supabase-rest image: postgrest/postgrest:v12.0.1 @@ -157,7 +171,7 @@ services: realtime: # This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain container_name: realtime-dev.supabase-realtime - image: supabase/realtime:v2.28.23 + image: supabase/realtime:v2.28.32 depends_on: db: # Disable this if you are using an external Postgres database @@ -315,7 +329,7 @@ services: # target: /opt/app/rel/logflare/bin/gcloud.json # read_only: true environment: - LOGFLARE_NODE_HOST: 127.0.0.1 + LOGFLARE_NODE_HOST: 127.0.0.1 DB_USERNAME: supabase_admin DB_DATABASE: ${POSTGRES_DB} DB_HOSTNAME: ${POSTGRES_HOST} @@ -325,12 +339,12 @@ services: LOGFLARE_API_KEY: ${LOGFLARE_API_KEY} LOGFLARE_SINGLE_TENANT: true LOGFLARE_SUPABASE_MODE: true + LOGFLARE_MIN_CLUSTER_SIZE: 1 # Comment variables to use Big Query backend for analytics POSTGRES_BACKEND_URL: postgresql://supabase_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} POSTGRES_BACKEND_SCHEMA: _analytics LOGFLARE_FEATURE_FLAG_OVERRIDE: multibackend=true - # Uncomment to use Big Query backend for analytics # GOOGLE_PROJECT_ID: ${GOOGLE_PROJECT_ID} # GOOGLE_PROJECT_NUMBER: ${GOOGLE_PROJECT_NUMBER} diff --git a/docker/volumes/api/kong.yml b/docker/volumes/api/kong.yml index 4a07995037a..7abf42534c9 100644 --- a/docker/volumes/api/kong.yml +++ b/docker/volumes/api/kong.yml @@ -26,16 +26,14 @@ acls: ### Dashboard credentials ### basicauth_credentials: -- consumer: DASHBOARD - username: $DASHBOARD_USERNAME - password: $DASHBOARD_PASSWORD - + - consumer: DASHBOARD + username: $DASHBOARD_USERNAME + password: $DASHBOARD_PASSWORD ### ### API Routes ### services: - ## Open Auth routes - name: auth-v1-open url: http://auth:9999/verify @@ -134,11 +132,12 @@ services: - anon ## Secure Realtime routes - - name: realtime-v1 + - name: realtime-v1-ws _comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*' - url: http://realtime-dev.supabase-realtime:4000/socket/ + url: http://realtime-dev.supabase-realtime:4000/socket + protocol: ws routes: - - name: realtime-v1-all + - name: realtime-v1-ws strip_path: true paths: - /realtime/v1/ @@ -153,7 +152,26 @@ services: allow: - admin - anon - + - name: realtime-v1-rest + _comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*' + url: http://realtime-dev.supabase-realtime:4000/api + protocol: http + routes: + - name: realtime-v1-rest + strip_path: true + paths: + - /realtime/v1/api + plugins: + - name: cors + - name: key-auth + config: + hide_credentials: false + - name: acl + config: + hide_groups_header: true + allow: + - admin + - anon ## Storage routes: the storage server manages its own auth - name: storage-v1 _comment: 'Storage: /storage/v1/* -> http://storage:5000/*' diff --git a/examples/edge-functions/supabase/functions/sentry/index.ts b/examples/edge-functions/supabase/functions/sentry/index.ts new file mode 100644 index 00000000000..c2919ef4bc7 --- /dev/null +++ b/examples/edge-functions/supabase/functions/sentry/index.ts @@ -0,0 +1,79 @@ +// Follow this setup guide to integrate the Deno language server with your editor: +// https://deno.land/manual/getting_started/setup_your_environment +// This enables autocomplete, go to definition, etc. + +console.log('Hello from the Sentry Functions Challenge!') + +import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.42.5' +import * as Sentry from 'https://deno.land/x/sentry@7.102.0/index.mjs' + +const supabase = createClient( + Deno.env.get('SUPABASE_URL')!, + Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')! +) + +Sentry.init({ + dsn: Deno.env.get('SENTRY_DSN'), + integrations: [], + debug: false, + // Performance Monitoring + tracesSampleRate: 1.0, +}) + +// Set region and execution_id as custom tags +Sentry.setTag('region', Deno.env.get('SB_REGION')) +Sentry.setTag('execution_id', Deno.env.get('SB_EXECUTION_ID')) + +Deno.serve(async (req) => { + try { + if (req.method === 'GET') { + return new Response( + 'What is Supabase not? POST {answer, twitter} to this URL! Need a hint? 👉 https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/sentry/index.ts' + ) + } + let answer: string + let twitter: string + try { + const params = await req.json() + if (!params?.answer || !params?.twitter) throw new Error('no answer') + answer = params.answer + twitter = params.twitter + } catch (_) { + return new Response('You need to send a JSON body with {answer, twitter}!') + } + if (answer.toLowerCase() !== 'postgres') { + return new Response( + `You are correct! But that means you've failed the challenge. Please try again!` + ) + } else { + throw { twitter } + } + } catch (e) { + Sentry.captureException(e) + const { error } = await supabase + .from('sentry_functions_challenge') + .insert({ twitter: e.twitter }) + if (error) console.log(e.twitter, error.message) + return new Response( + JSON.stringify({ + msg: `Congrats, you are wrong https://itsjustpostgres.com/ 🎉 @${e.twitter} has been added to the draw!`, + }), + { + status: 500, + headers: { 'Content-Type': 'application/json' }, + } + ) + } +}) + +/* To invoke locally: + + 1. Run `supabase start` (see: https://supabase.com/docs/reference/cli/supabase-start) + 2. Make an HTTP request: + + curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/sentry' \ + --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0' \ + --header 'Content-Type: application/json' \ + --data '{"answer":"mysql", "twitter":"thorwebdev"}' + +*/ diff --git a/examples/edge-functions/supabase/migrations/20240423080303_sentry-functions-challenge.sql b/examples/edge-functions/supabase/migrations/20240423080303_sentry-functions-challenge.sql new file mode 100644 index 00000000000..a5ea65e8afb --- /dev/null +++ b/examples/edge-functions/supabase/migrations/20240423080303_sentry-functions-challenge.sql @@ -0,0 +1,8 @@ +create table + public.sentry_functions_challenge ( + id bigint generated by default as identity, + created_at timestamp with time zone not null default now(), + twitter text null, + constraint sentry_functions_challenge_pkey primary key (id) + ) tablespace; + alter table public.sentry_functions_challenge enable row level security; \ No newline at end of file diff --git a/i18n/README.pt-br.md b/i18n/README.pt-br.md index 2a36101fbdf..2e7c9438fda 100644 --- a/i18n/README.pt-br.md +++ b/i18n/README.pt-br.md @@ -181,12 +181,12 @@ Nossa abordagem para bibliotecas de clientes é modular. Cada sub-biblioteca é Swift - supabase-swift - postgrest-swift - gotrue-swift - realtime-swift - storage-swift - functions-swift + supabase-swift + postgrest-swift + auth-swift + realtime-swift + storage-swift + functions-swift Godot Engine (GDScript) diff --git a/package-lock.json b/package-lock.json index 86254fa53c8..d249a3026b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -294,6 +294,7 @@ "@types/react": "^18.2.24", "@types/unist": "^2.0.6", "acorn": "^8.11.3", + "api-types": "*", "config": "*", "dotenv": "^16.0.3", "ejs": "^3.1.8", @@ -301,7 +302,6 @@ "jest-environment-jsdom": "^29.7.0", "npm-run-all": "^4.1.5", "openapi-types": "^12.1.3", - "openapi-typescript": "^6.7.4", "tsconfig": "*", "tsx": "^4.6.2", "typescript": "^5.4.3" @@ -2218,6 +2218,7 @@ "@types/sqlstring": "^2.3.0", "@types/uuid": "^8.3.4", "@types/zxcvbn": "^4.4.1", + "api-types": "*", "autoprefixer": "^10.4.14", "common": "*", "config": "*", @@ -2225,8 +2226,6 @@ "jest": "^29.7.0", "jest-canvas-mock": "^2.5.2", "jest-environment-jsdom": "^29.7.0", - "openapi-types": "^12.1.3", - "openapi-typescript": "^6.7.4", "postcss": "^8.4.31", "prettier": "^4.0.0-alpha.8", "storybook-dark-mode": "^3.0.1", @@ -3436,6 +3435,7 @@ "@types/react-dom": "^18.2.8", "@types/react-syntax-highlighter": "^15.5.6", "@types/three": "^0.136.0", + "api-types": "*", "autoprefixer": "^10.4.14", "config": "*", "postcss": "^8.4.31", @@ -18488,6 +18488,10 @@ "node": ">= 8" } }, + "node_modules/api-types": { + "resolved": "packages/api-types", + "link": true + }, "node_modules/app-root-dir": { "version": "1.0.2", "dev": true, @@ -47382,6 +47386,13 @@ "sql-formatter": "bin/sql-formatter-cli.cjs" } }, + "packages/api-types": { + "version": "0.0.0", + "license": "MIT", + "devDependencies": { + "openapi-typescript": "^6.7.4" + } + }, "packages/build-icons": { "name": "@supabase/build-icons", "version": "1.0.0", @@ -47784,7 +47795,9 @@ "tsconfig": "*", "ui": "*" }, - "devDependencies": {}, + "devDependencies": { + "api-types": "*" + }, "peerDependencies": { "next": "*", "react": "*", diff --git a/packages/api-types/index.ts b/packages/api-types/index.ts new file mode 100644 index 00000000000..7c896c7f2d5 --- /dev/null +++ b/packages/api-types/index.ts @@ -0,0 +1 @@ +export * from './types/api' diff --git a/packages/api-types/package.json b/packages/api-types/package.json new file mode 100644 index 00000000000..312168248f2 --- /dev/null +++ b/packages/api-types/package.json @@ -0,0 +1,15 @@ +{ + "name": "api-types", + "version": "0.0.0", + "description": "Types shared between Supabase apps and packages", + "main": "./index.ts", + "types": "./index.ts", + "scripts": { + "codegen": "openapi-typescript http://localhost:8080/api-json -o types/api.d.ts && prettier --write types/api.d.ts" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "openapi-typescript": "^6.7.4" + } +} diff --git a/packages/api-types/types/api.d.ts b/packages/api-types/types/api.d.ts new file mode 100644 index 00000000000..751f762d5c8 --- /dev/null +++ b/packages/api-types/types/api.d.ts @@ -0,0 +1,14331 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +/** OneOf type helpers */ +type Without = { [P in Exclude]?: never } +type XOR = T | U extends object ? (Without & U) | (Without & T) : T | U +type OneOf = T extends [infer Only] + ? Only + : T extends [infer A, infer B, ...infer Rest] + ? OneOf<[XOR, ...Rest]> + : never + +export interface paths { + '/platform/notifications': { + /** Get notifications */ + get: operations['NotificationsController_getNotificationsV2'] + /** Delete notifications */ + delete: operations['NotificationsController_deleteNotifications'] + /** Update notifications */ + patch: operations['NotificationsController_updateNotificationsV2'] + } + '/platform/notifications/summary': { + /** Get an aggregated data of interest across all notifications for the user */ + get: operations['NotificationsController_getNotificationsSummary'] + } + '/platform/notifications/archive-all': { + /** Archives all notifications */ + patch: operations['NotificationsController_archiveAllNotifications'] + } + '/platform/reset-password': { + /** Reset password for email */ + post: operations['ResetPasswordController_resetPassword'] + } + '/platform/feedback/send': { + /** Send feedback */ + post: operations['SendFeedbackController_sendFeedback'] + } + '/platform/feedback/downgrade': { + /** Send exit survey to HubSpot */ + post: operations['SendExitSurveyController_sendExitSurvey'] + } + '/platform/feedback/upgrade': { + /** Send upgrade survey to survey_responses table */ + post: operations['SendUpgradeSurveyController_sendUpgradeSurvey'] + } + '/platform/feedback/docs': { + /** Send feedback on docs */ + post: operations['SendDocsFeedbackController_sendDocsFeedback'] + } + '/platform/signup': { + /** Sign up with email and password */ + post: operations['SignUpController_signUp'] + } + '/platform/status': { + /** Get infrastructure status */ + get: operations['StatusController_getStatus'] + } + '/platform/projects-resource-warnings': { + /** + * Gets resource warnings for all projects accessible by the user + * @description Only returns the minimal project info + */ + get: operations['ProjectsResourceWarningsController_getProjectsResourceWarnings'] + } + '/platform/tos/fly': { + /** Redirects to Fly sso flow */ + get: operations['TermsOfServiceController_flyTosAccepted'] + } + '/platform/auth/{ref}/config': { + /** Gets GoTrue config */ + get: operations['GoTrueConfigController_getGoTrueConfig'] + /** Updates GoTrue config */ + patch: operations['GoTrueConfigController_updateGoTrueConfig'] + } + '/platform/auth/{ref}/invite': { + /** Sends an invite to the given email */ + post: operations['InviteController_sendInvite'] + } + '/platform/auth/{ref}/magiclink': { + /** Sends a magic link to the given email */ + post: operations['MagicLinkController_sendMagicLink'] + } + '/platform/auth/{ref}/otp': { + /** Sends an OTP to the given phone number */ + post: operations['OtpController_sendOtp'] + } + '/platform/auth/{ref}/recover': { + /** Sends a recovery email to the given email */ + post: operations['RecoverController_sendRecover'] + } + '/platform/auth/{ref}/templates/{template}': { + /** Gets GoTrue template */ + get: operations['TemplateController_getTemplate'] + } + '/platform/auth/{ref}/users': { + /** Gets users */ + get: operations['UsersController_getUsers'] + /** Delete user with given ID */ + delete: operations['UsersController_deleteUser'] + } + '/platform/auth/{ref}/users/{id}/factors': { + /** Delete all factors associated to a user */ + delete: operations['FactorsController_deleteFactors'] + } + '/platform/database/{ref}/backups': { + /** Gets project backups */ + get: operations['BackupsController_getBackups'] + } + '/platform/database/{ref}/backups/enable-physical-backups': { + /** Enable usage of physical backups */ + post: operations['BackupsController_enablePhysicalBackup'] + } + '/platform/database/{ref}/backups/download': { + /** Download project backup */ + post: operations['BackupsController_downloadBackup'] + } + '/platform/database/{ref}/backups/restore': { + /** Restore project backup */ + post: operations['BackupsController_restoreBackup'] + } + '/platform/database/{ref}/backups/restore-physical': { + /** Restore project with a physical backup */ + post: operations['BackupsController_restorePhysicalBackup'] + } + '/platform/database/{ref}/backups/pitr': { + /** Restore project to a previous point in time */ + post: operations['BackupsController_restorePointInTimeBackup'] + } + '/platform/database/{ref}/hook-logs': { + /** Gets hook logs with the given ID */ + get: operations['HooksController_getHookLogs'] + } + '/platform/database/{ref}/hook-enable': { + /** Enables Database Webhooks on the project */ + post: operations['HooksController_enableHooks'] + } + '/platform/database/{ref}/owner-reassign': { + /** Gets the status of owner reassignment */ + get: operations['OwnerController_getOwnerReassignStatus'] + /** Reassigns object owner from supabase_admin to temp */ + post: operations['OwnerController_applyOwnerReassign'] + /** Rollback object owner from temp to supabase_admin */ + delete: operations['OwnerController_rollbackOwnerReassign'] + /** Reassigns object owner from temp to postgres */ + patch: operations['OwnerController_finaliseOwnerReassign'] + } + '/platform/organizations': { + /** Gets user's organizations */ + get: operations['OrganizationsController_getOrganizations'] + /** Creates an organization */ + post: operations['OrganizationsController_createOrganizationWithTier'] + } + '/platform/organizations/fly/{fly_organization_id}': { + /** Gets organization linked to fly organization id */ + get: operations['OrganizationsController_getOrganizationByFlyOrganizationId'] + } + '/platform/organizations/{slug}': { + /** Deletes organization */ + delete: operations['OrganizationSlugController_deleteOrganization'] + /** Updates organization */ + patch: operations['OrganizationSlugController_updateOrganization'] + } + '/platform/organizations/{slug}/customer': { + /** Gets the Stripe customer */ + get: operations['CustomerController_getCustomer'] + /** Updates the Stripe customer */ + patch: operations['CustomerController_updateCustomer'] + } + '/platform/organizations/{slug}/roles': { + /** Gets the given organization's roles */ + get: operations['RolesController_addMember'] + } + '/platform/organizations/{slug}/tax-ids': { + /** Gets the given organization's tax IDs */ + get: operations['TaxIdsController_getTaxIds'] + /** Creates a tax ID for the given organization */ + post: operations['TaxIdsController_createTaxId'] + /** Delete the tax ID with the given ID */ + delete: operations['TaxIdsController_deleteTaxId'] + } + '/platform/organizations/{slug}/transfer': { + /** Transfers the organization to the given member */ + post: operations['TransferController_transferOrganization'] + } + '/platform/organizations/{slug}/daily-stats': { + /** Gets daily organization stats */ + get: operations['OrgDailyStatsController_getDailyStats'] + } + '/platform/organizations/{slug}/daily-stats/compute': { + /** Gets daily organization stats for compute */ + get: operations['OrgDailyStatsController_getDailyStatsCompute'] + } + '/platform/organizations/{slug}/usage': { + /** Gets usage stats */ + get: operations['OrgUsageController_getOrgUsage'] + } + '/platform/organizations/{slug}/documents/standard-security-questionnaire': { + /** Get standard security questionnaire URL */ + get: operations['OrgDocumentsController_getStandardSecurityQuestionnaireUrl'] + } + '/platform/organizations/{slug}/documents/soc2-type-2-report': { + /** Get SOC2 Type 2 report URL */ + get: operations['OrgDocumentsController_getSoc2Type2ReportUrl'] + } + '/platform/organizations/{slug}/audit': { + /** Gets an organization's audit logs */ + get: operations['OrgAuditLogsController_getAuditLogs'] + } + '/platform/organizations/{slug}/members/invite': { + /** Gets invited users */ + get: operations['InviteController_getInvitedUsers'] + /** Invites user */ + post: operations['InviteController_inviteUser'] + /** Delete invited user */ + delete: operations['InviteController_deleteInvitedUser'] + } + '/platform/organizations/{slug}/members/join': { + /** Gets invite */ + get: operations['JoinController_getInvite'] + /** Joins organization */ + post: operations['JoinController_joinOrganization'] + } + '/platform/organizations/{slug}/members/leave': { + /** Leaves the given organization */ + post: operations['MembersDeprecatedController_leaveOrganization'] + } + '/platform/organizations/{slug}/members/remove': { + /** Leaves the given organization */ + delete: operations['MembersDeprecatedController_removeMember'] + } + '/platform/organizations/{slug}/members': { + /** Gets organization's members */ + get: operations['MembersController_getMembers'] + } + '/platform/organizations/{slug}/members/{gotrue_id}': { + /** Removes organization member */ + delete: operations['MembersController_deleteMember'] + /** Updates organization member */ + patch: operations['MembersController_updateMember'] + } + '/platform/organizations/{slug}/members/reached-free-project-limit': { + /** Gets organization members who have reached their free project limit */ + get: operations['ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit'] + } + '/platform/organizations/{slug}/payments': { + /** Gets Stripe payment methods for the given organization */ + get: operations['PaymentsController_getPaymentMethods'] + /** Detach Stripe payment method with the given card ID */ + delete: operations['PaymentsController_detachPaymentMethod'] + } + '/platform/organizations/{slug}/payments/setup-intent': { + /** Sets up a payment method */ + post: operations['SetupIntentOrgController_setUpPaymentMethod'] + } + '/platform/organizations/{slug}/billing/subscription': { + /** Gets the current subscription */ + get: operations['SubscriptionController_getSubscription'] + /** Updates subscription */ + put: operations['SubscriptionController_updateSubscription'] + } + '/platform/organizations/{slug}/billing/subscription/preview': { + /** Preview subscription changes */ + post: operations['SubscriptionController_previewSubscriptionChange'] + } + '/platform/organizations/{slug}/billing/subscription/schedule': { + /** Deletes any upcoming subscription schedule */ + delete: operations['SubscriptionController_deleteSubscriptionSchedule'] + } + '/platform/organizations/{slug}/billing/plans': { + /** Gets subscription plans */ + get: operations['OrgPlansController_getAvailablePlans'] + } + '/platform/organizations/{slug}/billing/invoices/upcoming': { + /** Gets the upcoming invoice */ + get: operations['OrgInvoicesController_getUpcomingInvoice'] + } + '/platform/pg-meta/{ref}/column-privileges': { + /** Retrieve column privileges */ + get: operations['ColumnPrivilegesController_getColumnPrivileges'] + /** Grant column privileges */ + post: operations['ColumnPrivilegesController_grantColumnPrivileges'] + /** Revoke column privileges */ + delete: operations['ColumnPrivilegesController_revokeColumnPrivileges'] + } + '/platform/pg-meta/{ref}/columns': { + /** Gets project pg.columns */ + get: operations['ColumnsController_getColumns'] + /** Creates project pg.column */ + post: operations['ColumnsController_createColumn'] + /** Deletes project pg.column with the given ID */ + delete: operations['ColumnsController_deleteColumn'] + /** Updates project pg.column with the given ID */ + patch: operations['ColumnsController_updateColumn'] + } + '/platform/pg-meta/{ref}/extensions': { + /** Gets project pg.extensions */ + get: operations['ExtensionsController_getExtensions'] + /** Creates project pg.extension */ + post: operations['ExtensionsController_createExtension'] + /** Deletes project pg.extension with the given ID */ + delete: operations['ExtensionsController_deleteExtension'] + } + '/platform/pg-meta/{ref}/foreign-tables': { + /** Retrieve database foreign tables */ + get: operations['ForeignTablesController_getForeignTables'] + } + '/platform/pg-meta/{ref}/functions': { + /** Gets project pg.functions */ + get: operations['FunctionsController_getFunctions'] + /** Creates project pg.function */ + post: operations['FunctionsController_createFunction'] + /** Deletes project pg.function with the given ID */ + delete: operations['FunctionsController_deleteFunction'] + /** Updates project pg.function with the given ID */ + patch: operations['FunctionsController_updateFunction'] + } + '/platform/pg-meta/{ref}/materialized-views': { + /** Retrieve database materialized views */ + get: operations['MaterializedViewsController_getMaterializedViews'] + } + '/platform/pg-meta/{ref}/policies': { + /** Gets project pg.policies */ + get: operations['PoliciesController_getPolicies'] + /** Creates project pg.policy */ + post: operations['PoliciesController_createPolicy'] + /** Deletes project pg.policy with the given ID */ + delete: operations['PoliciesController_deletePolicy'] + /** Updates project pg.policy with the given ID */ + patch: operations['PoliciesController_updatePolicy'] + } + '/platform/pg-meta/{ref}/publications': { + /** Gets project pg.publications */ + get: operations['PublicationsController_getPublications'] + /** Gets project pg.publications */ + post: operations['PublicationsController_createPublication'] + /** Deletes project pg.publication with the given ID */ + delete: operations['PublicationsController_deletePublication'] + /** Updates project pg.publication with the given ID */ + patch: operations['PublicationsController_updatePublication'] + } + '/platform/pg-meta/{ref}/query': { + /** Run sql query */ + post: operations['QueryController_runQuery'] + } + '/platform/pg-meta/{ref}/query/format': { + /** Format sql query */ + post: operations['QueryController_formatQuery'] + } + '/platform/pg-meta/{ref}/query/validate': { + /** Validate sql query */ + post: operations['QueryController_validateQuery'] + } + '/platform/pg-meta/{ref}/roles': { + /** Gets project pg.roles */ + get: operations['RolesController_getRoles'] + /** Creates project pg.role */ + post: operations['RolesController_createRole'] + /** Deletes project pg.role with the given ID */ + delete: operations['RolesController_deleteRole'] + /** Updates project pg.role with the given ID */ + patch: operations['RolesController_updateRole'] + } + '/platform/pg-meta/{ref}/schemas': { + /** Gets project pg.schemas */ + get: operations['SchemasController_getSchemas'] + /** Creates project pg.schema */ + post: operations['SchemasController_createSchema'] + /** Deletes project pg.schema with the given ID */ + delete: operations['SchemasController_deleteSchema'] + /** Updates project pg.schema with the given ID */ + patch: operations['SchemasController_updateSchema'] + } + '/platform/pg-meta/{ref}/search/tables': { + /** Searches project pg.tables. Return maximum 50 results. */ + post: operations['SearchController_searchTables'] + } + '/platform/pg-meta/{ref}/search/columns': { + /** Searches project pg.columns. Return maximum 50 results. */ + post: operations['SearchController_searchColumns'] + } + '/platform/pg-meta/{ref}/table-privileges': { + /** Retrieve table privileges */ + get: operations['TablePrivilegesController_getTablePrivileges'] + /** Grant table privileges */ + post: operations['TablePrivilegesController_grantTablePrivileges'] + /** Revoke table privileges */ + delete: operations['TablePrivilegesController_revokeTablePrivileges'] + } + '/platform/pg-meta/{ref}/tables': { + /** Gets project pg.tables or pg.table with the given ID */ + get: operations['TablesController_getTables'] + /** Creates project pg.table */ + post: operations['TablesController_createTable'] + /** Deletes project pg.table with the given ID */ + delete: operations['TablesController_deleteTable'] + /** Updates project pg.table with the given ID */ + patch: operations['TablesController_updateTable'] + } + '/platform/pg-meta/{ref}/triggers': { + /** Gets project pg.triggers */ + get: operations['TriggersController_getTriggers'] + /** Creates project pg.trigger */ + post: operations['TriggersController_createTrigger'] + /** Deletes project pg.trigger with the given ID */ + delete: operations['TriggersController_deleteTrigger'] + /** Updates project pg.trigger with the given ID */ + patch: operations['TriggersController_updateTrigger'] + } + '/platform/pg-meta/{ref}/types': { + /** Gets project pg.types */ + get: operations['TypesController_getTypes'] + } + '/platform/pg-meta/{ref}/views': { + /** Retrieve database views */ + get: operations['ViewsController_getViews'] + } + '/platform/profile/access-tokens': { + /** Gets the user's access tokens */ + get: operations['AccessTokensController_getAccessTokens'] + /** Creates a new access token */ + post: operations['AccessTokensController_createAccessToken'] + } + '/platform/profile/access-tokens/{id}': { + /** Gets the access token with the given ID */ + get: operations['AccessTokensController_getAccessToken'] + /** Deletes the access token with the given ID */ + delete: operations['AccessTokensController_deleteAccessToken'] + } + '/platform/profile/audit': { + /** Gets a user's audit logs */ + get: operations['UserAuditLogsController_getAuditLogs'] + } + '/platform/profile/search': { + /** Search profiles by username, email with the given keywords */ + post: operations['SearchProfileController_searchProfile'] + } + '/platform/profile/subscriptions': { + /** Gets the user's subscription statistics */ + get: operations['SubscriptionsController_getSubscriptionsStatistics'] + } + '/platform/profile/password-check': { + /** Check password strength */ + post: operations['PasswordCheckController_checkPassword'] + } + '/platform/profile/permissions': { + /** Gets all the user's permissions */ + get: operations['PermissionsController_getPermissions'] + } + '/platform/profile': { + /** Gets the user's profile */ + get: operations['ProfileController_getProfile'] + /** Creates user's profile */ + post: operations['ProfileController_createProfile'] + /** Deletes user's profile */ + delete: operations['ProfileController_deleteProfile'] + /** Updates user's profile */ + patch: operations['ProfileController_updateProfile'] + } + '/platform/projects': { + /** + * Gets all projects that belong to the authenticated user + * @description Only returns the minimal project info + */ + get: operations['ProjectsController_getProjects'] + /** Creates a project */ + post: operations['ProjectsController_createProject'] + } + '/platform/projects/fly/{fly_extension_id}': { + /** Gets project linked to fly extension id */ + get: operations['ProjectsController_getProjectByFlyExtensionId'] + } + '/platform/projects/{ref}/content': { + /** Gets project's content */ + get: operations['ContentController_getContent'] + /** Updates project's content */ + put: operations['ContentController_updateWholeContent'] + /** Creates project's content */ + post: operations['ContentController_createContent'] + /** Deletes project's contents */ + delete: operations['ContentController_deleteContents'] + /** Updates project's content */ + patch: operations['ContentController_updateContent'] + } + '/platform/projects/{ref}/daily-stats': { + /** Gets daily project stats */ + get: operations['DailyStatsController_getDailyStats'] + } + '/platform/projects/{ref}/databases': { + /** Gets non-removed databases of a specified project */ + get: operations['DatabasesController_getDatabases'] + } + '/platform/projects/{ref}/databases-statuses': { + /** Gets statuses of databases within a project */ + get: operations['DatabasesStatusesController_getStatus'] + } + '/platform/projects/{ref}/db-password': { + /** Updates the database password */ + patch: operations['DbPasswordController_updatePassword'] + } + '/platform/projects/{ref}/live': { + /** Gets project health check */ + get: operations['HealthCheckController_projectHealthCheck'] + } + '/platform/projects/{ref}/load-balancers': { + /** Gets non-removed databases of a specified project */ + get: operations['LoadBalancersController_getLoadBalancers'] + } + '/platform/projects/{ref}/api/rest': { + /** Gets project OpenApi */ + get: operations['ApiController_projectOpenApi'] + } + '/platform/projects/{ref}/api/graphql': { + /** Queries project Graphql */ + post: operations['ApiController_projectGraphql'] + } + '/platform/projects/{ref}/infra-monitoring': { + /** Gets project's usage metrics */ + get: operations['InfraMonitoringController_getUsageMetrics'] + } + '/platform/projects/{ref}/pause': { + /** Pauses the project */ + post: operations['PauseController_pauseProject'] + } + '/platform/projects/{ref}/resize': { + /** Resize database disk */ + post: operations['ResizeController_resizeDatabase'] + } + '/platform/projects/{ref}/restart': { + /** Restarts project */ + post: operations['RestartController_restartProject'] + } + '/platform/projects/{ref}': { + /** Gets a specific project that belongs to the authenticated user */ + get: operations['ProjectsRefController_getProject'] + /** Deletes the given project */ + delete: operations['ProjectsRefController_deleteProject'] + /** Updates the given project */ + patch: operations['ProjectsRefController_updateProject'] + } + '/platform/projects/{ref}/restore': { + /** Restores project */ + post: operations['RestoreController_restoreProject'] + } + '/platform/projects/{ref}/restart-services': { + /** Restarts given services */ + post: operations['RestartServicesController_restartServices'] + } + '/platform/projects/{ref}/settings': { + /** Gets project's settings */ + get: operations['SettingsController_getProjectApi'] + } + '/platform/projects/{ref}/status': { + /** Gets project's status */ + get: operations['StatusController_getStatus'] + } + '/platform/projects/{ref}/update': { + /** + * Updates the project + * @deprecated + * @description Replaced by PATCH /platform/projects/:ref + */ + post: operations['UpdateController_updateProject'] + } + '/platform/projects/{ref}/transfer/preview': { + /** Previews transfering a project to a different organizations, shows eligibility and impact. */ + post: operations['ProjectTransferController_previewTransfer'] + } + '/platform/projects/{ref}/transfer': { + /** Transfers a project to a different organization. */ + post: operations['ProjectTransferController_transferProject'] + } + '/platform/projects/{ref}/analytics/endpoints/functions.inv-stats': { + /** Gets a project's function invocation statistics */ + get: operations['FunctionInvocationLogsController_getStatus'] + } + '/platform/projects/{ref}/analytics/endpoints/functions.req-stats': { + /** Gets a project's function request statistics */ + get: operations['FunctionRequestLogsController_getStatus'] + } + '/platform/projects/{ref}/analytics/endpoints/functions.resource-usage': { + /** Gets a project's function resource usage */ + get: operations['FunctionResourceLogsController_getStatus'] + } + '/platform/projects/{ref}/analytics/endpoints/logs.all': { + /** Gets project's logs */ + get: operations['LogsController_getApiPaths'] + } + '/platform/projects/{ref}/analytics/endpoints/usage.api-counts': { + /** Gets project's usage api counts */ + get: operations['UsageApiController_getApiCounts'] + } + '/platform/projects/{ref}/analytics/endpoints/usage.api-requests-count': { + /** Gets project's usage api requests count */ + get: operations['UsageApiController_getApiRequestsCount'] + } + '/platform/projects/{ref}/analytics/warehouse/tenant': { + /** Gets project's warehouse tenant from logflare */ + get: operations['TenantController_getTenant'] + } + '/platform/projects/{ref}/analytics/warehouse/collections': { + /** Lists project's warehouse collections from logflare */ + get: operations['CollectionController_listCollections'] + /** Create a warehouse collection */ + post: operations['CollectionController_createCollection'] + } + '/platform/projects/{ref}/analytics/warehouse/collections/{token}': { + /** Get a warehouse collection */ + get: operations['CollectionController_getCollection'] + /** Delete a warehouse collection */ + delete: operations['CollectionController_deleteCollection'] + /** Update a warehouse collection */ + patch: operations['CollectionController_updateCollection'] + } + '/platform/projects/{ref}/analytics/warehouse/access-tokens': { + /** Lists project's warehouse access tokens from logflare */ + get: operations['AccessTokenController_listAccessTokens'] + /** Create a warehouse access token */ + post: operations['AccessTokenController_createAccessToken'] + } + '/platform/projects/{ref}/analytics/warehouse/access-tokens/{token}': { + /** Delete a warehouse access token */ + delete: operations['AccessTokenController_deleteAccessToken'] + } + '/platform/projects/{ref}/analytics/warehouse/endpoints': { + /** Lists project's warehouse endpoints from logflare */ + get: operations['EndpointController_listEndpoints'] + /** Create a warehouse endpoint */ + post: operations['EndpointController_createEndpoint'] + } + '/platform/projects/{ref}/analytics/warehouse/endpoints/{token}': { + /** Update a warehouse endpoint */ + put: operations['EndpointController_updateEndpoint'] + /** Delete a warehouse endpoint */ + delete: operations['EndpointController_deleteEndpoint'] + } + '/platform/projects/{ref}/analytics/warehouse/query': { + /** Lists project's warehouse queries from logflare */ + get: operations['WarehouseQueryController_runQuery'] + } + '/platform/projects/{ref}/config/pgbouncer': { + /** Gets project's pgbouncer config */ + get: operations['PgbouncerConfigController_getPgbouncerConfig'] + /** Updates project's pgbouncer config */ + patch: operations['PgbouncerConfigController_updatePgbouncerConfig'] + } + '/platform/projects/{ref}/config/pgbouncer/status': { + /** Gets project's pgbouncer status */ + get: operations['PgbouncerConfigController_getPgbouncerStatus'] + } + '/platform/projects/{ref}/config/postgrest': { + /** Gets project's postgrest config */ + get: operations['PostgrestConfigController_getPostgRESTConfig'] + /** Updates project's postgrest config */ + patch: operations['PostgrestConfigController_updatePostgRESTConfig'] + } + '/platform/projects/{ref}/config/postgres': { + /** Gets project's Postgres config */ + get: operations['PostgresConfigController_getConfig'] + /** Updates project's Postgres config */ + put: operations['PostgresConfigController_updateConfig'] + } + '/platform/projects/{ref}/config/secrets': { + /** Updates project's secrets config */ + patch: operations['SecretsConfigController_updateConfig'] + } + '/platform/projects/{ref}/config/storage': { + /** Gets project's storage config */ + get: operations['StorageConfigController_getConfig'] + /** Updates project's storage config */ + patch: operations['StorageConfigController_updateConfig'] + } + '/platform/projects/{ref}/config/supavisor': { + /** Gets project's supavisor config */ + get: operations['SupavisorConfigController_getSupavisorConfig'] + /** Updates project's supavisor config */ + patch: operations['SupavisorConfigController_updateSupavisorConfig'] + } + '/platform/projects/{ref}/billing/addons': { + /** Gets project addons */ + get: operations['ProjectAddonController_getProjectAddons'] + /** Updates project addon */ + post: operations['ProjectAddonController_updateAddon'] + } + '/platform/projects/{ref}/billing/addons/{addon_variant}': { + /** Removes project addon */ + delete: operations['ProjectAddonController_removeAddon'] + } + '/platform/props/project/{ref}/api': { + /** + * Gets project's api info + * @deprecated + */ + get: operations['ApiController_getProjectApi'] + } + '/platform/props/project/{ref}/jwt-secret-update-status': { + /** Gets the last JWT secret update status */ + get: operations['JwtSecretUpdateStatusController_getJwtSecretUpdateStatus'] + } + '/platform/props/project/{ref}/settings': { + /** + * Gets project's settings + * @deprecated + */ + get: operations['SettingsController_getProjectApi'] + } + '/platform/storage/{ref}/buckets/{id}': { + /** Gets bucket */ + get: operations['StorageBucketIdController_getBucket'] + /** Deletes bucket */ + delete: operations['StorageBucketIdController_deleteBucket'] + /** Updates bucket */ + patch: operations['StorageBucketIdController_updateBucket'] + } + '/platform/storage/{ref}/buckets/{id}/empty': { + /** Removes all objects inside a single bucket. */ + post: operations['StorageBucketIdController_emptyBucket'] + } + '/platform/storage/{ref}/buckets': { + /** Gets list of buckets */ + get: operations['StorageBucketsController_getBuckets'] + /** Create bucket */ + post: operations['StorageBucketsController_createBucket'] + } + '/platform/storage/{ref}/buckets/{id}/objects/list': { + /** Gets list of objects with the given bucket */ + post: operations['StorageObjectsController_getObjects'] + } + '/platform/storage/{ref}/buckets/{id}/objects/public-url': { + /** Creates URL for an asset in a public bucket */ + post: operations['StorageObjectsController_createPublicUrl'] + } + '/platform/storage/{ref}/buckets/{id}/objects/download': { + /** Downloads a file from a private bucket */ + post: operations['StorageObjectsController_download'] + } + '/platform/storage/{ref}/buckets/{id}/objects/sign': { + /** Creates a signed URL */ + post: operations['StorageObjectsController_createSignedUrl'] + } + '/platform/storage/{ref}/buckets/{id}/objects/sign-multi': { + /** Gets multiple signed URLs */ + post: operations['StorageObjectsController_createSignedUrls'] + } + '/platform/storage/{ref}/buckets/{id}/objects/copy': { + /** Copys object */ + post: operations['StorageObjectsController_copyObject'] + } + '/platform/storage/{ref}/buckets/{id}/objects/move': { + /** Move object */ + post: operations['StorageObjectsController_moveObject'] + } + '/platform/storage/{ref}/buckets/{id}/objects': { + /** Deletes objects */ + delete: operations['StorageObjectsController_deleteObjects'] + } + '/platform/storage/{ref}/credentials': { + /** Gets project storage credentials */ + get: operations['StorageS3CredentialsController_getAllCredentials'] + /** Creates project storage credential */ + post: operations['StorageS3CredentialsController_createCredential'] + } + '/platform/storage/{ref}/credentials/{id}': { + /** Deletes project storage credential */ + delete: operations['StorageS3CredentialsController_deleteCredential'] + } + '/platform/stripe/invoices': { + /** Gets invoices for the given customer */ + get: operations['InvoicesController_getInvoices'] + /** Gets the total count of invoices for the given customer */ + head: operations['InvoicesController_countInvoices'] + } + '/platform/stripe/invoices/overdue': { + /** Gets information about overdue invoices that relate to the authenticated user */ + get: operations['InvoicesController_getOverdueInvoices'] + } + '/platform/stripe/invoices/{id}': { + /** Gets invoice with the given invoice ID */ + get: operations['InvoicesController_getInvoice'] + } + '/platform/stripe/setup-intent': { + /** Sets up a payment method */ + post: operations['SetupIntentController_setUpPaymentMethod'] + } + '/platform/telemetry/event': { + /** Sends analytics server event */ + post: operations['TelemetryEventController_sendServerEvent'] + } + '/platform/telemetry/identify': { + /** Send analytics identify event */ + post: operations['TelemetryIdentifyController_identify'] + } + '/platform/telemetry/page': { + /** Send server page event */ + post: operations['TelemetryPageController_sendServerPage'] + } + '/platform/telemetry/activity': { + /** Sends mixpanel server activity */ + post: operations['TelemetryActivityController_sendServerActivity'] + } + '/platform/telemetry/pageview': { + /** Send mixpanel page event */ + post: operations['TelemetryPageviewController_sendServerPageViewed'] + } + '/platform/vercel/token': { + /** Gets the Vercel access token for the given code */ + get: operations['VercelAccessTokenController_getAccessToken'] + } + '/platform/vercel/projects': { + /** Gets the list of Vercel projects */ + get: operations['VercelProjectsController_getVercelProjects'] + } + '/platform/vercel/projects/{id}': { + /** Gets the Vercel project with the given ID */ + get: operations['VercelProjectsController_getVercelProject'] + } + '/platform/vercel/projects/envs': { + /** Gets the environment variables for the given project ID on behalf of the given team ID */ + get: operations['VercelEnvironmentVariablesController_getEnvironmentVariables'] + /** Creates the environment variable for the given project ID on behalf of the given team ID */ + post: operations['VercelEnvironmentVariablesController_createEnvironmentVariable'] + } + '/platform/integrations': { + /** Gets user's integrations */ + get: operations['IntegrationsController_getProjectConnections'] + } + '/platform/integrations/{slug}': { + /** Gets integration with the given organization slug */ + get: operations['IntegrationsController_getProjectConnectionsForOrg'] + } + '/platform/integrations/vercel': { + /** + * Create vercel integration + * @description Exchanges a vercel code for an access token and saves the access token to the new integration record + */ + post: operations['VercelIntegrationController_createVercelIntegration'] + } + '/platform/integrations/vercel/{organization_integration_id}': { + /** Removes Vercel organization integration with the given id */ + delete: operations['VercelIntegrationController_removeVercelIntegration'] + } + '/platform/integrations/vercel/projects/{organization_integration_id}': { + /** Gets vercel projects with the given organization integration id */ + get: operations['VercelProjectController_getVercelProjects'] + } + '/platform/integrations/vercel/connections/{organization_integration_id}': { + /** Gets installed vercel project connections for the given organization integration */ + get: operations['VercelConnectionsController_getVercelConnections'] + } + '/platform/integrations/vercel/connections': { + /** Connects a Vercel project to a supabase project */ + post: operations['VercelConnectionsController_createVercelConnection'] + } + '/platform/integrations/vercel/connections/{connection_id}/sync-envs': { + /** Syncs supabase project envs with given connection id */ + post: operations['VercelConnectionsController_syncVercelConnectionEnvironments'] + } + '/platform/integrations/vercel/connections/{connection_id}': { + /** Deletes vercel project connection */ + delete: operations['VercelConnectionsController_deleteVercelConnection'] + /** Updates a Vercel connection for a supabase project */ + patch: operations['VercelConnectionsController_updateVercelConnection'] + } + '/platform/integrations/github/authorization': { + /** Get GitHub authorization */ + get: operations['GitHubAuthorizationsController_getGitHubAuthorization'] + /** Create GitHub authorization */ + post: operations['GitHubAuthorizationsController_createGitHubAuthorization'] + } + '/platform/integrations/github/connections': { + /** List organization GitHub connections */ + get: operations['GitHubConnectionsController_listOrganizationGitHubConnections'] + /** Connects a GitHub project to a supabase project */ + post: operations['GitHubConnectionsController_createGitHubConnection'] + } + '/platform/integrations/github/connections/{connection_id}': { + /** Deletes github project connection */ + delete: operations['GitHubConnectionsController_deleteGitHubConnection'] + /** Updates a GitHub connection for a supabase project */ + patch: operations['GitHubConnectionsController_updateGitHubConnection'] + } + '/platform/integrations/github/branches/{connectionId}': { + /** List GitHub connection branches */ + get: operations['GitHubBranchesController_listConnectionBranches'] + } + '/platform/integrations/github/branches/{connectionId}/{branchName}': { + /** Get GitHub connection branch */ + get: operations['GitHubBranchesController_getConnectionBranch'] + } + '/platform/integrations/github/repositories': { + /** Gets GitHub repositories for user */ + get: operations['GitHubRepositoriesController_listRepositories'] + } + '/platform/cli/login': { + /** Create CLI login session */ + post: operations['CliLoginController_createCliLoginSession'] + } + '/platform/cli/login/{session_id}': { + /** Retrieve CLI login session */ + get: operations['CliLoginController_getCliLoginSession'] + } + '/system/auth/{ref}/templates/{template}': { + /** Gets GoTrue template */ + get: operations['AuthTemplateController_getTemplate'] + } + '/system/database/{ref}/owner/owner-reassign': { + /** Gets the status of owner reassignment */ + get: operations['DatabaseOwnerController_getOwnerReassignStatus'] + /** Reassigns object owner from supabase_admin to temp */ + post: operations['DatabaseOwnerController_applyOwnerReassign'] + /** Rollback object owner from temp to supabase_admin */ + delete: operations['DatabaseOwnerController_rollbackOwnerReassign'] + /** Reassigns object owner from temp to postgres */ + patch: operations['DatabaseOwnerController_finaliseOwnerReassign'] + } + '/system/database/{ref}/password': { + /** Updates the database password */ + patch: operations['DatabasePasswordController_updatePassword'] + } + '/system/github-secret-alert': { + /** Reset JWT if leaked keys found by GitHub secret scanning */ + post: operations['GithubSecretAlertController_resetJwt'] + } + '/system/projects/{ref}/functions/{function_slug}': { + /** + * Update a function + * @description Updates a function with the specified slug and project. + */ + patch: operations['SystemFunctionSlugController_updateFunction'] + } + '/system/projects/{ref}/functions': { + /** + * List all functions + * @description Returns all functions you've previously added to the specified project. + */ + get: operations['SystemFunctionsController_getFunctions'] + /** + * Create a function + * @description Creates a function and adds it to the specified project. + */ + post: operations['SystemFunctionsController_createFunction'] + /** Deletes all Edge Functions from a project */ + delete: operations['SystemFunctionsController_systemDeleteAllFunctions'] + } + '/system/projects/{ref}/secrets': { + /** + * List all secrets + * @description Returns all secrets you've previously added to the specified project. + */ + get: operations['SystemSecretsController_getSecrets'] + /** + * Bulk create secrets + * @description Creates multiple secrets and adds them to the specified project. + */ + post: operations['SystemSecretsController_createSecrets'] + /** + * Bulk delete secrets + * @description Deletes all secrets with the given names from the specified project + */ + delete: operations['SystemSecretsController_deleteSecrets'] + } + '/system/projects/{ref}/secrets/refresh': { + /** Refreshes secrets */ + post: operations['SecretsRefreshController_refreshSecrets'] + } + '/system/health': { + /** Get API health status */ + get: operations['HealthController_getStatus'] + } + '/system/projects/{ref}/health-reporting': { + /** Updates a project's health status. */ + put: operations['HealthReportingController_updateStatus'] + } + '/system/projects/{ref}/ha-events': { + /** Records an HA event */ + put: operations['HaEventsController_updateStatus'] + } + '/system/projects/{ref}/credentials/aws': { + /** Allows a project to obtain temporary credentials. */ + post: operations['AwsCredentialsController_getTemporaryCredentials'] + } + '/system/projects/{ref}/billing/addons': { + /** Updates project addon */ + post: operations['AddonsController_updateAddon'] + } + '/system/projects/{ref}/billing/addons/{addon_variant}': { + /** Removes project addon */ + delete: operations['AddonsController_removeAddon'] + } + '/system/projects/{ref}/config/update-jwt/complete': { + /** Handle update project jwt on completion */ + post: operations['ProjectUpdateJwtController_completeUpdateJwt'] + } + '/system/projects': { + /** Create a project */ + post: operations['ProjectsController_createProject'] + } + '/system/organizations/{slug}/usage': { + /** Gets usage stats */ + get: operations['OrgUsageSystemController_getOrgUsage'] + } + '/system/organizations/{slug}/billing/partner/usage-and-costs': { + /** Gets the partner usage and costs */ + get: operations['PartnerBillingSystemController_getPartnerUsageAndCosts'] + } + '/system/organizations/{slug}/billing/subscription': { + /** Gets the current subscription */ + get: operations['OrgSubscriptionSystemController_getSubscription'] + /** Updates subscription */ + put: operations['OrgSubscriptionSystemController_updateSubscription'] + } + '/system/organizations/{slug}/restrictions': { + /** Updates restriction status of an org */ + put: operations['OrgRestrictionsSystemController_updateRestriction'] + } + '/system/partner-organizations': { + /** Creates a partner organization */ + post: operations['AwsPartnerOrganizationsSystemController_createPartnerOrganization'] + } + '/system/integrations/vercel/webhooks': { + /** Processes Vercel event */ + post: operations['VercelWebhooksController_processEvent'] + } + '/system/integrations/github/webhooks': { + /** Processes GitHub event */ + post: operations['GitHubWebhooksController_processEvent'] + } + '/system/stripe/webhooks-v2': { + /** Processes Stripe event */ + post: operations['StripeWebhooksController_processEvent'] + } + '/system/stripe/webhooks': { + /** Processes Stripe event */ + post: operations['StripeWebhooksController_processEvent'] + } + '/v0/notifications': { + /** Get notifications */ + get: operations['NotificationsController_getNotificationsV2'] + /** Delete notifications */ + delete: operations['NotificationsController_deleteNotifications'] + /** Update notifications */ + patch: operations['NotificationsController_updateNotificationsV2'] + } + '/v0/notifications/summary': { + /** Get an aggregated data of interest across all notifications for the user */ + get: operations['NotificationsController_getNotificationsSummary'] + } + '/v0/notifications/archive-all': { + /** Archives all notifications */ + patch: operations['NotificationsController_archiveAllNotifications'] + } + '/v0/status': { + /** Get infrastructure status */ + get: operations['StatusController_getStatus'] + } + '/v0/auth/{ref}/config': { + /** Gets GoTrue config */ + get: operations['GoTrueConfigController_getGoTrueConfig'] + /** Updates GoTrue config */ + patch: operations['GoTrueConfigController_updateGoTrueConfig'] + } + '/v0/auth/{ref}/invite': { + /** Sends an invite to the given email */ + post: operations['InviteController_sendInvite'] + } + '/v0/auth/{ref}/magiclink': { + /** Sends a magic link to the given email */ + post: operations['MagicLinkController_sendMagicLink'] + } + '/v0/auth/{ref}/otp': { + /** Sends an OTP to the given phone number */ + post: operations['OtpController_sendOtp'] + } + '/v0/auth/{ref}/recover': { + /** Sends a recovery email to the given email */ + post: operations['RecoverController_sendRecover'] + } + '/v0/auth/{ref}/templates/{template}': { + /** Gets GoTrue template */ + get: operations['TemplateController_getTemplate'] + } + '/v0/auth/{ref}/users': { + /** Gets users */ + get: operations['UsersController_getUsers'] + /** Delete user with given ID */ + delete: operations['UsersController_deleteUser'] + } + '/v0/auth/{ref}/users/{id}/factors': { + /** Delete all factors associated to a user */ + delete: operations['FactorsController_deleteFactors'] + } + '/v0/database/{ref}/backups': { + /** Gets project backups */ + get: operations['BackupsController_getBackups'] + } + '/v0/database/{ref}/backups/enable-physical-backups': { + /** Enable usage of physical backups */ + post: operations['BackupsController_enablePhysicalBackup'] + } + '/v0/database/{ref}/backups/download': { + /** Download project backup */ + post: operations['BackupsController_downloadBackup'] + } + '/v0/database/{ref}/backups/restore': { + /** Restore project backup */ + post: operations['BackupsController_restoreBackup'] + } + '/v0/database/{ref}/backups/restore-physical': { + /** Restore project with a physical backup */ + post: operations['BackupsController_restorePhysicalBackup'] + } + '/v0/database/{ref}/backups/pitr': { + /** Restore project to a previous point in time */ + post: operations['BackupsController_restorePointInTimeBackup'] + } + '/v0/database/{ref}/hook-logs': { + /** Gets hook logs with the given ID */ + get: operations['HooksController_getHookLogs'] + } + '/v0/database/{ref}/hook-enable': { + /** Enables Database Webhooks on the project */ + post: operations['HooksController_enableHooks'] + } + '/v0/organizations': { + /** Gets user's organizations */ + get: operations['OrganizationsController_getOrganizations'] + /** Creates an organization */ + post: operations['OrganizationsController_createOrganizationWithTier'] + } + '/v0/organizations/fly/{fly_organization_id}': { + /** Gets organization linked to fly organization id */ + get: operations['OrganizationsController_getOrganizationByFlyOrganizationId'] + } + '/v0/organizations/{slug}': { + /** Deletes organization */ + delete: operations['OrganizationSlugController_deleteOrganization'] + /** Updates organization */ + patch: operations['OrganizationSlugController_updateOrganization'] + } + '/v0/organizations/{slug}/roles': { + /** Gets the given organization's roles */ + get: operations['RolesController_addMember'] + } + '/v0/organizations/{slug}/members/invite': { + /** Gets invited users */ + get: operations['InviteController_getInvitedUsers'] + /** Invites user */ + post: operations['InviteController_inviteUser'] + /** Delete invited user */ + delete: operations['InviteController_deleteInvitedUser'] + } + '/v0/organizations/{slug}/members/join': { + /** Gets invite */ + get: operations['JoinController_getInvite'] + /** Joins organization */ + post: operations['JoinController_joinOrganization'] + } + '/v0/organizations/{slug}/members': { + /** Gets organization's members */ + get: operations['MembersController_getMembers'] + } + '/v0/organizations/{slug}/members/{gotrue_id}': { + /** Removes organization member */ + delete: operations['MembersController_deleteMember'] + /** Updates organization member */ + patch: operations['MembersController_updateMember'] + } + '/v0/pg-meta/{ref}/column-privileges': { + /** Retrieve column privileges */ + get: operations['ColumnPrivilegesController_getColumnPrivileges'] + /** Grant column privileges */ + post: operations['ColumnPrivilegesController_grantColumnPrivileges'] + /** Revoke column privileges */ + delete: operations['ColumnPrivilegesController_revokeColumnPrivileges'] + } + '/v0/pg-meta/{ref}/columns': { + /** Gets project pg.columns */ + get: operations['ColumnsController_getColumns'] + /** Creates project pg.column */ + post: operations['ColumnsController_createColumn'] + /** Deletes project pg.column with the given ID */ + delete: operations['ColumnsController_deleteColumn'] + /** Updates project pg.column with the given ID */ + patch: operations['ColumnsController_updateColumn'] + } + '/v0/pg-meta/{ref}/extensions': { + /** Gets project pg.extensions */ + get: operations['ExtensionsController_getExtensions'] + /** Creates project pg.extension */ + post: operations['ExtensionsController_createExtension'] + /** Deletes project pg.extension with the given ID */ + delete: operations['ExtensionsController_deleteExtension'] + } + '/v0/pg-meta/{ref}/foreign-tables': { + /** Retrieve database foreign tables */ + get: operations['ForeignTablesController_getForeignTables'] + } + '/v0/pg-meta/{ref}/functions': { + /** Gets project pg.functions */ + get: operations['FunctionsController_getFunctions'] + /** Creates project pg.function */ + post: operations['FunctionsController_createFunction'] + /** Deletes project pg.function with the given ID */ + delete: operations['FunctionsController_deleteFunction'] + /** Updates project pg.function with the given ID */ + patch: operations['FunctionsController_updateFunction'] + } + '/v0/pg-meta/{ref}/materialized-views': { + /** Retrieve database materialized views */ + get: operations['MaterializedViewsController_getMaterializedViews'] + } + '/v0/pg-meta/{ref}/policies': { + /** Gets project pg.policies */ + get: operations['PoliciesController_getPolicies'] + /** Creates project pg.policy */ + post: operations['PoliciesController_createPolicy'] + /** Deletes project pg.policy with the given ID */ + delete: operations['PoliciesController_deletePolicy'] + /** Updates project pg.policy with the given ID */ + patch: operations['PoliciesController_updatePolicy'] + } + '/v0/pg-meta/{ref}/publications': { + /** Gets project pg.publications */ + get: operations['PublicationsController_getPublications'] + /** Gets project pg.publications */ + post: operations['PublicationsController_createPublication'] + /** Deletes project pg.publication with the given ID */ + delete: operations['PublicationsController_deletePublication'] + /** Updates project pg.publication with the given ID */ + patch: operations['PublicationsController_updatePublication'] + } + '/v0/pg-meta/{ref}/query': { + /** Run sql query */ + post: operations['QueryController_runQuery'] + } + '/v0/pg-meta/{ref}/query/format': { + /** Format sql query */ + post: operations['QueryController_formatQuery'] + } + '/v0/pg-meta/{ref}/query/validate': { + /** Validate sql query */ + post: operations['QueryController_validateQuery'] + } + '/v0/pg-meta/{ref}/roles': { + /** Gets project pg.roles */ + get: operations['RolesController_getRoles'] + /** Creates project pg.role */ + post: operations['RolesController_createRole'] + /** Deletes project pg.role with the given ID */ + delete: operations['RolesController_deleteRole'] + /** Updates project pg.role with the given ID */ + patch: operations['RolesController_updateRole'] + } + '/v0/pg-meta/{ref}/schemas': { + /** Gets project pg.schemas */ + get: operations['SchemasController_getSchemas'] + /** Creates project pg.schema */ + post: operations['SchemasController_createSchema'] + /** Deletes project pg.schema with the given ID */ + delete: operations['SchemasController_deleteSchema'] + /** Updates project pg.schema with the given ID */ + patch: operations['SchemasController_updateSchema'] + } + '/v0/pg-meta/{ref}/search/tables': { + /** Searches project pg.tables. Return maximum 50 results. */ + post: operations['SearchController_searchTables'] + } + '/v0/pg-meta/{ref}/search/columns': { + /** Searches project pg.columns. Return maximum 50 results. */ + post: operations['SearchController_searchColumns'] + } + '/v0/pg-meta/{ref}/table-privileges': { + /** Retrieve table privileges */ + get: operations['TablePrivilegesController_getTablePrivileges'] + /** Grant table privileges */ + post: operations['TablePrivilegesController_grantTablePrivileges'] + /** Revoke table privileges */ + delete: operations['TablePrivilegesController_revokeTablePrivileges'] + } + '/v0/pg-meta/{ref}/tables': { + /** Gets project pg.tables or pg.table with the given ID */ + get: operations['TablesController_getTables'] + /** Creates project pg.table */ + post: operations['TablesController_createTable'] + /** Deletes project pg.table with the given ID */ + delete: operations['TablesController_deleteTable'] + /** Updates project pg.table with the given ID */ + patch: operations['TablesController_updateTable'] + } + '/v0/pg-meta/{ref}/triggers': { + /** Gets project pg.triggers */ + get: operations['TriggersController_getTriggers'] + /** Creates project pg.trigger */ + post: operations['TriggersController_createTrigger'] + /** Deletes project pg.trigger with the given ID */ + delete: operations['TriggersController_deleteTrigger'] + /** Updates project pg.trigger with the given ID */ + patch: operations['TriggersController_updateTrigger'] + } + '/v0/pg-meta/{ref}/types': { + /** Gets project pg.types */ + get: operations['TypesController_getTypes'] + } + '/v0/pg-meta/{ref}/views': { + /** Retrieve database views */ + get: operations['ViewsController_getViews'] + } + '/v0/projects': { + /** + * Gets all projects that belong to the authenticated user + * @description Only returns the minimal project info + */ + get: operations['ProjectsController_getProjects'] + /** Creates a project */ + post: operations['ProjectsController_createProject'] + } + '/v0/projects/fly/{fly_extension_id}': { + /** Gets project linked to fly extension id */ + get: operations['ProjectsController_getProjectByFlyExtensionId'] + } + '/v0/projects/metrics': { + /** + * Get metrics + * @description At most 50 projects can be queried at a time. + * Currently supports '1d', '3d', and '7d' intervals. + */ + get: operations['V0ProjectsMetricsController_getProjectsMetrics'] + } + '/v0/projects/{ref}/content': { + /** Gets project's content */ + get: operations['ContentController_getContent'] + /** Updates project's content */ + put: operations['ContentController_updateWholeContent'] + /** Creates project's content */ + post: operations['ContentController_createContent'] + /** Deletes project's contents */ + delete: operations['ContentController_deleteContents'] + /** Updates project's content */ + patch: operations['ContentController_updateContent'] + } + '/v0/projects/{ref}/databases': { + /** Gets non-removed databases of a specified project */ + get: operations['DatabasesController_getDatabases'] + } + '/v0/projects/{ref}/databases-statuses': { + /** Gets statuses of databases within a project */ + get: operations['DatabasesStatusesController_getStatus'] + } + '/v0/projects/{ref}/db-password': { + /** Updates the database password */ + patch: operations['DbPasswordController_updatePassword'] + } + '/v0/projects/{ref}/live': { + /** Gets project health check */ + get: operations['HealthCheckController_projectHealthCheck'] + } + '/v0/projects/{ref}/load-balancers': { + /** Gets non-removed databases of a specified project */ + get: operations['LoadBalancersController_getLoadBalancers'] + } + '/v0/projects/{ref}/api/rest': { + /** Gets project OpenApi */ + get: operations['ApiController_projectOpenApi'] + } + '/v0/projects/{ref}/api/graphql': { + /** Queries project Graphql */ + post: operations['ApiController_projectGraphql'] + } + '/v0/projects/{ref}/infra-monitoring': { + /** Gets project's usage metrics */ + get: operations['InfraMonitoringController_getUsageMetrics'] + } + '/v0/projects/{ref}/pause': { + /** Pauses the project */ + post: operations['PauseController_pauseProject'] + } + '/v0/projects/{ref}/resize': { + /** Resize database disk */ + post: operations['ResizeController_resizeDatabase'] + } + '/v0/projects/{ref}/restart': { + /** Restarts project */ + post: operations['RestartController_restartProject'] + } + '/v0/projects/{ref}': { + /** Gets a specific project that belongs to the authenticated user */ + get: operations['ProjectsRefController_getProject'] + /** Deletes the given project */ + delete: operations['ProjectsRefController_deleteProject'] + /** Updates the given project */ + patch: operations['ProjectsRefController_updateProject'] + } + '/v0/projects/{ref}/restore': { + /** Restores project */ + post: operations['RestoreController_restoreProject'] + } + '/v0/projects/{ref}/restart-services': { + /** Restarts given services */ + post: operations['RestartServicesController_restartServices'] + } + '/v0/projects/{ref}/settings': { + /** Gets project's settings */ + get: operations['SettingsController_getProjectApi'] + } + '/v0/projects/{ref}/status': { + /** Gets project's status */ + get: operations['StatusController_getStatus'] + } + '/v0/projects/{ref}/analytics/endpoints/functions.inv-stats': { + /** Gets a project's function invocation statistics */ + get: operations['FunctionInvocationLogsController_getStatus'] + } + '/v0/projects/{ref}/analytics/endpoints/functions.req-stats': { + /** Gets a project's function request statistics */ + get: operations['FunctionRequestLogsController_getStatus'] + } + '/v0/projects/{ref}/analytics/endpoints/functions.resource-usage': { + /** Gets a project's function resource usage */ + get: operations['FunctionResourceLogsController_getStatus'] + } + '/v0/projects/{ref}/analytics/endpoints/logs.all': { + /** Gets project's logs */ + get: operations['LogsController_getApiPaths'] + } + '/v0/projects/{ref}/analytics/endpoints/usage.api-counts': { + /** Gets project's usage api counts */ + get: operations['UsageApiController_getApiCounts'] + } + '/v0/projects/{ref}/analytics/endpoints/usage.api-requests-count': { + /** Gets project's usage api requests count */ + get: operations['UsageApiController_getApiRequestsCount'] + } + '/v0/projects/{ref}/analytics/warehouse/tenant': { + /** Gets project's warehouse tenant from logflare */ + get: operations['TenantController_getTenant'] + } + '/v0/projects/{ref}/analytics/warehouse/collections': { + /** Lists project's warehouse collections from logflare */ + get: operations['CollectionController_listCollections'] + /** Create a warehouse collection */ + post: operations['CollectionController_createCollection'] + } + '/v0/projects/{ref}/analytics/warehouse/collections/{token}': { + /** Get a warehouse collection */ + get: operations['CollectionController_getCollection'] + /** Delete a warehouse collection */ + delete: operations['CollectionController_deleteCollection'] + /** Update a warehouse collection */ + patch: operations['CollectionController_updateCollection'] + } + '/v0/projects/{ref}/analytics/warehouse/access-tokens': { + /** Lists project's warehouse access tokens from logflare */ + get: operations['AccessTokenController_listAccessTokens'] + /** Create a warehouse access token */ + post: operations['AccessTokenController_createAccessToken'] + } + '/v0/projects/{ref}/analytics/warehouse/access-tokens/{token}': { + /** Delete a warehouse access token */ + delete: operations['AccessTokenController_deleteAccessToken'] + } + '/v0/projects/{ref}/analytics/warehouse/endpoints': { + /** Lists project's warehouse endpoints from logflare */ + get: operations['EndpointController_listEndpoints'] + /** Create a warehouse endpoint */ + post: operations['EndpointController_createEndpoint'] + } + '/v0/projects/{ref}/analytics/warehouse/endpoints/{token}': { + /** Update a warehouse endpoint */ + put: operations['EndpointController_updateEndpoint'] + /** Delete a warehouse endpoint */ + delete: operations['EndpointController_deleteEndpoint'] + } + '/v0/projects/{ref}/analytics/warehouse/query': { + /** Lists project's warehouse queries from logflare */ + get: operations['WarehouseQueryController_runQuery'] + } + '/v0/projects/{ref}/config/pgbouncer': { + /** Gets project's pgbouncer config */ + get: operations['PgbouncerConfigController_getPgbouncerConfig'] + /** Updates project's pgbouncer config */ + patch: operations['PgbouncerConfigController_updatePgbouncerConfig'] + } + '/v0/projects/{ref}/config/pgbouncer/status': { + /** Gets project's pgbouncer status */ + get: operations['PgbouncerConfigController_getPgbouncerStatus'] + } + '/v0/projects/{ref}/config/postgrest': { + /** Gets project's postgrest config */ + get: operations['PostgrestConfigController_getPostgRESTConfig'] + /** Updates project's postgrest config */ + patch: operations['PostgrestConfigController_updatePostgRESTConfig'] + } + '/v0/projects/{ref}/config/postgres': { + /** Gets project's Postgres config */ + get: operations['PostgresConfigController_getConfig'] + /** Updates project's Postgres config */ + put: operations['PostgresConfigController_updateConfig'] + } + '/v0/projects/{ref}/config/secrets': { + /** Updates project's secrets config */ + patch: operations['SecretsConfigController_updateConfig'] + } + '/v0/projects/{ref}/config/storage': { + /** Gets project's storage config */ + get: operations['StorageConfigController_getConfig'] + /** Updates project's storage config */ + patch: operations['StorageConfigController_updateConfig'] + } + '/v0/projects/{ref}/config/supavisor': { + /** Gets project's supavisor config */ + get: operations['SupavisorConfigController_getSupavisorConfig'] + /** Updates project's supavisor config */ + patch: operations['SupavisorConfigController_updateSupavisorConfig'] + } + '/v0/projects/{ref}/billing/addons': { + /** Gets project addons */ + get: operations['ProjectAddonController_getProjectAddons'] + /** Updates project addon */ + post: operations['ProjectAddonController_updateAddon'] + } + '/v0/projects/{ref}/billing/addons/{addon_variant}': { + /** Removes project addon */ + delete: operations['ProjectAddonController_removeAddon'] + } + '/v0/storage/{ref}/buckets/{id}': { + /** Gets bucket */ + get: operations['StorageBucketIdController_getBucket'] + /** Deletes bucket */ + delete: operations['StorageBucketIdController_deleteBucket'] + /** Updates bucket */ + patch: operations['StorageBucketIdController_updateBucket'] + } + '/v0/storage/{ref}/buckets/{id}/empty': { + /** Removes all objects inside a single bucket. */ + post: operations['StorageBucketIdController_emptyBucket'] + } + '/v0/storage/{ref}/buckets': { + /** Gets list of buckets */ + get: operations['StorageBucketsController_getBuckets'] + /** Create bucket */ + post: operations['StorageBucketsController_createBucket'] + } + '/v0/storage/{ref}/buckets/{id}/objects/list': { + /** Gets list of objects with the given bucket */ + post: operations['StorageObjectsController_getObjects'] + } + '/v0/storage/{ref}/buckets/{id}/objects/public-url': { + /** Creates URL for an asset in a public bucket */ + post: operations['StorageObjectsController_createPublicUrl'] + } + '/v0/storage/{ref}/buckets/{id}/objects/download': { + /** Downloads a file from a private bucket */ + post: operations['StorageObjectsController_download'] + } + '/v0/storage/{ref}/buckets/{id}/objects/sign': { + /** Creates a signed URL */ + post: operations['StorageObjectsController_createSignedUrl'] + } + '/v0/storage/{ref}/buckets/{id}/objects/sign-multi': { + /** Gets multiple signed URLs */ + post: operations['StorageObjectsController_createSignedUrls'] + } + '/v0/storage/{ref}/buckets/{id}/objects/copy': { + /** Copys object */ + post: operations['StorageObjectsController_copyObject'] + } + '/v0/storage/{ref}/buckets/{id}/objects/move': { + /** Move object */ + post: operations['StorageObjectsController_moveObject'] + } + '/v0/storage/{ref}/buckets/{id}/objects': { + /** Deletes objects */ + delete: operations['StorageObjectsController_deleteObjects'] + } + '/v0/storage/{ref}/credentials': { + /** Gets project storage credentials */ + get: operations['StorageS3CredentialsController_getAllCredentials'] + /** Creates project storage credential */ + post: operations['StorageS3CredentialsController_createCredential'] + } + '/v0/storage/{ref}/credentials/{id}': { + /** Deletes project storage credential */ + delete: operations['StorageS3CredentialsController_deleteCredential'] + } + '/v1/branches/{branch_id}': { + /** + * Get database branch config + * @description Fetches configurations of the specified database branch + */ + get: operations['BranchController_getBranchDetails'] + /** + * Delete a database branch + * @description Deletes the specified database branch + */ + delete: operations['BranchController_deleteBranch'] + /** + * Update database branch config + * @description Updates the configuration of the specified database branch + */ + patch: operations['BranchController_updateBranch'] + } + '/v1/branches/{branch_id}/reset': { + /** + * Resets a database branch + * @description Resets the specified database branch + */ + post: operations['BranchController_resetBranch'] + } + '/v1/projects': { + /** + * List all projects + * @description Returns a list of all projects you've previously created. + */ + get: operations['V1ProjectsController_getProjects'] + /** Create a project */ + post: operations['V1ProjectsController_createProject'] + } + '/v1/projects/{ref}/api-keys': { + /** Get project api keys */ + get: operations['ApiKeysController_getProjectApiKeys'] + } + '/v1/projects/{ref}/branches': { + /** + * List all database branches + * @description Returns all database branches of the specified project. + */ + get: operations['BranchesController_getBranches'] + /** + * Create a database branch + * @description Creates a database branch from the specified project. + */ + post: operations['BranchesController_createBranch'] + /** + * Disables preview branching + * @description Disables preview branching for the specified project + */ + delete: operations['BranchesController_disableBranch'] + } + '/v1/projects/{ref}/custom-hostname': { + /** Gets project's custom hostname config */ + get: operations['CustomHostnamesController_getCustomHostnameConfig'] + /** Deletes a project's custom hostname configuration */ + delete: operations['CustomHostnamesController_removeCustomHostnameConfig'] + } + '/v1/projects/{ref}/custom-hostname/initialize': { + /** Updates project's custom hostname configuration */ + post: operations['CustomHostnamesController_createCustomHostnameConfig'] + } + '/v1/projects/{ref}/custom-hostname/reverify': { + /** Attempts to verify the DNS configuration for project's custom hostname configuration */ + post: operations['CustomHostnamesController_reverify'] + } + '/v1/projects/{ref}/custom-hostname/activate': { + /** Activates a custom hostname for a project. */ + post: operations['CustomHostnamesController_activate'] + } + '/v1/projects/{ref}/network-bans/retrieve': { + /** Gets project's network bans */ + post: operations['NetworkBansController_getNetworkBans'] + } + '/v1/projects/{ref}/network-bans': { + /** Remove network bans. */ + delete: operations['NetworkBansController_removeNetworkBan'] + } + '/v1/projects/{ref}/network-restrictions': { + /** Gets project's network restrictions */ + get: operations['NetworkRestrictionsController_getNetworkRestrictions'] + } + '/v1/projects/{ref}/network-restrictions/apply': { + /** Updates project's network restrictions */ + post: operations['NetworkRestrictionsController_applyNetworkRestrictions'] + } + '/v1/projects/{ref}/pgsodium': { + /** Gets project's pgsodium config */ + get: operations['PgsodiumConfigController_getPgsodiumConfig'] + /** Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */ + put: operations['PgsodiumConfigController_updatePgsodiumConfig'] + } + '/v1/projects/{ref}/postgrest': { + /** Gets project's postgrest config */ + get: operations['PostgrestConfigController_getPostgRESTConfig'] + /** Updates project's postgrest config */ + patch: operations['PostgrestConfigController_updatePostgRESTConfig'] + } + '/v1/projects/{ref}': { + /** Deletes the given project */ + delete: operations['ProjectsRefController_deleteProject'] + } + '/v1/projects/{ref}/secrets': { + /** + * List all secrets + * @description Returns all secrets you've previously added to the specified project. + */ + get: operations['SecretsController_getSecrets'] + /** + * Bulk create secrets + * @description Creates multiple secrets and adds them to the specified project. + */ + post: operations['SecretsController_createSecrets'] + /** + * Bulk delete secrets + * @description Deletes all secrets with the given names from the specified project + */ + delete: operations['SecretsController_deleteSecrets'] + } + '/v1/projects/{ref}/ssl-enforcement': { + /** Get project's SSL enforcement configuration. */ + get: operations['SslEnforcementController_getSslEnforcementConfig'] + /** Update project's SSL enforcement configuration. */ + put: operations['SslEnforcementController_updateSslEnforcementConfig'] + } + '/v1/projects/{ref}/types/typescript': { + /** + * Generate TypeScript types + * @description Returns the TypeScript types of your schema for use with supabase-js. + */ + get: operations['TypesController_getTypescriptTypes'] + } + '/v1/projects/{ref}/vanity-subdomain': { + /** Gets current vanity subdomain config */ + get: operations['VanitySubdomainsController_getVanitySubdomainConfig'] + /** Deletes a project's vanity subdomain configuration */ + delete: operations['VanitySubdomainsController_removeVanitySubdomainConfig'] + } + '/v1/projects/{ref}/vanity-subdomain/check-availability': { + /** Checks vanity subdomain availability */ + post: operations['VanitySubdomainsController_checkVanitySubdomainAvailability'] + } + '/v1/projects/{ref}/vanity-subdomain/activate': { + /** Activates a vanity subdomain for a project. */ + post: operations['VanitySubdomainsController_activateVanitySubdomainPlease'] + } + '/v1/projects/{ref}/upgrade': { + /** Upgrades the project's Postgres version */ + post: operations['UpgradeController_upgradeProject'] + } + '/v1/projects/{ref}/upgrade/eligibility': { + /** Returns the project's eligibility for upgrades */ + get: operations['UpgradeController_upgradeEligibilityInformation'] + } + '/v1/projects/{ref}/upgrade/status': { + /** Gets the latest status of the project's upgrade */ + get: operations['UpgradeController_getUpgradeStatus'] + } + '/v1/projects/{ref}/readonly': { + /** Returns project's readonly mode status */ + get: operations['ReadOnlyController_getReadOnlyModeStatus'] + } + '/v1/projects/{ref}/readonly/temporary-disable': { + /** Disables project's readonly mode for the next 15 minutes */ + post: operations['ReadOnlyController_temporarilyDisableReadonlyMode'] + } + '/v1/projects/{ref}/read-replicas/setup': { + /** Set up a read replica */ + post: operations['ReadReplicaController_setUpReadReplica'] + } + '/v1/projects/{ref}/read-replicas/remove': { + /** Remove a read replica */ + post: operations['ReadReplicaController_removeReadReplica'] + } + '/v1/projects/{ref}/health': { + /** Gets project's service health status */ + get: operations['ServiceHealthController_checkServiceHealth'] + } + '/v1/projects/{ref}/config/database/postgres': { + /** Gets project's Postgres config */ + get: operations['AuthPostgresConfigController_getConfig'] + /** Updates project's Postgres config */ + put: operations['AuthPostgresConfigController_updateConfig'] + } + '/v1/projects/{ref}/config/database/pgbouncer': { + /** Get project's pgbouncer config */ + get: operations['V1PgbouncerConfigController_v1GetPgbouncerConfig'] + } + '/v1/projects/{ref}/config/auth': { + /** Gets project's auth config */ + get: operations['V1AuthConfigController_getV1AuthConfig'] + /** Updates a project's auth config */ + patch: operations['V1AuthConfigController_updateV1AuthConfig'] + } + '/v1/projects/{ref}/config/auth/third-party-auth': { + /** Lists all third-party auth integrations */ + get: operations['ThirdPartyAuthController_listTPAForProject'] + /** Creates a new third-party auth integration */ + post: operations['ThirdPartyAuthController_createTPAForProject'] + } + '/v1/projects/{ref}/config/auth/third-party-auth/{tpa_id}': { + /** Get a third-party integration */ + get: operations['ThirdPartyAuthController_getTPAForProject'] + /** Removes a third-party auth integration */ + delete: operations['ThirdPartyAuthController_deleteTPAForProject'] + } + '/v1/projects/{ref}/config/auth/sso/providers': { + /** Lists all SSO providers */ + get: operations['ProvidersController_listAllProviders'] + /** Creates a new SSO provider */ + post: operations['ProvidersController_createProviderForProject'] + } + '/v1/projects/{ref}/config/auth/sso/providers/{provider_id}': { + /** Gets a SSO provider by its UUID */ + get: operations['ProvidersController_getProviderById'] + /** Updates a SSO provider by its UUID */ + put: operations['ProvidersController_updateProviderById'] + /** Removes a SSO provider by its UUID */ + delete: operations['ProvidersController_removeProviderById'] + } + '/v1/projects/{ref}/database/query': { + /** Run sql query */ + post: operations['V1QueryController_v1RunQuery'] + } + '/v1/projects/{ref}/database/webhooks/enable': { + /** Enables Database Webhooks on the project */ + post: operations['V1DatabaseWebhooksController_v1EnableDatabaseWebhooks'] + } + '/v1/projects/{ref}/database/backups': { + /** Lists all backups */ + get: operations['V1BackupsController_getBackups'] + } + '/v1/projects/{ref}/database/backups/restore-pitr': { + /** Restores a PITR backup for a database */ + post: operations['V1RestorePitrController_v1RestorePitr'] + } + '/v1/projects/{ref}/functions': { + /** + * List all functions + * @description Returns all functions you've previously added to the specified project. + */ + get: operations['FunctionsController_getFunctions'] + /** + * Create a function + * @description Creates a function and adds it to the specified project. + */ + post: operations['FunctionsController_createFunction'] + } + '/v1/projects/{ref}/functions/{function_slug}': { + /** + * Retrieve a function + * @description Retrieves a function with the specified slug and project. + */ + get: operations['FunctionSlugController_getFunction'] + /** + * Delete a function + * @description Deletes a function with the specified slug from the specified project. + */ + delete: operations['FunctionSlugController_deleteFunction'] + /** + * Update a function + * @description Updates a function with the specified slug and project. + */ + patch: operations['FunctionSlugController_updateFunction'] + } + '/v1/projects/{ref}/functions/{function_slug}/body': { + /** + * Retrieve a function body + * @description Retrieves a function body for the specified slug and project. + */ + get: operations['FunctionSlugController_getFunctionBody'] + } + '/v1/projects/{ref}/storage/buckets': { + /** Lists all buckets */ + get: operations['V1StorageBucketsController_getBuckets'] + } + '/v1/organizations': { + /** + * List all organizations + * @description Returns a list of organizations that you currently belong to. + */ + get: operations['OrganizationsController_getOrganizations'] + /** Create an organization */ + post: operations['OrganizationsController_createOrganization'] + } + '/v1/organizations/{slug}/members': { + /** List members of an organization */ + get: operations['V1OrganizationMembersController_v1ListOrganizationMembers'] + } + '/v1/organizations/{slug}': { + /** Gets information about the organization */ + get: operations['V1OrganizationSlugController_getOrganization'] + } + '/v1/oauth/authorize': { + /** Authorize user through oauth */ + get: operations['OAuthController_authorize'] + } + '/v1/oauth/token': { + /** Exchange auth code for user's access and refresh token */ + post: operations['OAuthController_token'] + } + '/v1/snippets': { + /** Lists SQL snippets for the logged in user */ + get: operations['SnippetsController_listSnippets'] + } + '/v1/snippets/{id}': { + /** Gets a specific SQL snippet */ + get: operations['SnippetsController_getSnippet'] + } + '/partners/flyio/callback': { + /** Redirects to Supabase dashboard after completing Fly sso */ + get: operations['CallbackController_redirectToDashboardFlyioExtensionScreen'] + } + '/partners/flyio/extensions/{extension_id}': { + /** Gets database status */ + get: operations['ExtensionController_getResourceStatus'] + /** Deletes a database */ + delete: operations['ExtensionController_deleteResource'] + } + '/partners/flyio/extensions/{extension_id}/sso': { + /** Starts Fly single sign on */ + get: operations['ExtensionController_startFlyioSSO'] + } + '/partners/flyio/extensions': { + /** Creates a database */ + post: operations['ExtensionsController_provisionResource'] + } + '/partners/flyio/organizations/{organization_id}': { + /** Gets details of the organization linked to the provided Fly organization id */ + get: operations['OrganizationsController_getOrganization'] + } + '/partners/flyio/organizations/{organization_id}/extensions': { + /** Gets all databases that belong to the given Fly organization id */ + get: operations['OrganizationsController_getOrgExtensions'] + } + '/partners/flyio/organizations/{organization_id}/sso': { + /** Starts Fly single sign on */ + get: operations['OrganizationsController_startFlyioSSO'] + } + '/partners/flyio/organizations/{organization_id}/subscription': { + /** Updates organization subscription linked to the provided Fly organization id */ + put: operations['OrganizationsController_updateOrganization'] + } + '/partners/flyio/organizations/{organization_id}/billing': { + /** Gets the organizations current unbilled charges */ + get: operations['FlyBillingController_getResourceBilling'] + } +} + +export type webhooks = Record + +export interface components { + schemas: { + NotificationResponseV1: { + id: string + inserted_at: string + project_id: number + notification_name: string + notification_status: string + data: Record + meta: Record + } + UpdateNotificationsBodyV1: { + ids: string[] + } + NotificationAction: { + label: string + url?: string + action_type?: string + } + NotificationData: { + org_slug?: string + project_ref?: string + title: string + message?: string + actions?: components['schemas']['NotificationAction'][] + } + NotificationResponseV2: { + /** @enum {string} */ + status: 'new' | 'seen' | 'archived' + /** @enum {string} */ + priority: 'Critical' | 'Warning' | 'Info' + data: components['schemas']['NotificationData'] + id: string + inserted_at: string + name: string + meta: Record + } + NotificationsSummary: { + unread_count: number + has_warning: boolean + has_critical: boolean + } + UpdateNotificationBodyV2: { + id: string + /** @enum {string} */ + status: 'new' | 'seen' | 'archived' + } + ResetPasswordBody: { + email: string + redirectTo?: string + } + SendFeedbackBody: { + message: string + affectedServices?: string + library?: string + category: string + subject?: string + tags: string[] + additionalRedirectUrls?: string + pathname?: string + projectRef?: string + organizationSlug?: string + severity?: string + siteUrl?: string + urlToAirTable?: string + allowSupportAccess?: boolean + verified?: boolean + browserInformation?: string + } + SendFeedbackResponse: { + result: string + } + SendExitSurveyBody: { + projectRef?: string + orgSlug?: string + reasons: string + additionalFeedback?: string + exitAction?: string + } + SendUpgradeSurveyBody: { + orgSlug?: string + prevPlan?: string + currentPlan?: string + reasons: string[] + additionalFeedback?: string + } + SendDocsFeedbackBody: { + page: string + isHelpful: boolean + title: string + feedback?: string + team?: string + } + SignUpBody: { + email: string + password: string + redirectTo?: string + } + ProjectResourceWarningsResponse: { + /** @enum {string|null} */ + need_pitr: 'critical' | 'warning' | null + /** @enum {string|null} */ + disk_io_exhaustion: 'critical' | 'warning' | null + /** @enum {string|null} */ + disk_space_exhaustion: 'critical' | 'warning' | null + /** @enum {string|null} */ + cpu_exhaustion: 'critical' | 'warning' | null + /** @enum {string|null} */ + memory_and_swap_exhaustion: 'critical' | 'warning' | null + /** @enum {string|null} */ + auth_rate_limit_exhaustion: 'critical' | 'warning' | null + project: string + is_readonly_mode_enabled: boolean + } + GoTrueConfigResponse: { + SITE_URL: string + DISABLE_SIGNUP: boolean + JWT_EXP: number + SMTP_ADMIN_EMAIL: string + SMTP_HOST: string + SMTP_PORT: string + SMTP_USER: string + SMTP_PASS: string + SMTP_MAX_FREQUENCY: number + SMTP_SENDER_NAME: string + MAILER_AUTOCONFIRM: boolean + MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS: boolean + MAILER_SUBJECTS_INVITE: string + MAILER_SUBJECTS_CONFIRMATION: string + MAILER_SUBJECTS_RECOVERY: string + MAILER_SUBJECTS_EMAIL_CHANGE: string + MAILER_SUBJECTS_MAGIC_LINK: string + MAILER_SUBJECTS_REAUTHENTICATION: string + MAILER_TEMPLATES_INVITE_CONTENT: string + MAILER_TEMPLATES_CONFIRMATION_CONTENT: string + MAILER_TEMPLATES_RECOVERY_CONTENT: string + MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT: string + MAILER_TEMPLATES_MAGIC_LINK_CONTENT: string + MAILER_TEMPLATES_REAUTHENTICATION_CONTENT: string + MFA_MAX_ENROLLED_FACTORS: number + URI_ALLOW_LIST: string + EXTERNAL_ANONYMOUS_USERS_ENABLED: boolean + EXTERNAL_EMAIL_ENABLED: boolean + EXTERNAL_PHONE_ENABLED: boolean + SAML_ENABLED: boolean + SECURITY_CAPTCHA_ENABLED: boolean + SECURITY_CAPTCHA_PROVIDER: string + SECURITY_CAPTCHA_SECRET: string + SESSIONS_TIMEBOX: number + SESSIONS_INACTIVITY_TIMEOUT: number + SESSIONS_SINGLE_PER_USER: boolean + SESSIONS_TAGS: string + RATE_LIMIT_ANONYMOUS_USERS: number + RATE_LIMIT_EMAIL_SENT: number + RATE_LIMIT_SMS_SENT: number + RATE_LIMIT_VERIFY: number + RATE_LIMIT_TOKEN_REFRESH: number + MAILER_SECURE_EMAIL_CHANGE_ENABLED: boolean + REFRESH_TOKEN_ROTATION_ENABLED: boolean + PASSWORD_HIBP_ENABLED: boolean + PASSWORD_MIN_LENGTH: number + PASSWORD_REQUIRED_CHARACTERS: string + SECURITY_MANUAL_LINKING_ENABLED: boolean + SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION: boolean + SECURITY_REFRESH_TOKEN_REUSE_INTERVAL: number + MAILER_OTP_EXP: number + SMS_AUTOCONFIRM: boolean + SMS_MAX_FREQUENCY: number + SMS_OTP_EXP: number + SMS_OTP_LENGTH: number + SMS_PROVIDER: string + SMS_MESSAGEBIRD_ACCESS_KEY: string + SMS_MESSAGEBIRD_ORIGINATOR: string + SMS_TEXTLOCAL_API_KEY: string + SMS_TEXTLOCAL_SENDER: string + SMS_TWILIO_ACCOUNT_SID: string + SMS_TWILIO_AUTH_TOKEN: string + SMS_TWILIO_CONTENT_SID: string + SMS_TWILIO_MESSAGE_SERVICE_SID: string + SMS_TWILIO_VERIFY_ACCOUNT_SID: string + SMS_TWILIO_VERIFY_AUTH_TOKEN: string + SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID: string + SMS_VONAGE_API_KEY: string + SMS_VONAGE_API_SECRET: string + SMS_VONAGE_FROM: string + SMS_TEMPLATE: string + SMS_TEST_OTP: string + SMS_TEST_OTP_VALID_UNTIL: string + HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED: boolean + HOOK_MFA_VERIFICATION_ATTEMPT_URI: string + HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED: boolean + HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI: string + HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: boolean + HOOK_CUSTOM_ACCESS_TOKEN_URI: string + HOOK_SEND_SMS_ENABLED: boolean + HOOK_SEND_SMS_URI: string + HOOK_SEND_EMAIL_ENABLED: boolean + HOOK_SEND_EMAIL_URI: string + EXTERNAL_APPLE_ENABLED: boolean + EXTERNAL_APPLE_CLIENT_ID: string + EXTERNAL_APPLE_SECRET: string + EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS: string + EXTERNAL_AZURE_ENABLED: boolean + EXTERNAL_AZURE_CLIENT_ID: string + EXTERNAL_AZURE_SECRET: string + EXTERNAL_AZURE_URL: string + EXTERNAL_BITBUCKET_ENABLED: boolean + EXTERNAL_BITBUCKET_CLIENT_ID: string + EXTERNAL_BITBUCKET_SECRET: string + EXTERNAL_DISCORD_ENABLED: boolean + EXTERNAL_DISCORD_CLIENT_ID: string + EXTERNAL_DISCORD_SECRET: string + EXTERNAL_FACEBOOK_ENABLED: boolean + EXTERNAL_FACEBOOK_CLIENT_ID: string + EXTERNAL_FACEBOOK_SECRET: string + EXTERNAL_FIGMA_ENABLED: boolean + EXTERNAL_FIGMA_CLIENT_ID: string + EXTERNAL_FIGMA_SECRET: string + EXTERNAL_GITHUB_ENABLED: boolean + EXTERNAL_GITHUB_CLIENT_ID: string + EXTERNAL_GITHUB_SECRET: string + EXTERNAL_GITLAB_ENABLED: boolean + EXTERNAL_GITLAB_CLIENT_ID: string + EXTERNAL_GITLAB_SECRET: string + EXTERNAL_GITLAB_URL: string + EXTERNAL_GOOGLE_ENABLED: boolean + EXTERNAL_GOOGLE_CLIENT_ID: string + EXTERNAL_GOOGLE_SECRET: string + EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS: string + EXTERNAL_GOOGLE_SKIP_NONCE_CHECK: boolean + EXTERNAL_KAKAO_ENABLED: boolean + EXTERNAL_KAKAO_CLIENT_ID: string + EXTERNAL_KAKAO_SECRET: string + EXTERNAL_KEYCLOAK_ENABLED: boolean + EXTERNAL_KEYCLOAK_CLIENT_ID: string + EXTERNAL_KEYCLOAK_SECRET: string + EXTERNAL_KEYCLOAK_URL: string + EXTERNAL_LINKEDIN_OIDC_ENABLED: boolean + EXTERNAL_LINKEDIN_OIDC_CLIENT_ID: string + EXTERNAL_LINKEDIN_OIDC_SECRET: string + EXTERNAL_NOTION_ENABLED: boolean + EXTERNAL_NOTION_CLIENT_ID: string + EXTERNAL_NOTION_SECRET: string + EXTERNAL_SLACK_ENABLED: boolean + EXTERNAL_SLACK_CLIENT_ID: string + EXTERNAL_SLACK_SECRET: string + EXTERNAL_SPOTIFY_ENABLED: boolean + EXTERNAL_SPOTIFY_CLIENT_ID: string + EXTERNAL_SPOTIFY_SECRET: string + EXTERNAL_TWITCH_ENABLED: boolean + EXTERNAL_TWITCH_CLIENT_ID: string + EXTERNAL_TWITCH_SECRET: string + EXTERNAL_TWITTER_ENABLED: boolean + EXTERNAL_TWITTER_CLIENT_ID: string + EXTERNAL_TWITTER_SECRET: string + EXTERNAL_WORKOS_ENABLED: boolean + EXTERNAL_WORKOS_CLIENT_ID: string + EXTERNAL_WORKOS_SECRET: string + EXTERNAL_WORKOS_URL: string + EXTERNAL_ZOOM_ENABLED: boolean + EXTERNAL_ZOOM_CLIENT_ID: string + EXTERNAL_ZOOM_SECRET: string + } + UpdateGoTrueConfigBody: { + SITE_URL?: string + DISABLE_SIGNUP?: boolean + JWT_EXP?: number + SMTP_ADMIN_EMAIL?: string + SMTP_HOST?: string + SMTP_PORT?: string + SMTP_USER?: string + SMTP_PASS?: string + SMTP_MAX_FREQUENCY?: number + SMTP_SENDER_NAME?: string + MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS?: boolean + MAILER_AUTOCONFIRM?: boolean + MAILER_SUBJECTS_INVITE?: string + MAILER_SUBJECTS_CONFIRMATION?: string + MAILER_SUBJECTS_RECOVERY?: string + MAILER_SUBJECTS_EMAIL_CHANGE?: string + MAILER_SUBJECTS_MAGIC_LINK?: string + MAILER_SUBJECTS_REAUTHENTICATION?: string + MAILER_TEMPLATES_INVITE_CONTENT?: string + MAILER_TEMPLATES_REAUTHENTICATION_CONTENT?: string + MAILER_TEMPLATES_CONFIRMATION_CONTENT?: string + MAILER_TEMPLATES_RECOVERY_CONTENT?: string + MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT?: string + MAILER_TEMPLATES_MAGIC_LINK_CONTENT?: string + MFA_MAX_ENROLLED_FACTORS?: number + URI_ALLOW_LIST?: string + EXTERNAL_ANONYMOUS_USERS_ENABLED?: boolean + EXTERNAL_EMAIL_ENABLED?: boolean + EXTERNAL_PHONE_ENABLED?: boolean + SAML_ENABLED?: boolean + SECURITY_CAPTCHA_ENABLED?: boolean + SECURITY_CAPTCHA_PROVIDER?: string + SECURITY_CAPTCHA_SECRET?: string + SESSIONS_TIMEBOX?: number + SESSIONS_INACTIVITY_TIMEOUT?: number + SESSIONS_SINGLE_PER_USER?: boolean + SESSIONS_TAGS?: string + RATE_LIMIT_ANONYMOUS_USERS?: number + RATE_LIMIT_EMAIL_SENT?: number + RATE_LIMIT_SMS_SENT?: number + RATE_LIMIT_VERIFY?: number + RATE_LIMIT_TOKEN_REFRESH?: number + MAILER_SECURE_EMAIL_CHANGE_ENABLED?: boolean + REFRESH_TOKEN_ROTATION_ENABLED?: boolean + PASSWORD_HIBP_ENABLED?: boolean + PASSWORD_MIN_LENGTH?: number + /** @enum {string} */ + PASSWORD_REQUIRED_CHARACTERS?: + | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' + | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' + | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~' + | '' + SECURITY_MANUAL_LINKING_ENABLED?: boolean + SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION?: boolean + SECURITY_REFRESH_TOKEN_REUSE_INTERVAL?: number + MAILER_OTP_EXP?: number + SMS_AUTOCONFIRM?: boolean + SMS_MAX_FREQUENCY?: number + SMS_OTP_EXP?: number + SMS_OTP_LENGTH?: number + SMS_PROVIDER?: string + SMS_MESSAGEBIRD_ACCESS_KEY?: string + SMS_MESSAGEBIRD_ORIGINATOR?: string + SMS_TEST_OTP?: string + SMS_TEST_OTP_VALID_UNTIL?: string + SMS_TEXTLOCAL_API_KEY?: string + SMS_TEXTLOCAL_SENDER?: string + SMS_TWILIO_ACCOUNT_SID?: string + SMS_TWILIO_AUTH_TOKEN?: string + SMS_TWILIO_CONTENT_SID?: string + SMS_TWILIO_MESSAGE_SERVICE_SID?: string + SMS_TWILIO_VERIFY_ACCOUNT_SID?: string + SMS_TWILIO_VERIFY_AUTH_TOKEN?: string + SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID?: string + SMS_VONAGE_API_KEY?: string + SMS_VONAGE_API_SECRET?: string + SMS_VONAGE_FROM?: string + SMS_TEMPLATE?: string + HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED?: boolean + HOOK_MFA_VERIFICATION_ATTEMPT_URI?: string + HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED?: boolean + HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI?: string + HOOK_CUSTOM_ACCESS_TOKEN_ENABLED?: boolean + HOOK_CUSTOM_ACCESS_TOKEN_URI?: string + HOOK_SEND_SMS_ENABLED?: boolean + HOOK_SEND_SMS_URI?: string + HOOK_SEND_EMAIL_ENABLED?: boolean + HOOK_SEND_EMAIL_URI?: string + EXTERNAL_APPLE_ENABLED?: boolean + EXTERNAL_APPLE_CLIENT_ID?: string + EXTERNAL_APPLE_SECRET?: string + EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS?: string + EXTERNAL_AZURE_ENABLED?: boolean + EXTERNAL_AZURE_CLIENT_ID?: string + EXTERNAL_AZURE_SECRET?: string + EXTERNAL_AZURE_URL?: string + EXTERNAL_BITBUCKET_ENABLED?: boolean + EXTERNAL_BITBUCKET_CLIENT_ID?: string + EXTERNAL_BITBUCKET_SECRET?: string + EXTERNAL_DISCORD_ENABLED?: boolean + EXTERNAL_DISCORD_CLIENT_ID?: string + EXTERNAL_DISCORD_SECRET?: string + EXTERNAL_FACEBOOK_ENABLED?: boolean + EXTERNAL_FACEBOOK_CLIENT_ID?: string + EXTERNAL_FACEBOOK_SECRET?: string + EXTERNAL_FIGMA_ENABLED?: boolean + EXTERNAL_FIGMA_CLIENT_ID?: string + EXTERNAL_FIGMA_SECRET?: string + EXTERNAL_GITHUB_ENABLED?: boolean + EXTERNAL_GITHUB_CLIENT_ID?: string + EXTERNAL_GITHUB_SECRET?: string + EXTERNAL_GITLAB_ENABLED?: boolean + EXTERNAL_GITLAB_CLIENT_ID?: string + EXTERNAL_GITLAB_SECRET?: string + EXTERNAL_GITLAB_URL?: string + EXTERNAL_GOOGLE_ENABLED?: boolean + EXTERNAL_GOOGLE_CLIENT_ID?: string + EXTERNAL_GOOGLE_SECRET?: string + EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS?: string + EXTERNAL_GOOGLE_SKIP_NONCE_CHECK?: boolean + EXTERNAL_KAKAO_ENABLED?: boolean + EXTERNAL_KAKAO_CLIENT_ID?: string + EXTERNAL_KAKAO_SECRET?: string + EXTERNAL_KEYCLOAK_ENABLED?: boolean + EXTERNAL_KEYCLOAK_CLIENT_ID?: string + EXTERNAL_KEYCLOAK_SECRET?: string + EXTERNAL_KEYCLOAK_URL?: string + EXTERNAL_LINKEDIN_OIDC_ENABLED?: boolean + EXTERNAL_LINKEDIN_OIDC_CLIENT_ID?: string + EXTERNAL_LINKEDIN_OIDC_SECRET?: string + EXTERNAL_NOTION_ENABLED?: boolean + EXTERNAL_NOTION_CLIENT_ID?: string + EXTERNAL_NOTION_SECRET?: string + EXTERNAL_SLACK_ENABLED?: boolean + EXTERNAL_SLACK_CLIENT_ID?: string + EXTERNAL_SLACK_SECRET?: string + EXTERNAL_SPOTIFY_ENABLED?: boolean + EXTERNAL_SPOTIFY_CLIENT_ID?: string + EXTERNAL_SPOTIFY_SECRET?: string + EXTERNAL_TWITCH_ENABLED?: boolean + EXTERNAL_TWITCH_CLIENT_ID?: string + EXTERNAL_TWITCH_SECRET?: string + EXTERNAL_TWITTER_ENABLED?: boolean + EXTERNAL_TWITTER_CLIENT_ID?: string + EXTERNAL_TWITTER_SECRET?: string + EXTERNAL_WORKOS_ENABLED?: boolean + EXTERNAL_WORKOS_CLIENT_ID?: string + EXTERNAL_WORKOS_SECRET?: string + EXTERNAL_WORKOS_URL?: string + EXTERNAL_ZOOM_ENABLED?: boolean + EXTERNAL_ZOOM_CLIENT_ID?: string + EXTERNAL_ZOOM_SECRET?: string + } + UserBody: { + id?: string + aud?: string + banned_until?: string + confirmation_sent_at?: string + confirmation_token?: string + confirmed_at?: string + created_at?: string + email?: string + email_change?: string + email_change_confirm_status?: number + email_change_sent_at?: string + email_change_token_current?: string + email_change_token_new?: string + email_confirmed_at?: string + encrypted_password?: string + instance_id?: string + invited_at?: string + is_super_admin?: boolean + last_sign_in_at?: string + phone?: string + phone_change?: string + phone_change_sent_at?: string + phone_change_token?: string + phone_confirmed_at?: string + raw_app_meta_data?: Record + raw_user_meta_data?: Record + reauthentication_sent_at?: string + reauthentication_token?: string + recovery_sent_at?: string + recovery_token?: string + role?: string + updated_at?: string + is_sso_user?: boolean + deleted_at?: string + is_anonymous?: boolean + } + UsersResponse: { + total: number + users: components['schemas']['UserBody'][] + } + Backup: { + id: number + isPhysicalBackup: boolean + project_id: number + status: Record + inserted_at: string + } + BackupsResponse: { + tierKey: string + region: string + walg_enabled: boolean + pitr_enabled: boolean + backups: components['schemas']['Backup'][] + physicalBackupData: { + earliestPhysicalBackupDateUnix?: number + latestPhysicalBackupDateUnix?: number + } + } + DownloadBackupBody: { + id: number + data: Record + inserted_at: string + project_id: number + s3_bucket: string + s3_path: string + status: string + } + DownloadBackupResponse: { + fileUrl: string + } + RestoreLogicalBackupBody: { + id: number + } + RestorePhysicalBackupBody: { + id: number + recovery_time_target: string + } + PointInTimeRestoreBody: { + recovery_time_target_unix: number + } + OwnerResponse: { + project_ref: string + /** @enum {string} */ + current: 'unmigrated' | 'temp_role' | 'migrated' + /** @enum {string} */ + desired: 'unmigrated' | 'temp_role' | 'migrated' + created_at: string + modified_at: string + migrated_at: string | null + } + OrganizationResponse: { + /** @enum {string|null} */ + restriction_status: 'grace_period' | 'grace_period_over' | 'restricted' | null + id: number + slug: string + name: string + billing_email: string | null + is_owner: boolean + stripe_customer_id: string | null + subscription_id: string | null + opt_in_tags: string[] + restriction_data: Record + } + GetOrganizationByFlyOrganizationIdResponse: { + slug: string + } + CreateOrganizationBody: { + name: string + kind?: string + size?: string + /** @enum {string} */ + tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' + payment_method?: string + } + UpdateOrganizationBody: { + name: string + billing_email: string + opt_in_tags: string[] + } + OrganizationSlugResponse: { + id: number + slug: string + name: string + billing_email?: string + stripe_customer_id?: string + opt_in_tags: string[] + } + CustomerResponse: { + id: string + email: string + address: string + balance: number + invoice_settings: Record + billing_via_partner: boolean + } + CustomerUpdateResponse: { + id: string + object: string + address: Record + balance: number + cash_balance?: Record + created: number + currency: string + default_currency?: string + default_source: string + delinquent: boolean + description: string + discount: Record + email: string + invoice_credit_balance?: Record + invoice_prefix: string + invoice_settings: Record + livemode: boolean + metadata: Record + name: string + next_invoice_sequence?: number + phone: string + preferred_locales: string[] + shipping: Record + sources?: Record + subscriptions?: Record + tax?: Record + tax_exempt?: string + tax_ids?: Record + test_clock?: Record + lastResponse: { + headers?: Record + requestId?: string + statusCode?: number + apiVersion?: string + idempotencyKey?: string + stripeAccount?: string + } + } + Role: { + id: number + name: string + } + TaxId: { + id: string + object: string + country: string + created: number + customer: Record + deleted?: Record + livemode: boolean + type: string + value: string + verification: Record + } + TaxIdResponse: { + object: string + data: components['schemas']['TaxId'][] + has_more: boolean + url: string + lastResponse: { + headers?: Record + requestId?: string + statusCode?: number + apiVersion?: string + idempotencyKey?: string + stripeAccount?: string + } + } + CreateTaxIdBody: { + type: Record + value: string + } + CreateTaxIdResponse: { + id: string + object: string + country: string + created: number + customer: Record + livemode: boolean + type: string + value: string + verification: Record + lastResponse: { + headers?: Record + requestId?: string + statusCode?: number + apiVersion?: string + idempotencyKey?: string + stripeAccount?: string + } + } + DeleteTaxIdBody: { + id: string + } + DeleteTaxIdResponse: { + id: string + object: string + deleted: boolean + lastResponse: { + headers?: Record + requestId?: string + statusCode?: number + apiVersion?: string + idempotencyKey?: string + stripeAccount?: string + } + } + TransferOrganizationBody: { + member_gotrue_id: string + member_id: number + org_id: number + } + ProjectAllocation: { + ref: string + usage: number + name: string + } + OrgMetricUsage: { + usage: number + usage_original: number + cost: number + unit_price_desc: string + available_in_plan: boolean + unlimited: boolean + capped: boolean + /** @enum {string} */ + metric: + | 'EGRESS' + | 'DATABASE_SIZE' + | 'STORAGE_SIZE' + | 'MONTHLY_ACTIVE_USERS' + | 'MONTHLY_ACTIVE_SSO_USERS' + | 'FUNCTION_INVOCATIONS' + | 'FUNCTION_COUNT' + | 'STORAGE_IMAGES_TRANSFORMED' + | 'REALTIME_MESSAGE_COUNT' + | 'REALTIME_PEAK_CONNECTIONS' + | 'COMPUTE_HOURS_BRANCH' + | 'COMPUTE_HOURS_XS' + | 'COMPUTE_HOURS_SM' + | 'COMPUTE_HOURS_MD' + | 'COMPUTE_HOURS_L' + | 'COMPUTE_HOURS_XL' + | 'COMPUTE_HOURS_2XL' + | 'COMPUTE_HOURS_4XL' + | 'COMPUTE_HOURS_8XL' + | 'COMPUTE_HOURS_12XL' + | 'COMPUTE_HOURS_16XL' + /** @enum {string} */ + pricing_strategy: 'UNIT' | 'PACKAGE' | 'NONE' + pricing_free_units?: number + pricing_package_price?: number + pricing_package_size?: number + pricing_per_unit_price?: number + project_allocations: components['schemas']['ProjectAllocation'][] + } + OrgUsageResponse: { + usage_billing_enabled: boolean + slugs: string[] + usages: components['schemas']['OrgMetricUsage'][] + } + OrgDocumentUrlResponse: { + fileUrl: string + } + AuditLogsResponse: { + result: Record[] + retention_period: number + } + Invite: { + invited_id: number + invited_at: string + invited_email: string + role_id: number + } + InviteUserBody: { + invited_email: string + owner_id: number + role_id: number + } + SendInviteResponse: { + invited_at: string + invited_email: string + role_id: number + } + InviteResponse: { + organization_name: string + invite_id: string + token_does_not_exist: boolean + email_match: boolean + authorized_user: boolean + expired_token: boolean + } + JoinResponse: { + billing_email: string + id: number + name: string + slug: string + stripe_customer_id: string + } + RemoveMemberBody: { + member_id: number + } + Member: { + gotrue_id: string + primary_email: string | null + role_ids: number[] + username: string + mfa_enabled: boolean + } + UpdateMemberBody: { + role_id: number + } + MemberWithFreeProjectLimit: { + free_project_limit: number + primary_email: string + username: string + } + Payment: { + id: string + object: string + acss_debit?: Record + affirm?: Record + afterpay_clearpay?: Record + alipay?: Record + au_becs_debit?: Record + bacs_debit?: Record + bancontact?: Record + billing_details: Record + blik?: Record + boleto?: Record + card?: Record + card_present?: Record + created: number + customer: Record + customer_balance?: Record + eps?: Record + fpx?: Record + giropay?: Record + grabpay?: Record + ideal?: Record + interac_present?: Record + klarna?: Record + konbini?: Record + link?: Record + livemode: boolean + metadata: Record + oxxo?: Record + p24?: Record + paynow?: Record + promptpay?: Record + radar_options?: Record + sepa_debit?: Record + sofort?: Record + type: string + us_bank_account?: Record + wechat_pay?: Record + } + PaymentsResponse: { + object: string + data: components['schemas']['Payment'][] + has_more: boolean + url: string + lastResponse: { + headers?: Record + requestId?: string + statusCode?: number + apiVersion?: string + idempotencyKey?: string + stripeAccount?: string + } + } + DetachPaymentMethodBody: { + card_id: string + } + DetachPaymentResponse: { + id: string + object: string + acss_debit?: Record + affirm?: Record + afterpay_clearpay?: Record + alipay?: Record + au_becs_debit?: Record + bacs_debit?: Record + bancontact?: Record + billing_details: Record + blik?: Record + boleto?: Record + card?: Record + card_present?: Record + created: number + customer: Record + customer_balance?: Record + eps?: Record + fpx?: Record + giropay?: Record + grabpay?: Record + ideal?: Record + interac_present?: Record + klarna?: Record + konbini?: Record + link?: Record + livemode: boolean + metadata: Record + oxxo?: Record + p24?: Record + paynow?: Record + promptpay?: Record + radar_options?: Record + sepa_debit?: Record + sofort?: Record + type: string + us_bank_account?: Record + wechat_pay?: Record + lastResponse: { + headers?: Record + requestId?: string + statusCode?: number + apiVersion?: string + idempotencyKey?: string + stripeAccount?: string + } + } + HCaptchaBody: { + hcaptchaToken: string + } + SetupIntentResponse: { + id: string + object: string + application: Record + attach_to_self?: boolean + cancellation_reason: string + client_secret: string + created: number + customer: Record + description: string + flow_directions: Record + last_setup_error: Record + latest_attempt: Record + livemode: boolean + mandate: Record + metadata: Record + next_action: Record + on_behalf_of: Record + payment_method: Record + payment_method_options: Record + payment_method_types: string[] + single_use_mandate: Record + status: string + usage: string + lastResponse: { + headers?: Record + requestId?: string + statusCode?: number + apiVersion?: string + idempotencyKey?: string + stripeAccount?: string + } + } + /** + * @description Organization subscription plan + * @enum {string} + */ + BillingPlanId: 'free' | 'pro' | 'team' | 'enterprise' + BillingSubscriptionPlan: { + id: components['schemas']['BillingPlanId'] + name: string + price: number + } + BillingSubscriptionAddon: { + name: string + supabase_prod_id: string + price: number + } + /** @enum {string} */ + ProjectAddonType: 'custom_domain' | 'compute_instance' | 'pitr' | 'ipv4' + /** @enum {string} */ + AddonVariantId: + | 'ci_micro' + | 'ci_small' + | 'ci_medium' + | 'ci_large' + | 'ci_xlarge' + | 'ci_2xlarge' + | 'ci_4xlarge' + | 'ci_8xlarge' + | 'ci_12xlarge' + | 'ci_16xlarge' + | 'cd_default' + | 'pitr_7' + | 'pitr_14' + | 'pitr_28' + | 'ipv4_default' + /** @enum {string} */ + ProjectAddonVariantPricingType: 'fixed' | 'usage' + /** @enum {string} */ + ProjectAddonPricingInterval: 'monthly' | 'hourly' + ProjectAddonVariantResponse: { + identifier: components['schemas']['AddonVariantId'] + price_type: components['schemas']['ProjectAddonVariantPricingType'] + price_interval: components['schemas']['ProjectAddonPricingInterval'] + name: string + price_description: string + price: number + meta?: Record + } + SelectedAddonResponse: { + type: components['schemas']['ProjectAddonType'] + variant: components['schemas']['ProjectAddonVariantResponse'] + } + BillingProjectAddonResponse: { + addons: components['schemas']['SelectedAddonResponse'][] + name: string + ref: string + } + BillingPricingOptionsUnit: { + perUnitPrice: number + freeUnits?: number + } + BillingPricingOptionsPackage: { + packageSize: number + packagePrice: number + freeUnits?: number + } + BillingPricingOptionsNone: { + freeUnits?: number + } + BillingUsageBasedPrice: { + /** @enum {string} */ + metric: + | 'EGRESS' + | 'DATABASE_SIZE' + | 'STORAGE_SIZE' + | 'MONTHLY_ACTIVE_USERS' + | 'MONTHLY_ACTIVE_SSO_USERS' + | 'FUNCTION_INVOCATIONS' + | 'FUNCTION_COUNT' + | 'STORAGE_IMAGES_TRANSFORMED' + | 'REALTIME_MESSAGE_COUNT' + | 'REALTIME_PEAK_CONNECTIONS' + | 'COMPUTE_HOURS_BRANCH' + | 'COMPUTE_HOURS_XS' + | 'COMPUTE_HOURS_SM' + | 'COMPUTE_HOURS_MD' + | 'COMPUTE_HOURS_L' + | 'COMPUTE_HOURS_XL' + | 'COMPUTE_HOURS_2XL' + | 'COMPUTE_HOURS_4XL' + | 'COMPUTE_HOURS_8XL' + | 'COMPUTE_HOURS_12XL' + | 'COMPUTE_HOURS_16XL' + /** @enum {string} */ + pricingStrategy: 'UNIT' | 'PACKAGE' | 'NONE' + pricingOptions: + | components['schemas']['BillingPricingOptionsUnit'] + | components['schemas']['BillingPricingOptionsPackage'] + | components['schemas']['BillingPricingOptionsNone'] + name: string + unit: string + } + PaymentMethodCardDetails: { + last_4_digits: string + brand: string + expiry_month: number + expiry_year: number + } + ScheduledPlanChange: { + target_plan: components['schemas']['BillingPlanId'] + /** Format: date-time */ + at: string + usage_billing_enabled: boolean + } + GetSubscriptionResponse: { + billing_cycle_anchor: number + current_period_end: number + current_period_start: number + next_invoice_at: number + usage_billing_enabled: boolean + plan: components['schemas']['BillingSubscriptionPlan'] + addons: components['schemas']['BillingSubscriptionAddon'][] + project_addons: components['schemas']['BillingProjectAddonResponse'][] + usage_fees: components['schemas']['BillingUsageBasedPrice'][] + payment_method_type: string + payment_method_id?: string + payment_method_card_details?: components['schemas']['PaymentMethodCardDetails'] + billing_via_partner: boolean + /** @enum {string} */ + billing_partner: 'fly' | 'aws' + scheduled_plan_change: components['schemas']['ScheduledPlanChange'] | null + customer_balance: number + nano_enabled: boolean + } + UpdateSubscriptionBody: { + payment_method?: string + /** @enum {string} */ + tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' + } + /** @enum {string} */ + BillingPlanChangeType: 'upgrade' | 'downgrade' | 'none' + /** @enum {string} */ + BillingPlanEffectiveAt: 'now' | 'end_of_billing_period' | 'none' + PlanResponse: { + id: components['schemas']['BillingPlanId'] + change_type: components['schemas']['BillingPlanChangeType'] + effective_at: components['schemas']['BillingPlanEffectiveAt'] + name: string + price: number + is_current: boolean + } + PlansResponse: { + plans: components['schemas']['PlanResponse'][] + } + UpcomingInvoice: Record + ColumnPrivilege: { + grantor: string + grantee: string + /** @enum {string} */ + privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' + is_grantable: boolean + } + PostgresColumnPrivileges: { + column_id: string + relation_schema: string + relation_name: string + column_name: string + privileges: components['schemas']['ColumnPrivilege'][] + } + GrantColumnPrivilegesBody: { + is_grantable?: boolean + column_id: string + grantee: string + /** @enum {string} */ + privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' + } + RevokeColumnPrivilegesBody: { + column_id: string + grantee: string + /** @enum {string} */ + privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES' + } + PostgresColumn: { + table_id: number + schema: string + table: string + id: string + ordinal_position: number + name: string + default_value: Record + data_type: string + format: string + is_identity: boolean + identity_generation: Record + is_generated: boolean + is_nullable: boolean + is_updatable: boolean + is_unique: boolean + enums: string[] + check: string | null + comment: string | null + } + CreateColumnBody: { + tableId: number + name: string + type: string + check?: string + comment?: string + defaultValue?: Record + /** @enum {string} */ + defaultValueFormat?: 'expression' | 'literal' + /** @enum {string} */ + identityGeneration?: 'BY DEFAULT' | 'ALWAYS' + isIdentity?: boolean + isNullable?: boolean + isPrimaryKey?: boolean + isUnique?: boolean + } + UpdateColumnBody: { + dropDefault?: boolean + name?: string + type?: string + id?: number + check?: string + comment?: string + defaultValue?: Record + /** @enum {string} */ + defaultValueFormat?: 'expression' | 'literal' + /** @enum {string} */ + identityGeneration?: 'BY DEFAULT' | 'ALWAYS' + isIdentity?: boolean + isNullable?: boolean + isUnique?: boolean + } + PostgresExtension: { + name: string + schema: string | null + default_version: string + installed_version: string | null + comment: string | null + } + CreateExtensionBody: { + cascade: boolean + name: string + schema: string + version: string + } + PostgresForeignTable: { + id: number + schema: string + name: string + comment: string | null + columns?: components['schemas']['PostgresColumn'][] + } + PostgresFunction: { + id: number + schema: string + name: string + language: string + definition: string + complete_statement: string + argument_types: string + identity_argument_types: string + return_type: string + /** @enum {string} */ + behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' + security_definer: boolean + config_params: unknown + } + CreateFunctionBody: { + args: string[] + /** @enum {string} */ + behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' + config_params?: Record + definition: string + language: string + name: string + return_type: string + schema: string + security_definer: boolean + } + UpdateFunctionBody: { + id?: number + args?: string[] + /** @enum {string} */ + behavior?: 'VOLATILE' | 'STABLE' | 'IMMUTABLE' + config_params?: Record + definition?: string + language?: string + name?: string + return_type?: string + schema?: string + security_definer?: boolean + } + PostgresMaterializedView: { + id: number + schema: string + name: string + is_populated: boolean + comment: string | null + columns?: components['schemas']['PostgresColumn'][] + } + PostgresPolicy: { + id: number + schema: string + table: string + table_id: number + name: string + /** @enum {string} */ + action: 'PERMISSIVE' | 'RESTRICTIVE' + roles: string[] + /** @enum {string} */ + command: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL' + definition: string | null + check: string | null + } + CreatePolicyBody: { + name: string + table: string + schema?: string + definition?: string + check?: string + /** @enum {string} */ + action?: 'PERMISSIVE' | 'RESTRICTIVE' + /** @enum {string} */ + command?: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL' + roles?: string[] + } + UpdatePolicyBody: { + id?: number + name?: string + definition?: string + check?: string + roles?: string[] + } + Table: { + id: number + name: string + schema: string + } + PostgresPublication: { + id: number + name: string + owner: string + publish_insert: boolean + publish_update: boolean + publish_delete: boolean + publish_truncate: boolean + tables: components['schemas']['Table'][] | null + } + CreatePublicationBody: { + name: string + owner?: string + tables?: string[] | null + publish_insert?: boolean + publish_update?: boolean + publish_delete?: boolean + publish_truncate?: boolean + } + UpdatePublicationBody: { + id?: number + name?: string + owner?: string + tables?: string[] | null + publish_insert?: boolean + publish_update?: boolean + publish_delete?: boolean + publish_truncate?: boolean + } + RunQueryBody: { + query: string + } + FormatQueryBody: { + query: string + } + ValidateQueryBody: { + query: string + } + ValidateQueryResponse: { + valid: boolean + } + PostgresRole: { + id: number + name: string + is_superuser: boolean + can_create_db: boolean + can_create_role: boolean + inherit_role: boolean + can_login: boolean + is_replication_role: boolean + can_bypass_rls: boolean + active_connections: number + connection_limit: number + password: string + valid_until: string | null + config: string[] | null + } + CreateRoleBody: { + name: string + password?: string + inherit_role?: boolean + can_login?: boolean + is_superuser?: boolean + can_create_db?: boolean + can_create_role?: boolean + is_replication_role?: boolean + can_bypass_rls?: boolean + connection_limit?: number + member_of?: string[] + members?: string[] + admins?: string[] + valid_until?: string + config?: Record + } + UpdateRoleBody: { + name?: string + password?: string + inherit_role?: boolean + can_login?: boolean + is_superuser?: boolean + can_create_db?: boolean + can_create_role?: boolean + is_replication_role?: boolean + can_bypass_rls?: boolean + connection_limit?: number + valid_until?: string + config?: Record + } + PostgresSchema: { + id: number + name: string + owner: string + } + CreateSchemaBody: { + name: string + owner: string + } + UpdateSchemaBody: { + name?: string + owner?: string + } + SearchTableBody: { + name: string + schema: string + } + SearchColumnBody: { + name: string + schema: string + } + Column: { + id: number + name: string + schema: string + table_id: number + table: string + } + TablePrivilege: { + grantor: string + grantee: string + /** @enum {string} */ + privilege_type: + | 'ALL' + | 'SELECT' + | 'INSERT' + | 'UPDATE' + | 'DELETE' + | 'TRUNCATE' + | 'REFERENCES' + | 'TRIGGER' + is_grantable: boolean + } + PostgresTablePrivileges: { + schema: string + name: string + kind: string + privileges: components['schemas']['TablePrivilege'][] + } + GrantTablePrivilegesBody: { + is_grantable?: boolean + relation_id: number + grantee: string + /** @enum {string} */ + privilege_type: + | 'ALL' + | 'SELECT' + | 'INSERT' + | 'UPDATE' + | 'DELETE' + | 'TRUNCATE' + | 'REFERENCES' + | 'TRIGGER' + } + RevokeTablePrivilegesBody: { + relation_id: number + grantee: string + /** @enum {string} */ + privilege_type: + | 'ALL' + | 'SELECT' + | 'INSERT' + | 'UPDATE' + | 'DELETE' + | 'TRUNCATE' + | 'REFERENCES' + | 'TRIGGER' + } + PrimaryKey: { + schema: string + table_name: string + name: string + table_id: number + } + Relationship: { + id: number + constraint_name: string + source_schema: string + source_table_name: string + source_column_name: string + target_table_schema: string + target_table_name: string + target_column_name: string + } + PostgresTable: { + id: number + schema: string + name: string + rls_enabled: boolean + rls_forced: boolean + /** @enum {string} */ + replica_identity: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING' + bytes: number + size: string + live_rows_estimate: number + dead_rows_estimate: number + comment: string | null + columns?: components['schemas']['PostgresColumn'][] + primary_keys: components['schemas']['PrimaryKey'][] + relationships: components['schemas']['Relationship'][] + } + CreateTableBody: { + name: string + schema?: string + comment?: string + } + UpdateTableBody: { + id?: number + rls_enabled?: boolean + rls_forced?: boolean + /** @enum {string} */ + replica_identity?: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING' + replica_identity_index?: string + name?: string + schema?: string + comment?: string + } + PostgresTrigger: { + id: number + table_id: number + /** @enum {string} */ + enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' + name: string + table: string + schema: string + condition: string | null + /** @enum {string} */ + orientation: 'ROW' | 'STATEMENT' + /** @enum {string} */ + activation: 'AFTER' | 'BEFORE' + events: string[] + function_schema: string + function_name: string + function_args: string[] + } + CreateTriggerBody: { + /** @enum {string} */ + activation: 'AFTER' | 'BEFORE' + /** @enum {string} */ + enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' + events: ('INSERT' | 'UPDATE' | 'DELETE')[] + function_args: string[] + function_name: string + function_schema: string + name: string + /** @enum {string} */ + orientation: 'ROW' | 'STATEMENT' + schema: string + table: string + table_id?: number + } + UpdateTriggerBody: { + id?: number + /** @enum {string} */ + activation?: 'AFTER' | 'BEFORE' + /** @enum {string} */ + enabled_mode?: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED' + events?: ('INSERT' | 'UPDATE' | 'DELETE')[] + function_args?: string[] + function_name?: string + function_schema?: string + name?: string + /** @enum {string} */ + orientation?: 'ROW' | 'STATEMENT' + schema?: string + table?: string + table_id?: number + } + PostgresType: { + id: number + name: string + schema: string + format: string + enums: string[] + comment: string | null + } + PostgresView: { + id: number + schema: string + name: string + is_updatable: boolean + comment: string | null + columns?: components['schemas']['PostgresColumn'][] + } + AccessToken: { + created_at: string + id: number + token_alias: string + name: string + /** @enum {string} */ + scope?: 'V0' + } + CreateAccessTokenBody: { + name: string + /** @enum {string} */ + scope?: 'V0' + } + CreateAccessTokenResponse: { + created_at: string + id: number + token_alias: string + name: string + /** @enum {string} */ + scope?: 'V0' + token: string + } + SearchProfileBody: { + keywords: string + } + Profile: { + first_name: string + gotrue_id: string + id: number + last_name: string + username: string + } + SubscriptionStatisticsResponse: { + total_paid_projects: number + total_free_projects: number + total_active_free_projects: number + total_paused_free_projects: number + total_pro_projects: number + total_payg_projects: number + total_team_projects: number + total_enterprise_projects: number + } + PasswordCheckBody: { + password: string + } + PasswordCheckResponse: { + result: { + feedback?: { + warning?: string + suggestions?: string[] + } + score?: number + } + } + Permission: { + actions: ( + | 'analytics:Read' + | 'auth:Execute' + | 'billing:Read' + | 'billing:Write' + | 'write:Create' + | 'write:Delete' + | 'functions:Read' + | 'functions:Write' + | 'infra:Execute' + | 'read:Read' + | 'sql:Read:Select' + | 'sql:Write:Delete' + | 'sql:Write:Insert' + | 'sql:Write:Update' + | 'storage:Admin:Read' + | 'storage:Admin:Write' + | 'tenant:Sql:Admin:Read' + | 'tenant:Sql:Admin:Write' + | 'tenant:Sql:CreateTable' + | 'tenant:Sql:Write:Delete' + | 'tenant:Sql:Write:Insert' + | 'tenant:Sql:Query' + | 'tenant:Sql:Read:Select' + | 'tenant:Sql:Write:Update' + | 'write:Update' + )[] + condition: unknown + organization_id: number + resources: string[] + } + ProfileResponse: { + id: number + auth0_id: string + primary_email: string + username: string + first_name: string + last_name: string + mobile: string + is_alpha_user: boolean + gotrue_id: string + free_project_limit: number + disabled_features: ( + | 'organizations:create' + | 'organizations:delete' + | 'organization_members:create' + | 'organization_members:delete' + | 'projects:create' + | 'projects:transfer' + | 'project_auth:all' + | 'project_storage:all' + | 'project_edge_function:all' + | 'profile:update' + | 'billing:account_data' + | 'billing:credits' + | 'billing:invoices' + | 'billing:payment_methods' + | 'realtime:all' + )[] + } + UpdateProfileBody: { + first_name: string + last_name: string + } + /** @enum {string} */ + DbInstanceSize: + | 'nano' + | 'micro' + | 'small' + | 'medium' + | 'large' + | 'xlarge' + | '2xlarge' + | '4xlarge' + | '8xlarge' + | '12xlarge' + | '16xlarge' + ProjectInfo: { + infra_compute_size?: components['schemas']['DbInstanceSize'] + cloud_provider: string + id: number + inserted_at: string + name: string + organization_id: number + ref: string + region: string + status: string + subscription_id: string + is_branch_enabled: boolean + is_read_replicas_enabled: boolean + preview_branch_refs: string[] + disk_volume_size_gb?: number + } + GetProjectByFlyExtensionIdResponse: { + ref: string + } + /** @enum {string} */ + DesiredInstanceSize: + | 'micro' + | 'small' + | 'medium' + | 'large' + | 'xlarge' + | '2xlarge' + | '4xlarge' + | '8xlarge' + | '12xlarge' + | '16xlarge' + AmiSearchOptions: { + search_tags?: Record + } + CustomSupabaseInternalRequests: { + ami: components['schemas']['AmiSearchOptions'] + } + CreateProjectBody: { + /** @deprecated */ + kps_enabled?: boolean + desired_instance_size?: components['schemas']['DesiredInstanceSize'] + cloud_provider: string + org_id: number + name: string + db_pass: string + db_region: string + db_pricing_tier_id?: string + db_sql?: string + auth_site_url?: string + vercel_configuration_id?: string + custom_supabase_internal_requests?: components['schemas']['CustomSupabaseInternalRequests'] + } + CreateProjectResponse: { + infra_compute_size?: components['schemas']['DbInstanceSize'] + cloud_provider: string + id: number + inserted_at: string + name: string + organization_id: number + ref: string + region: string + status: string + subscription_id: string + is_branch_enabled: boolean + is_read_replicas_enabled: boolean + preview_branch_refs: string[] + disk_volume_size_gb?: number + endpoint: string + anon_key: string + service_key: string + } + GetUserContentObject: { + owner: { + id?: number + username?: string + } + updated_by: { + id?: number + username?: string + } + id: string + inserted_at: string + updated_at: string + type: Record + visibility: Record + name: string + description?: string + project_id: number + owner_id: number + last_updated_by: number + } + GetUserContentResponse: { + data: components['schemas']['GetUserContentObject'][] + } + CreateContentParams: { + id: string + name: string + description: string + /** @enum {string} */ + type: 'sql' | 'report' | 'log_sql' + /** @enum {string} */ + visibility: 'user' | 'project' | 'org' | 'public' + content?: Record + owner_id?: number + } + UserContentObject: { + id: string + inserted_at: string + updated_at: string + type: Record + visibility: Record + name: string + description?: string + project_id: number + owner_id: number + last_updated_by: number + } + UpsertContentParams: { + id: string + name: string + description: string + /** @enum {string} */ + type: 'sql' | 'report' | 'log_sql' + /** @enum {string} */ + visibility: 'user' | 'project' | 'org' | 'public' + content?: Record + owner_id?: number + project_id: number + } + UpdateContentParams: { + id?: string + name?: string + description?: string + /** @enum {string} */ + type?: 'sql' | 'report' | 'log_sql' + /** @enum {string} */ + visibility?: 'user' | 'project' | 'org' | 'public' + content?: Record + owner_id?: number + } + BulkDeleteUserContentResponse: { + id: string + } + DatabaseDetailResponse: { + /** @enum {string} */ + status: + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'COMING_UP' + | 'GOING_DOWN' + | 'INIT_FAILED' + | 'REMOVED' + | 'RESTORING' + | 'UNKNOWN' + | 'UPGRADING' + | 'INIT_READ_REPLICA' + | 'INIT_READ_REPLICA_FAILED' + /** @enum {string} */ + cloud_provider: 'AWS' | 'FLY' + db_port: number + db_name: string + db_user: string + restUrl: string + db_host: string + connectionString: string + identifier: string + inserted_at: string + size: string + region: string + } + DatabaseStatusResponse: { + /** @enum {string} */ + status: + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'COMING_UP' + | 'GOING_DOWN' + | 'INIT_FAILED' + | 'REMOVED' + | 'RESTORING' + | 'UNKNOWN' + | 'UPGRADING' + | 'INIT_READ_REPLICA' + | 'INIT_READ_REPLICA_FAILED' + identifier: string + } + UpdatePasswordBody: { + password: string + } + LoadBalancerDatabase: { + identifier: string + /** @enum {string} */ + type: 'PRIMARY' | 'READ_REPLICA' + status: string + } + LoadBalancerDetailResponse: { + endpoint: string + databases: components['schemas']['LoadBalancerDatabase'][] + } + Buffer: Record + ResizeBody: { + volume_size_gb: number + } + ServiceVersions: { + gotrue: string + postgrest: string + 'supabase-postgres': string + } + ProjectDetailResponse: { + infra_compute_size?: components['schemas']['DbInstanceSize'] + cloud_provider: string + db_host: string + id: number + inserted_at: string + name: string + organization_id: number + ref: string + region: string + /** @enum {string} */ + status: + | 'INACTIVE' + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'COMING_UP' + | 'UNKNOWN' + | 'GOING_DOWN' + | 'INIT_FAILED' + | 'REMOVED' + | 'RESTORING' + | 'UPGRADING' + subscription_id: string + connectionString: string + kpsVersion?: string + dbVersion?: string + restUrl: string + serviceVersions?: components['schemas']['ServiceVersions'] + volumeSizeGb?: number + maxDatabasePreprovisionGb?: number + lastDatabaseResizeAt?: string + is_branch_enabled: boolean + parent_project_ref?: string + is_read_replicas_enabled: boolean + v2MaintenanceWindow: { + start?: string + end?: string + } + } + ProjectRefResponse: { + id: number + ref: string + name: string + } + UpdateProjectBody: { + name: string + } + BackupId: { + id: number + } + RestoreProjectInfo: { + id: number + status: string + organization_id: number + subscription_id: string + region: string + cloud_provider: string + back_ups: components['schemas']['BackupId'][] + } + RestartServiceRequest: { + services: ( + | 'adminapi' + | 'api-gateway' + | 'envoy' + | 'functions' + | 'gotrue' + | 'kong' + | 'pgbouncer' + | 'pgsodium' + | 'postgresql' + | 'postgrest' + | 'realtime' + | 'storage' + | 'walg' + | 'autoshutdown' + )[] + source_notification_id?: string + region: string + } + RestartServicesBody: { + restartRequest: components['schemas']['RestartServiceRequest'] + } + ProjectAppConfigResponse: { + db_schema: string + endpoint: string + } + ProjectServiceApiKeyResponse: { + api_key: string + name: string + tags: string + } + ProjectSettingsResponse: { + name: string + ref: string + status: string + inserted_at: string + db_dns_name: string + db_host: string + db_name: string + db_user: string + db_port: string + ssl_enforced: boolean + cloud_provider: string + region: string + app_config?: components['schemas']['ProjectAppConfigResponse'] + jwt_secret?: string + service_api_keys?: components['schemas']['ProjectServiceApiKeyResponse'][] + /** @enum {string|null} */ + db_ip_addr_config: 'legacy' | 'static-ipv4' | 'concurrent-ipv6' | 'ipv6' | null + } + TransferProjectBody: { + target_organization_slug: string + } + PreviewTransferInfo: { + key: string + message: string + } + MemberExceedingFreeProjectLimit: { + name: string + limit: number + } + PreviewTransferInvoiceItem: { + description: string + quantity: number + amount: number + } + PreviewProjectTransferResponse: { + source_subscription_plan: components['schemas']['BillingPlanId'] + target_subscription_plan: components['schemas']['BillingPlanId'] + valid: boolean + warnings: components['schemas']['PreviewTransferInfo'][] + errors: components['schemas']['PreviewTransferInfo'][] + members_exceeding_free_project_limit: components['schemas']['MemberExceedingFreeProjectLimit'][] + has_permissions_on_source_organization: boolean + has_access_to_target_organization: boolean + source_project_eligible: boolean + target_organization_eligible: boolean | null + target_organization_has_free_project_slots: boolean | null + credits_on_source_organization: number + costs_on_target_organization: number + charge_on_target_organization: number + source_invoice_items: components['schemas']['PreviewTransferInvoiceItem'][] + target_invoice_items: components['schemas']['PreviewTransferInvoiceItem'][] + } + AnalyticsResponse: { + error?: OneOf< + [ + { + code?: number + errors?: { + domain?: string + location?: string + locationType?: string + message?: string + reason?: string + }[] + message?: string + status?: string + }, + string, + ] + > + result?: Record[] + } + LFUser: { + token: string + metadata: { + project_ref?: string + } + } + LFSource: { + token: string + id: number + name: string + } + LFEndpoint: { + token: string + id: number + name: string + description: string + query: string + language: Record + sandboxable: boolean | null + cache_duration_seconds: number + proactive_requerying_seconds: number + max_limit: number + enable_auth: number + } + PgbouncerConfigResponse: { + default_pool_size?: number + ignore_startup_parameters?: string + max_client_conn?: number + /** @enum {string} */ + pool_mode?: 'transaction' | 'session' | 'statement' + inserted_at: string + db_dns_name: string + db_user: string + db_host: string + db_port: number + db_name: string + ssl_enforced: boolean + pgbouncer_enabled: boolean + supavisor_enabled: boolean + /** @enum {string} */ + pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING' + connectionString: string + } + PgbouncerStatusResponse: { + active: boolean + } + UpdatePgbouncerConfigBody: { + default_pool_size?: number + max_client_conn?: number | null + ignore_startup_parameters: string + pgbouncer_enabled: boolean + /** @enum {string} */ + pool_mode: 'transaction' | 'session' | 'statement' + } + UpdatePoolingConfigResponse: { + default_pool_size?: number + max_client_conn?: number | null + ignore_startup_parameters: string + pgbouncer_enabled: boolean + /** @enum {string} */ + pool_mode: 'transaction' | 'session' | 'statement' + /** @enum {string} */ + pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING' + } + PostgrestConfigResponse: { + db_schema: string + db_anon_role: string + role_claim_key: string + jwt_secret: string + max_rows: number + db_extra_search_path: string + } + UpdatePostgrestConfigBody: { + max_rows?: number + db_pool?: number + db_extra_search_path?: string + db_schema?: string + } + V1PostgrestConfigResponse: { + max_rows: number + /** @description If `null`, the value is automatically configured based on compute size. */ + db_pool: number | null + db_schema: string + db_extra_search_path: string + } + PostgresConfigResponse: { + statement_timeout?: string + effective_cache_size?: string + maintenance_work_mem?: string + max_connections?: number + max_locks_per_transaction?: number + max_parallel_maintenance_workers?: number + max_parallel_workers?: number + max_parallel_workers_per_gather?: number + max_standby_archive_delay?: string + max_standby_streaming_delay?: string + max_worker_processes?: number + shared_buffers?: string + work_mem?: string + /** @enum {string} */ + session_replication_role?: 'origin' | 'replica' | 'local' + } + UpdatePostgresConfigBody: { + statement_timeout?: string + effective_cache_size?: string + maintenance_work_mem?: string + max_connections?: number + max_locks_per_transaction?: number + max_parallel_maintenance_workers?: number + max_parallel_workers?: number + max_parallel_workers_per_gather?: number + max_standby_archive_delay?: string + max_standby_streaming_delay?: string + max_worker_processes?: number + shared_buffers?: string + work_mem?: string + /** @enum {string} */ + session_replication_role?: 'origin' | 'replica' | 'local' + } + UpdateSecretsConfigBody: { + jwt_secret: string + change_tracking_id: string + } + UpdateSecretsResponse: { + message: string + } + StorageConfigResponse: { + isFreeTier: boolean + fileSizeLimit: number + } + UpdateStorageConfigBody: { + fileSizeLimit: number + } + UpdateStorageConfigResponse: { + fileSizeLimit: number + } + SupavisorConfigResponse: { + identifier: string + /** @enum {string} */ + database_type: 'PRIMARY' | 'READ_REPLICA' + is_using_scram_auth: boolean + db_user: string + db_host: string + db_port: number + db_name: string + connectionString: string + default_pool_size: number | null + max_client_conn: number | null + /** @enum {string|null} */ + pool_mode: 'transaction' | 'session' | 'statement' | null + } + UpdateSupavisorConfigBody: { + default_pool_size?: number + /** @enum {string} */ + pool_mode: 'transaction' | 'session' | 'statement' + } + UpdateSupavisorConfigResponse: { + default_pool_size?: number + /** @enum {string} */ + pool_mode: 'transaction' | 'session' | 'statement' + } + AvailableAddonResponse: { + type: components['schemas']['ProjectAddonType'] + name: string + variants: components['schemas']['ProjectAddonVariantResponse'][] + } + ProjectAddonsResponse: { + ref: string + selected_addons: components['schemas']['SelectedAddonResponse'][] + available_addons: components['schemas']['AvailableAddonResponse'][] + } + UpdateAddonBody: { + addon_variant: components['schemas']['AddonVariantId'] + addon_type: components['schemas']['ProjectAddonType'] + } + ServiceApiKey: { + api_key_encrypted?: string + tags: string + name: string + } + AutoApiService: { + protocol: string + endpoint: string + restUrl: string + project: { + ref?: string + } + defaultApiKey: string + serviceApiKey: string + id: number + name: string + app_config: Record + app: { + id?: number + name?: string + } + service_api_keys: components['schemas']['ServiceApiKey'][] + } + ApiResponse: { + autoApiService: components['schemas']['AutoApiService'] + } + JwtSecretUpdateStatus: { + jwtSecretUpdateStatus: { + change_tracking_id?: string + /** @enum {number} */ + error?: 0 | 1 | 2 | 3 | 4 | 5 + /** @enum {number} */ + progress?: 0 | 1 | 2 | 3 | 4 | 5 + /** @enum {number} */ + status?: 0 | 1 | 2 + } + } + ServiceApiKeyResponse: { + api_key_encrypted?: string + tags: string + name: string + api_key?: string + } + ServiceResponse: { + service_api_keys: components['schemas']['ServiceApiKeyResponse'][] + id: number + name: string + app_config: Record + app: { + id?: number + name?: string + } + } + ProjectResponse: { + jwt_secret: string + services?: components['schemas']['ServiceResponse'][] + id: number + name: string + ref: string + status: string + inserted_at: string + db_dns_name: string + db_host: string + db_name: string + db_user: string + db_port: string + ssl_enforced: boolean + cloud_provider: string + region: string + } + SettingsResponse: { + project: components['schemas']['ProjectResponse'] + services: components['schemas']['ServiceResponse'][] + } + StorageBucket: { + id: string + name: string + owner: string + created_at: string + updated_at: string + public: boolean + } + UpdateStorageBucketBody: { + public: boolean + file_size_limit: number + allowed_mime_types: string[] + } + CreateStorageBucketBody: { + id: string + public: boolean + file_size_limit: number + allowed_mime_types: string[] + } + StorageObjectSortBy: { + column?: string + order?: string + } + StorageObjectSearchOptions: { + limit?: number + offset?: number + sortBy?: components['schemas']['StorageObjectSortBy'] + search?: string + } + GetObjectsBody: { + path: string + options: components['schemas']['StorageObjectSearchOptions'] + } + StorageObject: { + name: string + bucket_id: string + owner: string + id: string + updated_at: string + created_at: string + last_accessed_at: string + metadata: Record + buckets: components['schemas']['StorageBucket'] + } + StorageObjectTransformOptions: { + width?: number + height?: number + /** @enum {string} */ + resize?: 'cover' | 'contain' | 'fill' + quality?: number + /** @enum {string} */ + format?: 'origin' + } + PublicUrlOptions: { + transform?: components['schemas']['StorageObjectTransformOptions'] + download?: boolean + downloadName?: string + } + GetPublicUrlBody: { + path: string + options?: components['schemas']['PublicUrlOptions'] + } + PublicUrlResponse: { + publicUrl: string + } + DownloadObjectOptions: { + transform?: components['schemas']['StorageObjectTransformOptions'] + download?: boolean + downloadName?: string + } + DownloadObjectBody: { + path: string + options?: components['schemas']['DownloadObjectOptions'] + } + SignedUrlOptions: { + transform?: components['schemas']['StorageObjectTransformOptions'] + download?: boolean + downloadName?: string + } + GetSignedUrlBody: { + path: string + expiresIn: number + options?: components['schemas']['SignedUrlOptions'] + } + SignedUrlResponse: { + signedUrl: string + } + SignedUrlsOptions: { + download?: boolean + downloadName?: string + } + GetSignedUrlsBody: { + path: string[] + expiresIn: number + options?: components['schemas']['SignedUrlsOptions'] + } + SignedUrlsResponse: { + signedUrl: string + error: string | null + path: string | null + } + CopyObjectBody: { + from: string + to: string + } + CopyObjectResponse: { + path: string + } + MoveObjectBody: { + from: string + to: string + } + DeleteObjectsBody: { + paths: string[] + } + GetStorageCredential: { + id: string + description: string + created_at: string + } + GetStorageCredentialsResponse: { + data: components['schemas']['GetStorageCredential'][] + } + CreateStorageCredentialBody: { + description: string + } + CreateStorageCredentialResponse: { + id: string + access_key: string + secret_key: string + description: string + } + Invoice: { + id: string + invoice_pdf: string + subscription: string + subtotal: number + number: string + period_end: number + status: string + } + OverdueInvoiceCount: { + organization_id: number + overdue_invoice_count: number + } + GoogleAnalyticBody: { + language?: string + screen_resolution?: string + session_id: string + } + TelemetryEventBody: { + category: string + action: string + label?: Record + value?: string + page_referrer?: string + page_title?: string + page_location?: string + ga?: components['schemas']['GoogleAnalyticBody'] + } + IdentifyUserBody: { + id: number + gotrue_id: string + mobile?: string + primary_email: string + username?: string + first_name?: string + last_name?: string + is_alpha_user?: boolean + free_project_limit?: number + auth0_id?: string + } + TelemetryIdentifyBody: { + user: components['schemas']['IdentifyUserBody'] + ga?: components['schemas']['GoogleAnalyticBody'] + } + TelemetryPageBody: { + referrer: string + title: string + route?: string + ga?: components['schemas']['GoogleAnalyticBody'] + } + PageBody: { + path: string + location: string + referrer?: string + title?: string + } + TelemetryActivityBody: { + activity: string + source: string + projectRef?: string + orgSlug?: string + data?: Record + page: components['schemas']['PageBody'] + } + TelemetryPageviewBody: { + projectRef?: string + orgSlug?: string + referrer: string + title: string + path: string + location: string + } + CreateVercelEnvironmentVariableBody: { + key: string + target: string[] + type: string + value: string + } + GetUserOrganizationIntegrationResponse: { + id: string + inserted_at: string + updated_at: string + metadata: Record + integration: { + name?: string + } + added_by: { + username?: string + primary_email?: string + } + organization: { + slug?: string + } + } + ProjectIntegrationConnection: { + id: string + inserted_at: string + updated_at: string + organization_integration_id: string + supabase_project_ref: string + added_by: { + username?: string + primary_email?: string + } + } + GetOrganizationIntegrationResponse: { + id: string + inserted_at: string + updated_at: string + metadata: Record + integration: { + name?: string + } + added_by: { + username?: string + primary_email?: string + } + organization: { + slug?: string + } + connections: components['schemas']['ProjectIntegrationConnection'][] + } + CreateVercelIntegrationBody: { + code: string + configuration_id: string + organization_slug: string + metadata: Record + source: string + teamId?: string + } + VercelProjectDeployHooks: { + createdAt?: number + id: string + name: string + ref: string + url: string + } + VercelProjectLink: { + type?: string + deployHooks: components['schemas']['VercelProjectDeployHooks'][] + gitCredentialId?: string + productionBranch?: string + } + IntegrationVercelProject: { + id: string + name: string + framework?: string | null + link?: components['schemas']['VercelProjectLink'] + } + GetVercelProjectsResponse: { + projects: components['schemas']['IntegrationVercelProject'][] + pagination: { + count?: number + next?: number | null + prev?: number | null + } + } + GetVercelConnections: { + id: string + inserted_at: string + updated_at: string + organization_integration_id: string + supabase_project_ref: string + foreign_project_id: string + metadata: Record + } + IntegrationConnectionVercel: { + foreign_project_id: string + supabase_project_ref: string + metadata: Record + } + CreateVercelConnectionsBody: { + organization_integration_id: string + connection: components['schemas']['IntegrationConnectionVercel'] + } + SyncVercelEnvError: { + message: string + } + CreateVercelConnectionResponse: { + id: string + env_sync_error?: components['schemas']['SyncVercelEnvError'] + } + UpdateVercelConnectionsBody: { + metadata: Record + } + DeleteVercelConnectionResponse: { + id: string + } + GitHubAuthorization: { + id: number + user_id: number + sender_id: number + } + CreateGitHubAuthorizationBody: { + code: string + } + ListGitHubConnectionsProject: { + id: number + ref: string + name: string + } + ListGitHubConnectionsRepository: { + id: number + name: string + } + ListGitHubConnectionsUser: { + id: number + username: string + primary_email: string | null + } + ListGitHubConnectionsConnection: { + id: number + inserted_at: string + updated_at: string + installation_id: number + project: components['schemas']['ListGitHubConnectionsProject'] + repository: components['schemas']['ListGitHubConnectionsRepository'] + user: components['schemas']['ListGitHubConnectionsUser'] | null + workdir: string + } + ListGitHubConnectionsResponse: { + connections: components['schemas']['ListGitHubConnectionsConnection'][] + } + CreateGitHubConnectionsBody: { + project_ref: string + installation_id: number + repository_id: number + } + UpdateGitHubConnectionsBody: { + workdir?: string + supabase_changes_only?: boolean + } + CreateCliLoginSessionBody: { + session_id: string + public_key: string + token_name?: string + } + V1UpdateFunctionBody: { + name?: string + body?: string + verify_jwt?: boolean + } + FunctionResponse: { + id: string + slug: string + name: string + /** @enum {string} */ + status: 'ACTIVE' | 'REMOVED' | 'THROTTLED' + version: number + created_at: number + updated_at: number + verify_jwt?: boolean + import_map?: boolean + entrypoint_path?: string + import_map_path?: string + } + V1CreateFunctionBody: { + slug: string + name: string + body: string + verify_jwt?: boolean + } + SecretResponse: { + name: string + value: string + } + CreateSecretBody: { + /** + * @description Secret name must not start with the SUPABASE_ prefix. + * @example string + */ + name: string + value: string + } + HealthResponse: { + healthy: boolean + } + ReportStatusBody: { + /** @enum {string} */ + status: + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'COMING_UP' + | 'GOING_DOWN' + | 'INIT_FAILED' + | 'REMOVED' + | 'RESTORING' + | 'UNKNOWN' + | 'UPGRADING' + | 'INIT_READ_REPLICA' + | 'INIT_READ_REPLICA_FAILED' + reportingToken: string + databaseIdentifier: string + } + EventBody: { + reportingToken: string + eventType: string + message: string + } + CredentialsRequestBody: { + projectToken: string + } + CredentialsResponseBody: { + access_key_id: string + secret_access_key: string + session_token: string + /** Format: date-time */ + expiry_time: string + } + UpdateAddonAdminBody: { + addon_variant: components['schemas']['AddonVariantId'] + addon_type: components['schemas']['ProjectAddonType'] + /** @enum {string} */ + proration_behaviour?: 'prorate_and_invoice_end_of_cycle' | 'prorate_and_invoice_now' + price_id?: string + } + SystemCreateProjectBody: { + /** @description Database password */ + db_pass: string + /** @description Name of your project, should not contain dots */ + name: string + /** @description Slug of your organization */ + organization_id: string + /** + * @description Subscription plan + * @example free + * @enum {string} + */ + plan: 'free' | 'pro' + /** + * @description Region you want your server to reside in + * @example us-east-1 + * @enum {string} + */ + region: + | 'us-east-1' + | 'us-west-1' + | 'us-west-2' + | 'ap-east-1' + | 'ap-southeast-1' + | 'ap-northeast-1' + | 'ap-northeast-2' + | 'ap-southeast-2' + | 'eu-west-1' + | 'eu-west-2' + | 'eu-west-3' + | 'eu-central-1' + | 'ca-central-1' + | 'ap-south-1' + | 'sa-east-1' + jwt_secret: string + anon_key: string + service_key: string + api_key_supabase: string + db_pass_supabase: string + } + SystemDatabaseResponse: { + /** @description Database host */ + host: string + /** @description Database version */ + version: string + } + SystemProjectResponse: { + /** @description Id of your project */ + id: string + /** @description Slug of your organization */ + organization_id: string + /** @description Name of your project */ + name: string + /** + * @description Region of your project + * @example us-east-1 + */ + region: string + /** + * @description Creation timestamp + * @example 2023-03-29T16:32:59Z + */ + created_at: string + database?: components['schemas']['SystemDatabaseResponse'] + } + UpdateSubscriptionV2AdminBody: { + payment_method?: string + /** @enum {string} */ + tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise' + price_id?: string + skip_free_plan_validations?: boolean + } + RestrictionData: { + grace_period_end?: string + /** @enum {string} */ + restrictions?: 'drop_requests_402' + violations?: ( + | 'exceed_db_size_quota' + | 'exceed_egress_quota' + | 'exceed_edge_functions_count_quota' + | 'exceed_edge_functions_invocations_quota' + | 'exceed_monthly_active_users_quota' + | 'exceed_realtime_connection_count_quota' + | 'exceed_realtime_message_count_quota' + | 'exceed_storage_size_quota' + | 'overdue_payment' + )[] + } + UpdateRestrictionsBody: { + /** @enum {string} */ + restriction_status: 'grace_period' | 'grace_period_over' | 'null' | 'restricted' + restriction_data?: components['schemas']['RestrictionData'] + no_notification?: boolean + } + UpdateRestrictionsResponse: { + slug: string + /** @enum {string} */ + restriction_status?: 'grace_period' | 'grace_period_over' | 'null' | 'restricted' + restriction_data?: components['schemas']['RestrictionData'] + message?: string + } + CreateAwsPartnerOrganizationBody: { + primary_email: string + name: string + } + AwsPartnerOrganizationResponse: { + id: number + slug: string + name: string + } + GetMetricsBody: { + /** @enum {string} */ + metric: 'user_queries' + /** @enum {string} */ + interval: '1d' | '3d' | '7d' + project_refs: string[] + region: string + } + ProjectMetric: { + project_ref: string + metric: string + value: number + } + GetMetricsResponse: { + metrics: components['schemas']['ProjectMetric'][] + } + BranchDetailResponse: { + db_port: number + ref: string + postgres_version: string + /** @enum {string} */ + status: + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'COMING_UP' + | 'GOING_DOWN' + | 'INACTIVE' + | 'INIT_FAILED' + | 'REMOVED' + | 'RESTORING' + | 'UNKNOWN' + | 'UPGRADING' + | 'PAUSING' + db_host: string + db_user?: string + db_pass?: string + jwt_secret?: string + } + UpdateBranchBody: { + branch_name?: string + git_branch?: string + reset_on_push?: boolean + persistent?: boolean + } + BranchResponse: { + id: string + name: string + project_ref: string + parent_project_ref: string + is_default: boolean + git_branch?: string + pr_number?: number + reset_on_push: boolean + persistent: boolean + /** @enum {string} */ + status: + | 'CREATING_PROJECT' + | 'RUNNING_MIGRATIONS' + | 'MIGRATIONS_PASSED' + | 'MIGRATIONS_FAILED' + | 'FUNCTIONS_DEPLOYED' + | 'FUNCTIONS_FAILED' + created_at: string + updated_at: string + } + BranchDeleteResponse: { + message: string + } + BranchResetResponse: { + message: string + } + V1DatabaseResponse: { + /** @description Database host */ + host: string + /** @description Database version */ + version: string + } + V1ProjectResponse: { + /** @description Id of your project */ + id: string + /** @description Slug of your organization */ + organization_id: string + /** @description Name of your project */ + name: string + /** + * @description Region of your project + * @example us-east-1 + */ + region: string + /** + * @description Creation timestamp + * @example 2023-03-29T16:32:59Z + */ + created_at: string + database?: components['schemas']['V1DatabaseResponse'] + /** @enum {string} */ + status: + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'COMING_UP' + | 'GOING_DOWN' + | 'INACTIVE' + | 'INIT_FAILED' + | 'REMOVED' + | 'RESTORING' + | 'UNKNOWN' + | 'UPGRADING' + | 'PAUSING' + } + V1CreateProjectBody: { + /** @description Database password */ + db_pass: string + /** @description Name of your project, should not contain dots */ + name: string + /** @description Slug of your organization */ + organization_id: string + /** + * @deprecated + * @description Subscription plan is now set on organization level and is ignored in this request + * @example free + * @enum {string} + */ + plan?: 'free' | 'pro' + /** + * @description Region you want your server to reside in + * @example us-east-1 + * @enum {string} + */ + region: + | 'us-east-1' + | 'us-west-1' + | 'us-west-2' + | 'ap-east-1' + | 'ap-southeast-1' + | 'ap-northeast-1' + | 'ap-northeast-2' + | 'ap-southeast-2' + | 'eu-west-1' + | 'eu-west-2' + | 'eu-west-3' + | 'eu-central-1' + | 'ca-central-1' + | 'ap-south-1' + | 'sa-east-1' + /** @deprecated */ + kps_enabled?: boolean + desired_instance_size?: components['schemas']['DesiredInstanceSize'] + /** + * @description Template URL used to create the project from the CLI. + * @example https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone + */ + template_url?: string + } + ApiKeyResponse: { + name: string + api_key: string + } + CreateBranchBody: { + branch_name: string + git_branch?: string + region?: string + } + UpdateCustomHostnameResponse: { + /** @enum {string} */ + status: + | '1_not_started' + | '2_initiated' + | '3_challenge_verified' + | '4_origin_setup_completed' + | '5_services_reconfigured' + custom_hostname: string + data: Record + } + UpdateCustomHostnameBody: { + custom_hostname: string + } + NetworkBanResponse: { + banned_ipv4_addresses: string[] + } + RemoveNetworkBanRequest: { + ipv4_addresses: string[] + } + NetworkRestrictionsRequest: { + dbAllowedCidrs?: string[] + dbAllowedCidrsV6?: string[] + } + NetworkRestrictionsResponse: { + /** @enum {string} */ + entitlement: 'disallowed' | 'allowed' + config: components['schemas']['NetworkRestrictionsRequest'] + old_config?: components['schemas']['NetworkRestrictionsRequest'] + /** @enum {string} */ + status: 'stored' | 'applied' + } + PgsodiumConfigResponse: { + root_key: string + } + UpdatePgsodiumConfigBody: { + root_key: string + } + PostgrestConfigWithJWTSecretResponse: { + max_rows: number + /** @description If `null`, the value is automatically configured based on compute size. */ + db_pool: number | null + db_schema: string + db_extra_search_path: string + jwt_secret?: string + } + V1ProjectRefResponse: { + id: number + ref: string + name: string + } + SslEnforcements: { + database: boolean + } + SslEnforcementResponse: { + currentConfig: components['schemas']['SslEnforcements'] + appliedSuccessfully: boolean + } + SslEnforcementRequest: { + requestedConfig: components['schemas']['SslEnforcements'] + } + TypescriptResponse: { + types: string + } + VanitySubdomainConfigResponse: { + /** @enum {string} */ + status: 'not-used' | 'custom-domain-used' | 'active' + custom_domain?: string + } + VanitySubdomainBody: { + vanity_subdomain: string + } + SubdomainAvailabilityResponse: { + available: boolean + } + ActivateVanitySubdomainResponse: { + custom_domain: string + } + UpgradeDatabaseBody: { + target_version: number + } + ProjectUpgradeInitiateResponse: { + tracking_id: string + } + ProjectVersion: { + postgres_version: number + app_version: string + } + ProjectUpgradeEligibilityResponse: { + eligible: boolean + current_app_version: string + latest_app_version: string + target_upgrade_versions: components['schemas']['ProjectVersion'][] + potential_breaking_changes: string[] + duration_estimate_hours: number + legacy_auth_custom_roles: string[] + extension_dependent_objects: string[] + } + DatabaseUpgradeStatus: { + initiated_at: string + target_version: number + /** @enum {string} */ + error?: + | '1_upgraded_instance_launch_failed' + | '2_volume_detachchment_from_upgraded_instance_failed' + | '3_volume_attachment_to_original_instance_failed' + | '4_data_upgrade_initiation_failed' + | '5_data_upgrade_completion_failed' + | '6_volume_detachchment_from_original_instance_failed' + | '7_volume_attachment_to_upgraded_instance_failed' + | '8_upgrade_completion_failed' + /** @enum {string} */ + progress?: + | '0_requested' + | '1_started' + | '2_launched_upgraded_instance' + | '3_detached_volume_from_upgraded_instance' + | '4_attached_volume_to_original_instance' + | '5_initiated_data_upgrade' + | '6_completed_data_upgrade' + | '7_detached_volume_from_original_instance' + | '8_attached_volume_to_upgraded_instance' + | '9_completed_upgrade' + /** @enum {number} */ + status: 0 | 1 | 2 + } + DatabaseUpgradeStatusResponse: { + databaseUpgradeStatus: components['schemas']['DatabaseUpgradeStatus'] | null + } + ReadOnlyStatusResponse: { + enabled: boolean + override_enabled: boolean + override_active_until: string + } + SetUpReadReplicaBody: { + /** + * @description Region you want your read replica to reside in + * @example us-east-1 + * @enum {string} + */ + read_replica_region: + | 'us-east-1' + | 'us-west-1' + | 'us-west-2' + | 'ap-east-1' + | 'ap-southeast-1' + | 'ap-northeast-1' + | 'ap-northeast-2' + | 'ap-southeast-2' + | 'eu-west-1' + | 'eu-west-2' + | 'eu-west-3' + | 'eu-central-1' + | 'ca-central-1' + | 'ap-south-1' + | 'sa-east-1' + } + RemoveReadReplicaBody: { + database_identifier: string + } + AuthHealthResponse: { + name: string + version: string + description: string + } + RealtimeHealthResponse: { + healthy: boolean + db_connected: boolean + connected_cluster: number + } + V1ServiceHealthResponse: { + info?: + | components['schemas']['AuthHealthResponse'] + | components['schemas']['RealtimeHealthResponse'] + /** @enum {string} */ + name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage' + healthy: boolean + /** @enum {string} */ + status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY' + error?: string + } + V1PgbouncerConfigResponse: { + /** @enum {string} */ + pool_mode?: 'transaction' | 'session' | 'statement' + default_pool_size?: number + ignore_startup_parameters?: string + max_client_conn?: number + connection_string?: string + } + AuthConfigResponse: { + disable_signup: boolean | null + external_anonymous_users_enabled: boolean | null + external_apple_additional_client_ids: string | null + external_apple_client_id: string | null + external_apple_enabled: boolean | null + external_apple_secret: string | null + external_azure_client_id: string | null + external_azure_enabled: boolean | null + external_azure_secret: string | null + external_azure_url: string | null + external_bitbucket_client_id: string | null + external_bitbucket_enabled: boolean | null + external_bitbucket_secret: string | null + external_discord_client_id: string | null + external_discord_enabled: boolean | null + external_discord_secret: string | null + external_email_enabled: boolean | null + external_facebook_client_id: string | null + external_facebook_enabled: boolean | null + external_facebook_secret: string | null + external_figma_client_id: string | null + external_figma_enabled: boolean | null + external_figma_secret: string | null + external_github_client_id: string | null + external_github_enabled: boolean | null + external_github_secret: string | null + external_gitlab_client_id: string | null + external_gitlab_enabled: boolean | null + external_gitlab_secret: string | null + external_gitlab_url: string | null + external_google_additional_client_ids: string | null + external_google_client_id: string | null + external_google_enabled: boolean | null + external_google_secret: string | null + external_google_skip_nonce_check: boolean | null + external_kakao_client_id: string | null + external_kakao_enabled: boolean | null + external_kakao_secret: string | null + external_keycloak_client_id: string | null + external_keycloak_enabled: boolean | null + external_keycloak_secret: string | null + external_keycloak_url: string | null + external_linkedin_oidc_client_id: string | null + external_linkedin_oidc_enabled: boolean | null + external_linkedin_oidc_secret: string | null + external_notion_client_id: string | null + external_notion_enabled: boolean | null + external_notion_secret: string | null + external_phone_enabled: boolean | null + external_slack_client_id: string | null + external_slack_enabled: boolean | null + external_slack_secret: string | null + external_spotify_client_id: string | null + external_spotify_enabled: boolean | null + external_spotify_secret: string | null + external_twitch_client_id: string | null + external_twitch_enabled: boolean | null + external_twitch_secret: string | null + external_twitter_client_id: string | null + external_twitter_enabled: boolean | null + external_twitter_secret: string | null + external_workos_client_id: string | null + external_workos_enabled: boolean | null + external_workos_secret: string | null + external_workos_url: string | null + external_zoom_client_id: string | null + external_zoom_enabled: boolean | null + external_zoom_secret: string | null + hook_custom_access_token_enabled: boolean | null + hook_custom_access_token_uri: string | null + hook_mfa_verification_attempt_enabled: boolean | null + hook_mfa_verification_attempt_uri: string | null + hook_password_verification_attempt_enabled: boolean | null + hook_password_verification_attempt_uri: string | null + jwt_exp: number | null + mailer_allow_unverified_email_sign_ins: boolean | null + mailer_autoconfirm: boolean | null + mailer_otp_exp: number | null + mailer_secure_email_change_enabled: boolean | null + mailer_subjects_confirmation: string | null + mailer_subjects_email_change: string | null + mailer_subjects_invite: string | null + mailer_subjects_magic_link: string | null + mailer_subjects_recovery: string | null + mailer_subjects_reauthentication: string | null + mailer_templates_confirmation_content: string | null + mailer_templates_email_change_content: string | null + mailer_templates_invite_content: string | null + mailer_templates_magic_link_content: string | null + mailer_templates_recovery_content: string | null + mailer_templates_reauthentication_content: string | null + mfa_max_enrolled_factors: number | null + password_hibp_enabled: boolean | null + password_min_length: number | null + password_required_characters: string | null + rate_limit_anonymous_users: number | null + rate_limit_email_sent: number | null + rate_limit_sms_sent: number | null + rate_limit_token_refresh: number | null + rate_limit_verify: number | null + refresh_token_rotation_enabled: boolean | null + saml_enabled: boolean | null + security_captcha_enabled: boolean | null + security_captcha_provider: string | null + security_captcha_secret: string | null + security_manual_linking_enabled: boolean | null + security_refresh_token_reuse_interval: number | null + security_update_password_require_reauthentication: boolean | null + sessions_inactivity_timeout: number | null + sessions_single_per_user: boolean | null + sessions_tags: string | null + sessions_timebox: number | null + site_url: string | null + sms_autoconfirm: boolean | null + sms_max_frequency: number | null + sms_messagebird_access_key: string | null + sms_messagebird_originator: string | null + sms_otp_exp: number | null + sms_otp_length: number | null + sms_provider: string | null + sms_template: string | null + sms_test_otp: string | null + sms_test_otp_valid_until: string | null + sms_textlocal_api_key: string | null + sms_textlocal_sender: string | null + sms_twilio_account_sid: string | null + sms_twilio_auth_token: string | null + sms_twilio_content_sid: string | null + sms_twilio_message_service_sid: string | null + sms_twilio_verify_account_sid: string | null + sms_twilio_verify_auth_token: string | null + sms_twilio_verify_message_service_sid: string | null + sms_vonage_api_key: string | null + sms_vonage_api_secret: string | null + sms_vonage_from: string | null + smtp_admin_email: string | null + smtp_host: string | null + smtp_max_frequency: number | null + smtp_pass: string | null + smtp_port: string | null + smtp_sender_name: string | null + smtp_user: string | null + uri_allow_list: string | null + } + UpdateAuthConfigBody: { + site_url?: string + disable_signup?: boolean + jwt_exp?: number + smtp_admin_email?: string + smtp_host?: string + smtp_port?: string + smtp_user?: string + smtp_pass?: string + smtp_max_frequency?: number + smtp_sender_name?: string + mailer_allow_unverified_email_sign_ins?: boolean + mailer_autoconfirm?: boolean + mailer_subjects_invite?: string + mailer_subjects_confirmation?: string + mailer_subjects_recovery?: string + mailer_subjects_email_change?: string + mailer_subjects_magic_link?: string + mailer_subjects_reauthentication?: string + mailer_templates_invite_content?: string + mailer_templates_confirmation_content?: string + mailer_templates_recovery_content?: string + mailer_templates_email_change_content?: string + mailer_templates_magic_link_content?: string + mailer_templates_reauthentication_content?: string + mfa_max_enrolled_factors?: number + uri_allow_list?: string + external_anonymous_users_enabled?: boolean + external_email_enabled?: boolean + external_phone_enabled?: boolean + saml_enabled?: boolean + security_captcha_enabled?: boolean + security_captcha_provider?: string + security_captcha_secret?: string + sessions_timebox?: number + sessions_inactivity_timeout?: number + sessions_single_per_user?: boolean + sessions_tags?: string + rate_limit_anonymous_users?: number + rate_limit_email_sent?: number + rate_limit_sms_sent?: number + rate_limit_verify?: number + rate_limit_token_refresh?: number + mailer_secure_email_change_enabled?: boolean + refresh_token_rotation_enabled?: boolean + password_hibp_enabled?: boolean + password_min_length?: number + /** @enum {string} */ + password_required_characters?: + | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' + | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789' + | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~' + | '' + security_manual_linking_enabled?: boolean + security_update_password_require_reauthentication?: boolean + security_refresh_token_reuse_interval?: number + mailer_otp_exp?: number + sms_autoconfirm?: boolean + sms_max_frequency?: number + sms_otp_exp?: number + sms_otp_length?: number + sms_provider?: string + sms_messagebird_access_key?: string + sms_messagebird_originator?: string + sms_test_otp?: string + sms_test_otp_valid_until?: string + sms_textlocal_api_key?: string + sms_textlocal_sender?: string + sms_twilio_account_sid?: string + sms_twilio_auth_token?: string + sms_twilio_content_sid?: string + sms_twilio_message_service_sid?: string + sms_twilio_verify_account_sid?: string + sms_twilio_verify_auth_token?: string + sms_twilio_verify_message_service_sid?: string + sms_vonage_api_key?: string + sms_vonage_api_secret?: string + sms_vonage_from?: string + sms_template?: string + hook_mfa_verification_attempt_enabled?: boolean + hook_mfa_verification_attempt_uri?: string + hook_password_verification_attempt_enabled?: boolean + hook_password_verification_attempt_uri?: string + hook_custom_access_token_enabled?: boolean + hook_custom_access_token_uri?: string + hook_send_sms_enabled?: boolean + hook_send_sms_uri?: string + hook_send_email_enabled?: boolean + hook_send_email_uri?: string + external_apple_enabled?: boolean + external_apple_client_id?: string + external_apple_secret?: string + external_apple_additional_client_ids?: string + external_azure_enabled?: boolean + external_azure_client_id?: string + external_azure_secret?: string + external_azure_url?: string + external_bitbucket_enabled?: boolean + external_bitbucket_client_id?: string + external_bitbucket_secret?: string + external_discord_enabled?: boolean + external_discord_client_id?: string + external_discord_secret?: string + external_facebook_enabled?: boolean + external_facebook_client_id?: string + external_facebook_secret?: string + external_figma_enabled?: boolean + external_figma_client_id?: string + external_figma_secret?: string + external_github_enabled?: boolean + external_github_client_id?: string + external_github_secret?: string + external_gitlab_enabled?: boolean + external_gitlab_client_id?: string + external_gitlab_secret?: string + external_gitlab_url?: string + external_google_enabled?: boolean + external_google_client_id?: string + external_google_secret?: string + external_google_additional_client_ids?: string + external_google_skip_nonce_check?: boolean + external_kakao_enabled?: boolean + external_kakao_client_id?: string + external_kakao_secret?: string + external_keycloak_enabled?: boolean + external_keycloak_client_id?: string + external_keycloak_secret?: string + external_keycloak_url?: string + external_linkedin_oidc_enabled?: boolean + external_linkedin_oidc_client_id?: string + external_linkedin_oidc_secret?: string + external_notion_enabled?: boolean + external_notion_client_id?: string + external_notion_secret?: string + external_slack_enabled?: boolean + external_slack_client_id?: string + external_slack_secret?: string + external_spotify_enabled?: boolean + external_spotify_client_id?: string + external_spotify_secret?: string + external_twitch_enabled?: boolean + external_twitch_client_id?: string + external_twitch_secret?: string + external_twitter_enabled?: boolean + external_twitter_client_id?: string + external_twitter_secret?: string + external_workos_enabled?: boolean + external_workos_client_id?: string + external_workos_secret?: string + external_workos_url?: string + external_zoom_enabled?: boolean + external_zoom_client_id?: string + external_zoom_secret?: string + } + CreateThirdPartyAuthBody: { + oidc_issuer_url?: string + jwks_url?: string + custom_jwks?: Record + } + ThirdPartyAuth: { + id: string + type: string + oidc_issuer_url?: string | null + jwks_url?: string | null + custom_jwks?: unknown + resolved_jwks?: unknown + inserted_at: string + updated_at: string + resolved_at?: string | null + } + AttributeValue: { + default?: Record | number | string | boolean + name?: string + names?: string[] + } + AttributeMapping: { + keys: { + [key: string]: components['schemas']['AttributeValue'] + } + } + CreateProviderBody: { + /** + * @description What type of provider will be created + * @enum {string} + */ + type: 'saml' + metadata_xml?: string + metadata_url?: string + domains?: string[] + attribute_mapping?: components['schemas']['AttributeMapping'] + } + SamlDescriptor: { + id: string + entity_id: string + metadata_url?: string + metadata_xml?: string + attribute_mapping?: components['schemas']['AttributeMapping'] + } + Domain: { + id: string + domain?: string + created_at?: string + updated_at?: string + } + CreateProviderResponse: { + id: string + saml?: components['schemas']['SamlDescriptor'] + domains?: components['schemas']['Domain'][] + created_at?: string + updated_at?: string + } + Provider: { + id: string + saml?: components['schemas']['SamlDescriptor'] + domains?: components['schemas']['Domain'][] + created_at?: string + updated_at?: string + } + ListProvidersResponse: { + items: components['schemas']['Provider'][] + } + GetProviderResponse: { + id: string + saml?: components['schemas']['SamlDescriptor'] + domains?: components['schemas']['Domain'][] + created_at?: string + updated_at?: string + } + UpdateProviderBody: { + metadata_xml?: string + metadata_url?: string + domains?: string[] + attribute_mapping?: components['schemas']['AttributeMapping'] + } + UpdateProviderResponse: { + id: string + saml?: components['schemas']['SamlDescriptor'] + domains?: components['schemas']['Domain'][] + created_at?: string + updated_at?: string + } + DeleteProviderResponse: { + id: string + saml?: components['schemas']['SamlDescriptor'] + domains?: components['schemas']['Domain'][] + created_at?: string + updated_at?: string + } + V1RunQueryBody: { + query: string + } + V1Backup: { + /** @enum {string} */ + status: 'COMPLETED' | 'FAILED' | 'PENDING' | 'REMOVED' | 'ARCHIVED' + is_physical_backup: boolean + inserted_at: string + } + V1PhysicalBackup: { + earliest_physical_backup_date_unix?: number + latest_physical_backup_date_unix?: number + } + V1BackupsResponse: { + region: string + walg_enabled: boolean + pitr_enabled: boolean + backups: components['schemas']['V1Backup'][] + physical_backup_data: components['schemas']['V1PhysicalBackup'] + } + V1RestorePitrBody: { + recovery_time_target_unix: number + } + FunctionSlugResponse: { + id: string + slug: string + name: string + /** @enum {string} */ + status: 'ACTIVE' | 'REMOVED' | 'THROTTLED' + version: number + created_at: number + updated_at: number + verify_jwt?: boolean + import_map?: boolean + entrypoint_path?: string + import_map_path?: string + } + V1StorageBucketResponse: { + id: string + name: string + owner: string + created_at: string + updated_at: string + public: boolean + } + OrganizationResponseV1: { + id: string + name: string + } + CreateOrganizationBodyV1: { + name: string + } + V1OrganizationMemberResponse: { + user_id: string + user_name: string + email?: string + role_name: string + mfa_enabled: boolean + } + V1OrganizationSlugResponse: { + plan?: components['schemas']['BillingPlanId'] + opt_in_tags: 'AI_SQL_GENERATOR_OPT_IN'[] + id: string + name: string + } + OAuthTokenBody: { + /** @enum {string} */ + grant_type: 'authorization_code' | 'refresh_token' + client_id: string + client_secret: string + code?: string + code_verifier?: string + redirect_uri?: string + refresh_token?: string + } + OAuthTokenResponse: { + /** @enum {string} */ + token_type: 'Bearer' + access_token: string + refresh_token: string + expires_in: number + } + SnippetProject: { + id: number + name: string + } + SnippetUser: { + id: number + username: string + } + SnippetMeta: { + id: string + inserted_at: string + updated_at: string + /** @enum {string} */ + type: 'sql' + /** @enum {string} */ + visibility: 'user' | 'project' | 'org' | 'public' + name: string + description: string | null + project: components['schemas']['SnippetProject'] + owner: components['schemas']['SnippetUser'] + updated_by: components['schemas']['SnippetUser'] + } + SnippetList: { + data: components['schemas']['SnippetMeta'][] + } + SnippetContent: { + favorite: boolean + schema_version: string + sql: string + } + SnippetResponse: { + id: string + inserted_at: string + updated_at: string + /** @enum {string} */ + type: 'sql' + /** @enum {string} */ + visibility: 'user' | 'project' | 'org' | 'public' + name: string + description: string | null + project: components['schemas']['SnippetProject'] + owner: components['schemas']['SnippetUser'] + updated_by: components['schemas']['SnippetUser'] + content: components['schemas']['SnippetContent'] + } + ServiceHealthResponse: { + /** + * @description Service name + * @enum {string} + */ + name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage' + /** @description Whether the service is healthy */ + healthy: boolean + /** + * @description Service health status + * @example COMING_UP + * @enum {string} + */ + status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY' + /** @description Service health check error */ + error?: string + } + ResourceWithServicesStatusResponse: { + /** @description Supabase project instance compute size */ + compute: string + /** @description Unique ID representing the fly extension */ + id: string + /** + * @description Supabase project status + * @example ACTIVE_HEALTHY + * @enum {string} + */ + status: + | 'REMOVED' + | 'COMING_UP' + | 'INACTIVE' + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'UNKNOWN' + | 'GOING_DOWN' + | 'INIT_FAILED' + | 'RESTORING' + | 'UPGRADING' + | 'PAUSING' + /** + * @description Supabase organization id + * @example fly_123456789 + */ + supabase_org_id: string + /** @description Supabase project services health status */ + services: components['schemas']['ServiceHealthResponse'][] + } + ResourceProvisioningConfigResponse: { + /** + * @description PSQL connection string + * @example postgresql://postgres:dbpass@db.abcdefghijklmnop.supabase.co:5432/postgres + */ + DATABASE_URL: string + /** + * @description Pooler connection string + * @example postgres://postgres.abcdefghijklmnop:dbpass@aws-0-us-east-1.pooler.supabase.com:6543/postgres + */ + DATABASE_POOLER_URL: string + } + ResourceProvisioningResponse: { + /** @description Supabase envs config */ + config: components['schemas']['ResourceProvisioningConfigResponse'] + /** + * @description The target Fly application for internal traffic + * @example ext-db-pgshhamktpsgnptvcadw + */ + fly_app_name: string + /** + * @description Supabase project id + * @example pgshhamktpsgnptvcadw + */ + id: string + /** @description Welcome message */ + message: string + /** + * @description Supabase organization id + * @example fly_123456789 + */ + supabase_org_id: string + } + FlyOrganization: { + plan: components['schemas']['BillingPlanId'] + id: string + supabase_org_id: string + name: string + } + OrganizationExtensionStatus: { + /** @description Supabase project instance compute size */ + compute: string + /** @description Unique ID representing the fly extension */ + id: string + /** + * @description Supabase project status + * @example ACTIVE_HEALTHY + * @enum {string} + */ + status: + | 'REMOVED' + | 'COMING_UP' + | 'INACTIVE' + | 'ACTIVE_HEALTHY' + | 'ACTIVE_UNHEALTHY' + | 'UNKNOWN' + | 'GOING_DOWN' + | 'INIT_FAILED' + | 'RESTORING' + | 'UPGRADING' + | 'PAUSING' + /** + * @description Supabase organization id + * @example fly_123456789 + */ + supabase_org_id: string + } + UpdateFlyOrganizationSubscriptionBody: { + /** @example pro */ + plan: components['schemas']['BillingPlanId'] + } + ResourceBillingItem: { + /** + * @description Non-Unique identifier of the item + * @example usage_egress + */ + itemIdentifier: string + /** + * @description Descriptive name of the billing item + * @example Pro Plan + */ + itemName: string + /** @enum {string} */ + type: 'usage' | 'plan' | 'addon' | 'proration' | 'compute_credits' + /** + * @description In case of a usage item, the free usage included in the customers plan + * @example 100 + */ + freeUnitsInPlan?: number + /** + * @description In case of a usage item, the total usage + * @example 100 + */ + usageTotal?: number + /** + * @description In case of a usage item, the billable usage amount, free usage has been deducted + * @example 100 + */ + usageBillable?: number + /** + * @description Costs of the item in cents + * @example 100 + */ + costs: number + } + ResourceBillingResponse: { + /** @description Whether the user is exceeding the included quotas in the plan - only relevant for users on usage-capped plans. */ + exceedsPlanLimits: boolean + /** @description Whether the user is can have over-usage, which will be billed - this will be false on usage-capped plans. */ + overusageAllowed: boolean + items: components['schemas']['ResourceBillingItem'][] + } + } + responses: never + parameters: never + requestBodies: never + headers: never + pathItems: never +} + +export type $defs = Record + +export type external = Record + +export interface operations { + /** Get notifications */ + NotificationsController_getNotificationsV2: { + parameters: { + query: { + status: 'new' | 'seen' | 'archived' + priority: 'Critical' | 'Warning' | 'Info' + org_slug?: string[] + project_ref?: string[] + offset: number + limit: number + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['NotificationResponseV2'][] + } + } + /** @description Failed to retrieve notifications */ + 500: { + content: never + } + } + } + /** Delete notifications */ + NotificationsController_deleteNotifications: { + requestBody: { + content: { + 'application/json': components['schemas']['UpdateNotificationsBodyV1'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['NotificationResponseV1'][] + } + } + /** @description Failed to delete notifications */ + 500: { + content: never + } + } + } + /** Update notifications */ + NotificationsController_updateNotificationsV2: { + requestBody: { + content: { + 'application/json': components['schemas']['UpdateNotificationBodyV2'][] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['NotificationResponseV2'][] + } + } + /** @description Failed to update notifications */ + 500: { + content: never + } + } + } + /** Get an aggregated data of interest across all notifications for the user */ + NotificationsController_getNotificationsSummary: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['NotificationsSummary'] + } + } + } + } + /** Archives all notifications */ + NotificationsController_archiveAllNotifications: { + responses: { + 200: { + content: never + } + /** @description Failed to archive all notifications */ + 500: { + content: never + } + } + } + /** Reset password for email */ + ResetPasswordController_resetPassword: { + requestBody: { + content: { + 'application/json': components['schemas']['ResetPasswordBody'] + } + } + responses: { + 201: { + content: never + } + } + } + /** Send feedback */ + SendFeedbackController_sendFeedback: { + requestBody: { + content: { + 'application/json': components['schemas']['SendFeedbackBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SendFeedbackResponse'] + } + } + /** @description Failed to send feedback */ + 500: { + content: never + } + } + } + /** Send exit survey to HubSpot */ + SendExitSurveyController_sendExitSurvey: { + requestBody: { + content: { + 'application/json': components['schemas']['SendExitSurveyBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SendFeedbackResponse'] + } + } + /** @description Failed to send exit survey */ + 500: { + content: never + } + } + } + /** Send upgrade survey to survey_responses table */ + SendUpgradeSurveyController_sendUpgradeSurvey: { + requestBody: { + content: { + 'application/json': components['schemas']['SendUpgradeSurveyBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SendFeedbackResponse'] + } + } + /** @description Failed to send upgrade survey */ + 500: { + content: never + } + } + } + /** Send feedback on docs */ + SendDocsFeedbackController_sendDocsFeedback: { + requestBody: { + content: { + 'application/json': components['schemas']['SendDocsFeedbackBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SendFeedbackResponse'] + } + } + /** @description Failed to send feedback for docs */ + 500: { + content: never + } + } + } + /** Sign up with email and password */ + SignUpController_signUp: { + requestBody: { + content: { + 'application/json': components['schemas']['SignUpBody'] + } + } + responses: { + 201: { + content: never + } + } + } + /** Gets project's status */ + StatusController_getStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to get project's status */ + 500: { + content: never + } + } + } + /** + * Gets resource warnings for all projects accessible by the user + * @description Only returns the minimal project info + */ + ProjectsResourceWarningsController_getProjectsResourceWarnings: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProjectResourceWarningsResponse'][] + } + } + } + } + /** Redirects to Fly sso flow */ + TermsOfServiceController_flyTosAccepted: { + parameters: { + query: { + extension_id: string + organization_id: string + } + } + responses: { + 200: { + content: never + } + } + } + /** Gets GoTrue config */ + GoTrueConfigController_getGoTrueConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GoTrueConfigResponse'] + } + } + /** @description Failed to retrieve GoTrue config */ + 500: { + content: never + } + } + } + /** Updates GoTrue config */ + GoTrueConfigController_updateGoTrueConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateGoTrueConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GoTrueConfigResponse'] + } + } + /** @description Failed to update GoTrue config */ + 500: { + content: never + } + } + } + /** Sends an invite to the given email */ + InviteController_sendInvite: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UserBody'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to send an invite to the given email */ + 500: { + content: never + } + } + } + /** Sends a magic link to the given email */ + MagicLinkController_sendMagicLink: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UserBody'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to send a magic link to the given email */ + 500: { + content: never + } + } + } + /** Sends an OTP to the given phone number */ + OtpController_sendOtp: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UserBody'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to send an OTP to the given phone number */ + 500: { + content: never + } + } + } + /** Sends a recovery email to the given email */ + RecoverController_sendRecover: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UserBody'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to send a recovery email to the given email */ + 500: { + content: never + } + } + } + /** Gets GoTrue template */ + TemplateController_getTemplate: { + parameters: { + path: { + ref: string + template: + | 'confirmation' + | 'email-change' + | 'invite' + | 'magic-link' + | 'recovery' + | 'reauthentication' + } + } + responses: { + 200: { + content: { + 'application/json': string + } + } + /** @description Failed to retrieve GoTrue template */ + 500: { + content: never + } + } + } + /** Gets users */ + UsersController_getUsers: { + parameters: { + query: { + keywords: string + limit: string + offset: string + verified: string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UsersResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve users */ + 500: { + content: never + } + } + } + /** Delete user with given ID */ + UsersController_deleteUser: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UserBody'] + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to delete user */ + 500: { + content: never + } + } + } + /** Delete all factors associated to a user */ + FactorsController_deleteFactors: { + parameters: { + path: { + /** @description Project ref */ + ref: string + id: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to delete factors */ + 500: { + content: never + } + } + } + /** Gets project backups */ + BackupsController_getBackups: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['BackupsResponse'] + } + } + /** @description Failed to get project backups */ + 500: { + content: never + } + } + } + /** Enable usage of physical backups */ + BackupsController_enablePhysicalBackup: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + /** @description Failed to enable usage of physical backups */ + 500: { + content: never + } + } + } + /** Download project backup */ + BackupsController_downloadBackup: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['DownloadBackupBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['DownloadBackupResponse'] + } + } + /** @description Failed to download project backup */ + 500: { + content: never + } + } + } + /** Restore project backup */ + BackupsController_restoreBackup: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RestoreLogicalBackupBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to restore project backup */ + 500: { + content: never + } + } + } + /** Restore project with a physical backup */ + BackupsController_restorePhysicalBackup: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RestorePhysicalBackupBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to restore project with physical backup */ + 500: { + content: never + } + } + } + /** Restore project to a previous point in time */ + BackupsController_restorePointInTimeBackup: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['PointInTimeRestoreBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to restore project to a previous point in time */ + 500: { + content: never + } + } + } + /** Gets hook logs with the given ID */ + HooksController_getHookLogs: { + parameters: { + query: { + id: number + limit?: string + offset?: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to get hook logs with the given ID */ + 500: { + content: never + } + } + } + /** Enables Database Webhooks on the project */ + HooksController_enableHooks: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to enable Database Webhooks on the project */ + 500: { + content: never + } + } + } + /** Gets the status of owner reassignment */ + OwnerController_getOwnerReassignStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + /** @description Failed to get status of owner reassignment */ + 500: { + content: never + } + } + } + /** Reassigns object owner from supabase_admin to temp */ + OwnerController_applyOwnerReassign: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + 403: { + content: never + } + /** @description Failed to reassign owner on the project */ + 500: { + content: never + } + } + } + /** Rollback object owner from temp to supabase_admin */ + OwnerController_rollbackOwnerReassign: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + 403: { + content: never + } + /** @description Failed to rollback owner on the project */ + 500: { + content: never + } + } + } + /** Reassigns object owner from temp to postgres */ + OwnerController_finaliseOwnerReassign: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + 403: { + content: never + } + /** @description Failed to reassign owner on the project */ + 500: { + content: never + } + } + } + /** + * List all organizations + * @description Returns a list of organizations that you currently belong to. + */ + OrganizationsController_getOrganizations: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['OrganizationResponseV1'][] + } + } + /** @description Unexpected error listing organizations */ + 500: { + content: never + } + } + } + /** Creates an organization */ + OrganizationsController_createOrganizationWithTier: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateOrganizationBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['OrganizationResponse'] + } + } + /** @description Unexpected error creating an organization */ + 500: { + content: never + } + } + } + /** Gets organization linked to fly organization id */ + OrganizationsController_getOrganizationByFlyOrganizationId: { + parameters: { + path: { + fly_organization_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetOrganizationByFlyOrganizationIdResponse'] + } + } + } + } + /** Deletes organization */ + OrganizationSlugController_deleteOrganization: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete organization */ + 500: { + content: never + } + } + } + /** Updates organization */ + OrganizationSlugController_updateOrganization: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateOrganizationBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OrganizationSlugResponse'] + } + } + /** @description Failed to update organization */ + 500: { + content: never + } + } + } + /** Gets the Stripe customer */ + CustomerController_getCustomer: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['CustomerResponse'] + } + } + /** @description Failed to retrieve the Stripe customer */ + 500: { + content: never + } + } + } + /** Updates the Stripe customer */ + CustomerController_updateCustomer: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['CustomerUpdateResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update the Stripe customer */ + 500: { + content: never + } + } + } + /** Gets the given organization's roles */ + RolesController_addMember: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['Role'][] + } + } + /** @description Failed to retrieve the organization's roles */ + 500: { + content: never + } + } + } + /** Gets the given organization's tax IDs */ + TaxIdsController_getTaxIds: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['TaxIdResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve the organization's tax IDs */ + 500: { + content: never + } + } + } + /** Creates a tax ID for the given organization */ + TaxIdsController_createTaxId: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateTaxIdBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['CreateTaxIdResponse'] + } + } + 403: { + content: never + } + /** @description Failed to create the tax ID */ + 500: { + content: never + } + } + } + /** Delete the tax ID with the given ID */ + TaxIdsController_deleteTaxId: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['DeleteTaxIdBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['DeleteTaxIdResponse'] + } + } + 403: { + content: never + } + /** @description Failed to delete the tax ID */ + 500: { + content: never + } + } + } + /** Transfers the organization to the given member */ + TransferController_transferOrganization: { + requestBody: { + content: { + 'application/json': components['schemas']['TransferOrganizationBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to update owner */ + 500: { + content: never + } + } + } + /** Gets daily organization stats */ + OrgDailyStatsController_getDailyStats: { + parameters: { + query: { + metric: + | 'EGRESS' + | 'DATABASE_SIZE' + | 'STORAGE_SIZE' + | 'MONTHLY_ACTIVE_USERS' + | 'MONTHLY_ACTIVE_SSO_USERS' + | 'FUNCTION_INVOCATIONS' + | 'FUNCTION_COUNT' + | 'STORAGE_IMAGES_TRANSFORMED' + | 'REALTIME_MESSAGE_COUNT' + | 'REALTIME_PEAK_CONNECTIONS' + | 'COMPUTE_HOURS_BRANCH' + | 'COMPUTE_HOURS_XS' + | 'COMPUTE_HOURS_SM' + | 'COMPUTE_HOURS_MD' + | 'COMPUTE_HOURS_L' + | 'COMPUTE_HOURS_XL' + | 'COMPUTE_HOURS_2XL' + | 'COMPUTE_HOURS_4XL' + | 'COMPUTE_HOURS_8XL' + | 'COMPUTE_HOURS_12XL' + | 'COMPUTE_HOURS_16XL' + interval: string + endDate: string + startDate: string + projectRef?: string + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + /** @description Failed to get daily organization stats */ + 500: { + content: never + } + } + } + /** Gets daily organization stats for compute */ + OrgDailyStatsController_getDailyStatsCompute: { + parameters: { + query: { + endDate: string + startDate: string + projectRef?: string + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to get daily organization stats for compute */ + 500: { + content: never + } + } + } + /** Gets usage stats */ + OrgUsageController_getOrgUsage: { + parameters: { + query?: { + project_ref?: string + start?: string + end?: string + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OrgUsageResponse'] + } + } + /** @description Failed to get usage stats */ + 500: { + content: never + } + } + } + /** Get standard security questionnaire URL */ + OrgDocumentsController_getStandardSecurityQuestionnaireUrl: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OrgDocumentUrlResponse'] + } + } + } + } + /** Get SOC2 Type 2 report URL */ + OrgDocumentsController_getSoc2Type2ReportUrl: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OrgDocumentUrlResponse'] + } + } + } + } + /** Gets an organization's audit logs */ + OrgAuditLogsController_getAuditLogs: { + parameters: { + query?: { + /** @description Start timestamp */ + iso_timestamp_start?: string + /** @description End timestamp */ + iso_timestamp_end?: string + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AuditLogsResponse'] + } + } + /** @description Failed to get an organization's audit logs */ + 500: { + content: never + } + } + } + /** Gets invited users */ + InviteController_getInvitedUsers: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['Invite'][] + } + } + /** @description Failed to get invited users */ + 500: { + content: never + } + } + } + /** Invites user */ + InviteController_inviteUser: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['InviteUserBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SendInviteResponse'] + } + } + /** @description Failed to invite user */ + 500: { + content: never + } + } + } + /** Delete invited user */ + InviteController_deleteInvitedUser: { + parameters: { + query: { + invited_id: number + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to delete invited user */ + 500: { + content: never + } + } + } + /** Gets invite */ + JoinController_getInvite: { + parameters: { + query: { + token: string + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['InviteResponse'] + } + } + /** @description Failed to get invite */ + 500: { + content: never + } + } + } + /** Joins organization */ + JoinController_joinOrganization: { + parameters: { + query: { + token: string + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['JoinResponse'] + } + } + /** @description Failed to join organization */ + 500: { + content: never + } + } + } + /** Leaves the given organization */ + MembersDeprecatedController_leaveOrganization: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + /** @description Failed to leave organization */ + 500: { + content: never + } + } + } + /** Leaves the given organization */ + MembersDeprecatedController_removeMember: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RemoveMemberBody'] + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + /** @description Failed to leave organization */ + 500: { + content: never + } + } + } + /** Gets organization's members */ + MembersController_getMembers: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['Member'][] + } + } + /** @description Failed to retrieve organization's members */ + 500: { + content: never + } + } + } + /** Removes organization member */ + MembersController_deleteMember: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + gotrue_id: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to remove organization member */ + 500: { + content: never + } + } + } + /** Updates organization member */ + MembersController_updateMember: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + gotrue_id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateMemberBody'] + } + } + responses: { + 200: { + content: never + } + /** @description Failed to update organization member */ + 500: { + content: never + } + } + } + /** Gets organization members who have reached their free project limit */ + ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['MemberWithFreeProjectLimit'][] + } + } + /** @description Failed to retrieve organization members who have reached their free project limit */ + 500: { + content: never + } + } + } + /** Gets Stripe payment methods for the given organization */ + PaymentsController_getPaymentMethods: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PaymentsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get Stripe payment methods */ + 500: { + content: never + } + } + } + /** Detach Stripe payment method with the given card ID */ + PaymentsController_detachPaymentMethod: { + requestBody: { + content: { + 'application/json': components['schemas']['DetachPaymentMethodBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['DetachPaymentResponse'] + } + } + 403: { + content: never + } + /** @description Failed to detach Stripe payment method */ + 500: { + content: never + } + } + } + /** Sets up a payment method */ + SetupIntentOrgController_setUpPaymentMethod: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['HCaptchaBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SetupIntentResponse'] + } + } + 403: { + content: never + } + /** @description Failed to set up a payment method */ + 500: { + content: never + } + } + } + /** Gets the current subscription */ + SubscriptionController_getSubscription: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetSubscriptionResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve subscription */ + 500: { + content: never + } + } + } + /** Updates subscription */ + SubscriptionController_updateSubscription: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateSubscriptionBody'] + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to update subscription change */ + 500: { + content: never + } + } + } + /** Preview subscription changes */ + SubscriptionController_previewSubscriptionChange: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateSubscriptionBody'] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to preview subscription changes */ + 500: { + content: never + } + } + } + /** Deletes any upcoming subscription schedule */ + SubscriptionController_deleteSubscriptionSchedule: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to update subscription change */ + 500: { + content: never + } + } + } + /** Gets subscription plans */ + OrgPlansController_getAvailablePlans: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PlansResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get subscription plans */ + 500: { + content: never + } + } + } + /** Gets the upcoming invoice */ + OrgInvoicesController_getUpcomingInvoice: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpcomingInvoice'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve upcoming invoice */ + 500: { + content: never + } + } + } + /** Retrieve column privileges */ + ColumnPrivilegesController_getColumnPrivileges: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresColumnPrivileges'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve column privileges */ + 500: { + content: never + } + } + } + /** Grant column privileges */ + ColumnPrivilegesController_grantColumnPrivileges: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['GrantColumnPrivilegesBody'][] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresColumnPrivileges'][] + } + } + 403: { + content: never + } + /** @description Failed to grant column privileges */ + 500: { + content: never + } + } + } + /** Revoke column privileges */ + ColumnPrivilegesController_revokeColumnPrivileges: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RevokeColumnPrivilegesBody'][] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresColumnPrivileges'][] + } + } + 403: { + content: never + } + /** @description Failed to revoke column privileges */ + 500: { + content: never + } + } + } + /** Gets project pg.columns */ + ColumnsController_getColumns: { + parameters: { + query: { + included_schemas: string + excluded_schemas: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresColumn'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.columns */ + 500: { + content: never + } + } + } + /** Creates project pg.column */ + ColumnsController_createColumn: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateColumnBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresColumn'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.column */ + 500: { + content: never + } + } + } + /** Deletes project pg.column with the given ID */ + ColumnsController_deleteColumn: { + parameters: { + query: { + /** @description Column ID */ + id: string + cascade?: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresColumn'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.column with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.column with the given ID */ + ColumnsController_updateColumn: { + parameters: { + query: { + /** @description Column ID */ + id: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateColumnBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresColumn'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.column with the given ID */ + 500: { + content: never + } + } + } + /** Gets project pg.extensions */ + ExtensionsController_getExtensions: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresExtension'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.extensions */ + 500: { + content: never + } + } + } + /** Creates project pg.extension */ + ExtensionsController_createExtension: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateExtensionBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresExtension'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.extension */ + 500: { + content: never + } + } + } + /** Deletes project pg.extension with the given ID */ + ExtensionsController_deleteExtension: { + parameters: { + query: { + /** @description Extension ID */ + id: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresExtension'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.extension with the given ID */ + 500: { + content: never + } + } + } + /** Retrieve database foreign tables */ + ForeignTablesController_getForeignTables: { + parameters: { + query: { + id: string + limit: string + offset: string + include_columns: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresForeignTable'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve database foreign tables */ + 500: { + content: never + } + } + } + /** + * List all functions + * @description Returns all functions you've previously added to the specified project. + */ + FunctionsController_getFunctions: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['FunctionResponse'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's functions */ + 500: { + content: never + } + } + } + /** + * Create a function + * @description Creates a function and adds it to the specified project. + */ + FunctionsController_createFunction: { + parameters: { + query?: { + slug?: string + name?: string + verify_jwt?: boolean + import_map?: boolean + entrypoint_path?: string + import_map_path?: string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['V1CreateFunctionBody'] + 'application/vnd.denoland.eszip': components['schemas']['V1CreateFunctionBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['FunctionResponse'] + } + } + 403: { + content: never + } + /** @description Failed to create project's function */ + 500: { + content: never + } + } + } + /** Deletes project pg.function with the given ID */ + FunctionsController_deleteFunction: { + parameters: { + query: { + /** @description Function ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresFunction'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.function with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.function with the given ID */ + FunctionsController_updateFunction: { + parameters: { + query: { + /** @description Function ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateFunctionBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresFunction'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.function with the given ID */ + 500: { + content: never + } + } + } + /** Retrieve database materialized views */ + MaterializedViewsController_getMaterializedViews: { + parameters: { + query: { + id: string + included_schemas: string + excluded_schemas: string + limit: string + offset: string + include_columns: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresMaterializedView'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve database materialized views */ + 500: { + content: never + } + } + } + /** Gets project pg.policies */ + PoliciesController_getPolicies: { + parameters: { + query: { + included_schemas: string + excluded_schemas: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresPolicy'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.policies */ + 500: { + content: never + } + } + } + /** Creates project pg.policy */ + PoliciesController_createPolicy: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreatePolicyBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresPolicy'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.policy */ + 500: { + content: never + } + } + } + /** Deletes project pg.policy with the given ID */ + PoliciesController_deletePolicy: { + parameters: { + query: { + /** @description Policy ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresPolicy'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.policy with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.policy with the given ID */ + PoliciesController_updatePolicy: { + parameters: { + query: { + /** @description Policy ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePolicyBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresPolicy'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.policy with the given ID */ + 500: { + content: never + } + } + } + /** Gets project pg.publications */ + PublicationsController_getPublications: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresPublication'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.publications */ + 500: { + content: never + } + } + } + /** Gets project pg.publications */ + PublicationsController_createPublication: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreatePublicationBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresPublication'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.publication */ + 500: { + content: never + } + } + } + /** Deletes project pg.publication with the given ID */ + PublicationsController_deletePublication: { + parameters: { + query: { + /** @description Publication ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresPublication'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.publication with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.publication with the given ID */ + PublicationsController_updatePublication: { + parameters: { + query: { + /** @description Publication ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePublicationBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresPublication'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.publication with the given ID */ + 500: { + content: never + } + } + } + /** Run sql query */ + QueryController_runQuery: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RunQueryBody'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to run sql query */ + 500: { + content: never + } + } + } + /** Format sql query */ + QueryController_formatQuery: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['FormatQueryBody'] + } + } + responses: { + 201: { + content: { + 'application/json': string + } + } + /** @description Failed to format sql query */ + 500: { + content: never + } + } + } + /** Validate sql query */ + QueryController_validateQuery: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['ValidateQueryBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['ValidateQueryResponse'] + } + } + /** @description Failed to validate sql query */ + 500: { + content: never + } + } + } + /** Gets project pg.roles */ + RolesController_getRoles: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresRole'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.roles */ + 500: { + content: never + } + } + } + /** Creates project pg.role */ + RolesController_createRole: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateRoleBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresRole'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.role */ + 500: { + content: never + } + } + } + /** Deletes project pg.role with the given ID */ + RolesController_deleteRole: { + parameters: { + query: { + /** @description Role ID */ + id: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresRole'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.role with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.role with the given ID */ + RolesController_updateRole: { + parameters: { + query: { + /** @description Role ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateRoleBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresRole'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.role with the given ID */ + 500: { + content: never + } + } + } + /** Gets project pg.schemas */ + SchemasController_getSchemas: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresSchema'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.schemas */ + 500: { + content: never + } + } + } + /** Creates project pg.schema */ + SchemasController_createSchema: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateSchemaBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresSchema'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.schema */ + 500: { + content: never + } + } + } + /** Deletes project pg.schema with the given ID */ + SchemasController_deleteSchema: { + parameters: { + query: { + /** @description Schema ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresSchema'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.schema with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.schema with the given ID */ + SchemasController_updateSchema: { + parameters: { + query: { + /** @description Schema ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateSchemaBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresSchema'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.schema with the given ID */ + 500: { + content: never + } + } + } + /** Searches project pg.tables. Return maximum 50 results. */ + SearchController_searchTables: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['SearchTableBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['Table'][] + } + } + 403: { + content: never + } + /** @description Failed to search pg.tables */ + 500: { + content: never + } + } + } + /** Searches project pg.columns. Return maximum 50 results. */ + SearchController_searchColumns: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['SearchColumnBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['Column'][] + } + } + 403: { + content: never + } + /** @description Failed to search pg.columns */ + 500: { + content: never + } + } + } + /** Retrieve table privileges */ + TablePrivilegesController_getTablePrivileges: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTablePrivileges'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve table privileges */ + 500: { + content: never + } + } + } + /** Grant table privileges */ + TablePrivilegesController_grantTablePrivileges: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['GrantTablePrivilegesBody'][] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresTablePrivileges'][] + } + } + 403: { + content: never + } + /** @description Failed to grant table privileges */ + 500: { + content: never + } + } + } + /** Revoke table privileges */ + TablePrivilegesController_revokeTablePrivileges: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RevokeTablePrivilegesBody'][] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTablePrivileges'][] + } + } + 403: { + content: never + } + /** @description Failed to revoke table privileges */ + 500: { + content: never + } + } + } + /** Gets project pg.tables or pg.table with the given ID */ + TablesController_getTables: { + parameters: { + query: { + /** @description Table ID */ + id?: string + include_system_schemas: string + included_schemas: string + excluded_schemas: string + limit: string + offset: string + include_columns: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTable'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.tables or pg.table with the given ID */ + 500: { + content: never + } + } + } + /** Creates project pg.table */ + TablesController_createTable: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateTableBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresTable'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.table */ + 500: { + content: never + } + } + } + /** Deletes project pg.table with the given ID */ + TablesController_deleteTable: { + parameters: { + query: { + /** @description Table ID */ + id: number + cascade: boolean + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTable'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.table with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.table with the given ID */ + TablesController_updateTable: { + parameters: { + query: { + /** @description Table ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateTableBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTable'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.table with the given ID */ + 500: { + content: never + } + } + } + /** Gets project pg.triggers */ + TriggersController_getTriggers: { + parameters: { + query: { + included_schemas: string + excluded_schemas: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTrigger'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.triggers */ + 500: { + content: never + } + } + } + /** Creates project pg.trigger */ + TriggersController_createTrigger: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateTriggerBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PostgresTrigger'] + } + } + 403: { + content: never + } + /** @description Failed to create pg.trigger */ + 500: { + content: never + } + } + } + /** Deletes project pg.trigger with the given ID */ + TriggersController_deleteTrigger: { + parameters: { + query: { + /** @description Trigger ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTrigger'] + } + } + 403: { + content: never + } + /** @description Failed to delete pg.trigger with the given ID */ + 500: { + content: never + } + } + } + /** Updates project pg.trigger with the given ID */ + TriggersController_updateTrigger: { + parameters: { + query: { + /** @description Trigger ID */ + id: number + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateTriggerBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresTrigger'] + } + } + 403: { + content: never + } + /** @description Failed to update pg.trigger with the given ID */ + 500: { + content: never + } + } + } + /** Gets project pg.types */ + TypesController_getTypes: { + parameters: { + query: { + included_schemas: string + excluded_schemas: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresType'][] + } + } + 403: { + content: never + } + /** @description Failed to get pg.types */ + 500: { + content: never + } + } + } + /** Retrieve database views */ + ViewsController_getViews: { + parameters: { + query: { + id: string + include_system_schemas: string + included_schemas: string + excluded_schemas: string + limit: string + offset: string + include_columns: string + } + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresView'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve database views */ + 500: { + content: never + } + } + } + /** Gets the user's access tokens */ + AccessTokensController_getAccessTokens: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['AccessToken'][] + } + } + /** @description Failed to get user's access tokens */ + 500: { + content: never + } + } + } + /** Creates a new access token */ + AccessTokensController_createAccessToken: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateAccessTokenBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['CreateAccessTokenResponse'] + } + } + /** @description Failed to create access token */ + 500: { + content: never + } + } + } + /** Gets the access token with the given ID */ + AccessTokensController_getAccessToken: { + parameters: { + path: { + /** @description Access token ID */ + id: number + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AccessToken'] + } + } + /** @description Failed to get access token */ + 500: { + content: never + } + } + } + /** Deletes the access token with the given ID */ + AccessTokensController_deleteAccessToken: { + parameters: { + path: { + /** @description Access token ID */ + id: number + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AccessToken'] + } + } + /** @description Failed to delete access token */ + 500: { + content: never + } + } + } + /** Gets a user's audit logs */ + UserAuditLogsController_getAuditLogs: { + parameters: { + query?: { + /** @description Start timestamp */ + iso_timestamp_start?: string + /** @description End timestamp */ + iso_timestamp_end?: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AuditLogsResponse'] + } + } + /** @description Failed to get a user's audit logs */ + 500: { + content: never + } + } + } + /** Search profiles by username, email with the given keywords */ + SearchProfileController_searchProfile: { + requestBody: { + content: { + 'application/json': components['schemas']['SearchProfileBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['Profile'][] + } + } + /** @description Failed to search profiles with the given keywords */ + 500: { + content: never + } + } + } + /** Gets the user's subscription statistics */ + SubscriptionsController_getSubscriptionsStatistics: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['SubscriptionStatisticsResponse'] + } + } + /** @description Failed to retrieve user's subscription statistics */ + 500: { + content: never + } + } + } + /** Check password strength */ + PasswordCheckController_checkPassword: { + requestBody: { + content: { + 'application/json': components['schemas']['PasswordCheckBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PasswordCheckResponse'] + } + } + /** @description Failed to check password strength */ + 500: { + content: never + } + } + } + /** Gets all the user's permissions */ + PermissionsController_getPermissions: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['Permission'][] + } + } + /** @description Failed to retrieve permissions */ + 500: { + content: never + } + } + } + /** Gets the user's profile */ + ProfileController_getProfile: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProfileResponse'] + } + } + /** @description Failed to retrieve user's profile */ + 500: { + content: never + } + } + } + /** Creates user's profile */ + ProfileController_createProfile: { + responses: { + 201: { + content: { + 'application/json': components['schemas']['ProfileResponse'] + } + } + /** @description Failed to create user's profile */ + 500: { + content: never + } + } + } + /** Deletes user's profile */ + ProfileController_deleteProfile: { + responses: { + 200: { + content: never + } + /** @description Forbidden action */ + 403: { + content: never + } + /** @description Failed to delete user's profile */ + 500: { + content: never + } + } + } + /** Updates user's profile */ + ProfileController_updateProfile: { + requestBody: { + content: { + 'application/json': components['schemas']['UpdateProfileBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProfileResponse'] + } + } + /** @description Failed to update user's profile */ + 500: { + content: never + } + } + } + /** + * Gets all projects that belong to the authenticated user + * @description Only returns the minimal project info + */ + ProjectsController_getProjects: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProjectInfo'][] + } + } + } + } + /** Creates a project */ + ProjectsController_createProject: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateProjectBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['CreateProjectResponse'] + } + } + } + } + /** Gets project linked to fly extension id */ + ProjectsController_getProjectByFlyExtensionId: { + parameters: { + path: { + fly_extension_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetProjectByFlyExtensionIdResponse'] + } + } + } + } + /** Gets project's content */ + ContentController_getContent: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetUserContentResponse'] + } + } + /** @description Failed to retrieve project's content */ + 500: { + content: never + } + } + } + /** Updates project's content */ + ContentController_updateWholeContent: { + requestBody: { + content: { + 'application/json': components['schemas']['UpsertContentParams'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UserContentObject'] + } + } + /** @description Failed to update project's content */ + 500: { + content: never + } + } + } + /** Creates project's content */ + ContentController_createContent: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateContentParams'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['UserContentObject'][] + } + } + /** @description Failed to create project's content */ + 500: { + content: never + } + } + } + /** Deletes project's contents */ + ContentController_deleteContents: { + parameters: { + query: { + ids: string[] + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['BulkDeleteUserContentResponse'][] + } + } + /** @description Failed to delete project's contents */ + 500: { + content: never + } + } + } + /** Updates project's content */ + ContentController_updateContent: { + parameters: { + query: { + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateContentParams'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UserContentObject'][] + } + } + /** @description Failed to update project's content */ + 500: { + content: never + } + } + } + /** Gets daily project stats */ + DailyStatsController_getDailyStats: { + parameters: { + query: { + attribute: string + interval: string + endDate: string + startDate: string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + /** @description Failed to get daily project stats */ + 500: { + content: never + } + } + } + /** Gets non-removed databases of a specified project */ + DatabasesController_getDatabases: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['DatabaseDetailResponse'][] + } + } + } + } + /** Gets statuses of databases within a project */ + DatabasesStatusesController_getStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['DatabaseStatusResponse'][] + } + } + /** @description Failed to get statuses of databases of a project */ + 500: { + content: never + } + } + } + /** Updates the database password */ + DbPasswordController_updatePassword: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePasswordBody'] + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to update database password */ + 500: { + content: never + } + } + } + /** Gets project health check */ + HealthCheckController_projectHealthCheck: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to get project health check */ + 500: { + content: never + } + } + } + /** Gets non-removed databases of a specified project */ + LoadBalancersController_getLoadBalancers: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['LoadBalancerDetailResponse'][] + } + } + } + } + /** Gets project OpenApi */ + ApiController_projectOpenApi: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to get project OpenApi */ + 500: { + content: never + } + } + } + /** Queries project Graphql */ + ApiController_projectGraphql: { + parameters: { + header: { + 'x-graphql-authorization': string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['Buffer'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to query project Graphql */ + 500: { + content: never + } + } + } + /** Gets project's usage metrics */ + InfraMonitoringController_getUsageMetrics: { + parameters: { + query: { + attribute: + | 'cpu_usage' + | 'max_cpu_usage' + | 'avg_cpu_usage' + | 'disk_io_budget' + | 'disk_io_consumption' + | 'ram_usage' + | 'swap_usage' + startDate: string + endDate: string + interval?: '1m' | '5m' | '10m' | '30m' | '1h' | '1d' + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + /** @description Failed to get project's usage metrics */ + 500: { + content: never + } + } + } + /** Pauses the project */ + PauseController_pauseProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + /** @description Failed to pause the project */ + 500: { + content: never + } + } + } + /** Resize database disk */ + ResizeController_resizeDatabase: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['ResizeBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to resize database disk */ + 500: { + content: never + } + } + } + /** Restarts project */ + RestartController_restartProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to restart project */ + 500: { + content: never + } + } + } + /** Gets a specific project that belongs to the authenticated user */ + ProjectsRefController_getProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProjectDetailResponse'] + } + } + } + } + /** Deletes the given project */ + ProjectsRefController_deleteProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1ProjectRefResponse'] + } + } + 403: { + content: never + } + } + } + /** Updates the given project */ + ProjectsRefController_updateProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateProjectBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProjectRefResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project */ + 500: { + content: never + } + } + } + /** Restores project */ + RestoreController_restoreProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['RestoreProjectInfo'] + } + } + /** @description Failed to restore project */ + 500: { + content: never + } + } + } + /** Restarts given services */ + RestartServicesController_restartServices: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RestartServicesBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to restart given services */ + 500: { + content: never + } + } + } + /** Gets project's settings */ + SettingsController_getProjectApi: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProjectSettingsResponse'] + } + } + /** @description Failed to retrieve project's settings */ + 500: { + content: never + } + } + } + /** + * Updates the project + * @deprecated + * @description Replaced by PATCH /platform/projects/:ref + */ + UpdateController_updateProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateProjectBody'] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to update project */ + 500: { + content: never + } + } + } + /** Previews transfering a project to a different organizations, shows eligibility and impact. */ + ProjectTransferController_previewTransfer: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['TransferProjectBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PreviewProjectTransferResponse'] + } + } + 403: { + content: never + } + } + } + /** Transfers a project to a different organization. */ + ProjectTransferController_transferProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['TransferProjectBody'] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + } + } + /** Gets a project's function invocation statistics */ + FunctionInvocationLogsController_getStatus: { + parameters: { + query: { + interval: '5min' | '15min' | '1hr' | '1day' | '7day' + function_id: string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AnalyticsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project's function invocation statistics */ + 500: { + content: never + } + } + } + /** Gets a project's function request statistics */ + FunctionRequestLogsController_getStatus: { + parameters: { + query: { + interval: '5min' | '15min' | '1hr' | '1day' | '7day' + function_id: string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AnalyticsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project's function request statistics */ + 500: { + content: never + } + } + } + /** Gets a project's function resource usage */ + FunctionResourceLogsController_getStatus: { + parameters: { + query: { + interval: '5min' | '15min' | '1hr' | '1day' | '7day' + function_id: string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AnalyticsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project's function resource usage */ + 500: { + content: never + } + } + } + /** Gets project's logs */ + LogsController_getApiPaths: { + parameters: { + query: { + sql: string + project: string + iso_timestamp_start: string + iso_timestamp_end: string + timestamp_start: string + timestamp_end: string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AnalyticsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project's logs */ + 500: { + content: never + } + } + } + /** Gets project's usage api counts */ + UsageApiController_getApiCounts: { + parameters: { + query: { + interval: 'minutely' | 'hourly' | 'daily' + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AnalyticsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project's usage api counts */ + 500: { + content: never + } + } + } + /** Gets project's usage api requests count */ + UsageApiController_getApiRequestsCount: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AnalyticsResponse'] + } + } + /** @description Failed to get project's usage api requests count */ + 500: { + content: never + } + } + } + /** Gets project's warehouse tenant from logflare */ + TenantController_getTenant: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFUser'] + } + } + 403: { + content: never + } + /** @description Failed to fetch or provision warehouse tenant */ + 500: { + content: never + } + } + } + /** Lists project's warehouse collections from logflare */ + CollectionController_listCollections: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFSource'][] + } + } + 403: { + content: never + } + /** @description Failed to fetch warehouse collections */ + 500: { + content: never + } + } + } + /** Create a warehouse collection */ + CollectionController_createCollection: { + responses: { + 201: { + content: { + 'application/json': components['schemas']['LFSource'] + } + } + 403: { + content: never + } + /** @description Failed to create warehouse collection */ + 500: { + content: never + } + } + } + /** Get a warehouse collection */ + CollectionController_getCollection: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFSource'] + } + } + 403: { + content: never + } + /** @description Failed to fetch warehouse collection */ + 500: { + content: never + } + } + } + /** Delete a warehouse collection */ + CollectionController_deleteCollection: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFSource'] + } + } + 403: { + content: never + } + /** @description Failed to delete warehouse collection */ + 500: { + content: never + } + } + } + /** Update a warehouse collection */ + CollectionController_updateCollection: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFSource'] + } + } + 403: { + content: never + } + /** @description Failed to update warehouse collection */ + 500: { + content: never + } + } + } + /** Lists project's warehouse access tokens from logflare */ + AccessTokenController_listAccessTokens: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFSource'][] + } + } + 403: { + content: never + } + /** @description Failed to fetch warehouse access tokens */ + 500: { + content: never + } + } + } + /** Create a warehouse access token */ + AccessTokenController_createAccessToken: { + responses: { + 201: { + content: { + 'application/json': components['schemas']['LFSource'] + } + } + 403: { + content: never + } + /** @description Failed to create warehouse access token */ + 500: { + content: never + } + } + } + /** Delete a warehouse access token */ + AccessTokenController_deleteAccessToken: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFSource'] + } + } + 403: { + content: never + } + /** @description Failed to delete warehouse access token */ + 500: { + content: never + } + } + } + /** Lists project's warehouse endpoints from logflare */ + EndpointController_listEndpoints: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFEndpoint'][] + } + } + 403: { + content: never + } + /** @description Failed to fetch warehouse endpoints */ + 500: { + content: never + } + } + } + /** Create a warehouse endpoint */ + EndpointController_createEndpoint: { + responses: { + 201: { + content: { + 'application/json': components['schemas']['LFEndpoint'] + } + } + 403: { + content: never + } + /** @description Failed to create warehouse endpoint */ + 500: { + content: never + } + } + } + /** Update a warehouse endpoint */ + EndpointController_updateEndpoint: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['LFEndpoint'] + } + } + 403: { + content: never + } + /** @description Failed to update warehouse endpoint */ + 500: { + content: never + } + } + } + /** Delete a warehouse endpoint */ + EndpointController_deleteEndpoint: { + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete warehouse endpoint */ + 500: { + content: never + } + } + } + /** Lists project's warehouse queries from logflare */ + WarehouseQueryController_runQuery: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to fetch warehouse endpoints */ + 500: { + content: never + } + } + } + /** Gets project's pgbouncer config */ + PgbouncerConfigController_getPgbouncerConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PgbouncerConfigResponse'] + } + } + /** @description Failed to retrieve project's pgbouncer config */ + 500: { + content: never + } + } + } + /** Updates project's pgbouncer config */ + PgbouncerConfigController_updatePgbouncerConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePgbouncerConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpdatePoolingConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project's pgbouncer config */ + 500: { + content: never + } + } + } + /** Gets project's pgbouncer status */ + PgbouncerConfigController_getPgbouncerStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PgbouncerStatusResponse'] + } + } + /** @description Failed to retrieve project's pgbouncer status */ + 500: { + content: never + } + } + } + /** Gets project's postgrest config */ + PostgrestConfigController_getPostgRESTConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgrestConfigWithJWTSecretResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's postgrest config */ + 500: { + content: never + } + } + } + /** Updates project's postgrest config */ + PostgrestConfigController_updatePostgRESTConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePostgrestConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1PostgrestConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project's postgrest config */ + 500: { + content: never + } + } + } + /** Gets project's Postgres config */ + PostgresConfigController_getConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresConfigResponse'] + } + } + /** @description Failed to retrieve project's Postgres config */ + 500: { + content: never + } + } + } + /** Updates project's Postgres config */ + PostgresConfigController_updateConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePostgresConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresConfigResponse'] + } + } + /** @description Failed to update project's Postgres config */ + 500: { + content: never + } + } + } + /** Updates project's secrets config */ + SecretsConfigController_updateConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateSecretsConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpdateSecretsResponse'] + } + } + /** @description Failed to update project's secrets config */ + 500: { + content: never + } + } + } + /** Gets project's storage config */ + StorageConfigController_getConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['StorageConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's storage config */ + 500: { + content: never + } + } + } + /** Updates project's storage config */ + StorageConfigController_updateConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateStorageConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpdateStorageConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project's storage config */ + 500: { + content: never + } + } + } + /** Gets project's supavisor config */ + SupavisorConfigController_getSupavisorConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['SupavisorConfigResponse'][] + } + } + /** @description Failed to retrieve project's supavisor config */ + 500: { + content: never + } + } + } + /** Updates project's supavisor config */ + SupavisorConfigController_updateSupavisorConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateSupavisorConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpdateSupavisorConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project's supavisor config */ + 500: { + content: never + } + } + } + /** Gets project addons */ + ProjectAddonController_getProjectAddons: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProjectAddonsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project addons */ + 500: { + content: never + } + } + } + /** Updates project addon */ + ProjectAddonController_updateAddon: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateAddonBody'] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to update project addon */ + 500: { + content: never + } + } + } + /** Removes project addon */ + ProjectAddonController_removeAddon: { + parameters: { + path: { + /** @description Project ref */ + ref: string + addon_variant: components['schemas']['AddonVariantId'] + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to remove project addon */ + 500: { + content: never + } + } + } + /** + * Gets project's api info + * @deprecated + */ + ApiController_getProjectApi: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ApiResponse'] + } + } + /** @description Failed to retrieve project's api info */ + 500: { + content: never + } + } + } + /** Gets the last JWT secret update status */ + JwtSecretUpdateStatusController_getJwtSecretUpdateStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['JwtSecretUpdateStatus'] + } + } + /** @description Failed to retrieve JWT secret update status */ + 500: { + content: never + } + } + } + /** Gets bucket */ + StorageBucketIdController_getBucket: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['StorageBucket'] + } + } + 403: { + content: never + } + /** @description Failed to get bucket */ + 500: { + content: never + } + } + } + /** Deletes bucket */ + StorageBucketIdController_deleteBucket: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete bucket */ + 500: { + content: never + } + } + } + /** Updates bucket */ + StorageBucketIdController_updateBucket: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateStorageBucketBody'] + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to update bucket */ + 500: { + content: never + } + } + } + /** Removes all objects inside a single bucket. */ + StorageBucketIdController_emptyBucket: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to empty bucket */ + 500: { + content: never + } + } + } + /** Gets list of buckets */ + StorageBucketsController_getBuckets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['StorageBucket'][] + } + } + 403: { + content: never + } + /** @description Failed to get list of buckets */ + 500: { + content: never + } + } + } + /** Create bucket */ + StorageBucketsController_createBucket: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateStorageBucketBody'] + } + } + responses: { + 201: { + content: { + 'application/json': string + } + } + 403: { + content: never + } + /** @description Failed to create bucket */ + 500: { + content: never + } + } + } + /** Gets list of objects with the given bucket */ + StorageObjectsController_getObjects: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['GetObjectsBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['StorageObject'][] + } + } + 403: { + content: never + } + /** @description Failed to get list of objects with the given bucket */ + 500: { + content: never + } + } + } + /** Creates URL for an asset in a public bucket */ + StorageObjectsController_createPublicUrl: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['GetPublicUrlBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['PublicUrlResponse'] + } + } + 403: { + content: never + } + /** @description Failed to create public URL */ + 500: { + content: never + } + } + } + /** Downloads a file from a private bucket */ + StorageObjectsController_download: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['DownloadObjectBody'] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to download the file */ + 500: { + content: never + } + } + } + /** Creates a signed URL */ + StorageObjectsController_createSignedUrl: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['GetSignedUrlBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SignedUrlResponse'] + } + } + 403: { + content: never + } + /** @description Failed to create a signed URL */ + 500: { + content: never + } + } + } + /** Gets multiple signed URLs */ + StorageObjectsController_createSignedUrls: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['GetSignedUrlsBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SignedUrlsResponse'][] + } + } + 403: { + content: never + } + /** @description Failed to get multiple signed URLs */ + 500: { + content: never + } + } + } + /** Copys object */ + StorageObjectsController_copyObject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CopyObjectBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['CopyObjectResponse'] + } + } + 403: { + content: never + } + /** @description Failed to copy object */ + 500: { + content: never + } + } + } + /** Move object */ + StorageObjectsController_moveObject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['MoveObjectBody'] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to move object */ + 500: { + content: never + } + } + } + /** Deletes objects */ + StorageObjectsController_deleteObjects: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage bucket id */ + id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['DeleteObjectsBody'] + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete objects */ + 500: { + content: never + } + } + } + /** Gets project storage credentials */ + StorageS3CredentialsController_getAllCredentials: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetStorageCredentialsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project storage credentials */ + 500: { + content: never + } + } + } + /** Creates project storage credential */ + StorageS3CredentialsController_createCredential: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateStorageCredentialBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['CreateStorageCredentialResponse'] + } + } + 403: { + content: never + } + /** @description Failed to create project storage credential */ + 500: { + content: never + } + } + } + /** Deletes project storage credential */ + StorageS3CredentialsController_deleteCredential: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Storage credential id */ + id: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete project storage credential */ + 500: { + content: never + } + } + } + /** Gets invoices for the given customer */ + InvoicesController_getInvoices: { + parameters: { + query: { + customer: string + slug?: string + limit: string + offset: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['Invoice'][] + } + } + /** @description Failed to retrieve invoices */ + 500: { + content: never + } + } + } + /** Gets the total count of invoices for the given customer */ + InvoicesController_countInvoices: { + parameters: { + query: { + customer: string + slug?: string + } + } + responses: { + 200: { + headers: { + /** @description total count value */ + 'X-Total-Count'?: unknown + } + content: never + } + /** @description Failed to retrieve the total count of invoices */ + 500: { + content: never + } + } + } + /** Gets information about overdue invoices that relate to the authenticated user */ + InvoicesController_getOverdueInvoices: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['OverdueInvoiceCount'][] + } + } + } + } + /** Gets invoice with the given invoice ID */ + InvoicesController_getInvoice: { + parameters: { + path: { + id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['Invoice'] + } + } + /** @description Failed to retrieve invoice */ + 500: { + content: never + } + } + } + /** Sets up a payment method */ + SetupIntentController_setUpPaymentMethod: { + requestBody: { + content: { + 'application/json': components['schemas']['HCaptchaBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SetupIntentResponse'] + } + } + /** @description Failed to set up a payment method */ + 500: { + content: never + } + } + } + /** Sends analytics server event */ + TelemetryEventController_sendServerEvent: { + requestBody: { + content: { + 'application/json': components['schemas']['TelemetryEventBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to send analytics server event */ + 500: { + content: never + } + } + } + /** Send analytics identify event */ + TelemetryIdentifyController_identify: { + requestBody: { + content: { + 'application/json': components['schemas']['TelemetryIdentifyBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to send analytics identify event */ + 500: { + content: never + } + } + } + /** Send server page event */ + TelemetryPageController_sendServerPage: { + requestBody: { + content: { + 'application/json': components['schemas']['TelemetryPageBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to send server page event */ + 500: { + content: never + } + } + } + /** Sends mixpanel server activity */ + TelemetryActivityController_sendServerActivity: { + requestBody: { + content: { + 'application/json': components['schemas']['TelemetryActivityBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to send mixpanel server activity */ + 500: { + content: never + } + } + } + /** Send mixpanel page event */ + TelemetryPageviewController_sendServerPageViewed: { + requestBody: { + content: { + 'application/json': components['schemas']['TelemetryPageviewBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to send mixpanel page event */ + 500: { + content: never + } + } + } + /** Gets the Vercel access token for the given code */ + VercelAccessTokenController_getAccessToken: { + parameters: { + query: { + code: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to get Vercel access token */ + 500: { + content: never + } + } + } + /** Gets the list of Vercel projects */ + VercelProjectsController_getVercelProjects: { + parameters: { + query: { + id: string + teamId: string + } + header: { + vercel_authorization: string + } + } + responses: { + 200: { + content: { + 'application/json': Record[] + } + } + /** @description Failed to get projects */ + 500: { + content: never + } + } + } + /** Gets the Vercel project with the given ID */ + VercelProjectsController_getVercelProject: { + parameters: { + query: { + id: string + teamId: string + } + header: { + vercel_authorization: string + } + path: { + id: string + teamId: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + /** @description Failed to get project */ + 500: { + content: never + } + } + } + /** Gets the environment variables for the given project ID on behalf of the given team ID */ + VercelEnvironmentVariablesController_getEnvironmentVariables: { + parameters: { + query: { + projectId: string + teamId?: string + } + header: { + vercel_authorization: string + } + } + responses: { + 200: { + content: { + 'application/json': Record[] + } + } + /** @description Failed to get Vercel environment variables */ + 500: { + content: never + } + } + } + /** Creates the environment variable for the given project ID on behalf of the given team ID */ + VercelEnvironmentVariablesController_createEnvironmentVariable: { + parameters: { + query: { + projectId: string + teamId?: string + } + header: { + vercel_authorization: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateVercelEnvironmentVariableBody'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + /** @description Failed to get the environment variables */ + 500: { + content: never + } + } + } + /** Gets user's integrations */ + IntegrationsController_getProjectConnections: { + parameters: { + query: { + /** @description Filter results by integration name. Optional */ + integration_name: unknown + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetUserOrganizationIntegrationResponse'][] + } + } + /** @description Failed to get user's integrations */ + 500: { + content: never + } + } + } + /** Gets integration with the given organization slug */ + IntegrationsController_getProjectConnectionsForOrg: { + parameters: { + path: { + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetOrganizationIntegrationResponse'][] + } + } + /** @description Failed to get integration with the given organization slug */ + 500: { + content: never + } + } + } + /** + * Create vercel integration + * @description Exchanges a vercel code for an access token and saves the access token to the new integration record + */ + VercelIntegrationController_createVercelIntegration: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateVercelIntegrationBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to create vercel integration */ + 500: { + content: never + } + } + } + /** Removes Vercel organization integration with the given id */ + VercelIntegrationController_removeVercelIntegration: { + parameters: { + path: { + organization_integration_id: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to remove Vercel organization integration with the given id */ + 500: { + content: never + } + } + } + /** Gets vercel projects with the given organization integration id */ + VercelProjectController_getVercelProjects: { + parameters: { + query: { + search?: string + from?: string + limit: string + } + path: { + organization_integration_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetVercelProjectsResponse'] + } + } + /** @description Failed to get vercel projects with the given organization integration id */ + 500: { + content: never + } + } + } + /** Gets installed vercel project connections for the given organization integration */ + VercelConnectionsController_getVercelConnections: { + parameters: { + path: { + organization_integration_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetVercelConnections'][] + } + } + /** @description Failed to get installed vercel connections for the given organization integration */ + 500: { + content: never + } + } + } + /** Connects a Vercel project to a supabase project */ + VercelConnectionsController_createVercelConnection: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateVercelConnectionsBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['CreateVercelConnectionResponse'] + } + } + /** @description Failed to create project connection */ + 500: { + content: never + } + } + } + /** Syncs supabase project envs with given connection id */ + VercelConnectionsController_syncVercelConnectionEnvironments: { + parameters: { + path: { + connection_id: string + } + } + responses: { + 201: { + content: never + } + /** @description Failed to sync supabase project envs with given connection id */ + 500: { + content: never + } + } + } + /** Deletes vercel project connection */ + VercelConnectionsController_deleteVercelConnection: { + parameters: { + path: { + connection_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['DeleteVercelConnectionResponse'] + } + } + /** @description Failed to delete vercel integration project connection */ + 500: { + content: never + } + } + } + /** Updates a Vercel connection for a supabase project */ + VercelConnectionsController_updateVercelConnection: { + parameters: { + path: { + connection_id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateVercelConnectionsBody'] + } + } + responses: { + 200: { + content: never + } + /** @description Failed to update Vercel connection */ + 500: { + content: never + } + } + } + /** Get GitHub authorization */ + GitHubAuthorizationsController_getGitHubAuthorization: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['GitHubAuthorization'] + } + } + /** @description Failed to get GitHub authorization */ + 500: { + content: never + } + } + } + /** Create GitHub authorization */ + GitHubAuthorizationsController_createGitHubAuthorization: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateGitHubAuthorizationBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to create GitHub authorization */ + 500: { + content: never + } + } + } + /** List organization GitHub connections */ + GitHubConnectionsController_listOrganizationGitHubConnections: { + parameters: { + query: { + organization_id: number + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ListGitHubConnectionsResponse'] + } + } + /** @description Failed to list organization GitHub connections */ + 500: { + content: never + } + } + } + /** Connects a GitHub project to a supabase project */ + GitHubConnectionsController_createGitHubConnection: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateGitHubConnectionsBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to create project connections */ + 500: { + content: never + } + } + } + /** Deletes github project connection */ + GitHubConnectionsController_deleteGitHubConnection: { + parameters: { + path: { + connection_id: string + } + } + responses: { + 204: { + content: never + } + /** @description Failed to delete github integration project connection */ + 500: { + content: never + } + } + } + /** Updates a GitHub connection for a supabase project */ + GitHubConnectionsController_updateGitHubConnection: { + parameters: { + path: { + connection_id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateGitHubConnectionsBody'] + } + } + responses: { + 204: { + content: never + } + /** @description Failed to update GitHub connection */ + 500: { + content: never + } + } + } + /** List GitHub connection branches */ + GitHubBranchesController_listConnectionBranches: { + parameters: { + query?: { + per_page?: number + page?: number + } + path: { + connectionId: number + } + } + responses: { + 200: { + content: { + 'application/json': Record[] + } + } + /** @description Failed to list GitHub connection branches */ + 500: { + content: never + } + } + } + /** Get GitHub connection branch */ + GitHubBranchesController_getConnectionBranch: { + parameters: { + path: { + connectionId: number + branchName: string + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + /** @description Failed to get GitHub connection branch */ + 500: { + content: never + } + } + } + /** Gets GitHub repositories for user */ + GitHubRepositoriesController_listRepositories: { + responses: { + 200: { + content: never + } + /** @description Failed to get GitHub repositories for user */ + 500: { + content: never + } + } + } + /** Create CLI login session */ + CliLoginController_createCliLoginSession: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateCliLoginSessionBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to create CLI login session */ + 500: { + content: never + } + } + } + /** Retrieve CLI login session */ + CliLoginController_getCliLoginSession: { + parameters: { + path: { + session_id: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to retrieve CLI login session */ + 500: { + content: never + } + } + } + /** Gets GoTrue template */ + AuthTemplateController_getTemplate: { + parameters: { + path: { + ref: string + template: + | 'confirmation' + | 'email-change' + | 'invite' + | 'magic-link' + | 'recovery' + | 'reauthentication' + } + } + responses: { + 200: { + content: { + 'application/json': string + } + } + /** @description Failed to retrieve GoTrue template */ + 500: { + content: never + } + } + } + /** Gets the status of owner reassignment */ + DatabaseOwnerController_getOwnerReassignStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + /** @description Failed to get status of owner reassignment */ + 500: { + content: never + } + } + } + /** Reassigns object owner from supabase_admin to temp */ + DatabaseOwnerController_applyOwnerReassign: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + 403: { + content: never + } + /** @description Failed to reassign owner on the project */ + 500: { + content: never + } + } + } + /** Rollback object owner from temp to supabase_admin */ + DatabaseOwnerController_rollbackOwnerReassign: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + 403: { + content: never + } + /** @description Failed to rollback owner on the project */ + 500: { + content: never + } + } + } + /** Reassigns object owner from temp to postgres */ + DatabaseOwnerController_finaliseOwnerReassign: { + parameters: { + header: { + 'x-connection-encrypted': string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OwnerResponse'] + } + } + 403: { + content: never + } + /** @description Failed to reassign owner on the project */ + 500: { + content: never + } + } + } + /** Updates the database password */ + DatabasePasswordController_updatePassword: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePasswordBody'] + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to update database password */ + 500: { + content: never + } + } + } + /** Reset JWT if leaked keys found by GitHub secret scanning */ + GithubSecretAlertController_resetJwt: { + parameters: { + header: { + 'github-public-key-identifier': string + 'github-public-key-signature': string + } + } + requestBody: { + content: { + 'application/json': string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to reset JWT */ + 500: { + content: never + } + } + } + /** + * Update a function + * @description Updates a function with the specified slug and project. + */ + SystemFunctionSlugController_updateFunction: { + parameters: { + query?: { + slug?: string + name?: string + verify_jwt?: boolean + import_map?: boolean + entrypoint_path?: string + import_map_path?: string + } + path: { + /** @description Project ref */ + ref: string + /** @description Function slug */ + function_slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['V1UpdateFunctionBody'] + 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['FunctionResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update function with given slug */ + 500: { + content: never + } + } + } + /** + * List all functions + * @description Returns all functions you've previously added to the specified project. + */ + SystemFunctionsController_getFunctions: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['FunctionResponse'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's functions */ + 500: { + content: never + } + } + } + /** + * Create a function + * @description Creates a function and adds it to the specified project. + */ + SystemFunctionsController_createFunction: { + parameters: { + query?: { + slug?: string + name?: string + verify_jwt?: boolean + import_map?: boolean + entrypoint_path?: string + import_map_path?: string + } + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['V1CreateFunctionBody'] + 'application/vnd.denoland.eszip': components['schemas']['V1CreateFunctionBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['FunctionResponse'] + } + } + 403: { + content: never + } + /** @description Failed to create project's function */ + 500: { + content: never + } + } + } + /** Deletes all Edge Functions from a project */ + SystemFunctionsController_systemDeleteAllFunctions: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: never + } + } + } + /** + * List all secrets + * @description Returns all secrets you've previously added to the specified project. + */ + SystemSecretsController_getSecrets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['SecretResponse'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's secrets */ + 500: { + content: never + } + } + } + /** + * Bulk create secrets + * @description Creates multiple secrets and adds them to the specified project. + */ + SystemSecretsController_createSecrets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateSecretBody'][] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to create project's secrets */ + 500: { + content: never + } + } + } + /** + * Bulk delete secrets + * @description Deletes all secrets with the given names from the specified project + */ + SystemSecretsController_deleteSecrets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': string[] + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to delete secrets with given names */ + 500: { + content: never + } + } + } + /** Refreshes secrets */ + SecretsRefreshController_refreshSecrets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + /** @description Failed to refresh secrets */ + 500: { + content: never + } + } + } + /** Get API health status */ + HealthController_getStatus: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['HealthResponse'] + } + } + /** @description Failed to retrieve API health status */ + 500: { + content: never + } + } + } + /** Updates a project's health status. */ + HealthReportingController_updateStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['ReportStatusBody'] + } + } + responses: { + 200: { + content: never + } + /** @description Failed to update health status. */ + 500: { + content: never + } + } + } + /** Records an HA event */ + HaEventsController_updateStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['EventBody'] + } + } + responses: { + 200: { + content: never + } + /** @description Failed to record HA event. */ + 500: { + content: never + } + } + } + /** Allows a project to obtain temporary credentials. */ + AwsCredentialsController_getTemporaryCredentials: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CredentialsRequestBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['CredentialsResponseBody'] + } + } + /** @description Failed to obtain temporary credentials. */ + 500: { + content: never + } + } + } + /** Updates project addon */ + AddonsController_updateAddon: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateAddonAdminBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to update project addon */ + 500: { + content: never + } + } + } + /** Removes project addon */ + AddonsController_removeAddon: { + parameters: { + path: { + /** @description Project ref */ + ref: string + addon_variant: components['schemas']['AddonVariantId'] + } + } + responses: { + 200: { + content: never + } + /** @description Failed to remove project addon */ + 500: { + content: never + } + } + } + /** Handle update project jwt on completion */ + ProjectUpdateJwtController_completeUpdateJwt: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + } + } + /** Gets usage stats */ + OrgUsageSystemController_getOrgUsage: { + parameters: { + query?: { + project_ref?: string + start?: string + end?: string + } + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OrgUsageResponse'] + } + } + /** @description Failed to get usage stats */ + 500: { + content: never + } + } + } + /** Gets the partner usage and costs */ + PartnerBillingSystemController_getPartnerUsageAndCosts: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to retrieve subscription */ + 500: { + content: never + } + } + } + /** Gets the current subscription */ + OrgSubscriptionSystemController_getSubscription: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to retrieve subscription */ + 500: { + content: never + } + } + } + /** Updates subscription */ + OrgSubscriptionSystemController_updateSubscription: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateSubscriptionV2AdminBody'] + } + } + responses: { + 200: { + content: never + } + /** @description Failed to update subscription */ + 500: { + content: never + } + } + } + /** Updates restriction status of an org */ + OrgRestrictionsSystemController_updateRestriction: { + parameters: { + path: { + /** @description Organization slug */ + slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateRestrictionsBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpdateRestrictionsResponse'] + } + } + /** @description Failed to update restriction status */ + 500: { + content: never + } + } + } + /** Creates a partner organization */ + AwsPartnerOrganizationsSystemController_createPartnerOrganization: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateAwsPartnerOrganizationBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['AwsPartnerOrganizationResponse'] + } + } + /** @description Unexpected error creating a partner organization */ + 500: { + content: never + } + } + } + /** Processes Vercel event */ + VercelWebhooksController_processEvent: { + parameters: { + header: { + 'x-vercel-signature': string + } + } + responses: { + 201: { + content: never + } + /** @description Failed to process Vercel event */ + 500: { + content: never + } + } + } + /** Processes GitHub event */ + GitHubWebhooksController_processEvent: { + parameters: { + header: { + 'x-github-delivery': string + 'x-github-event': string + 'x-hub-signature-256': string + } + } + responses: { + 201: { + content: never + } + /** @description Failed to process GitHub event */ + 500: { + content: never + } + } + } + /** Processes Stripe event */ + StripeWebhooksController_processEvent: { + parameters: { + header: { + 'stripe-signature': string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['Buffer'] + } + } + responses: { + 200: { + content: never + } + /** @description Failed to process Stripe event */ + 500: { + content: never + } + } + } + /** + * Get metrics + * @description At most 50 projects can be queried at a time. + * Currently supports '1d', '3d', and '7d' intervals. + */ + V0ProjectsMetricsController_getProjectsMetrics: { + requestBody: { + content: { + 'application/json': components['schemas']['GetMetricsBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetMetricsResponse'] + } + } + } + } + /** + * Get database branch config + * @description Fetches configurations of the specified database branch + */ + BranchController_getBranchDetails: { + parameters: { + path: { + /** @description Branch ID */ + branch_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['BranchDetailResponse'] + } + } + /** @description Failed to retrieve database branch */ + 500: { + content: never + } + } + } + /** + * Delete a database branch + * @description Deletes the specified database branch + */ + BranchController_deleteBranch: { + parameters: { + path: { + /** @description Branch ID */ + branch_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['BranchDeleteResponse'] + } + } + /** @description Failed to delete database branch */ + 500: { + content: never + } + } + } + /** + * Update database branch config + * @description Updates the configuration of the specified database branch + */ + BranchController_updateBranch: { + parameters: { + path: { + /** @description Branch ID */ + branch_id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateBranchBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['BranchResponse'] + } + } + /** @description Failed to update database branch */ + 500: { + content: never + } + } + } + /** + * Resets a database branch + * @description Resets the specified database branch + */ + BranchController_resetBranch: { + parameters: { + path: { + /** @description Branch ID */ + branch_id: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['BranchResetResponse'] + } + } + /** @description Failed to reset database branch */ + 500: { + content: never + } + } + } + /** + * List all projects + * @description Returns a list of all projects you've previously created. + */ + V1ProjectsController_getProjects: { + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1ProjectResponse'][] + } + } + } + } + /** Create a project */ + V1ProjectsController_createProject: { + requestBody: { + content: { + 'application/json': components['schemas']['V1CreateProjectBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['V1ProjectResponse'] + } + } + } + } + /** Get project api keys */ + ApiKeysController_getProjectApiKeys: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ApiKeyResponse'][] + } + } + 403: { + content: never + } + } + } + /** + * List all database branches + * @description Returns all database branches of the specified project. + */ + BranchesController_getBranches: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['BranchResponse'][] + } + } + /** @description Failed to retrieve database branches */ + 500: { + content: never + } + } + } + /** + * Create a database branch + * @description Creates a database branch from the specified project. + */ + BranchesController_createBranch: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateBranchBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['BranchResponse'] + } + } + /** @description Failed to create database branch */ + 500: { + content: never + } + } + } + /** + * Disables preview branching + * @description Disables preview branching for the specified project + */ + BranchesController_disableBranch: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: never + } + /** @description Failed to disable preview branching */ + 500: { + content: never + } + } + } + /** Gets project's custom hostname config */ + CustomHostnamesController_getCustomHostnameConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpdateCustomHostnameResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's custom hostname config */ + 500: { + content: never + } + } + } + /** Deletes a project's custom hostname configuration */ + CustomHostnamesController_removeCustomHostnameConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete project custom hostname configuration */ + 500: { + content: never + } + } + } + /** Updates project's custom hostname configuration */ + CustomHostnamesController_createCustomHostnameConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateCustomHostnameBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['UpdateCustomHostnameResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project custom hostname configuration */ + 500: { + content: never + } + } + } + /** Attempts to verify the DNS configuration for project's custom hostname configuration */ + CustomHostnamesController_reverify: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['UpdateCustomHostnameResponse'] + } + } + 403: { + content: never + } + /** @description Failed to verify project custom hostname configuration */ + 500: { + content: never + } + } + } + /** Activates a custom hostname for a project. */ + CustomHostnamesController_activate: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['UpdateCustomHostnameResponse'] + } + } + 403: { + content: never + } + /** @description Failed to activate project custom hostname configuration */ + 500: { + content: never + } + } + } + /** Gets project's network bans */ + NetworkBansController_getNetworkBans: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['NetworkBanResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's network bans */ + 500: { + content: never + } + } + } + /** Remove network bans. */ + NetworkBansController_removeNetworkBan: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RemoveNetworkBanRequest'] + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to remove network bans. */ + 500: { + content: never + } + } + } + /** Gets project's network restrictions */ + NetworkRestrictionsController_getNetworkRestrictions: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['NetworkRestrictionsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's network restrictions */ + 500: { + content: never + } + } + } + /** Updates project's network restrictions */ + NetworkRestrictionsController_applyNetworkRestrictions: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['NetworkRestrictionsRequest'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['NetworkRestrictionsResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project network restrictions */ + 500: { + content: never + } + } + } + /** Gets project's pgsodium config */ + PgsodiumConfigController_getPgsodiumConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PgsodiumConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's pgsodium config */ + 500: { + content: never + } + } + } + /** Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */ + PgsodiumConfigController_updatePgsodiumConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePgsodiumConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PgsodiumConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project's pgsodium config */ + 500: { + content: never + } + } + } + /** + * List all secrets + * @description Returns all secrets you've previously added to the specified project. + */ + SecretsController_getSecrets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['SecretResponse'][] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's secrets */ + 500: { + content: never + } + } + } + /** + * Bulk create secrets + * @description Creates multiple secrets and adds them to the specified project. + */ + SecretsController_createSecrets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateSecretBody'][] + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to create project's secrets */ + 500: { + content: never + } + } + } + /** + * Bulk delete secrets + * @description Deletes all secrets with the given names from the specified project + */ + SecretsController_deleteSecrets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': string[] + } + } + responses: { + 200: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to delete secrets with given names */ + 500: { + content: never + } + } + } + /** Get project's SSL enforcement configuration. */ + SslEnforcementController_getSslEnforcementConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['SslEnforcementResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's SSL enforcement config */ + 500: { + content: never + } + } + } + /** Update project's SSL enforcement configuration. */ + SslEnforcementController_updateSslEnforcementConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['SslEnforcementRequest'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['SslEnforcementResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project's SSL enforcement configuration. */ + 500: { + content: never + } + } + } + /** + * Generate TypeScript types + * @description Returns the TypeScript types of your schema for use with supabase-js. + */ + TypesController_getTypescriptTypes: { + parameters: { + query?: { + included_schemas?: string + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['TypescriptResponse'] + } + } + 403: { + content: never + } + /** @description Failed to generate TypeScript types */ + 500: { + content: never + } + } + } + /** Gets current vanity subdomain config */ + VanitySubdomainsController_getVanitySubdomainConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['VanitySubdomainConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to get project vanity subdomain configuration */ + 500: { + content: never + } + } + } + /** Deletes a project's vanity subdomain configuration */ + VanitySubdomainsController_removeVanitySubdomainConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete project vanity subdomain configuration */ + 500: { + content: never + } + } + } + /** Checks vanity subdomain availability */ + VanitySubdomainsController_checkVanitySubdomainAvailability: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['VanitySubdomainBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['SubdomainAvailabilityResponse'] + } + } + 403: { + content: never + } + /** @description Failed to check project vanity subdomain configuration */ + 500: { + content: never + } + } + } + /** Activates a vanity subdomain for a project. */ + VanitySubdomainsController_activateVanitySubdomainPlease: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['VanitySubdomainBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['ActivateVanitySubdomainResponse'] + } + } + 403: { + content: never + } + /** @description Failed to activate project vanity subdomain configuration */ + 500: { + content: never + } + } + } + /** Upgrades the project's Postgres version */ + UpgradeController_upgradeProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpgradeDatabaseBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['ProjectUpgradeInitiateResponse'] + } + } + 403: { + content: never + } + /** @description Failed to initiate project upgrade */ + 500: { + content: never + } + } + } + /** Returns the project's eligibility for upgrades */ + UpgradeController_upgradeEligibilityInformation: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ProjectUpgradeEligibilityResponse'] + } + } + 403: { + content: never + } + /** @description Failed to determine project upgrade eligibility */ + 500: { + content: never + } + } + } + /** Gets the latest status of the project's upgrade */ + UpgradeController_getUpgradeStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['DatabaseUpgradeStatusResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project upgrade status */ + 500: { + content: never + } + } + } + /** Returns project's readonly mode status */ + ReadOnlyController_getReadOnlyModeStatus: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ReadOnlyStatusResponse'] + } + } + /** @description Failed to get project readonly mode status */ + 500: { + content: never + } + } + } + /** Disables project's readonly mode for the next 15 minutes */ + ReadOnlyController_temporarilyDisableReadonlyMode: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + /** @description Failed to disable project's readonly mode */ + 500: { + content: never + } + } + } + /** Set up a read replica */ + ReadReplicaController_setUpReadReplica: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['SetUpReadReplicaBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to set up read replica */ + 500: { + content: never + } + } + } + /** Remove a read replica */ + ReadReplicaController_removeReadReplica: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['RemoveReadReplicaBody'] + } + } + responses: { + 201: { + content: never + } + /** @description Failed to remove read replica */ + 500: { + content: never + } + } + } + /** Gets project's service health status */ + ServiceHealthController_checkServiceHealth: { + parameters: { + query: { + timeout_ms?: number + services: ('auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage')[] + } + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1ServiceHealthResponse'][] + } + } + /** @description Failed to retrieve project's service health status */ + 500: { + content: never + } + } + } + /** Gets project's Postgres config */ + AuthPostgresConfigController_getConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresConfigResponse'] + } + } + /** @description Failed to retrieve project's Postgres config */ + 500: { + content: never + } + } + } + /** Updates project's Postgres config */ + AuthPostgresConfigController_updateConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePostgresConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['PostgresConfigResponse'] + } + } + /** @description Failed to update project's Postgres config */ + 500: { + content: never + } + } + } + /** Get project's pgbouncer config */ + V1PgbouncerConfigController_v1GetPgbouncerConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1PgbouncerConfigResponse'] + } + } + /** @description Failed to retrieve project's pgbouncer config */ + 500: { + content: never + } + } + } + /** Gets project's auth config */ + V1AuthConfigController_getV1AuthConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AuthConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve project's auth config */ + 500: { + content: never + } + } + } + /** Updates a project's auth config */ + V1AuthConfigController_updateV1AuthConfig: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateAuthConfigBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['AuthConfigResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update project's auth config */ + 500: { + content: never + } + } + } + /** Lists all third-party auth integrations */ + ThirdPartyAuthController_listTPAForProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ThirdPartyAuth'][] + } + } + 403: { + content: never + } + } + } + /** Creates a new third-party auth integration */ + ThirdPartyAuthController_createTPAForProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateThirdPartyAuthBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['ThirdPartyAuth'] + } + } + 403: { + content: never + } + } + } + /** Get a third-party integration */ + ThirdPartyAuthController_getTPAForProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + tpa_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ThirdPartyAuth'] + } + } + 403: { + content: never + } + } + } + /** Removes a third-party auth integration */ + ThirdPartyAuthController_deleteTPAForProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + tpa_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ThirdPartyAuth'] + } + } + 403: { + content: never + } + } + } + /** Lists all SSO providers */ + ProvidersController_listAllProviders: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ListProvidersResponse'] + } + } + 403: { + content: never + } + /** @description SAML 2.0 support is not enabled for this project */ + 404: { + content: never + } + } + } + /** Creates a new SSO provider */ + ProvidersController_createProviderForProject: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateProviderBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['CreateProviderResponse'] + } + } + 403: { + content: never + } + /** @description SAML 2.0 support is not enabled for this project */ + 404: { + content: never + } + } + } + /** Gets a SSO provider by its UUID */ + ProvidersController_getProviderById: { + parameters: { + path: { + /** @description Project ref */ + ref: string + provider_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['GetProviderResponse'] + } + } + 403: { + content: never + } + /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ + 404: { + content: never + } + } + } + /** Updates a SSO provider by its UUID */ + ProvidersController_updateProviderById: { + parameters: { + path: { + /** @description Project ref */ + ref: string + provider_id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateProviderBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['UpdateProviderResponse'] + } + } + 403: { + content: never + } + /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ + 404: { + content: never + } + } + } + /** Removes a SSO provider by its UUID */ + ProvidersController_removeProviderById: { + parameters: { + path: { + /** @description Project ref */ + ref: string + provider_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['DeleteProviderResponse'] + } + } + 403: { + content: never + } + /** @description Either SAML 2.0 was not enabled for this project, or the provider does not exist */ + 404: { + content: never + } + } + } + /** Run sql query */ + V1QueryController_v1RunQuery: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['V1RunQueryBody'] + } + } + responses: { + 201: { + content: { + 'application/json': Record + } + } + 403: { + content: never + } + /** @description Failed to run sql query */ + 500: { + content: never + } + } + } + /** Enables Database Webhooks on the project */ + V1DatabaseWebhooksController_v1EnableDatabaseWebhooks: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 201: { + content: never + } + 403: { + content: never + } + /** @description Failed to enable Database Webhooks on the project */ + 500: { + content: never + } + } + } + /** Lists all backups */ + V1BackupsController_getBackups: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1BackupsResponse'] + } + } + /** @description Failed to get backups */ + 500: { + content: never + } + } + } + /** Restores a PITR backup for a database */ + V1RestorePitrController_v1RestorePitr: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['V1RestorePitrBody'] + } + } + responses: { + 201: { + content: never + } + } + } + /** + * Retrieve a function + * @description Retrieves a function with the specified slug and project. + */ + FunctionSlugController_getFunction: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Function slug */ + function_slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['FunctionSlugResponse'] + } + } + 403: { + content: never + } + /** @description Failed to retrieve function with given slug */ + 500: { + content: never + } + } + } + /** + * Delete a function + * @description Deletes a function with the specified slug from the specified project. + */ + FunctionSlugController_deleteFunction: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Function slug */ + function_slug: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to delete function with given slug */ + 500: { + content: never + } + } + } + /** + * Update a function + * @description Updates a function with the specified slug and project. + */ + FunctionSlugController_updateFunction: { + parameters: { + query?: { + slug?: string + name?: string + verify_jwt?: boolean + import_map?: boolean + entrypoint_path?: string + import_map_path?: string + } + path: { + /** @description Project ref */ + ref: string + /** @description Function slug */ + function_slug: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['V1UpdateFunctionBody'] + 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody'] + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['FunctionResponse'] + } + } + 403: { + content: never + } + /** @description Failed to update function with given slug */ + 500: { + content: never + } + } + } + /** + * Retrieve a function body + * @description Retrieves a function body for the specified slug and project. + */ + FunctionSlugController_getFunctionBody: { + parameters: { + path: { + /** @description Project ref */ + ref: string + /** @description Function slug */ + function_slug: string + } + } + responses: { + 200: { + content: never + } + 403: { + content: never + } + /** @description Failed to retrieve function body with given slug */ + 500: { + content: never + } + } + } + /** Lists all buckets */ + V1StorageBucketsController_getBuckets: { + parameters: { + path: { + /** @description Project ref */ + ref: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1StorageBucketResponse'][] + } + } + 403: { + content: never + } + /** @description Failed to get list of buckets */ + 500: { + content: never + } + } + } + /** Create an organization */ + OrganizationsController_createOrganization: { + requestBody: { + content: { + 'application/json': components['schemas']['CreateOrganizationBodyV1'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['OrganizationResponseV1'] + } + } + /** @description Unexpected error creating an organization */ + 500: { + content: never + } + } + } + /** List members of an organization */ + V1OrganizationMembersController_v1ListOrganizationMembers: { + parameters: { + path: { + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1OrganizationMemberResponse'][] + } + } + } + } + /** Gets information about the organization */ + V1OrganizationSlugController_getOrganization: { + parameters: { + path: { + slug: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['V1OrganizationSlugResponse'] + } + } + } + } + /** Authorize user through oauth */ + OAuthController_authorize: { + parameters: { + query: { + client_id: string + response_type: 'code' | 'token' | 'id_token token' + redirect_uri: string + scope?: string + state?: string + response_mode?: string + code_challenge?: string + code_challenge_method?: 'plain' | 'sha256' | 'S256' + } + } + responses: { + 303: { + content: never + } + } + } + /** Exchange auth code for user's access and refresh token */ + OAuthController_token: { + requestBody: { + content: { + 'application/x-www-form-urlencoded': components['schemas']['OAuthTokenBody'] + } + } + responses: { + 201: { + content: { + 'application/json': components['schemas']['OAuthTokenResponse'] + } + } + } + } + /** Lists SQL snippets for the logged in user */ + SnippetsController_listSnippets: { + parameters: { + query?: { + project_ref?: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['SnippetList'] + } + } + /** @description Failed to list user's SQL snippets */ + 500: { + content: never + } + } + } + /** Gets a specific SQL snippet */ + SnippetsController_getSnippet: { + parameters: { + path: { + id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['SnippetResponse'] + } + } + /** @description Failed to retrieve SQL snippet */ + 500: { + content: never + } + } + } + /** Redirects to Supabase dashboard after completing Fly sso */ + CallbackController_redirectToDashboardFlyioExtensionScreen: { + responses: { + 200: { + content: never + } + } + } + /** Gets database status */ + ExtensionController_getResourceStatus: { + parameters: { + path: { + extension_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ResourceWithServicesStatusResponse'] + } + } + } + } + /** Deletes a database */ + ExtensionController_deleteResource: { + parameters: { + path: { + extension_id: string + } + } + responses: { + 200: { + content: never + } + } + } + /** Starts Fly single sign on */ + ExtensionController_startFlyioSSO: { + parameters: { + path: { + extension_id: string + } + } + responses: { + 200: { + content: never + } + } + } + /** Creates a database */ + ExtensionsController_provisionResource: { + responses: { + 201: { + content: { + 'application/json': components['schemas']['ResourceProvisioningResponse'] + } + } + } + } + /** Gets details of the organization linked to the provided Fly organization id */ + OrganizationsController_getOrganization: { + parameters: { + path: { + organization_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['FlyOrganization'] + } + } + } + } + /** Gets all databases that belong to the given Fly organization id */ + OrganizationsController_getOrgExtensions: { + parameters: { + path: { + organization_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['OrganizationExtensionStatus'][] + } + } + } + } + /** Starts Fly single sign on */ + OrganizationsController_startFlyioSSO: { + parameters: { + path: { + organization_id: string + } + } + responses: { + 200: { + content: never + } + } + } + /** Updates organization subscription linked to the provided Fly organization id */ + OrganizationsController_updateOrganization: { + parameters: { + path: { + organization_id: string + } + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateFlyOrganizationSubscriptionBody'] + } + } + responses: { + 200: { + content: never + } + } + } + /** Gets the organizations current unbilled charges */ + FlyBillingController_getResourceBilling: { + parameters: { + path: { + organization_id: string + } + } + responses: { + 200: { + content: { + 'application/json': components['schemas']['ResourceBillingResponse'] + } + } + } + } +} diff --git a/packages/pg-meta/src/pg-meta-roles.ts b/packages/pg-meta/src/pg-meta-roles.ts index f3c5ca391c5..2c9afbd32de 100644 --- a/packages/pg-meta/src/pg-meta-roles.ts +++ b/packages/pg-meta/src/pg-meta-roles.ts @@ -67,7 +67,10 @@ where function retrieve({ id }: { id: number }): { sql: string; zod: typeof pgRoleOptionalZod } function retrieve({ name }: { name: string }): { sql: string; zod: typeof pgRoleOptionalZod } -function retrieve({ id, name }: { id?: number; name?: string }): { sql: string; zod: typeof pgRoleOptionalZod } { +function retrieve({ id, name }: { id?: number; name?: string }): { + sql: string + zod: typeof pgRoleOptionalZod +} { if (id) { const sql = `${ROLES_SQL} where r.oid = ${literal(id)};` return { @@ -84,21 +87,21 @@ function retrieve({ id, name }: { id?: number; name?: string }): { sql: string; } type RoleCreateParams = { - name: string, - isSuperuser?: boolean, - canCreateDb?: boolean, - canCreateRole?: boolean, - inheritRole?: boolean, - canLogin?: boolean, - isReplicationRole?: boolean, - canBypassRls?: boolean, - connectionLimit?: number, - password?: string, - validUntil?: string, - memberOf?: string[], - members?: string[], - admins?: string[], - config?: Record, + name: string + isSuperuser?: boolean + canCreateDb?: boolean + canCreateRole?: boolean + inheritRole?: boolean + canLogin?: boolean + isReplicationRole?: boolean + canBypassRls?: boolean + connectionLimit?: number + password?: string + validUntil?: string + memberOf?: string[] + members?: string[] + admins?: string[] + config?: Record } function create({ name, @@ -133,23 +136,25 @@ create role ${ident(name)} ${members.length === 0 ? '' : `role ${members.map(ident).join(',')}`} ${admins.length === 0 ? '' : `admin ${admins.map(ident).join(',')}`} ; -${Object.entries(config).map(([param, value]) => `alter role ${ident(name)} set ${ident(param)} = ${literal(value)};`).join('\n')} +${Object.entries(config) + .map(([param, value]) => `alter role ${ident(name)} set ${ident(param)} = ${literal(value)};`) + .join('\n')} ` return { sql } } type RoleUpdateParams = { - name?: string, - isSuperuser?: boolean, - canCreateDb?: boolean, - canCreateRole?: boolean, - inheritRole?: boolean, - canLogin?: boolean, - isReplicationRole?: boolean, - canBypassRls?: boolean, - connectionLimit?: number, - password?: string, - validUntil?: string, + name?: string + isSuperuser?: boolean + canCreateDb?: boolean + canCreateRole?: boolean + inheritRole?: boolean + canLogin?: boolean + isReplicationRole?: boolean + canBypassRls?: boolean + connectionLimit?: number + password?: string + validUntil?: string } function update({ id }: { id: number }, params: RoleUpdateParams): { sql: string } function update({ name }: { name: string }, params: RoleUpdateParams): { sql: string } @@ -173,7 +178,8 @@ function update( connectionLimit, password, validUntil, - }: RoleUpdateParams): { sql: string } { + }: RoleUpdateParams +): { sql: string } { const sql = ` do $$ declare @@ -198,12 +204,16 @@ begin ${validUntil === undefined ? '' : `valid until ${literal(validUntil)}`} ', old.rolname)); - ${newName === undefined ? '' : ` + ${ + newName === undefined + ? '' + : ` -- Using the same name in the rename clause gives an error, so only do it if the new name is different. if new_name != old.nspname then execute(format('alter role %I rename to ${ident(newName)};', old.nspname)); end if; - `} + ` + } end $$; ` diff --git a/packages/pg-meta/src/pg-meta-schemas.ts b/packages/pg-meta/src/pg-meta-schemas.ts index 83a636eb2fc..d367b1b525e 100644 --- a/packages/pg-meta/src/pg-meta-schemas.ts +++ b/packages/pg-meta/src/pg-meta-schemas.ts @@ -41,7 +41,10 @@ function list({ function retrieve({ id }: { id: number }): { sql: string; zod: typeof pgSchemaOptionalZod } function retrieve({ name }: { name: string }): { sql: string; zod: typeof pgSchemaOptionalZod } -function retrieve({ id, name }: { id?: number; name?: string }): { sql: string; zod: typeof pgSchemaOptionalZod } { +function retrieve({ id, name }: { id?: number; name?: string }): { + sql: string + zod: typeof pgSchemaOptionalZod +} { if (id) { const sql = `${SCHEMAS_SQL} and n.oid = ${literal(id)};` return { diff --git a/packages/ui-patterns/package.json b/packages/ui-patterns/package.json index ba93c75112c..8992bac23c4 100644 --- a/packages/ui-patterns/package.json +++ b/packages/ui-patterns/package.json @@ -20,7 +20,9 @@ "tsconfig": "*", "ui": "*" }, - "devDependencies": {}, + "devDependencies": { + "api-types": "*" + }, "peerDependencies": { "next": "*", "react": "*",