From 4c37eb4ac0ebc8dfadee6f54d13cd80efde632ba Mon Sep 17 00:00:00 2001 From: Ivan Vasilov Date: Wed, 26 Aug 2026 14:41:33 +0200 Subject: [PATCH] chore: Update API types (#49598) ## Summary by CodeRabbit * **Tests** * Updated configuration drift test data to include the database major version, improving coverage for current project configuration responses. --- .../ConfigurationDriftPage.test.tsx | 1 + packages/api-types/types/api-v1.d.ts | 6 +- packages/api-types/types/api-v2.d.ts | 32 +- packages/api-types/types/platform.d.ts | 741 ++++++++++++++---- 4 files changed, 627 insertions(+), 153 deletions(-) diff --git a/apps/studio/components/interfaces/ConfigDrift/ConfigurationDriftPage.test.tsx b/apps/studio/components/interfaces/ConfigDrift/ConfigurationDriftPage.test.tsx index 36c6f00a3ec..138b20a8d7c 100644 --- a/apps/studio/components/interfaces/ConfigDrift/ConfigurationDriftPage.test.tsx +++ b/apps/studio/components/interfaces/ConfigDrift/ConfigurationDriftPage.test.tsx @@ -120,6 +120,7 @@ function createProjectConfigResponse(auth: Record): V2ProjectCo }, auth, database: { + major_version: 17, network_restrictions: { allowed_cidrs: [], entitlement: 'disallowed', diff --git a/packages/api-types/types/api-v1.d.ts b/packages/api-types/types/api-v1.d.ts index 8b38b0ed71c..5d7c1d4b205 100644 --- a/packages/api-types/types/api-v1.d.ts +++ b/packages/api-types/types/api-v1.d.ts @@ -566,7 +566,7 @@ export interface paths { * If both are not provided, only the last 1 minute of logs will be queried. * The timestamp range must be no more than 24 hours and is rounded to the nearest minute. If the range is more than 24 hours, a validation error will be thrown. * - * Note: Unless the `sql` parameter is provided, only edge_logs will be queried. See the [log query docs](/docs/guides/telemetry/logs?queryGroups=product&product=postgres&queryGroups=source&source=edge_logs#querying-with-the-logs-explorer:~:text=logs%20from%20the-,Sources,-drop%2Ddown%3A) for all available sources. + * Note: Unless the `sql` parameter is provided, only edge_logs will be queried. See the [log query docs](https://supabase.com/docs/guides/monitoring-and-debugging/logs#logs-explorer) for all available sources. * */ get: operations['v1-get-project-logs-all'] @@ -7102,7 +7102,7 @@ export interface operations { query?: { iso_timestamp_end?: string iso_timestamp_start?: string - /** @description Custom SQL query to execute on the logs. See [querying logs](/docs/guides/telemetry/logs?queryGroups=product&product=postgres&queryGroups=source&source=edge_logs#querying-with-the-logs-explorer) for more details. */ + /** @description Custom SQL query to execute on the logs. See [querying logs](https://supabase.com/docs/guides/monitoring-and-debugging/logs#querying-with-the-logs-explorer) for more details. */ sql?: string } header?: never @@ -7157,7 +7157,7 @@ export interface operations { query?: { iso_timestamp_end?: string iso_timestamp_start?: string - /** @description Custom SQL query to execute on the logs. See [querying logs](/docs/guides/telemetry/logs?queryGroups=product&product=postgres&queryGroups=source&source=edge_logs#querying-with-the-logs-explorer) for more details. */ + /** @description Custom SQL query to execute on the logs. See [querying logs](https://supabase.com/docs/guides/monitoring-and-debugging/logs#querying-with-the-logs-explorer) for more details. */ sql?: string } header?: never diff --git a/packages/api-types/types/api-v2.d.ts b/packages/api-types/types/api-v2.d.ts index bedf058b8a4..f616718eeef 100644 --- a/packages/api-types/types/api-v2.d.ts +++ b/packages/api-types/types/api-v2.d.ts @@ -1131,7 +1131,11 @@ export interface components { V2CreateInvitationsRequest: { data: { attributes: { - /** Format: email */ + /** + * Format: email + * @description Email address of the invitation receipient. + * @example hello@example.com + */ email: string /** @description The projects to limit a user to. If omitted, user will have org-wide access with the provided role. */ projects?: { @@ -1159,7 +1163,11 @@ export interface components { V2CreateInvitationsResponse: { data: { attributes: { - /** Format: email */ + /** + * Format: email + * @description Email address of the invitation receipient. + * @example hello@example.com + */ email: string } /** @@ -1190,7 +1198,11 @@ export interface components { } message: string meta: { - /** Format: email */ + /** + * Format: email + * @description Email address of the invitation receipient. + * @example hello@example.com + */ email: string } }[] @@ -1232,7 +1244,11 @@ export interface components { V2DeleteInvitationsRequest: { data: { attributes: { - /** Format: email */ + /** + * Format: email + * @description Email address of the invitation receipient. + * @example hello@example.com + */ email: string } /** @@ -1245,7 +1261,11 @@ export interface components { V2DeleteInvitationsResponse: { data: { attributes: { - /** Format: email */ + /** + * Format: email + * @description Email address of the invitation receipient. + * @example hello@example.com + */ email: string } /** @@ -1729,6 +1749,8 @@ export interface components { [key: string]: unknown } database: { + /** @description The major Postgres version the database runs. `17` covers both Postgres 17 and Oriole on 17, since Oriole is a storage engine rather than a version. */ + major_version: number network_restrictions: { allowed_cidrs: { address: string diff --git a/packages/api-types/types/platform.d.ts b/packages/api-types/types/platform.d.ts index ed2eb431fbb..8f1706571cb 100644 --- a/packages/api-types/types/platform.d.ts +++ b/packages/api-types/types/platform.d.ts @@ -900,6 +900,26 @@ export interface paths { patch?: never trace?: never } + '/platform/mcp-tools-permissions': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * MCP tool → FGA permission map + * @description Returns each MCP tool and the FGA permission groups that gate it, as OR-of-AND alternatives (the token needs every permission of at least one group). Used by the dashboard to show what a scoped token can do. + */ + get: operations['get-mcp-tools-permissions'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } '/platform/notifications': { parameters: { query?: never @@ -1512,43 +1532,6 @@ export interface paths { patch?: never trace?: never } - '/platform/organizations/{slug}/documents/dpa': { - parameters: { - query?: never - header?: never - path?: never - cookie?: never - } - get?: never - put?: never - /** Create DPA document using PandaDoc */ - post: operations['OrgDocumentsController_createDpaDocument'] - delete?: never - options?: never - head?: never - patch?: never - trace?: never - } - '/platform/organizations/{slug}/documents/dpa-signed': { - parameters: { - query?: never - header?: never - path?: never - cookie?: never - } - /** - * Check if organization has signed any version of the DPA - * @description Results are cached per organization for up to 24 hours. Signed status may not reflect immediately after a document is completed. - */ - get: operations['OrgDocumentsController_getDpaSignedStatus'] - put?: never - post?: never - delete?: never - options?: never - head?: never - patch?: never - trace?: never - } '/platform/organizations/{slug}/documents/iso27001-certificate': { parameters: { query?: never @@ -5241,6 +5224,14 @@ export interface components { oauth_app_name?: string /** @description Organization whose grant was used. Only present when token_type=oauth */ organization_id?: string + /** @description Marketplace partner that authenticated the request. Only present when token_type=partner */ + partner?: string + /** @description The partner's own integration-installation id. Only present when token_type=partner and the integration is already installed. Distinct from installation_id, which is a Supabase platform-app installation */ + partner_installation_id?: string + /** @description Email of the partner user who triggered the action. Only present when token_type=partner and the partner acted on behalf of one of its users */ + partner_user_email?: string + /** @description Opaque user identifier in the partner's namespace. Only present when token_type=partner and the partner acted on behalf of one of its users */ + partner_user_id?: string /** @description GoTrue login session. Only present when token_type=jwt */ session_id?: string /** @description Access token alias, as shown in the dashboard. Only present when token_type=v0, token_type=v1 or token_type=scoped_pat */ @@ -5293,6 +5284,8 @@ export interface components { /** @enum {boolean} */ clear_tax_id?: true dry_run?: boolean + /** Format: email */ + email?: string tax_id?: { country: string type: string @@ -5593,17 +5586,6 @@ export interface components { */ id: number } - CreateDpaDocumentRequest: { - /** Format: email */ - recipient_email: string - } - CreateDpaDocumentResponse: { - date_created: string - document_id: string - download_url?: string - name: string - status: string - } CreateGitHubAuthorizationBody: { code: string } @@ -5627,9 +5609,31 @@ export interface components { workdir: string } CreateInvitationBody: { - emails: string[] + data?: { + attributes: { + /** Format: email */ + email: string + /** @description The projects to limit a user to. If omitted, user will have org-wide access with the provided role. */ + projects?: { + /** + * @description Project ref + * @example abcjuqabhgwjjutfvtpa + */ + ref: string + }[] + require_sso?: boolean + /** + * @description Role name to assign. Must be on a Team or Enterprise plan to use the read-only role. + * @example developer + * @enum {string} + */ + role?: 'owner' | 'administrator' | 'developer' | 'read-only' + role_id?: number + } + }[] + emails?: string[] require_sso?: boolean - role_id: number + role_id?: number role_scoped_projects?: string[] } CreateInvitationResponse: { @@ -6207,6 +6211,79 @@ export interface components { project_id: string /** @description BigQuery service account key */ service_account_key: string + /** @description Per-table partitioning and clustering, applied only when the physical table is created or recreated */ + table_options?: { + tables?: { + cluster_by?: string[] + partition_by?: + | ( + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by a replicated `DATE`, `TIMESTAMP`, or `DATETIME` column + * @enum {string} + */ + kind: 'time_column' + } + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Exclusive end of the last partition range + * @example 100 + */ + end: number + /** + * @description Width of each partition range + * @example 10 + */ + interval: number + /** + * @description Partition by ranges of a replicated integer column + * @enum {string} + */ + kind: 'integer_range' + /** + * @description Inclusive start of the first partition range + * @example 0 + */ + start: number + } + | { + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by the time at which BigQuery ingests each row + * @enum {string} + */ + kind: 'ingestion_time' + } + ) + | null + /** + * @description Source PostgreSQL table OID, stable across renames for the relation lifetime + * @example 16384 + */ + table_id: number + }[] + } } } | { @@ -6519,6 +6596,79 @@ export interface components { project_id: string /** @description BigQuery service account key */ service_account_key: string + /** @description Per-table partitioning and clustering, applied only when the physical table is created or recreated */ + table_options?: { + tables?: { + cluster_by?: string[] + partition_by?: + | ( + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by a replicated `DATE`, `TIMESTAMP`, or `DATETIME` column + * @enum {string} + */ + kind: 'time_column' + } + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Exclusive end of the last partition range + * @example 100 + */ + end: number + /** + * @description Width of each partition range + * @example 10 + */ + interval: number + /** + * @description Partition by ranges of a replicated integer column + * @enum {string} + */ + kind: 'integer_range' + /** + * @description Inclusive start of the first partition range + * @example 0 + */ + start: number + } + | { + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by the time at which BigQuery ingests each row + * @enum {string} + */ + kind: 'ingestion_time' + } + ) + | null + /** + * @description Source PostgreSQL table OID, stable across renames for the relation lifetime + * @example 16384 + */ + table_id: number + }[] + } } } | { @@ -7564,11 +7714,6 @@ export interface components { } timestamp: string } - DocumentSignedStatusResponse: { - /** Format: date-time */ - checked_at: string - signed: boolean - } DownloadableBackupsResponse: { backups: { id: number @@ -10390,6 +10535,79 @@ export interface components { * @example my-gcp-project */ project_id: string + /** @description Per-table partitioning and clustering, applied only when the physical table is created or recreated */ + table_options?: { + tables?: { + cluster_by?: string[] + partition_by?: + | ( + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by a replicated `DATE`, `TIMESTAMP`, or `DATETIME` column + * @enum {string} + */ + kind: 'time_column' + } + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Exclusive end of the last partition range + * @example 100 + */ + end: number + /** + * @description Width of each partition range + * @example 10 + */ + interval: number + /** + * @description Partition by ranges of a replicated integer column + * @enum {string} + */ + kind: 'integer_range' + /** + * @description Inclusive start of the first partition range + * @example 0 + */ + start: number + } + | { + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by the time at which BigQuery ingests each row + * @enum {string} + */ + kind: 'ingestion_time' + } + ) + | null + /** + * @description Source PostgreSQL table OID, stable across renames for the relation lifetime + * @example 16384 + */ + table_id: number + }[] + } } } | { @@ -10579,6 +10797,79 @@ export interface components { * @example my-gcp-project */ project_id: string + /** @description Per-table partitioning and clustering, applied only when the physical table is created or recreated */ + table_options?: { + tables?: { + cluster_by?: string[] + partition_by?: + | ( + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by a replicated `DATE`, `TIMESTAMP`, or `DATETIME` column + * @enum {string} + */ + kind: 'time_column' + } + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Exclusive end of the last partition range + * @example 100 + */ + end: number + /** + * @description Width of each partition range + * @example 10 + */ + interval: number + /** + * @description Partition by ranges of a replicated integer column + * @enum {string} + */ + kind: 'integer_range' + /** + * @description Inclusive start of the first partition range + * @example 0 + */ + start: number + } + | { + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by the time at which BigQuery ingests each row + * @enum {string} + */ + kind: 'ingestion_time' + } + ) + | null + /** + * @description Source PostgreSQL table OID, stable across renames for the relation lifetime + * @example 16384 + */ + table_id: number + }[] + } } } | { @@ -12677,6 +12968,79 @@ export interface components { project_id?: string | null /** @description BigQuery service account key */ service_account_key?: string | null + /** @description Per-table partitioning and clustering, applied only when the physical table is created or recreated */ + table_options?: { + tables?: { + cluster_by?: string[] + partition_by?: + | ( + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by a replicated `DATE`, `TIMESTAMP`, or `DATETIME` column + * @enum {string} + */ + kind: 'time_column' + } + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Exclusive end of the last partition range + * @example 100 + */ + end: number + /** + * @description Width of each partition range + * @example 10 + */ + interval: number + /** + * @description Partition by ranges of a replicated integer column + * @enum {string} + */ + kind: 'integer_range' + /** + * @description Inclusive start of the first partition range + * @example 0 + */ + start: number + } + | { + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by the time at which BigQuery ingests each row + * @enum {string} + */ + kind: 'ingestion_time' + } + ) + | null + /** + * @description Source PostgreSQL table OID, stable across renames for the relation lifetime + * @example 16384 + */ + table_id: number + }[] + } | null } } | { @@ -12985,6 +13349,79 @@ export interface components { project_id?: string | null /** @description BigQuery service account key */ service_account_key?: string | null + /** @description Per-table partitioning and clustering, applied only when the physical table is created or recreated */ + table_options?: { + tables?: { + cluster_by?: string[] + partition_by?: + | ( + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by a replicated `DATE`, `TIMESTAMP`, or `DATETIME` column + * @enum {string} + */ + kind: 'time_column' + } + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Exclusive end of the last partition range + * @example 100 + */ + end: number + /** + * @description Width of each partition range + * @example 10 + */ + interval: number + /** + * @description Partition by ranges of a replicated integer column + * @enum {string} + */ + kind: 'integer_range' + /** + * @description Inclusive start of the first partition range + * @example 0 + */ + start: number + } + | { + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by the time at which BigQuery ingests each row + * @enum {string} + */ + kind: 'ingestion_time' + } + ) + | null + /** + * @description Source PostgreSQL table OID, stable across renames for the relation lifetime + * @example 16384 + */ + table_id: number + }[] + } | null } } | { @@ -13708,6 +14145,7 @@ export interface components { x_column: string y_series: string[] } + database_identifier?: string row_limit: number sql: string title?: string @@ -13802,6 +14240,14 @@ export interface components { oauth_app_name?: string /** @description Organization whose grant was used. Only present when token_type=oauth */ organization_id?: string + /** @description Marketplace partner that authenticated the request. Only present when token_type=partner */ + partner?: string + /** @description The partner's own integration-installation id. Only present when token_type=partner and the integration is already installed. Distinct from installation_id, which is a Supabase platform-app installation */ + partner_installation_id?: string + /** @description Email of the partner user who triggered the action. Only present when token_type=partner and the partner acted on behalf of one of its users */ + partner_user_email?: string + /** @description Opaque user identifier in the partner's namespace. Only present when token_type=partner and the partner acted on behalf of one of its users */ + partner_user_id?: string /** @description GoTrue login session. Only present when token_type=jwt */ session_id?: string /** @description Access token alias, as shown in the dashboard. Only present when token_type=v0, token_type=v1 or token_type=scoped_pat */ @@ -13931,6 +14377,79 @@ export interface components { project_id: string /** @description BigQuery service account key */ service_account_key: string + /** @description Per-table partitioning and clustering, applied only when the physical table is created or recreated */ + table_options?: { + tables?: { + cluster_by?: string[] + partition_by?: + | ( + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by a replicated `DATE`, `TIMESTAMP`, or `DATETIME` column + * @enum {string} + */ + kind: 'time_column' + } + | { + /** + * @description Source column name + * @example created_at + */ + column: string + /** + * @description Exclusive end of the last partition range + * @example 100 + */ + end: number + /** + * @description Width of each partition range + * @example 10 + */ + interval: number + /** + * @description Partition by ranges of a replicated integer column + * @enum {string} + */ + kind: 'integer_range' + /** + * @description Inclusive start of the first partition range + * @example 0 + */ + start: number + } + | { + /** + * @description Partition granularity + * @example day + * @enum {string} + */ + granularity?: 'hour' | 'day' | 'month' | 'year' + /** + * @description Partition by the time at which BigQuery ingests each row + * @enum {string} + */ + kind: 'ingestion_time' + } + ) + | null + /** + * @description Source PostgreSQL table OID, stable across renames for the relation lifetime + * @example 16384 + */ + table_id: number + }[] + } } } | { @@ -17322,6 +17841,28 @@ export interface operations { } } } + 'get-mcp-tools-permissions': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Map of MCP tool name to its FGA permission groups (OR-of-AND). */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': { + [key: string]: string[][] + } + } + } + } + } NotificationsController_getNotifications: { parameters: { query?: { @@ -19761,96 +20302,6 @@ export interface operations { } } } - OrgDocumentsController_createDpaDocument: { - parameters: { - query?: never - header?: never - path: { - /** @description Organization slug */ - slug: string - } - cookie?: never - } - requestBody: { - content: { - 'application/json': components['schemas']['CreateDpaDocumentRequest'] - } - } - responses: { - 201: { - headers: { - [name: string]: unknown - } - content: { - 'application/json': components['schemas']['CreateDpaDocumentResponse'] - } - } - /** @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 - } - } - } - OrgDocumentsController_getDpaSignedStatus: { - parameters: { - query?: never - header?: never - path: { - /** @description Organization slug */ - slug: string - } - cookie?: never - } - requestBody?: never - responses: { - 200: { - headers: { - [name: string]: unknown - } - content: { - 'application/json': components['schemas']['DocumentSignedStatusResponse'] - } - } - /** @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 - } - } - } OrgDocumentsController_getIso27001CertificateUrl: { parameters: { query?: never