From f65ee588c147fff955bc788b2035ccdd8fb53ad3 Mon Sep 17 00:00:00 2001
From: Julian Domke <68325451+juleswritescode@users.noreply.github.com>
Date: Tue, 22 Sep 2026 17:57:40 +0200
Subject: [PATCH] feat(stripe-atlas): wire up redemption flow (#50575)
---
.../StripeAtlasApplication.test.tsx | 204 ++
.../StripeAtlasApplication.tsx | 41 +-
.../StripeAtlasApplicationForm.tsx | 149 +-
apps/studio/data/stripe-atlas/keys.ts | 4 +
.../stripe-atlas-application-query.ts | 92 +
packages/api-types/types/api-v1.d.ts | 2 +-
packages/api-types/types/api-v2.d.ts | 1994 +++++++----------
packages/api-types/types/platform.d.ts | 470 +++-
8 files changed, 1649 insertions(+), 1307 deletions(-)
create mode 100644 apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.test.tsx
create mode 100644 apps/studio/data/stripe-atlas/keys.ts
create mode 100644 apps/studio/data/stripe-atlas/stripe-atlas-application-query.ts
diff --git a/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.test.tsx b/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.test.tsx
new file mode 100644
index 00000000000..284b33ca60a
--- /dev/null
+++ b/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.test.tsx
@@ -0,0 +1,204 @@
+import { fireEvent, screen } from '@testing-library/react'
+import userEvent from '@testing-library/user-event'
+import type { platformComponents } from 'api-types'
+import { HttpResponse } from 'msw'
+import { toast } from 'sonner'
+import { beforeEach, describe, expect, it, vi } from 'vitest'
+
+import { StripeAtlasApplicationScreen } from './StripeAtlasApplication'
+import { customRender } from '@/tests/lib/custom-render'
+import { addAPIMock, type APIErrorBody } from '@/tests/lib/msw'
+
+type PerkApplication = platformComponents['schemas']['PerkApplicationDataResponse_Output']
+
+vi.mock('sonner', () => ({ toast: { success: vi.fn(), error: vi.fn() } }))
+
+const searchParams = vi.hoisted(() => ({ current: {} as Record }))
+
+vi.mock('common', async () => {
+ const actual = await vi.importActual('common')
+ return { ...actual, useParams: () => searchParams.current }
+})
+
+const STRIPE_ATLAS_TOKEN = 'atlas_token_123'
+const APPLICATION: PerkApplication = {
+ stripeAtlasToken: STRIPE_ATLAS_TOKEN,
+ firstname: 'Alice',
+ lastname: 'Founder',
+ companyName: 'Example Inc',
+}
+
+const encodeCallbackData = (data: unknown) => Buffer.from(JSON.stringify(data)).toString('base64')
+
+/** Each mock returns the request bodies its endpoint received. */
+const mockLookup = (application: PerkApplication) => {
+ const bodies: unknown[] = []
+ addAPIMock({
+ method: 'post',
+ path: '/platform/stripe/atlas/application',
+ response: async ({ request }) => {
+ bodies.push(await request.clone().json())
+ return HttpResponse.json(application)
+ },
+ })
+ return bodies
+}
+
+const mockLookupFailure = (message: string, status: number) => {
+ const bodies: unknown[] = []
+ addAPIMock({
+ method: 'post',
+ path: '/platform/stripe/atlas/application',
+ response: async ({ request }) => {
+ bodies.push(await request.clone().json())
+ return HttpResponse.json({ message }, { status })
+ },
+ })
+ return bodies
+}
+
+/** The endpoint answers 200 with no body, so `failure` drives the error case instead. */
+const mockComplete = (failure?: { message: string; status: number }) => {
+ const bodies: unknown[] = []
+ addAPIMock({
+ method: 'post',
+ path: '/platform/stripe/atlas/application/complete',
+ response: async ({ request }) => {
+ bodies.push(await request.clone().json())
+ if (failure) {
+ return HttpResponse.json(
+ { message: failure.message },
+ { status: failure.status }
+ )
+ }
+ return new HttpResponse(null, { status: 200 })
+ },
+ })
+ return bodies
+}
+
+const clickSubmit = () =>
+ fireEvent.click(screen.getByRole('button', { name: 'Confirm application' }))
+
+describe('StripeAtlasApplicationScreen', () => {
+ beforeEach(() => {
+ searchParams.current = {
+ data: encodeCallbackData({ type: 'success', stripeAtlasToken: STRIPE_ATLAS_TOKEN }),
+ }
+ })
+
+ it('looks the application up by token and prefills the form with it', async () => {
+ const lookups = mockLookup(APPLICATION)
+
+ customRender()
+
+ expect(await screen.findByLabelText('First name')).toHaveValue('Alice')
+ expect(screen.getByLabelText('Last name')).toHaveValue('Founder')
+ expect(screen.getByLabelText('Company name')).toHaveValue('Example Inc')
+
+ expect(lookups).toEqual([{ stripeAtlasToken: STRIPE_ATLAS_TOKEN }])
+ })
+
+ it('renders fields the application does not carry as empty', async () => {
+ mockLookup({ stripeAtlasToken: STRIPE_ATLAS_TOKEN, firstname: 'Alice' })
+
+ customRender()
+
+ expect(await screen.findByLabelText('First name')).toHaveValue('Alice')
+ expect(screen.getByLabelText('Last name')).toHaveValue('')
+ expect(screen.getByLabelText('Company name')).toHaveValue('')
+ })
+
+ it('surfaces the error instead of the form when the lookup fails', async () => {
+ mockLookupFailure('Application not found', 404)
+
+ customRender()
+
+ expect(await screen.findByText('Application not found')).toBeInTheDocument()
+ expect(screen.queryByLabelText('First name')).not.toBeInTheDocument()
+ })
+
+ it('submits the edited details with the token and confirms the application', async () => {
+ mockLookup(APPLICATION)
+ const completions = mockComplete()
+
+ customRender()
+
+ const companyName = await screen.findByLabelText('Company name')
+ await userEvent.clear(companyName)
+ await userEvent.type(companyName, 'Renamed Inc')
+
+ clickSubmit()
+
+ expect(await screen.findByText('Application confirmed')).toBeInTheDocument()
+ expect(
+ screen.getByText(/sent your credit code to your Stripe Atlas Merchant email/)
+ ).toBeInTheDocument()
+ expect(screen.queryByLabelText('Company name')).not.toBeInTheDocument()
+
+ expect(completions).toEqual([
+ {
+ stripeAtlasToken: STRIPE_ATLAS_TOKEN,
+ firstname: 'Alice',
+ lastname: 'Founder',
+ companyName: 'Renamed Inc',
+ },
+ ])
+ })
+
+ it('toasts and keeps the form submittable when confirming fails', async () => {
+ mockLookup(APPLICATION)
+ const completions = mockComplete({ message: 'Credit code already redeemed', status: 400 })
+
+ customRender()
+
+ await screen.findByLabelText('First name')
+ clickSubmit()
+
+ await vi.waitFor(() =>
+ expect(toast.error).toHaveBeenCalledWith(
+ 'Failed to confirm application: Credit code already redeemed'
+ )
+ )
+
+ expect(screen.queryByText('Application confirmed')).not.toBeInTheDocument()
+ expect(screen.getByLabelText('First name')).toHaveValue('Alice')
+
+ clickSubmit()
+ await vi.waitFor(() => expect(completions).toHaveLength(2))
+ })
+
+ describe('callback data', () => {
+ it('shows the error the callback carries', async () => {
+ searchParams.current = {
+ data: encodeCallbackData({ type: 'error', message: 'Something broke at Stripe' }),
+ }
+ const lookups = mockLookup(APPLICATION)
+
+ customRender()
+
+ expect(await screen.findByText('Something broke at Stripe')).toBeInTheDocument()
+ expect(lookups).toEqual([])
+ })
+
+ it('asks the user to start from Stripe when there is no callback data', async () => {
+ searchParams.current = {}
+ const lookups = mockLookup(APPLICATION)
+
+ customRender()
+
+ expect(await screen.findByText('Only Pre-Filled Applications supported')).toBeInTheDocument()
+ expect(lookups).toEqual([])
+ })
+
+ it('asks the user to start from Stripe when the callback data is not decodable', async () => {
+ searchParams.current = { data: 'not-base64-at-all!!' }
+ const lookups = mockLookup(APPLICATION)
+
+ customRender()
+
+ expect(await screen.findByText('Only Pre-Filled Applications supported')).toBeInTheDocument()
+ expect(lookups).toEqual([])
+ })
+ })
+})
diff --git a/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.tsx b/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.tsx
index 96d4056d613..25d16f59d5e 100644
--- a/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.tsx
+++ b/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplication.tsx
@@ -1,3 +1,4 @@
+import { useQuery } from '@tanstack/react-query'
import { useParams } from 'common'
import { useEffect, useState } from 'react'
import { CardContent } from 'ui'
@@ -12,11 +13,12 @@ import {
PartnerLogo,
SupabaseLogo,
} from '@/components/layouts/InterstitialLayout'
+import { stripeAtlasApplicationQueryOptions } from '@/data/stripe-atlas/stripe-atlas-application-query'
import { BASE_PATH } from '@/lib/constants'
function decodeBase64Param(base64encoded: string): Base64Data | null {
try {
- const bytes = Uint8Array.fromBase64(base64encoded)
+ const bytes = Uint8Array.from(atob(base64encoded), (char) => char.charCodeAt(0))
const decoded = new TextDecoder().decode(bytes)
return base64DataSchema.parse(JSON.parse(decoded))
} catch {
@@ -36,10 +38,6 @@ const base64DataSchema = z.discriminatedUnion('type', [
])
type Base64Data = z.infer
-/**
- * Mockup only — the form is deliberately unwired: no prefill query, no submit mutation and no
- * actions, so the page can be shared for live design feedback before the perk goes live.
- */
export const StripeAtlasApplicationScreen = () => {
const params = useParams()
@@ -93,14 +91,41 @@ export const StripeAtlasApplicationScreen = () => {
)}
{decoded?.type === 'success' && (
-
-
-
+
)}
)
}
+const PrefilledApplication = ({ stripeAtlasToken }: { stripeAtlasToken: string }) => {
+ const {
+ data: application,
+ error,
+ isPending,
+ isError,
+ } = useQuery(stripeAtlasApplicationQueryOptions({ stripeAtlasToken }))
+
+ if (isPending) return
+
+ if (isError) {
+ return (
+
+ {error.message}
}
+ />
+
+ )
+ }
+
+ return (
+
+
+
+ )
+}
+
const LoadingCard = () => {
return (
diff --git a/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplicationForm.tsx b/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplicationForm.tsx
index e600c4c85f2..ff1291ab687 100644
--- a/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplicationForm.tsx
+++ b/apps/studio/components/interfaces/StripeAtlasApplication/StripeAtlasApplicationForm.tsx
@@ -1,9 +1,15 @@
import { zodResolver } from '@hookform/resolvers/zod'
import { useForm } from 'react-hook-form'
import { Button, Form, FormControl, FormField, Input } from 'ui'
+import { Admonition } from 'ui-patterns/Admonition'
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
import { z } from 'zod'
+import {
+ useStripeAtlasApplicationCompleteMutation,
+ type StripeAtlasApplicationData,
+} from '@/data/stripe-atlas/stripe-atlas-application-query'
+
const FormSchema = z.object({
firstname: z.string().trim().min(1, 'First name is required').max(100, 'Maximum 100 characters'),
lastname: z.string().trim().min(1, 'Last name is required').max(100, 'Maximum 100 characters'),
@@ -12,95 +18,94 @@ const FormSchema = z.object({
.trim()
.min(1, 'Company name is required')
.max(200, 'Maximum 200 characters'),
- email: z
- .string()
- .trim()
- .min(1, 'Email is required')
- .max(254, 'Maximum 254 characters')
- .email('Enter a valid email address'),
})
type FormValues = z.infer
type StripeAtlasApplicationFormProps = {
- stripeAtlasToken: string
+ application: StripeAtlasApplicationData
}
-/** Mockup only — submitting runs validation and stops there, nothing is sent. */
-export const StripeAtlasApplicationForm = (_props: StripeAtlasApplicationFormProps) => {
- // todo(@juleswritescode): fetch data from API via props.stripeAtlasToken; currently just a mockup.
-
+export const StripeAtlasApplicationForm = ({ application }: StripeAtlasApplicationFormProps) => {
const form = useForm({
resolver: zodResolver(FormSchema),
defaultValues: {
- firstname: 'Mockey',
- lastname: 'Mockupson',
- companyName: 'Acmo Ck.',
- email: 'me@mo.ck',
+ firstname: application.firstname ?? '',
+ lastname: application.lastname ?? '',
+ companyName: application.companyName ?? '',
},
})
+ const {
+ mutate: completeApplication,
+ isPending,
+ isSuccess,
+ } = useStripeAtlasApplicationCompleteMutation()
+
return (
-
-
+
+
+
+ )}
+ >
)
}
diff --git a/apps/studio/data/stripe-atlas/keys.ts b/apps/studio/data/stripe-atlas/keys.ts
new file mode 100644
index 00000000000..5d2f7ff39d0
--- /dev/null
+++ b/apps/studio/data/stripe-atlas/keys.ts
@@ -0,0 +1,4 @@
+export const stripeAtlasKeys = {
+ application: (stripeAtlasToken: string | undefined) =>
+ ['stripe-atlas', 'application', stripeAtlasToken] as const,
+}
diff --git a/apps/studio/data/stripe-atlas/stripe-atlas-application-query.ts b/apps/studio/data/stripe-atlas/stripe-atlas-application-query.ts
new file mode 100644
index 00000000000..895da54ef3a
--- /dev/null
+++ b/apps/studio/data/stripe-atlas/stripe-atlas-application-query.ts
@@ -0,0 +1,92 @@
+import { queryOptions, useMutation } from '@tanstack/react-query'
+import type { platformComponents } from 'api-types'
+import { toast } from 'sonner'
+
+import { stripeAtlasKeys } from './keys'
+import { handleError, post } from '@/data/fetchers'
+import type { ResponseError, UseCustomMutationOptions } from '@/types'
+
+export type StripeAtlasApplicationVariables = {
+ stripeAtlasToken?: string
+}
+
+async function getStripeAtlasApplication(
+ { stripeAtlasToken }: StripeAtlasApplicationVariables,
+ signal?: AbortSignal
+) {
+ if (!stripeAtlasToken) {
+ throw new Error('stripeAtlasToken is required')
+ }
+
+ const { data, error } = await post('/platform/stripe/atlas/application', {
+ body: { stripeAtlasToken },
+ signal,
+ })
+
+ if (error) {
+ handleError(error)
+ }
+
+ return data
+}
+
+export type StripeAtlasApplicationData = Awaited>
+
+export const stripeAtlasApplicationQueryOptions = ({
+ stripeAtlasToken,
+}: StripeAtlasApplicationVariables) =>
+ queryOptions({
+ queryKey: stripeAtlasKeys.application(stripeAtlasToken),
+ queryFn: ({ signal }) => getStripeAtlasApplication({ stripeAtlasToken }, signal),
+ enabled: typeof stripeAtlasToken !== 'undefined',
+ })
+
+export type CompleteStripeAtlasApplicationVariables =
+ platformComponents['schemas']['StripeAtlasCompleteApplicationRequestBody']
+
+async function completeStripeAtlasApplication(
+ payload: CompleteStripeAtlasApplicationVariables,
+ signal?: AbortSignal
+) {
+ const { data, error } = await post('/platform/stripe/atlas/application/complete', {
+ body: payload,
+ signal,
+ })
+
+ if (error) {
+ handleError(error)
+ }
+
+ return data
+}
+
+export type CompleteStripeAtlasApplicationData = Awaited<
+ ReturnType
+>
+
+export const useStripeAtlasApplicationCompleteMutation = ({
+ onError,
+ ...options
+}: Omit<
+ UseCustomMutationOptions<
+ CompleteStripeAtlasApplicationData,
+ ResponseError,
+ CompleteStripeAtlasApplicationVariables
+ >,
+ 'mutationFn'
+> = {}) =>
+ useMutation<
+ CompleteStripeAtlasApplicationData,
+ ResponseError,
+ CompleteStripeAtlasApplicationVariables
+ >({
+ mutationFn: (args) => completeStripeAtlasApplication(args),
+ async onError(error, variables, context) {
+ if (onError === undefined) {
+ toast.error(`Failed to confirm application: ${error.message}`)
+ } else {
+ onError(error, variables, context)
+ }
+ },
+ ...options,
+ })
diff --git a/packages/api-types/types/api-v1.d.ts b/packages/api-types/types/api-v1.d.ts
index 361decb6ee0..fb3fb12d8bb 100644
--- a/packages/api-types/types/api-v1.d.ts
+++ b/packages/api-types/types/api-v1.d.ts
@@ -4446,7 +4446,7 @@ export interface components {
* @description Deprecated: Rely on root-level favorite property instead.
*/
favorite?: boolean
- schema_version: string
+ schema_version?: string
sql: string
}
description: string | null
diff --git a/packages/api-types/types/api-v2.d.ts b/packages/api-types/types/api-v2.d.ts
index e1ecac3bb40..7d6281ba0e5 100644
--- a/packages/api-types/types/api-v2.d.ts
+++ b/packages/api-types/types/api-v2.d.ts
@@ -478,6 +478,52 @@ export interface paths {
patch?: never
trace?: never
}
+ '/v2/projects/{ref}/notebooks': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ /**
+ * List notebooks of a project
+ * @description Returns a cursor-paginated list of the project notebooks. Notebook bodies are omitted — read a single notebook to get its cells.
+ */
+ get: operations['v2-list-notebooks']
+ put?: never
+ /**
+ * Create a notebook
+ * @description Creates a notebook shared with everyone who has access to the project. Cell ids are assigned by the server and returned in the response.
+ */
+ post: operations['v2-create-notebook']
+ delete?: never
+ options?: never
+ head?: never
+ patch?: never
+ trace?: never
+ }
+ '/v2/projects/{ref}/notebooks/{id}': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ /** Get a notebook */
+ get: operations['v2-get-notebook']
+ put?: never
+ post?: never
+ /** Delete a notebook */
+ delete: operations['v2-delete-notebook']
+ options?: never
+ head?: never
+ /**
+ * Update a notebook
+ * @description Updates the attributes provided and leaves the rest untouched. Sending `content` replaces the whole notebook body.
+ */
+ patch: operations['v2-update-notebook']
+ trace?: never
+ }
'/v2/projects/{ref}/private-link/associations': {
parameters: {
query?: never
@@ -1459,6 +1505,118 @@ export interface components {
}
}
}
+ V2CreateNotebookRequest: {
+ data: {
+ attributes: {
+ content: {
+ cells: (
+ | ({
+ id?: string
+ text: string
+ /** @enum {string} */
+ type: 'markdown'
+ } & {
+ [key: string]: unknown
+ })
+ | ({
+ /** @description Chart configuration, retained even while `view` is `table`. */
+ chart?: {
+ cumulative: boolean
+ /** @enum {string} */
+ scale: 'linear' | 'log'
+ show_labels: boolean
+ /** @enum {string} */
+ type: 'bar' | 'line'
+ /** @description Result column used for the x axis. */
+ x_column: string
+ y_series: ({
+ /** @description Result column plotted as a series. */
+ column: string
+ } & {
+ [key: string]: unknown
+ })[]
+ } & {
+ [key: string]: unknown
+ }
+ /** @description Read replica to run against. Omit to use the primary database. */
+ database_identifier?: string
+ id?: string
+ /** @default 100 */
+ row_limit?: number
+ /** @description SQL run against the project database. */
+ sql: string
+ title?: string
+ /** @enum {string} */
+ type: 'database'
+ /** @enum {string} */
+ view?: 'table' | 'chart'
+ } & {
+ [key: string]: unknown
+ })
+ | ({
+ /** @description Chart configuration, retained even while `view` is `table`. */
+ chart?: {
+ cumulative: boolean
+ /** @enum {string} */
+ scale: 'linear' | 'log'
+ show_labels: boolean
+ /** @enum {string} */
+ type: 'bar' | 'line'
+ /** @description Result column used for the x axis. */
+ x_column: string
+ y_series: ({
+ /** @description Result column plotted as a series. */
+ column: string
+ } & {
+ [key: string]: unknown
+ })[]
+ } & {
+ [key: string]: unknown
+ }
+ id?: string
+ /** @description SQL run against the project logs. */
+ sql: string
+ time_range:
+ | ({
+ /** @description ISO 8601 end of the range. */
+ end: string
+ /** @description ISO 8601 start of the range. */
+ start: string
+ /** @enum {string} */
+ type: 'absolute'
+ } & {
+ [key: string]: unknown
+ })
+ | ({
+ amount: number
+ /** @enum {string} */
+ type: 'relative'
+ /** @enum {string} */
+ unit: 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'
+ } & {
+ [key: string]: unknown
+ })
+ title?: string
+ /** @enum {string} */
+ type: 'log'
+ /** @enum {string} */
+ view?: 'table' | 'chart'
+ } & {
+ [key: string]: unknown
+ })
+ )[]
+ }
+ description?: string
+ favorite?: boolean
+ name: string
+ }
+ /**
+ * @description Resource type.
+ * @enum {string}
+ */
+ type: 'notebook'
+ }
+ }
V2CreatePrivateLinkAssociationRequest: {
data: {
attributes: {
@@ -1708,6 +1866,55 @@ export interface components {
prev: string | null
}
}
+ V2ListNotebooksResponse_Output: {
+ data: {
+ attributes: {
+ description: string | null
+ favorite: boolean
+ inserted_at: string
+ name: string
+ /** @description User who created the notebook. */
+ owner: {
+ id: number
+ username: string
+ } | null
+ updated_at: string
+ /** @description User who last wrote to the notebook. */
+ updated_by: {
+ id: number
+ username: string
+ } | null
+ }
+ id: string
+ /**
+ * @description Resource type.
+ * @enum {string}
+ */
+ type: 'notebook'
+ }[]
+ links: {
+ /**
+ * @description URL path to the first page if available.
+ * @example /v2/projects/{ref}/notebooks?page[size]=10
+ */
+ first?: string | null
+ /**
+ * @description URL path to the last page if available.
+ * @example /v2/projects/{ref}/notebooks?page[size]=10&page[after]=019adf7d-4513-71ba-b264-21900edb4295
+ */
+ last?: string | null
+ /**
+ * @description URL path to the next page.
+ * @example /v2/projects/{ref}/notebooks?page[size]=10&page[after]=019adf7d-4513-7062-b292-78b86cc470a4
+ */
+ next: string | null
+ /**
+ * @description URL path to the previous page.
+ * @example /v2/projects/{ref}/notebooks?page[size]=10&page[before]=019adf7d-4513-74c5-bb9a-f1bc0f7a95d7
+ */
+ prev: string | null
+ }
+ }
V2ListPrivateLinkAssociationsResponse_Output: {
data: {
attributes: {
@@ -1891,6 +2098,114 @@ export interface components {
type: 'organization_role'
}[]
}
+ V2NotebookResponse_Output: {
+ data: {
+ attributes: {
+ content: {
+ cells: (
+ | {
+ id: string
+ text: string
+ /** @enum {string} */
+ type: 'markdown'
+ }
+ | {
+ /** @description Chart configuration, retained even while `view` is `table`. */
+ chart?: {
+ cumulative: boolean
+ /** @enum {string} */
+ scale: 'linear' | 'log'
+ show_labels: boolean
+ /** @enum {string} */
+ type: 'bar' | 'line'
+ /** @description Result column used for the x axis. */
+ x_column: string
+ y_series: {
+ /** @description Result column plotted as a series. */
+ column: string
+ }[]
+ }
+ /** @description Read replica to run against. Omit to use the primary database. */
+ database_identifier?: string
+ id: string
+ /** @default 100 */
+ row_limit: number
+ /** @description SQL run against the project database. */
+ sql: string
+ title?: string
+ /** @enum {string} */
+ type: 'database'
+ /** @enum {string} */
+ view?: 'table' | 'chart'
+ }
+ | {
+ /** @description Chart configuration, retained even while `view` is `table`. */
+ chart?: {
+ cumulative: boolean
+ /** @enum {string} */
+ scale: 'linear' | 'log'
+ show_labels: boolean
+ /** @enum {string} */
+ type: 'bar' | 'line'
+ /** @description Result column used for the x axis. */
+ x_column: string
+ y_series: {
+ /** @description Result column plotted as a series. */
+ column: string
+ }[]
+ }
+ id: string
+ /** @description SQL run against the project logs. */
+ sql: string
+ time_range:
+ | {
+ /** @description ISO 8601 end of the range. */
+ end: string
+ /** @description ISO 8601 start of the range. */
+ start: string
+ /** @enum {string} */
+ type: 'absolute'
+ }
+ | {
+ amount: number
+ /** @enum {string} */
+ type: 'relative'
+ /** @enum {string} */
+ unit: 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'
+ }
+ title?: string
+ /** @enum {string} */
+ type: 'log'
+ /** @enum {string} */
+ view?: 'table' | 'chart'
+ }
+ )[]
+ schema_version: number
+ }
+ description: string | null
+ favorite: boolean
+ inserted_at: string
+ name: string
+ /** @description User who created the notebook. */
+ owner: {
+ id: number
+ username: string
+ } | null
+ updated_at: string
+ /** @description User who last wrote to the notebook. */
+ updated_by: {
+ id: number
+ username: string
+ } | null
+ }
+ id: string
+ /**
+ * @description Resource type.
+ * @enum {string}
+ */
+ type: 'notebook'
+ }
+ }
V2PreviewProjectTransferResponse_Output: {
data: {
attributes: {
@@ -2282,6 +2597,119 @@ export interface components {
type: 'project_transfer_input'
}
}
+ V2UpdateNotebookRequest: {
+ data: {
+ attributes: {
+ /** @description Replaces the notebook body. A cell keeps its identity by echoing back its `id`; a cell sent without an `id` is added as a new one. */
+ content?: {
+ cells: (
+ | ({
+ id?: string
+ text: string
+ /** @enum {string} */
+ type: 'markdown'
+ } & {
+ [key: string]: unknown
+ })
+ | ({
+ /** @description Chart configuration, retained even while `view` is `table`. */
+ chart?: {
+ cumulative: boolean
+ /** @enum {string} */
+ scale: 'linear' | 'log'
+ show_labels: boolean
+ /** @enum {string} */
+ type: 'bar' | 'line'
+ /** @description Result column used for the x axis. */
+ x_column: string
+ y_series: ({
+ /** @description Result column plotted as a series. */
+ column: string
+ } & {
+ [key: string]: unknown
+ })[]
+ } & {
+ [key: string]: unknown
+ }
+ /** @description Read replica to run against. Omit to use the primary database. */
+ database_identifier?: string
+ id?: string
+ /** @default 100 */
+ row_limit?: number
+ /** @description SQL run against the project database. */
+ sql: string
+ title?: string
+ /** @enum {string} */
+ type: 'database'
+ /** @enum {string} */
+ view?: 'table' | 'chart'
+ } & {
+ [key: string]: unknown
+ })
+ | ({
+ /** @description Chart configuration, retained even while `view` is `table`. */
+ chart?: {
+ cumulative: boolean
+ /** @enum {string} */
+ scale: 'linear' | 'log'
+ show_labels: boolean
+ /** @enum {string} */
+ type: 'bar' | 'line'
+ /** @description Result column used for the x axis. */
+ x_column: string
+ y_series: ({
+ /** @description Result column plotted as a series. */
+ column: string
+ } & {
+ [key: string]: unknown
+ })[]
+ } & {
+ [key: string]: unknown
+ }
+ id?: string
+ /** @description SQL run against the project logs. */
+ sql: string
+ time_range:
+ | ({
+ /** @description ISO 8601 end of the range. */
+ end: string
+ /** @description ISO 8601 start of the range. */
+ start: string
+ /** @enum {string} */
+ type: 'absolute'
+ } & {
+ [key: string]: unknown
+ })
+ | ({
+ amount: number
+ /** @enum {string} */
+ type: 'relative'
+ /** @enum {string} */
+ unit: 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'
+ } & {
+ [key: string]: unknown
+ })
+ title?: string
+ /** @enum {string} */
+ type: 'log'
+ /** @enum {string} */
+ view?: 'table' | 'chart'
+ } & {
+ [key: string]: unknown
+ })
+ )[]
+ }
+ description?: string
+ favorite?: boolean
+ name?: string
+ }
+ /**
+ * @description Resource type.
+ * @enum {string}
+ */
+ type: 'notebook'
+ }
+ }
}
responses: never
parameters: never
@@ -2861,68 +3289,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -3204,68 +3570,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -3650,68 +3954,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -4104,68 +4346,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -4484,68 +4664,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -4866,68 +4984,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -5285,68 +5341,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -5775,68 +5769,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -6187,68 +6119,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -6646,54 +6516,6 @@ export interface operations {
[key: string]: unknown
}
}
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
$defs: {
APIErrorObject: components['schemas']['APIErrorObject']
}
@@ -7633,6 +7455,360 @@ export interface operations {
}
}
}
+ 'v2-list-notebooks': {
+ parameters: {
+ query?: {
+ filter?: {
+ name?: string
+ }
+ page?: {
+ after?: string
+ before?: string
+ size?: number
+ }
+ sort?: 'name' | '-name' | 'inserted_at' | '-inserted_at'
+ }
+ header?: never
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody?: never
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['V2ListNotebooksResponse_Output']
+ }
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Failed to retrieve project's notebooks */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ }
+ }
+ 'v2-create-notebook': {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['V2CreateNotebookRequest']
+ }
+ }
+ responses: {
+ 201: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['V2NotebookResponse_Output']
+ }
+ }
+ /** @description The request repeats a cell id */
+ 400: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Failed to create notebook */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ }
+ }
+ 'v2-get-notebook': {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ id: string
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody?: never
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['V2NotebookResponse_Output']
+ }
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Notebook not found */
+ 404: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Failed to retrieve notebook */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ }
+ }
+ 'v2-delete-notebook': {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ id: string
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody?: never
+ responses: {
+ 204: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Notebook not found */
+ 404: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Failed to delete notebook */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ }
+ }
+ 'v2-update-notebook': {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ id: string
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['V2UpdateNotebookRequest']
+ }
+ }
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['V2NotebookResponse_Output']
+ }
+ }
+ /** @description The request references a cell that does not exist on this notebook, or repeats a cell id */
+ 400: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Notebook not found */
+ 404: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ /** @description Failed to update notebook */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ErrorResponseBody']
+ }
+ }
+ }
+ }
'v2-list-private-link-associations': {
parameters: {
query?: never
@@ -8118,68 +8294,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -8461,68 +8575,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -8907,68 +8959,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -9361,68 +9351,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -9741,68 +9669,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -10123,68 +9989,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -10542,68 +10346,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -11032,68 +10774,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -11444,68 +11124,6 @@ export interface operations {
}
}
}
- /** @description Multiple error responses */
- 400: {
- headers: {
- [name: string]: unknown
- }
- content: {
- 'application/json': {
- error:
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
- $defs: {
- APIErrorObject: components['schemas']['APIErrorObject']
- }
- }
- }
- }
/** @description GenericUnauthorized */
401: {
headers: {
@@ -11903,54 +11521,6 @@ export interface operations {
[key: string]: unknown
}
}
- | {
- /** @constant */
- code: 'bad_request.invalid_slug'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid organization slug'
- meta?: {
- [key: string]: unknown
- }
- }
- | {
- /** @constant */
- code: 'bad_request.invalid_ref'
- description?: string
- id?: string
- issues?: components['schemas']['APIErrorObject'][]
- links?: {
- [key: string]: {
- describedby?: string
- href: string
- meta?: {
- [key: string]: unknown
- }
- rel?: string
- title?: string
- type?: string
- }
- }
- /** @constant */
- message: 'Bad Request: Invalid project ref'
- meta?: {
- [key: string]: unknown
- }
- }
$defs: {
APIErrorObject: components['schemas']['APIErrorObject']
}
diff --git a/packages/api-types/types/platform.d.ts b/packages/api-types/types/platform.d.ts
index 1fee9ebe2c4..ea7ecb39951 100644
--- a/packages/api-types/types/platform.d.ts
+++ b/packages/api-types/types/platform.d.ts
@@ -3945,7 +3945,7 @@ export interface paths {
put?: never
/**
* Rollback pipeline tables
- * @description Rollback the replication state of tables in the pipeline. Supports rolling back a single table, all errored tables or all tables. Requires bearer auth and an active, healthy project.
+ * @description Reset tables to their initial replication state. Supports resetting a single table, all errored tables or all tables. Waits for shutdown before resetting state, then recreates an active pipeline. Stopped pipelines remain stopped. Requires bearer auth and an active, healthy project.
*/
post: operations['PipelinesController_rollbackTables']
delete?: never
@@ -4759,6 +4759,74 @@ export interface paths {
patch?: never
trace?: never
}
+ '/platform/storage/{ref}/jwks': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ /** Lists project storage jwks */
+ get: operations['StorageJwksController_listJwks']
+ put?: never
+ post?: never
+ delete?: never
+ options?: never
+ head?: never
+ patch?: never
+ trace?: never
+ }
+ '/platform/storage/{ref}/jwks/{kid}': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ get?: never
+ /** Activates or deactivates a jwk */
+ put: operations['StorageJwksController_toggleJwk']
+ post?: never
+ delete?: never
+ options?: never
+ head?: never
+ patch?: never
+ trace?: never
+ }
+ '/platform/storage/{ref}/jwks/url-signing/standby': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ get?: never
+ put?: never
+ /** Creates a standby url signing jwk */
+ post: operations['StorageJwksController_createStandbyJwk']
+ delete?: never
+ options?: never
+ head?: never
+ patch?: never
+ trace?: never
+ }
+ '/platform/storage/{ref}/jwks/url-signing/standby/{kid}/swap': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ get?: never
+ put?: never
+ /** Swaps a standby url signing jwk into the active url signing jwk */
+ post: operations['StorageJwksController_swapStandbyJwk']
+ delete?: never
+ options?: never
+ head?: never
+ patch?: never
+ trace?: never
+ }
'/platform/storage/{ref}/vector-buckets': {
parameters: {
query?: never
@@ -4830,6 +4898,43 @@ export interface paths {
patch?: never
trace?: never
}
+ '/platform/stripe/atlas/application': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ get?: never
+ put?: never
+ /** Will return the user data for the matching stripe application. */
+ post: operations['StripeAtlasPerkApplicationController_fetchAtlasApplication']
+ delete?: never
+ options?: never
+ head?: never
+ patch?: never
+ trace?: never
+ }
+ '/platform/stripe/atlas/application/complete': {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ get?: never
+ put?: never
+ /**
+ * Will verify that the stripe atlas token exists and create a credit code.
+ * @description If an unused credit code already exists for the stripe company, we will resend that code.
+ */
+ post: operations['StripeAtlasPerkApplicationController_completeStripeAtlasFlow']
+ delete?: never
+ options?: never
+ head?: never
+ patch?: never
+ trace?: never
+ }
'/platform/stripe/invoices/overdue': {
parameters: {
query?: never
@@ -5143,7 +5248,7 @@ export interface paths {
put?: never
/**
* Set up Warehouse
- * @description Replace the Warehouse publication with the complete requested selection and start syncing. Schema targets include the currently eligible tables in that schema. An empty targets array stops and deletes the Warehouse pipeline and publication, disables external catalog access, and uninstalls the Warehouse FDW and its dependent foreign tables. Warehouse FDW installation is opt-in and ignored for an empty selection.
+ * @description Replace the Warehouse publication with the complete requested selection and start syncing. Optionally select another Supabase project for both the DuckLake PostgreSQL catalog and Storage using destination_project_ref; SQL and Storage admin write permissions are required on that project. The configured destination is reused on subsequent requests and cannot be changed through setup. Schema targets include the currently eligible tables in that schema. An empty targets array stops and deletes the Warehouse pipeline and publication, disables external catalog access, and uninstalls the Warehouse FDW and its dependent foreign tables. Warehouse FDW installation is opt-in, remains on the source project, and is ignored for an empty selection.
*/
post: operations['WarehouseController_setup']
delete?: never
@@ -6656,6 +6761,8 @@ export interface components {
| 'platform_webhooks_projects_write'
| 'workers_read'
| 'workers_write'
+ | 'project_notebooks_read'
+ | 'project_notebooks_write'
)[]
}
CreatePlatformAppResponse_Output: {
@@ -7611,6 +7718,8 @@ export interface components {
| 'platform_webhooks_projects_write'
| 'workers_read'
| 'workers_write'
+ | 'project_notebooks_read'
+ | 'project_notebooks_write'
)[]
project_refs?: string[]
}
@@ -7630,6 +7739,13 @@ export interface components {
/** @description Source ID */
id: number
}
+ CreateStandbyJwkBody: {
+ /** @enum {string} */
+ type: 'HS512' | 'ES256'
+ }
+ CreateStandbyJwkResponse_Output: {
+ kid: string
+ }
CreateStorageAnalyticsBucketBody: {
bucketName: string
}
@@ -9842,6 +9958,14 @@ export interface components {
name: string
}[]
}
+ ListJwksResponse_Output: {
+ data: {
+ active: boolean
+ kid: string
+ kind: string
+ type: string
+ }[]
+ }
ListNotificationExceptionsResponse_Output: {
exceptions: {
/** Format: uuid */
@@ -10599,6 +10723,15 @@ export interface components {
PendingConfirmationResponse: {
message: string
}
+ PerkApplicationDataResponse_Output: {
+ companyName?: string
+ firstname?: string
+ lastname?: string
+ stripeAtlasToken: string
+ }
+ PerkApplicationLookupBody: {
+ stripeAtlasToken: string
+ }
PgbouncerConfigResponse_Output: {
connection_string: string
db_dns_name: string
@@ -12320,12 +12453,6 @@ export interface components {
website: string
}
RollbackTablesBody: {
- /**
- * @description Rollback type
- * @example individual
- * @enum {string}
- */
- rollback_type: 'individual' | 'full'
/** @description Rollback target */
target:
| {
@@ -12672,6 +12799,12 @@ export interface components {
vectorBucketName: string
}[]
}
+ StripeAtlasCompleteApplicationRequestBody: {
+ companyName: string
+ firstname: string
+ lastname: string
+ stripeAtlasToken: string
+ }
SupavisorConfigResponse_Output: {
connection_string: string
/** @description Use connection_string instead */
@@ -12787,6 +12920,12 @@ export interface components {
TemporaryApiKeyResponse_Output: {
api_key: string
}
+ ToggleJwkBody: {
+ active: boolean
+ }
+ ToggleJwkResponse_Output: {
+ result: boolean
+ }
TransferProjectBody: {
target_organization_slug: string
}
@@ -13926,7 +14065,7 @@ export interface components {
message: string
}
UpdatePgbouncerConfigBody: {
- default_pool_size?: number
+ default_pool_size?: number | null
/**
* @deprecated
* @default options,extra_float_digits
@@ -14165,6 +14304,8 @@ export interface components {
| 'platform_webhooks_projects_write'
| 'workers_read'
| 'workers_write'
+ | 'project_notebooks_read'
+ | 'project_notebooks_write'
)[]
}
UpdatePlatformAppInstallationResponse_Output: {
@@ -15898,7 +16039,7 @@ export interface components {
catalog_url: string
/**
* @description DuckLake object storage path
- * @example s3://warehouse/
+ * @example s3://warehouse-abcjuqabhgwjjutfvtpa/
*/
data_path: string
/**
@@ -15925,6 +16066,11 @@ export interface components {
enabled: boolean
}
WarehouseSetupBody: {
+ /**
+ * @description Supabase project to use for both the DuckLake PostgreSQL catalog and Supabase Storage. Defaults to this project on first setup and to the configured destination on later requests. The destination must be active and healthy, and another project requires SQL and Storage admin write permissions. An existing destination cannot be changed through setup. Ignored when targets is empty.
+ * @example zyxwvutsrqponmlkjihg
+ */
+ destination_project_ref?: string
/**
* @description Whether to configure and install the Warehouse FDW in the project database. Defaults to false. Ignored when targets is empty.
* @example false
@@ -30570,7 +30716,7 @@ export interface operations {
}
responses: {
/** @description New table states after rollback. */
- 201: {
+ 200: {
headers: {
[name: string]: unknown
}
@@ -30744,8 +30890,8 @@ export interface operations {
}
requestBody?: never
responses: {
- /** @description Pipeline stopped. */
- 200: {
+ /** @description Pipeline shutdown accepted. Resources may still be terminating. */
+ 202: {
headers: {
[name: string]: unknown
}
@@ -33800,6 +33946,237 @@ export interface operations {
}
}
}
+ StorageJwksController_listJwks: {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody?: never
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ListJwksResponse_Output']
+ }
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Failed to list project storage jwks */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ }
+ }
+ StorageJwksController_toggleJwk: {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ /** @description Storage jwk id */
+ kid: string
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['ToggleJwkBody']
+ }
+ }
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['ToggleJwkResponse_Output']
+ }
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Jwk not found */
+ 404: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description The active url signing jwk cannot be toggled. Swap it with a standby jwk first. */
+ 409: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Failed to toggle project storage jwk */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ }
+ }
+ StorageJwksController_createStandbyJwk: {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateStandbyJwkBody']
+ }
+ }
+ responses: {
+ 201: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['CreateStandbyJwkResponse_Output']
+ }
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Failed to create project storage url signing standby jwk */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ }
+ }
+ StorageJwksController_swapStandbyJwk: {
+ parameters: {
+ query?: never
+ header?: never
+ path: {
+ /** @description Storage jwk id */
+ kid: string
+ /** @description Project ref */
+ ref: string
+ }
+ cookie?: never
+ }
+ requestBody?: never
+ responses: {
+ 201: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Unauthorized */
+ 401: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Forbidden action */
+ 403: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Standby jwk not found */
+ 404: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Rate limit exceeded */
+ 429: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Failed to swap project storage url signing standby jwk */
+ 500: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ }
+ }
StorageVectorBucketsController_getBuckets: {
parameters: {
query?: {
@@ -34160,6 +34537,71 @@ export interface operations {
}
}
}
+ StripeAtlasPerkApplicationController_fetchAtlasApplication: {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['PerkApplicationLookupBody']
+ }
+ }
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown
+ }
+ content: {
+ 'application/json': components['schemas']['PerkApplicationDataResponse_Output']
+ }
+ }
+ /** @description Will send a 400 when matching application is considered stale or when we have an invalid schema in our db. */
+ 400: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Will send a 404 when no matching application was found. */
+ 404: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ }
+ }
+ StripeAtlasPerkApplicationController_completeStripeAtlasFlow: {
+ parameters: {
+ query?: never
+ header?: never
+ path?: never
+ cookie?: never
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['StripeAtlasCompleteApplicationRequestBody']
+ }
+ }
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ /** @description Will send a 400 when the matching stripe company id already has a redeemed credit code. */
+ 400: {
+ headers: {
+ [name: string]: unknown
+ }
+ content?: never
+ }
+ }
+ }
InvoicesController_getOverdueInvoices: {
parameters: {
query?: never
@@ -34736,7 +35178,7 @@ export interface operations {
'application/json': components['schemas']['WarehouseSetupResponse_Output']
}
}
- /** @description A requested table or schema is not eligible for Warehouse replication. */
+ /** @description A requested table or schema is not eligible for Warehouse replication, or the destination project cannot be used or changed. */
400: {
headers: {
[name: string]: unknown