- The following table shows your upcoming costs excluding credits. Depending on your
- usage, the final amount may vary. Next invoice on{' '}
-
- {billingCycleEnd.format('MMM DD, YYYY')}
-
- . See{' '}
+ The table shows your upcoming invoice, excluding credits. This invoice will continue
+ updating until the end of your billing period on {billingCycleEnd.format('MMMM DD')}.
+ See{' '}
{
Projected Costs
-
+
{formatCurrency(upcomingInvoice?.amount_projected) ?? '-'}
diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/helpers.ts b/apps/studio/components/interfaces/Organization/BillingSettings/helpers.ts
index 420adce0739..ca5c76c562d 100644
--- a/apps/studio/components/interfaces/Organization/BillingSettings/helpers.ts
+++ b/apps/studio/components/interfaces/Organization/BillingSettings/helpers.ts
@@ -7,6 +7,7 @@ const pricingMetricBytes = [
]
export const formatUsage = (pricingMetric: PricingMetric, usage: number) => {
+ console.log({ pricingMetric, usage })
if (pricingMetricBytes.includes(pricingMetric)) {
return +(usage / 1e9).toFixed(2).toLocaleString()
} else {
@@ -17,7 +18,16 @@ export const formatUsage = (pricingMetric: PricingMetric, usage: number) => {
export const billingMetricUnit = (pricingMetric: PricingMetric) => {
if (pricingMetricBytes.includes(pricingMetric)) {
return 'GB'
- } else if (pricingMetric.startsWith('COMPUTE_HOURS')) {
+ } else if (
+ pricingMetric.startsWith('COMPUTE_HOURS') ||
+ [
+ PricingMetric.CUSTOM_DOMAIN,
+ PricingMetric.IPV4,
+ PricingMetric.PITR_7,
+ PricingMetric.PITR_14,
+ PricingMetric.PITR_28,
+ ].includes(pricingMetric)
+ ) {
return 'Hours'
} else {
return null
diff --git a/apps/studio/data/analytics/org-daily-stats-query.ts b/apps/studio/data/analytics/org-daily-stats-query.ts
index e35642b341b..f7346831c91 100644
--- a/apps/studio/data/analytics/org-daily-stats-query.ts
+++ b/apps/studio/data/analytics/org-daily-stats-query.ts
@@ -28,6 +28,11 @@ export enum PricingMetric {
STORAGE_IMAGES_TRANSFORMED = 'STORAGE_IMAGES_TRANSFORMED',
REALTIME_MESSAGE_COUNT = 'REALTIME_MESSAGE_COUNT',
REALTIME_PEAK_CONNECTIONS = 'REALTIME_PEAK_CONNECTIONS',
+ CUSTOM_DOMAIN = 'CUSTOM_DOMAIN',
+ IPV4 = 'IPV4',
+ PITR_7 = 'PITR_7',
+ PITR_14 = 'PITR_14',
+ PITR_28 = 'PITR_28',
}
export enum ComputeUsageMetric {
From 221ad5484d150aed8ec73fced04fd48a348c92de Mon Sep 17 00:00:00 2001
From: intercepted16 <162676516+intercepted16@users.noreply.github.com>
Date: Fri, 21 Jun 2024 20:04:51 +1000
Subject: [PATCH 005/316] docs: duplicated phrase (#27381)
* fix: duplicate (typo)
* Update "regular" to "hosted"
---------
Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>
---
apps/docs/content/guides/auth/auth-email-templates.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/docs/content/guides/auth/auth-email-templates.mdx b/apps/docs/content/guides/auth/auth-email-templates.mdx
index 470620a2d93..cdff2487be6 100644
--- a/apps/docs/content/guides/auth/auth-email-templates.mdx
+++ b/apps/docs/content/guides/auth/auth-email-templates.mdx
@@ -27,7 +27,7 @@ The templating system provides the following variables for use:
## Editing email templates
-On self-hosted Supabase projects, edit your email templates on the [Email Templates](/dashboard/project/_/auth/templates) page. On self-hosted projects or in local development, edit your [configuration files](/docs/guides/cli/customizing-email-templates).
+On hosted Supabase projects, edit your email templates on the [Email Templates](/dashboard/project/_/auth/templates) page. On self-hosted projects or in local development, edit your [configuration files](/docs/guides/cli/customizing-email-templates).
## Mobile Deep Linking
From f2cc8ead213a4330c0fbee6027083bacdae2dc5d Mon Sep 17 00:00:00 2001
From: Alaister Young
Date: Fri, 21 Jun 2024 18:12:55 +0800
Subject: [PATCH 006/316] fix: dependabot alerts 18/06/24 (#27345)
* update braces
* update contentlayer2
---------
Co-authored-by: Joshen Lim
---
apps/design-system/package.json | 4 +-
apps/www/package.json | 4 +-
package-lock.json | 2203 ++++++++++++++++---------------
3 files changed, 1154 insertions(+), 1057 deletions(-)
diff --git a/apps/design-system/package.json b/apps/design-system/package.json
index bdd27eba449..3c1fddaaba7 100644
--- a/apps/design-system/package.json
+++ b/apps/design-system/package.json
@@ -14,7 +14,7 @@
},
"dependencies": {
"@radix-ui/react-alert-dialog": "^1.0.5",
- "contentlayer2": "0.4.5",
+ "contentlayer2": "0.4.6",
"eslint-config-supabase": "*",
"fs": "^0.0.1-security",
"jotai": "^2.8.0",
@@ -22,7 +22,7 @@
"lucide-react": "^0.338.0",
"markdown-wasm": "^1.2.0",
"next": "^14.2.3",
- "next-contentlayer2": "0.4.5",
+ "next-contentlayer2": "0.4.6",
"react": "^18.2.0",
"react-docgen": "^7.0.3",
"react-dom": "^18.2.0",
diff --git a/apps/www/package.json b/apps/www/package.json
index 49fa1826d49..99adbb68d9b 100644
--- a/apps/www/package.json
+++ b/apps/www/package.json
@@ -34,7 +34,7 @@
"cobe": "^0.6.2",
"common": "*",
"config": "*",
- "contentlayer2": "^0.4.5",
+ "contentlayer2": "0.4.6",
"dat.gui": "^0.7.9",
"dayjs": "^1.11.10",
"eslint-config-supabase": "*",
@@ -44,7 +44,7 @@
"icons": "*",
"markdown-toc": "^1.2.0",
"next": "^14.2.3",
- "next-contentlayer2": "0.4.5",
+ "next-contentlayer2": "0.4.6",
"next-mdx-remote": "^4.4.1",
"next-seo": "^6.5.0",
"next-themes": "^0.3.0",
diff --git a/package-lock.json b/package-lock.json
index 37ba851ef47..b60df10462b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -111,7 +111,7 @@
"version": "0.1.0",
"dependencies": {
"@radix-ui/react-alert-dialog": "^1.0.5",
- "contentlayer2": "0.4.5",
+ "contentlayer2": "0.4.6",
"eslint-config-supabase": "*",
"fs": "^0.0.1-security",
"jotai": "^2.8.0",
@@ -119,7 +119,7 @@
"lucide-react": "^0.338.0",
"markdown-wasm": "^1.2.0",
"next": "^14.2.3",
- "next-contentlayer2": "0.4.5",
+ "next-contentlayer2": "0.4.6",
"react": "^18.2.0",
"react-docgen": "^7.0.3",
"react-dom": "^18.2.0",
@@ -153,6 +153,302 @@
"unist-builder": "3.0.0"
}
},
+ "apps/design-system/node_modules/@contentlayer2/cli": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/cli/-/cli-0.4.3.tgz",
+ "integrity": "sha512-ZJ+Iiu2rVI50x60XoqnrsO/Q8eqFX5AlP1L0U/3ygaAas3tnOqTzQZ1UsxYQMpJzcLok24ddlhKfQKbCMUJPiQ==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/utils": "0.4.3",
+ "clipanion": "^3.2.1",
+ "typanion": "^3.12.1"
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/client": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/client/-/client-0.4.3.tgz",
+ "integrity": "sha512-Znz6zW0ShVRq3OCQ6SwsfPQ1Wn28dQpiL33r53OjWuiirXhaSdam4MXRjYSFzCq5JK0kY6Hx0CF0fk3oVbsiVQ==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3"
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/core": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/core/-/core-0.4.3.tgz",
+ "integrity": "sha512-jNagCFHLB8u/qfjoAI+JUuz3jf2hxYFYusgfh+oSq9+jHala4bbLEJOhJmmaY1Dmv2AV6BI7W8Jjy6WIu5g5Yg==",
+ "dependencies": {
+ "@contentlayer2/utils": "0.4.3",
+ "camel-case": "^4.1.2",
+ "comment-json": "^4.2.3",
+ "esbuild": "0.17.x || 0.18.x || 0.19.x || 0.20.x",
+ "gray-matter": "^4.0.3",
+ "mdx-bundler": "^10.0.2",
+ "rehype-stringify": "^10.0.0",
+ "remark-frontmatter": "^5.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.0",
+ "source-map-support": "^0.5.21",
+ "type-fest": "^4.10.0",
+ "unified": "^11.0.4"
+ },
+ "peerDependencies": {
+ "esbuild": "0.17.x || 0.18.x || 0.19.x || 0.20.x",
+ "markdown-wasm": "1.x"
+ },
+ "peerDependenciesMeta": {
+ "esbuild": {
+ "optional": true
+ },
+ "markdown-wasm": {
+ "optional": true
+ }
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/core/node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ },
+ "apps/design-system/node_modules/@contentlayer2/core/node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/core/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/source-files": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/source-files/-/source-files-0.4.3.tgz",
+ "integrity": "sha512-NaLkK9iJcjS7xdqbtEJElEXhdEXv47yj4Ju2TCiZU7/8veQQ67QwtTDesyRMSw4mBt5+hxiAcqvf0hKaHh6lxw==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/utils": "0.4.3",
+ "chokidar": "^3.5.3",
+ "fast-glob": "^3.2.12",
+ "gray-matter": "^4.0.3",
+ "imagescript": "^1.2.16",
+ "micromatch": "^4.0.5",
+ "ts-pattern": "^5.0.6",
+ "unified": "^11.0.4",
+ "yaml": "^2.3.1",
+ "zod": "^3.22.4"
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/source-files/node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ },
+ "apps/design-system/node_modules/@contentlayer2/source-files/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/source-remote-files": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/source-remote-files/-/source-remote-files-0.4.3.tgz",
+ "integrity": "sha512-uow1teWiAJA0WNbqqjEz4FfLPQF6BpdhRfF8JHgX7r8jzqChB5zS8bXX9xJDGhn41oEqR/FDDI1Pn7564H8lsA==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/source-files": "0.4.3",
+ "@contentlayer2/utils": "0.4.3"
+ }
+ },
+ "apps/design-system/node_modules/@contentlayer2/utils": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/utils/-/utils-0.4.3.tgz",
+ "integrity": "sha512-E360wNhvGemU1X+uhIwkzA5v+b8U5Q+Gps50uIDAVW6TWV9boUgAGPspSXXcFAIYG+H4z2eV3jTZjFCwyXGMxg==",
+ "dependencies": {
+ "@effect-ts/core": "^0.60.5",
+ "@effect-ts/otel": "^0.15.1",
+ "@effect-ts/otel-sdk-trace-node": "^0.15.1",
+ "@js-temporal/polyfill": "^0.4.4",
+ "@opentelemetry/api": "^1.8.0",
+ "@opentelemetry/core": "^1.24.0",
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.51.0",
+ "@opentelemetry/resources": "^1.21.0",
+ "@opentelemetry/sdk-trace-base": "^1.21.0",
+ "@opentelemetry/sdk-trace-node": "^1.21.0",
+ "@opentelemetry/semantic-conventions": "^1.21.0",
+ "chokidar": "^3.5.3",
+ "hash-wasm": "^4.11.0",
+ "inflection": "^3.0.0",
+ "memfs": "^4.8.2",
+ "oo-ascii-tree": "^1.94.0",
+ "ts-pattern": "^5.0.6",
+ "type-fest": "^4.10.0"
+ },
+ "peerDependenciesMeta": {
+ "@effect-ts/core": {
+ "optional": true
+ },
+ "@effect-ts/otel": {
+ "optional": true
+ },
+ "@effect-ts/otel-node": {
+ "optional": true
+ }
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/api": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
+ "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/api-logs": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.51.1.tgz",
+ "integrity": "sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==",
+ "dependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/exporter-trace-otlp-grpc": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.51.1.tgz",
+ "integrity": "sha512-P9+Hkszih95ITvldGZ+kXvj9HpD1QfS+PwooyHK72GYA+Bgm+yUSAsDkUkDms8+s9HW6poxURv3LcjaMuBBpVQ==",
+ "dependencies": {
+ "@grpc/grpc-js": "^1.7.1",
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/otlp-grpc-exporter-base": "0.51.1",
+ "@opentelemetry/otlp-transformer": "0.51.1",
+ "@opentelemetry/resources": "1.24.1",
+ "@opentelemetry/sdk-trace-base": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/otlp-exporter-base": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.51.1.tgz",
+ "integrity": "sha512-UYlnOYyDdzo1Gw559EHCzru0RwhvuXCwoH8jGo9J4gO1TE58GjnEmIjomMsKBCym3qWNJfIQXw+9SZCV0DdQNg==",
+ "dependencies": {
+ "@opentelemetry/core": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/otlp-grpc-exporter-base": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.51.1.tgz",
+ "integrity": "sha512-ZAS+4pq8o7dsugGTwV9s6JMKSxi+guIHdn0acOv0bqj26e9pWDFx5Ky+bI0aY46uR9Y0JyXqY+KAEYM/SO3DFA==",
+ "dependencies": {
+ "@grpc/grpc-js": "^1.7.1",
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/otlp-exporter-base": "0.51.1",
+ "protobufjs": "^7.2.3"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/otlp-transformer": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.51.1.tgz",
+ "integrity": "sha512-OppYOXwV9LQqqtYUCywqoOqX/JT9LQ5/FMuPZ//eTkvuHdUC4ZMwz2c6uSoT2R90GWvvGnF1iEqTGyTT3xAt2Q==",
+ "dependencies": {
+ "@opentelemetry/api-logs": "0.51.1",
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/resources": "1.24.1",
+ "@opentelemetry/sdk-logs": "0.51.1",
+ "@opentelemetry/sdk-metrics": "1.24.1",
+ "@opentelemetry/sdk-trace-base": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.3.0 <1.9.0"
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/sdk-logs": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.51.1.tgz",
+ "integrity": "sha512-ULQQtl82b673PpZc5/0EtH4V+BrwVOgKJZEB7tYZnGTG3I98tQVk89S9/JSixomDr++F4ih+LSJTCqIKBz+MQQ==",
+ "dependencies": {
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/resources": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.4.0 <1.9.0",
+ "@opentelemetry/api-logs": ">=0.39.1"
+ }
+ },
+ "apps/design-system/node_modules/@opentelemetry/sdk-metrics": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.24.1.tgz",
+ "integrity": "sha512-FrAqCbbGao9iKI+Mgh+OsC9+U2YMoXnlDHe06yH7dvavCKzE3S892dGtX54+WhSFVxHR/TMRVJiK/CV93GR0TQ==",
+ "dependencies": {
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/resources": "1.24.1",
+ "lodash.merge": "^4.6.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.3.0 <1.9.0"
+ }
+ },
"apps/design-system/node_modules/@types/hast": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
@@ -170,6 +466,26 @@
"balanced-match": "^1.0.0"
}
},
+ "apps/design-system/node_modules/contentlayer2": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/contentlayer2/-/contentlayer2-0.4.6.tgz",
+ "integrity": "sha512-EhdabpVsn8u3EkoovGrLB/sIxWUlVJGNiYal9rZn0XJRjIyncGrhz9EJ9gn+z3cRHYUdHCuCMLW/ev6isgKXYw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@contentlayer2/cli": "0.4.3",
+ "@contentlayer2/client": "0.4.3",
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/source-files": "0.4.3",
+ "@contentlayer2/source-remote-files": "0.4.3",
+ "@contentlayer2/utils": "0.4.3"
+ },
+ "bin": {
+ "contentlayer2": "bin/cli.cjs"
+ },
+ "engines": {
+ "node": ">=14.18"
+ }
+ },
"apps/design-system/node_modules/hast-util-heading-rank": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
@@ -194,6 +510,94 @@
"url": "https://opencollective.com/unified"
}
},
+ "apps/design-system/node_modules/mdast-util-to-hast": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+ "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/design-system/node_modules/memfs": {
+ "version": "4.9.3",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.3.tgz",
+ "integrity": "sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==",
+ "dependencies": {
+ "@jsonjoy.com/json-pack": "^1.0.3",
+ "@jsonjoy.com/util": "^1.1.2",
+ "tree-dump": "^1.0.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ }
+ },
+ "apps/design-system/node_modules/micromark-util-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
+ "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "apps/design-system/node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
+ "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "apps/design-system/node_modules/micromark-util-symbol": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+ "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
"apps/design-system/node_modules/minipass": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
@@ -203,6 +607,21 @@
"node": ">=8"
}
},
+ "apps/design-system/node_modules/next-contentlayer2": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/next-contentlayer2/-/next-contentlayer2-0.4.6.tgz",
+ "integrity": "sha512-r1g/zCl3dXFfMlMI87n2+V90Jz7inMrfyRzmMSQdDfCBy3uexnsoM43wPbklza2teyd/pdfUT0I0gw/IE+YA4Q==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/utils": "0.4.3"
+ },
+ "peerDependencies": {
+ "contentlayer2": "0.4.6",
+ "next": "^12 || ^13 || ^14",
+ "react": "*",
+ "react-dom": "*"
+ }
+ },
"apps/design-system/node_modules/rehype-slug": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz",
@@ -289,6 +708,45 @@
"url": "https://opencollective.com/unified"
}
},
+ "apps/design-system/node_modules/remark-rehype": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz",
+ "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/design-system/node_modules/remark-rehype/node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ },
+ "apps/design-system/node_modules/remark-rehype/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"apps/design-system/node_modules/remark/node_modules/@types/mdast": {
"version": "3.0.15",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
@@ -362,6 +820,26 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "apps/design-system/node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "apps/design-system/node_modules/type-fest": {
+ "version": "4.20.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
+ "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"apps/design-system/node_modules/unist-builder": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz",
@@ -375,6 +853,23 @@
"url": "https://opencollective.com/unified"
}
},
+ "apps/design-system/node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/design-system/node_modules/unist-util-position/node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ },
"apps/design-system/node_modules/unist-util-stringify-position": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
@@ -550,12 +1045,6 @@
"@types/unist": "^2"
}
},
- "apps/docs/node_modules/devtools-protocol": {
- "version": "0.0.1019158",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz",
- "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==",
- "peer": true
- },
"apps/docs/node_modules/framer-motion": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.0.3.tgz",
@@ -650,30 +1139,6 @@
],
"license": "MIT"
},
- "apps/docs/node_modules/puppeteer": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.2.0.tgz",
- "integrity": "sha512-7Au6iC98rS6WEAD110V4Bxd0iIbqoFtzz9XzkG1BSofidS1VAJ881E1+GFR7Xn2Yea0hbj8n0ErzRyseMp1Ctg==",
- "deprecated": "< 19.4.0 is no longer supported",
- "hasInstallScript": true,
- "peer": true,
- "dependencies": {
- "cross-fetch": "3.1.5",
- "debug": "4.3.4",
- "devtools-protocol": "0.0.1019158",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.1",
- "progress": "2.0.3",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.1.1",
- "unbzip2-stream": "1.4.3",
- "ws": "8.8.1"
- },
- "engines": {
- "node": ">=14.1.0"
- }
- },
"apps/docs/node_modules/remark": {
"version": "14.0.3",
"resolved": "https://registry.npmjs.org/remark/-/remark-14.0.3.tgz",
@@ -714,27 +1179,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "apps/docs/node_modules/ws": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
- "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
- "peer": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"apps/docs/spec/parser": {
"name": "@supabase/generator",
"version": "0.0.0",
@@ -1941,7 +2385,7 @@
"cobe": "^0.6.2",
"common": "*",
"config": "*",
- "contentlayer2": "^0.4.5",
+ "contentlayer2": "0.4.6",
"dat.gui": "^0.7.9",
"dayjs": "^1.11.10",
"eslint-config-supabase": "*",
@@ -1951,7 +2395,7 @@
"icons": "*",
"markdown-toc": "^1.2.0",
"next": "^14.2.3",
- "next-contentlayer2": "0.4.5",
+ "next-contentlayer2": "0.4.6",
"next-mdx-remote": "^4.4.1",
"next-seo": "^6.5.0",
"next-themes": "^0.3.0",
@@ -2001,6 +2445,249 @@
"tsconfig": "*"
}
},
+ "apps/www/node_modules/@contentlayer2/cli": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/cli/-/cli-0.4.3.tgz",
+ "integrity": "sha512-ZJ+Iiu2rVI50x60XoqnrsO/Q8eqFX5AlP1L0U/3ygaAas3tnOqTzQZ1UsxYQMpJzcLok24ddlhKfQKbCMUJPiQ==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/utils": "0.4.3",
+ "clipanion": "^3.2.1",
+ "typanion": "^3.12.1"
+ }
+ },
+ "apps/www/node_modules/@contentlayer2/client": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/client/-/client-0.4.3.tgz",
+ "integrity": "sha512-Znz6zW0ShVRq3OCQ6SwsfPQ1Wn28dQpiL33r53OjWuiirXhaSdam4MXRjYSFzCq5JK0kY6Hx0CF0fk3oVbsiVQ==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3"
+ }
+ },
+ "apps/www/node_modules/@contentlayer2/core": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/core/-/core-0.4.3.tgz",
+ "integrity": "sha512-jNagCFHLB8u/qfjoAI+JUuz3jf2hxYFYusgfh+oSq9+jHala4bbLEJOhJmmaY1Dmv2AV6BI7W8Jjy6WIu5g5Yg==",
+ "dependencies": {
+ "@contentlayer2/utils": "0.4.3",
+ "camel-case": "^4.1.2",
+ "comment-json": "^4.2.3",
+ "esbuild": "0.17.x || 0.18.x || 0.19.x || 0.20.x",
+ "gray-matter": "^4.0.3",
+ "mdx-bundler": "^10.0.2",
+ "rehype-stringify": "^10.0.0",
+ "remark-frontmatter": "^5.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.0",
+ "source-map-support": "^0.5.21",
+ "type-fest": "^4.10.0",
+ "unified": "^11.0.4"
+ },
+ "peerDependencies": {
+ "esbuild": "0.17.x || 0.18.x || 0.19.x || 0.20.x",
+ "markdown-wasm": "1.x"
+ },
+ "peerDependenciesMeta": {
+ "esbuild": {
+ "optional": true
+ },
+ "markdown-wasm": {
+ "optional": true
+ }
+ }
+ },
+ "apps/www/node_modules/@contentlayer2/source-files": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/source-files/-/source-files-0.4.3.tgz",
+ "integrity": "sha512-NaLkK9iJcjS7xdqbtEJElEXhdEXv47yj4Ju2TCiZU7/8veQQ67QwtTDesyRMSw4mBt5+hxiAcqvf0hKaHh6lxw==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/utils": "0.4.3",
+ "chokidar": "^3.5.3",
+ "fast-glob": "^3.2.12",
+ "gray-matter": "^4.0.3",
+ "imagescript": "^1.2.16",
+ "micromatch": "^4.0.5",
+ "ts-pattern": "^5.0.6",
+ "unified": "^11.0.4",
+ "yaml": "^2.3.1",
+ "zod": "^3.22.4"
+ }
+ },
+ "apps/www/node_modules/@contentlayer2/source-remote-files": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/source-remote-files/-/source-remote-files-0.4.3.tgz",
+ "integrity": "sha512-uow1teWiAJA0WNbqqjEz4FfLPQF6BpdhRfF8JHgX7r8jzqChB5zS8bXX9xJDGhn41oEqR/FDDI1Pn7564H8lsA==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/source-files": "0.4.3",
+ "@contentlayer2/utils": "0.4.3"
+ }
+ },
+ "apps/www/node_modules/@contentlayer2/utils": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@contentlayer2/utils/-/utils-0.4.3.tgz",
+ "integrity": "sha512-E360wNhvGemU1X+uhIwkzA5v+b8U5Q+Gps50uIDAVW6TWV9boUgAGPspSXXcFAIYG+H4z2eV3jTZjFCwyXGMxg==",
+ "dependencies": {
+ "@effect-ts/core": "^0.60.5",
+ "@effect-ts/otel": "^0.15.1",
+ "@effect-ts/otel-sdk-trace-node": "^0.15.1",
+ "@js-temporal/polyfill": "^0.4.4",
+ "@opentelemetry/api": "^1.8.0",
+ "@opentelemetry/core": "^1.24.0",
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.51.0",
+ "@opentelemetry/resources": "^1.21.0",
+ "@opentelemetry/sdk-trace-base": "^1.21.0",
+ "@opentelemetry/sdk-trace-node": "^1.21.0",
+ "@opentelemetry/semantic-conventions": "^1.21.0",
+ "chokidar": "^3.5.3",
+ "hash-wasm": "^4.11.0",
+ "inflection": "^3.0.0",
+ "memfs": "^4.8.2",
+ "oo-ascii-tree": "^1.94.0",
+ "ts-pattern": "^5.0.6",
+ "type-fest": "^4.10.0"
+ },
+ "peerDependenciesMeta": {
+ "@effect-ts/core": {
+ "optional": true
+ },
+ "@effect-ts/otel": {
+ "optional": true
+ },
+ "@effect-ts/otel-node": {
+ "optional": true
+ }
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/api": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
+ "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/api-logs": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.51.1.tgz",
+ "integrity": "sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==",
+ "dependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/exporter-trace-otlp-grpc": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.51.1.tgz",
+ "integrity": "sha512-P9+Hkszih95ITvldGZ+kXvj9HpD1QfS+PwooyHK72GYA+Bgm+yUSAsDkUkDms8+s9HW6poxURv3LcjaMuBBpVQ==",
+ "dependencies": {
+ "@grpc/grpc-js": "^1.7.1",
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/otlp-grpc-exporter-base": "0.51.1",
+ "@opentelemetry/otlp-transformer": "0.51.1",
+ "@opentelemetry/resources": "1.24.1",
+ "@opentelemetry/sdk-trace-base": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/otlp-exporter-base": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.51.1.tgz",
+ "integrity": "sha512-UYlnOYyDdzo1Gw559EHCzru0RwhvuXCwoH8jGo9J4gO1TE58GjnEmIjomMsKBCym3qWNJfIQXw+9SZCV0DdQNg==",
+ "dependencies": {
+ "@opentelemetry/core": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/otlp-grpc-exporter-base": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.51.1.tgz",
+ "integrity": "sha512-ZAS+4pq8o7dsugGTwV9s6JMKSxi+guIHdn0acOv0bqj26e9pWDFx5Ky+bI0aY46uR9Y0JyXqY+KAEYM/SO3DFA==",
+ "dependencies": {
+ "@grpc/grpc-js": "^1.7.1",
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/otlp-exporter-base": "0.51.1",
+ "protobufjs": "^7.2.3"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.0.0"
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/otlp-transformer": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.51.1.tgz",
+ "integrity": "sha512-OppYOXwV9LQqqtYUCywqoOqX/JT9LQ5/FMuPZ//eTkvuHdUC4ZMwz2c6uSoT2R90GWvvGnF1iEqTGyTT3xAt2Q==",
+ "dependencies": {
+ "@opentelemetry/api-logs": "0.51.1",
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/resources": "1.24.1",
+ "@opentelemetry/sdk-logs": "0.51.1",
+ "@opentelemetry/sdk-metrics": "1.24.1",
+ "@opentelemetry/sdk-trace-base": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.3.0 <1.9.0"
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/sdk-logs": {
+ "version": "0.51.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.51.1.tgz",
+ "integrity": "sha512-ULQQtl82b673PpZc5/0EtH4V+BrwVOgKJZEB7tYZnGTG3I98tQVk89S9/JSixomDr++F4ih+LSJTCqIKBz+MQQ==",
+ "dependencies": {
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/resources": "1.24.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.4.0 <1.9.0",
+ "@opentelemetry/api-logs": ">=0.39.1"
+ }
+ },
+ "apps/www/node_modules/@opentelemetry/sdk-metrics": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.24.1.tgz",
+ "integrity": "sha512-FrAqCbbGao9iKI+Mgh+OsC9+U2YMoXnlDHe06yH7dvavCKzE3S892dGtX54+WhSFVxHR/TMRVJiK/CV93GR0TQ==",
+ "dependencies": {
+ "@opentelemetry/core": "1.24.1",
+ "@opentelemetry/resources": "1.24.1",
+ "lodash.merge": "^4.6.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.3.0 <1.9.0"
+ }
+ },
+ "apps/www/node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"apps/www/node_modules/@types/mdx-js__react": {
"version": "1.5.6",
"dev": true,
@@ -2014,6 +2701,31 @@
"dev": true,
"license": "MIT"
},
+ "apps/www/node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ },
+ "apps/www/node_modules/contentlayer2": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/contentlayer2/-/contentlayer2-0.4.6.tgz",
+ "integrity": "sha512-EhdabpVsn8u3EkoovGrLB/sIxWUlVJGNiYal9rZn0XJRjIyncGrhz9EJ9gn+z3cRHYUdHCuCMLW/ev6isgKXYw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@contentlayer2/cli": "0.4.3",
+ "@contentlayer2/client": "0.4.3",
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/source-files": "0.4.3",
+ "@contentlayer2/source-remote-files": "0.4.3",
+ "@contentlayer2/utils": "0.4.3"
+ },
+ "bin": {
+ "contentlayer2": "bin/cli.cjs"
+ },
+ "engines": {
+ "node": ">=14.18"
+ }
+ },
"apps/www/node_modules/framer-motion": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.0.3.tgz",
@@ -2054,6 +2766,140 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "apps/www/node_modules/mdast-util-to-hast": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+ "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/www/node_modules/memfs": {
+ "version": "4.9.3",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.3.tgz",
+ "integrity": "sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==",
+ "dependencies": {
+ "@jsonjoy.com/json-pack": "^1.0.3",
+ "@jsonjoy.com/util": "^1.1.2",
+ "tree-dump": "^1.0.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ }
+ },
+ "apps/www/node_modules/micromark-util-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
+ "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "apps/www/node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
+ "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "apps/www/node_modules/micromark-util-symbol": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+ "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "apps/www/node_modules/next-contentlayer2": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/next-contentlayer2/-/next-contentlayer2-0.4.6.tgz",
+ "integrity": "sha512-r1g/zCl3dXFfMlMI87n2+V90Jz7inMrfyRzmMSQdDfCBy3uexnsoM43wPbklza2teyd/pdfUT0I0gw/IE+YA4Q==",
+ "dependencies": {
+ "@contentlayer2/core": "0.4.3",
+ "@contentlayer2/utils": "0.4.3"
+ },
+ "peerDependencies": {
+ "contentlayer2": "0.4.6",
+ "next": "^12 || ^13 || ^14",
+ "react": "*",
+ "react-dom": "*"
+ }
+ },
+ "apps/www/node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/www/node_modules/remark-rehype": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz",
+ "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"apps/www/node_modules/slash": {
"version": "4.0.0",
"license": "MIT",
@@ -2064,6 +2910,96 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "apps/www/node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "apps/www/node_modules/type-fest": {
+ "version": "4.20.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz",
+ "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "apps/www/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/www/node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/www/node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/www/node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "apps/www/node_modules/vfile": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
+ "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/@aashutoshrathi/word-wrap": {
"version": "1.2.6",
"license": "MIT",
@@ -4664,559 +5600,6 @@
"w3c-keyname": "^2.2.4"
}
},
- "node_modules/@contentlayer2/cli": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@contentlayer2/cli/-/cli-0.4.2.tgz",
- "integrity": "sha512-lc7ENmbBxl2kTJK3ubduu/qUJXW5f6XKwnAx33Bl7Mvt5syALVm0vhx3g1ZWtz9JXyIDYsybVgSGQNtMr3Cs3g==",
- "dependencies": {
- "@contentlayer2/core": "0.4.2",
- "@contentlayer2/utils": "0.4.2",
- "clipanion": "^3.2.1",
- "typanion": "^3.12.1"
- }
- },
- "node_modules/@contentlayer2/client": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@contentlayer2/client/-/client-0.4.2.tgz",
- "integrity": "sha512-aumGNIvJZXzB2/YIzE277GmJplJfCCLAHynzi6/87oiq/Ky9hf/0cd2R2w0HMPtGmlm1O2UiroD2TjyzsFTQUQ==",
- "dependencies": {
- "@contentlayer2/core": "0.4.2"
- }
- },
- "node_modules/@contentlayer2/core": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@contentlayer2/core/-/core-0.4.2.tgz",
- "integrity": "sha512-CjX5oFpR3YfgB4djy2PjWoGROH9WGIOFuHL7633vIKw1Eem5XeuhxzFsEEjhkarLbBpp6BJS27ffIEJbWK3HWA==",
- "dependencies": {
- "@contentlayer2/utils": "0.4.2",
- "camel-case": "^4.1.2",
- "comment-json": "^4.2.3",
- "esbuild": "0.17.x || 0.18.x || 0.19.x || 0.20.x",
- "gray-matter": "^4.0.3",
- "mdx-bundler": "^10.0.2",
- "rehype-stringify": "^10.0.0",
- "remark-frontmatter": "^5.0.0",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.1.0",
- "source-map-support": "^0.5.21",
- "type-fest": "^4.10.0",
- "unified": "^11.0.4"
- },
- "peerDependencies": {
- "esbuild": "0.17.x || 0.18.x || 0.19.x || 0.20.x",
- "markdown-wasm": "1.x"
- },
- "peerDependenciesMeta": {
- "esbuild": {
- "optional": true
- },
- "markdown-wasm": {
- "optional": true
- }
- }
- },
- "node_modules/@contentlayer2/core/node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/@types/unist": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
- "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
- },
- "node_modules/@contentlayer2/core/node_modules/mdast-util-to-hast": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz",
- "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "trim-lines": "^3.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/micromark-util-encode": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
- "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/@contentlayer2/core/node_modules/micromark-util-sanitize-uri": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
- "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/micromark-util-symbol": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
- "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/@contentlayer2/core/node_modules/remark-parse": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
- "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/remark-rehype": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz",
- "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/type-fest": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz",
- "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/unified": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
- "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "bail": "^2.0.0",
- "devlop": "^1.0.0",
- "extend": "^3.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/unist-util-position": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
- "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/unist-util-stringify-position": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
- "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/unist-util-visit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
- "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/core/node_modules/vfile": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
- "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-stringify-position": "^4.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/source-files": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@contentlayer2/source-files/-/source-files-0.4.2.tgz",
- "integrity": "sha512-r4m7+262ITf4SZFGrK9P6ogyVCa4Bmt3OU8+0gDgFBFZD3aNYTcHZSyXQV+EyoMfduM/F7Sg9RSFJ18bxa9Yxw==",
- "dependencies": {
- "@contentlayer2/core": "0.4.2",
- "@contentlayer2/utils": "0.4.2",
- "chokidar": "^3.5.3",
- "fast-glob": "^3.2.12",
- "gray-matter": "^4.0.3",
- "imagescript": "^1.2.16",
- "micromatch": "^4.0.5",
- "ts-pattern": "^5.0.6",
- "unified": "^11.0.4",
- "yaml": "^2.3.1",
- "zod": "^3.22.4"
- }
- },
- "node_modules/@contentlayer2/source-files/node_modules/@types/unist": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
- "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
- },
- "node_modules/@contentlayer2/source-files/node_modules/unified": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
- "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "bail": "^2.0.0",
- "devlop": "^1.0.0",
- "extend": "^3.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/source-files/node_modules/unist-util-stringify-position": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
- "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/source-files/node_modules/vfile": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
- "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-stringify-position": "^4.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@contentlayer2/source-remote-files": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@contentlayer2/source-remote-files/-/source-remote-files-0.4.2.tgz",
- "integrity": "sha512-gzIZynlSMYa175leiyof66nGyXZGp+H9WoDpYRacQDfIiU0pRLy3YfqFbFf2GZM845+r3c5luO7kaPjv88Xvtw==",
- "dependencies": {
- "@contentlayer2/core": "0.4.2",
- "@contentlayer2/source-files": "0.4.2",
- "@contentlayer2/utils": "0.4.2"
- }
- },
- "node_modules/@contentlayer2/utils": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@contentlayer2/utils/-/utils-0.4.2.tgz",
- "integrity": "sha512-CajH0ICW7bPz66ixE3Wf8QYMGPP3ZiEVxmpoyOt6wgJS59XZOAp2StKecUioElZHuXFtBV2MYW5Cq24bjHKhAQ==",
- "dependencies": {
- "@effect-ts/core": "^0.60.5",
- "@effect-ts/otel": "^0.15.1",
- "@effect-ts/otel-exporter-trace-otlp-grpc": "^0.15.1",
- "@effect-ts/otel-sdk-trace-node": "^0.15.1",
- "@js-temporal/polyfill": "^0.4.4",
- "@opentelemetry/api": "^1.7.0",
- "@opentelemetry/core": "^1.21.0",
- "@opentelemetry/exporter-trace-otlp-grpc": "^0.48.0",
- "@opentelemetry/resources": "^1.21.0",
- "@opentelemetry/sdk-trace-base": "^1.21.0",
- "@opentelemetry/sdk-trace-node": "^1.21.0",
- "@opentelemetry/semantic-conventions": "^1.21.0",
- "chokidar": "^3.5.3",
- "hash-wasm": "^4.11.0",
- "inflection": "^3.0.0",
- "memfs": "3.6.0",
- "oo-ascii-tree": "^1.94.0",
- "ts-pattern": "^5.0.6",
- "type-fest": "^4.10.0"
- },
- "peerDependenciesMeta": {
- "@effect-ts/core": {
- "optional": true
- },
- "@effect-ts/otel": {
- "optional": true
- },
- "@effect-ts/otel-node": {
- "optional": true
- }
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/api": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz",
- "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/api-logs": {
- "version": "0.48.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.48.0.tgz",
- "integrity": "sha512-1/aMiU4Eqo3Zzpfwu51uXssp5pzvHFObk8S9pKAiXb1ne8pvg1qxBQitYL1XUiAMEXFzgjaidYG2V6624DRhhw==",
- "dependencies": {
- "@opentelemetry/api": "^1.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/core": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.21.0.tgz",
- "integrity": "sha512-KP+OIweb3wYoP7qTYL/j5IpOlu52uxBv5M4+QhSmmUfLyTgu1OIS71msK3chFo1D6Y61BIH3wMiMYRCxJCQctA==",
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.21.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.8.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/exporter-trace-otlp-grpc": {
- "version": "0.48.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.48.0.tgz",
- "integrity": "sha512-+qRQXUbdRW6aNRT5yWOG3G6My1VxxKeqgUyLkkdIjkT20lvymjiN2RpBfGMtAf/oqnuRknf9snFl9VSIO2gniw==",
- "dependencies": {
- "@grpc/grpc-js": "^1.7.1",
- "@opentelemetry/core": "1.21.0",
- "@opentelemetry/otlp-grpc-exporter-base": "0.48.0",
- "@opentelemetry/otlp-transformer": "0.48.0",
- "@opentelemetry/resources": "1.21.0",
- "@opentelemetry/sdk-trace-base": "1.21.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.0.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/otlp-exporter-base": {
- "version": "0.48.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.48.0.tgz",
- "integrity": "sha512-T4LJND+Ugl87GUONoyoQzuV9qCn4BFIPOnCH1biYqdGhc2JahjuLqVD9aefwLzGBW638iLAo88Lh68h2F1FLiA==",
- "dependencies": {
- "@opentelemetry/core": "1.21.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.0.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/otlp-grpc-exporter-base": {
- "version": "0.48.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.48.0.tgz",
- "integrity": "sha512-Vdp56RK9OU+Oeoy3YQC/UMOWglKQ9qvgGr49FgF4r8vk5DlcTUgVS0m3KG8pykmRPA+5ZKaDuqwPw5aTvWmHFw==",
- "dependencies": {
- "@grpc/grpc-js": "^1.7.1",
- "@opentelemetry/core": "1.21.0",
- "@opentelemetry/otlp-exporter-base": "0.48.0",
- "protobufjs": "^7.2.3"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.0.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/otlp-transformer": {
- "version": "0.48.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.48.0.tgz",
- "integrity": "sha512-yuoS4cUumaTK/hhxW3JUy3wl2U4keMo01cFDrUOmjloAdSSXvv1zyQ920IIH4lymp5Xd21Dj2/jq2LOro56TJg==",
- "dependencies": {
- "@opentelemetry/api-logs": "0.48.0",
- "@opentelemetry/core": "1.21.0",
- "@opentelemetry/resources": "1.21.0",
- "@opentelemetry/sdk-logs": "0.48.0",
- "@opentelemetry/sdk-metrics": "1.21.0",
- "@opentelemetry/sdk-trace-base": "1.21.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.3.0 <1.8.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/resources": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.21.0.tgz",
- "integrity": "sha512-1Z86FUxPKL6zWVy2LdhueEGl9AHDJcx+bvHStxomruz6Whd02mE3lNUMjVJ+FGRoktx/xYQcxccYb03DiUP6Yw==",
- "dependencies": {
- "@opentelemetry/core": "1.21.0",
- "@opentelemetry/semantic-conventions": "1.21.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.8.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/sdk-logs": {
- "version": "0.48.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.48.0.tgz",
- "integrity": "sha512-lRcA5/qkSJuSh4ItWCddhdn/nNbVvnzM+cm9Fg1xpZUeTeozjJDBcHnmeKoOaWRnrGYBdz6UTY6bynZR9aBeAA==",
- "dependencies": {
- "@opentelemetry/core": "1.21.0",
- "@opentelemetry/resources": "1.21.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.4.0 <1.8.0",
- "@opentelemetry/api-logs": ">=0.39.1"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/sdk-metrics": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.21.0.tgz",
- "integrity": "sha512-on1jTzIHc5DyWhRP+xpf+zrgrREXcHBH4EDAfaB5mIG7TWpKxNXooQ1JCylaPsswZUv4wGnVTinr4HrBdGARAQ==",
- "dependencies": {
- "@opentelemetry/core": "1.21.0",
- "@opentelemetry/resources": "1.21.0",
- "lodash.merge": "^4.6.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.3.0 <1.8.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/sdk-trace-base": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.21.0.tgz",
- "integrity": "sha512-yrElGX5Fv0umzp8Nxpta/XqU71+jCAyaLk34GmBzNcrW43nqbrqvdPs4gj4MVy/HcTjr6hifCDCYA3rMkajxxA==",
- "dependencies": {
- "@opentelemetry/core": "1.21.0",
- "@opentelemetry/resources": "1.21.0",
- "@opentelemetry/semantic-conventions": "1.21.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.8.0"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.21.0.tgz",
- "integrity": "sha512-lkC8kZYntxVKr7b8xmjCVUgE0a8xgDakPyDo9uSWavXPyYqLgYYGdEd2j8NxihRyb6UwpX3G/hFUF4/9q2V+/g==",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@contentlayer2/utils/node_modules/type-fest": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz",
- "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"license": "MIT",
@@ -5288,21 +5671,6 @@
"@opentelemetry/sdk-trace-base": "^1.13.0"
}
},
- "node_modules/@effect-ts/otel-exporter-trace-otlp-grpc": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/@effect-ts/otel-exporter-trace-otlp-grpc/-/otel-exporter-trace-otlp-grpc-0.15.1.tgz",
- "integrity": "sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==",
- "dependencies": {
- "@effect-ts/otel": "^0.15.1"
- },
- "peerDependencies": {
- "@effect-ts/core": "^0.60.2",
- "@opentelemetry/api": "^1.4.0",
- "@opentelemetry/core": "^1.13.0",
- "@opentelemetry/exporter-trace-otlp-grpc": "^0.39.0",
- "@opentelemetry/sdk-trace-base": "^1.13.0"
- }
- },
"node_modules/@effect-ts/otel-sdk-trace-node": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/@effect-ts/otel-sdk-trace-node/-/otel-sdk-trace-node-0.15.1.tgz",
@@ -5949,9 +6317,9 @@
}
},
"node_modules/@grpc/grpc-js": {
- "version": "1.10.8",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.8.tgz",
- "integrity": "sha512-vYVqYzHicDqyKB+NQhAc54I1QWCBLCrYG6unqOIcBTHx+7x8C9lcoLj3KVJXs2VB4lUbpWY+Kk9NipcbXYWmvg==",
+ "version": "1.10.9",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.9.tgz",
+ "integrity": "sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==",
"dependencies": {
"@grpc/proto-loader": "^0.7.13",
"@js-sdsl/ordered-map": "^4.4.2"
@@ -7115,6 +7483,57 @@
"node": ">=12"
}
},
+ "node_modules/@jsonjoy.com/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/json-pack": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz",
+ "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==",
+ "dependencies": {
+ "@jsonjoy.com/base64": "^1.1.1",
+ "@jsonjoy.com/util": "^1.1.2",
+ "hyperdyperid": "^1.2.0",
+ "thingies": "^1.20.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/util": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.3.tgz",
+ "integrity": "sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg==",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/@juggle/resize-observer": {
"version": "3.4.0",
"dev": true,
@@ -8939,18 +9358,6 @@
"node": ">=8.0.0"
}
},
- "node_modules/@opentelemetry/api-logs": {
- "version": "0.39.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.39.1.tgz",
- "integrity": "sha512-9BJ8lMcOzEN0lu+Qji801y707oFO4xT3db6cosPvl+k7ItUHKN5ofWqtSbM9gbt1H4JJ/4/2TVrqI9Rq7hNv6Q==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/api": "^1.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@opentelemetry/context-async-hooks": {
"version": "1.24.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.24.1.tgz",
@@ -8976,241 +9383,6 @@
"@opentelemetry/api": ">=1.0.0 <1.9.0"
}
},
- "node_modules/@opentelemetry/exporter-trace-otlp-grpc": {
- "version": "0.39.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.39.1.tgz",
- "integrity": "sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==",
- "peer": true,
- "dependencies": {
- "@grpc/grpc-js": "^1.7.1",
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/otlp-grpc-exporter-base": "0.39.1",
- "@opentelemetry/otlp-transformer": "0.39.1",
- "@opentelemetry/resources": "1.13.0",
- "@opentelemetry/sdk-trace-base": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.0.0"
- }
- },
- "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/core": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.13.0.tgz",
- "integrity": "sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.13.0.tgz",
- "integrity": "sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.13.0.tgz",
- "integrity": "sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/resources": "1.13.0",
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.13.0.tgz",
- "integrity": "sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==",
- "peer": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/otlp-exporter-base": {
- "version": "0.39.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.39.1.tgz",
- "integrity": "sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.0.0"
- }
- },
- "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.13.0.tgz",
- "integrity": "sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.13.0.tgz",
- "integrity": "sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==",
- "peer": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/otlp-grpc-exporter-base": {
- "version": "0.39.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.39.1.tgz",
- "integrity": "sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==",
- "peer": true,
- "dependencies": {
- "@grpc/grpc-js": "^1.7.1",
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/otlp-exporter-base": "0.39.1",
- "protobufjs": "^7.2.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.0.0"
- }
- },
- "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/core": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.13.0.tgz",
- "integrity": "sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.13.0.tgz",
- "integrity": "sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==",
- "peer": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/otlp-transformer": {
- "version": "0.39.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.39.1.tgz",
- "integrity": "sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/api-logs": "0.39.1",
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/resources": "1.13.0",
- "@opentelemetry/sdk-logs": "0.39.1",
- "@opentelemetry/sdk-metrics": "1.13.0",
- "@opentelemetry/sdk-trace-base": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.3.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.13.0.tgz",
- "integrity": "sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.13.0.tgz",
- "integrity": "sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-trace-base": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.13.0.tgz",
- "integrity": "sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/resources": "1.13.0",
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.13.0.tgz",
- "integrity": "sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==",
- "peer": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@opentelemetry/propagator-b3": {
"version": "1.24.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.24.1.tgz",
@@ -9254,120 +9426,6 @@
"@opentelemetry/api": ">=1.0.0 <1.9.0"
}
},
- "node_modules/@opentelemetry/sdk-logs": {
- "version": "0.39.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.39.1.tgz",
- "integrity": "sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/resources": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.4.0 <1.5.0",
- "@opentelemetry/api-logs": ">=0.38.0"
- }
- },
- "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.13.0.tgz",
- "integrity": "sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.13.0.tgz",
- "integrity": "sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.13.0.tgz",
- "integrity": "sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==",
- "peer": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/sdk-metrics": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.13.0.tgz",
- "integrity": "sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/resources": "1.13.0",
- "lodash.merge": "4.6.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.3.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.13.0.tgz",
- "integrity": "sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.13.0.tgz",
- "integrity": "sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.13.0",
- "@opentelemetry/semantic-conventions": "1.13.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.13.0.tgz",
- "integrity": "sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==",
- "peer": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@opentelemetry/sdk-trace-base": {
"version": "1.24.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.24.1.tgz",
@@ -16845,10 +16903,11 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "license": "MIT",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -17936,26 +17995,6 @@
"upper-case": "^2.0.2"
}
},
- "node_modules/contentlayer2": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/contentlayer2/-/contentlayer2-0.4.5.tgz",
- "integrity": "sha512-2aZym6MRX1v31ASkBLog4Aodhus/DwMvMcq3JHjPpnwYn7KHNV2gZ7U6RmVNs1OIg9IQWdkhSajzuL5pNaZgHw==",
- "hasInstallScript": true,
- "dependencies": {
- "@contentlayer2/cli": "0.4.2",
- "@contentlayer2/client": "0.4.2",
- "@contentlayer2/core": "0.4.2",
- "@contentlayer2/source-files": "0.4.2",
- "@contentlayer2/source-remote-files": "0.4.2",
- "@contentlayer2/utils": "0.4.2"
- },
- "bin": {
- "contentlayer2": "bin/cli.cjs"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
"node_modules/convert-source-map": {
"version": "2.0.0",
"license": "MIT"
@@ -19130,6 +19169,12 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/devtools-protocol": {
+ "version": "0.0.1019158",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz",
+ "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==",
+ "peer": true
+ },
"node_modules/diacritics-map": {
"version": "0.1.0",
"license": "MIT",
@@ -21014,8 +21059,9 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "license": "MIT",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -21332,10 +21378,6 @@
"version": "4.0.0",
"license": "ISC"
},
- "node_modules/fs-monkey": {
- "version": "1.0.5",
- "license": "Unlicense"
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"license": "ISC"
@@ -23073,6 +23115,14 @@
"ms": "^2.0.0"
}
},
+ "node_modules/hyperdyperid": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
+ "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
+ "engines": {
+ "node": ">=10.18"
+ }
+ },
"node_modules/hyphenate-style-name": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
@@ -28664,18 +28714,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/memfs": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz",
- "integrity": "sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==",
- "deprecated": "this will be v4",
- "dependencies": {
- "fs-monkey": "^1.0.4"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
"node_modules/memoize-one": {
"version": "5.2.1",
"license": "MIT"
@@ -31355,21 +31393,6 @@
}
}
},
- "node_modules/next-contentlayer2": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/next-contentlayer2/-/next-contentlayer2-0.4.5.tgz",
- "integrity": "sha512-QvsmQ/ETfnYOoSLvr2TU9hoRHwMZVQgnyB65Wzg+3SAWUqFBtIPTmn3CXsPAvbUKWvoYP7FQaMim5CJKJHseNg==",
- "dependencies": {
- "@contentlayer2/core": "0.4.2",
- "@contentlayer2/utils": "0.4.2"
- },
- "peerDependencies": {
- "contentlayer2": "0.4.5",
- "next": "^12 || ^13 || ^14",
- "react": "*",
- "react-dom": "*"
- }
- },
"node_modules/next-mdx-remote": {
"version": "4.4.1",
"license": "MPL-2.0",
@@ -33797,6 +33820,51 @@
"node": ">=6"
}
},
+ "node_modules/puppeteer": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.2.0.tgz",
+ "integrity": "sha512-7Au6iC98rS6WEAD110V4Bxd0iIbqoFtzz9XzkG1BSofidS1VAJ881E1+GFR7Xn2Yea0hbj8n0ErzRyseMp1Ctg==",
+ "deprecated": "< 22.6.4 is no longer supported",
+ "hasInstallScript": true,
+ "peer": true,
+ "dependencies": {
+ "cross-fetch": "3.1.5",
+ "debug": "4.3.4",
+ "devtools-protocol": "0.0.1019158",
+ "extract-zip": "2.0.1",
+ "https-proxy-agent": "5.0.1",
+ "progress": "2.0.3",
+ "proxy-from-env": "1.1.0",
+ "rimraf": "3.0.2",
+ "tar-fs": "2.1.1",
+ "unbzip2-stream": "1.4.3",
+ "ws": "8.8.1"
+ },
+ "engines": {
+ "node": ">=14.1.0"
+ }
+ },
+ "node_modules/puppeteer/node_modules/ws": {
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
+ "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
+ "peer": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/pure-rand": {
"version": "6.0.4",
"dev": true,
@@ -37306,9 +37374,9 @@
}
},
"node_modules/simple-websocket/node_modules/ws": {
- "version": "7.5.9",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true,
"engines": {
"node": ">=8.3.0"
@@ -39100,6 +39168,17 @@
"node": ">=0.8"
}
},
+ "node_modules/thingies": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
+ "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
+ "engines": {
+ "node": ">=10.18"
+ },
+ "peerDependencies": {
+ "tslib": "^2"
+ }
+ },
"node_modules/three": {
"version": "0.136.0",
"license": "MIT"
@@ -39339,7 +39418,8 @@
},
"node_modules/to-regex-range": {
"version": "5.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -39349,7 +39429,8 @@
},
"node_modules/to-regex-range/node_modules/is-number": {
"version": "7.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"engines": {
"node": ">=0.12.0"
}
@@ -39505,6 +39586,21 @@
"node": ">=12"
}
},
+ "node_modules/tree-dump": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz",
+ "integrity": "sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/trim-lines": {
"version": "3.0.1",
"license": "MIT",
@@ -41947,9 +42043,9 @@
}
},
"node_modules/webpack-bundle-analyzer/node_modules/ws": {
- "version": "7.5.9",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"engines": {
"node": ">=8.3.0"
},
@@ -42292,8 +42388,9 @@
"license": "ISC"
},
"node_modules/ws": {
- "version": "8.14.2",
- "license": "MIT",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
"engines": {
"node": ">=10.0.0"
},
From d95a0fdfd4dfbaabab102a7ce652d68589540fef Mon Sep 17 00:00:00 2001
From: Terry Sutton
Date: Fri, 21 Jun 2024 09:46:36 -0230
Subject: [PATCH 007/316] Add link to smtp settings (#27429)
---
.../EmailRateLimitsAlert/EmailRateLimitsAlert.tsx | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/apps/studio/components/interfaces/Auth/EmailRateLimitsAlert/EmailRateLimitsAlert.tsx b/apps/studio/components/interfaces/Auth/EmailRateLimitsAlert/EmailRateLimitsAlert.tsx
index e1d573c57d7..f2743292cd8 100644
--- a/apps/studio/components/interfaces/Auth/EmailRateLimitsAlert/EmailRateLimitsAlert.tsx
+++ b/apps/studio/components/interfaces/Auth/EmailRateLimitsAlert/EmailRateLimitsAlert.tsx
@@ -1,6 +1,10 @@
+import Link from 'next/link'
import { AlertDescription_Shadcn_, AlertTitle_Shadcn_, Alert_Shadcn_, IconAlertTriangle } from 'ui'
+import { useParams } from 'common'
export function EmailRateLimitsAlert() {
+ const { ref: projectRef } = useParams()
+
return (
@@ -15,8 +19,15 @@ export function EmailRateLimitsAlert() {
>
documentation
{' '}
- for an up-to-date information on the current rate limits. Please use a custom SMTP server if
- you're planning on having large number of users.
+ for an up-to-date information on the current rate limits. Please use a{' '}
+
+ custom SMTP server
+ {' '}
+ if you're planning on having large number of users.
)
From bc3eabd291ddb5488c1945e70fdea2f9c623b129 Mon Sep 17 00:00:00 2001
From: Supun Sudaraka
Date: Fri, 21 Jun 2024 20:53:07 +0530
Subject: [PATCH 008/316] chore: update the docs for custom domain activation
(#27437)
update cli command docs for activating custom domain for supabase projects
Co-authored-by: Rodrigo Mansueli
---
apps/docs/spec/cli_v1_commands.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/apps/docs/spec/cli_v1_commands.yaml b/apps/docs/spec/cli_v1_commands.yaml
index 81bc3d8afe7..dec405023d4 100644
--- a/apps/docs/spec/cli_v1_commands.yaml
+++ b/apps/docs/spec/cli_v1_commands.yaml
@@ -2831,7 +2831,8 @@ commands:
Activates the custom hostname configuration for a project.
This reconfigures your Supabase project to respond to requests on your custom hostname.
- After the custom hostname is activated, your project's auth services will no longer function on the Supabase-provisioned subdomain.
+
+ After the custom hostname is activated, your project's third-party auth providers will no longer function on the Supabase-provisioned subdomain. Please refer to [Prepare to activate your domain](/docs/guides/platform/custom-domains#prepare-to-activate-your-domain) section in our documentation to learn more about the steps you need to follow.
tags: []
links: []
usage: supabase domains activate
From 253668fd93d119ea701e94891b472c8c00c89c15 Mon Sep 17 00:00:00 2001
From: Charis <26616127+charislam@users.noreply.github.com>
Date: Fri, 21 Jun 2024 12:22:42 -0400
Subject: [PATCH 009/316] fix: types (#27433)
---
.../SpreadsheetImport/SpreadsheetImport.utils.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils.ts b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils.ts
index 0c3e0bd8ba3..49540d62a29 100644
--- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils.ts
+++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils.ts
@@ -7,7 +7,7 @@ import { UPLOAD_FILE_EXTENSIONS } from './SpreadsheetImport.constants'
const CHUNK_SIZE = 1024 * 1024 * 0.25 // 0.25MB
export const parseSpreadsheetText: any = (text: string) => {
- const columnTypeMap: any = {}
+ const columnTypeMap: Record = {}
let previewRows: any[] = []
return new Promise((resolve) => {
Papa.parse(text, {
@@ -49,7 +49,7 @@ export const parseSpreadsheet = (
let rowCount = 0
let previewRows: any[] = []
- const columnTypeMap: any = {}
+ const columnTypeMap: Record = {}
const errors: any[] = []
return new Promise((resolve) => {
From eecafc41e0384bd3c8e65c03922f667a9197ccef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kevin=20Gr=C3=BCneberg?=
Date: Sat, 22 Jun 2024 17:19:53 +0800
Subject: [PATCH 010/316] fix: Updating EU tax ids (#27440)
---
.../BillingSettings/TaxID/TaxID.constants.ts | 85 +++++++++++++++++++
.../BillingSettings/TaxID/TaxID.tsx | 8 +-
.../BillingSettings/TaxID/TaxID.utils.ts | 4 +-
3 files changed, 91 insertions(+), 6 deletions(-)
diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.constants.ts b/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.constants.ts
index 08e48d3aaed..39a17cbf1bb 100644
--- a/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.constants.ts
+++ b/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.constants.ts
@@ -7,6 +7,7 @@ export interface TaxId {
name: string
type: string
country: string
+ countryIso2: string
placeholder: string
vatPrefix?: string
}
@@ -17,6 +18,7 @@ export const TAX_IDS: TaxId[] = [
type: 'ae_trn',
country: 'United Arab Emirates',
placeholder: '123456789012345',
+ countryIso2: 'AE',
},
{
name: 'AT VAT',
@@ -24,30 +26,35 @@ export const TAX_IDS: TaxId[] = [
country: 'Austria',
placeholder: 'ATU12345678',
vatPrefix: 'ATU',
+ countryIso2: 'AT',
},
{
name: 'AD NRT',
type: 'ad_nrt',
country: 'Andorra',
placeholder: 'A-123456-Z',
+ countryIso2: 'AD',
},
{
name: 'AR CUIT',
type: 'ar_cuit',
country: 'Argentina',
placeholder: '12-3456789-01',
+ countryIso2: 'AR',
},
{
name: 'AU ABN',
type: 'au_abn',
country: 'Australia',
placeholder: '12345678912',
+ countryIso2: 'AU',
},
{
name: 'AU ARN',
type: 'au_arn',
country: 'Australia',
placeholder: '123456789123',
+ countryIso2: 'AU',
},
{
name: 'BE VAT',
@@ -55,12 +62,14 @@ export const TAX_IDS: TaxId[] = [
country: 'Belgium',
placeholder: 'BE0123456789',
vatPrefix: 'BE',
+ countryIso2: 'BE',
},
{
name: 'BO TIN',
type: 'bo_tin',
country: 'Bolivia',
placeholder: '123456789',
+ countryIso2: 'BO',
},
{
name: 'BG VAT',
@@ -68,54 +77,63 @@ export const TAX_IDS: TaxId[] = [
country: 'Bulgaria',
placeholder: 'BG0123456789',
vatPrefix: 'BG',
+ countryIso2: 'BG',
},
{
name: 'BR CNPJ',
type: 'br_cnpj',
country: 'Brazil',
placeholder: '01.234.456/5432-10',
+ countryIso2: 'BR',
},
{
name: 'BR CPF',
type: 'br_cpf',
country: 'Brazil',
placeholder: '123.456.789-87',
+ countryIso2: 'BR',
},
{
name: 'CA BN',
type: 'ca_bn',
country: 'Canada',
placeholder: '123456789',
+ countryIso2: 'CA',
},
{
name: 'CA GST/HST',
type: 'ca_gst_hst',
country: 'Canada',
placeholder: '123456789RT0002',
+ countryIso2: 'CA',
},
{
name: 'CA PST-BC',
type: 'ca_pst_bc',
country: 'Canada',
placeholder: 'PST-1234-5678',
+ countryIso2: 'CA',
},
{
name: 'CA PST-MB',
type: 'ca_pst_mb',
country: 'Canada',
placeholder: '123456-7',
+ countryIso2: 'CA',
},
{
name: 'CA PST-SK',
type: 'ca_pst_mb',
country: 'Canada',
placeholder: '1234567',
+ countryIso2: 'CA',
},
{
name: 'CA QST',
type: 'ca_qst',
country: 'Canada',
placeholder: '1234567890TQ1234',
+ countryIso2: 'CA',
},
{
name: 'CH VAT',
@@ -123,30 +141,35 @@ export const TAX_IDS: TaxId[] = [
country: 'Switzerland',
placeholder: 'CHE-123.456.789 MWST',
vatPrefix: 'CHE',
+ countryIso2: 'CH',
},
{
name: 'CL TIN',
type: 'cl_tin',
country: 'Chile',
placeholder: '12.345.678-K',
+ countryIso2: 'CL',
},
{
name: 'CN TIN',
type: 'cn_tin',
country: 'China',
placeholder: '123456789012345678',
+ countryIso2: 'CN',
},
{
name: 'CO NIT',
type: 'co_nit',
country: 'Colombia',
placeholder: '123.456.789-0',
+ countryIso2: 'CO',
},
{
name: 'CR TIN',
type: 'cr_tin',
country: 'Costa Rica',
placeholder: '1-234-567890',
+ countryIso2: 'CR',
},
{
name: 'CY VAT',
@@ -154,6 +177,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Cyprus',
placeholder: 'CY12345678Z',
vatPrefix: 'CY',
+ countryIso2: 'CY',
},
{
name: 'CZ VAT',
@@ -161,6 +185,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Czech Republic',
placeholder: 'CZ1234567890',
vatPrefix: 'CZ',
+ countryIso2: 'CZ',
},
{
name: 'DE VAT',
@@ -168,6 +193,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Germany',
placeholder: 'DE123456789',
vatPrefix: 'DE',
+ countryIso2: 'DE',
},
{
name: 'DK VAT',
@@ -175,12 +201,14 @@ export const TAX_IDS: TaxId[] = [
country: 'Denmark',
placeholder: 'DK12345678',
vatPrefix: 'DK',
+ countryIso2: 'DK',
},
{
name: 'DO RCN',
type: 'do_rcn',
country: 'Dominican Republic',
placeholder: '123-4567890-1',
+ countryIso2: 'DO',
},
{
name: 'EE VAT',
@@ -188,12 +216,14 @@ export const TAX_IDS: TaxId[] = [
country: 'Estonia',
placeholder: 'EE123456789',
vatPrefix: 'EE',
+ countryIso2: 'EE',
},
{
name: 'ES CIF',
type: 'es_cif',
country: 'Spain',
placeholder: 'A12345678',
+ countryIso2: 'ES',
},
{
name: 'ES VAT',
@@ -201,6 +231,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Spain',
placeholder: 'ESX1234567Z',
vatPrefix: 'ES',
+ countryIso2: 'ES',
},
{
name: 'FI VAT',
@@ -208,6 +239,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Finland',
placeholder: 'FI12345678',
vatPrefix: 'FI',
+ countryIso2: 'FI',
},
{
name: 'FR VAT',
@@ -215,6 +247,7 @@ export const TAX_IDS: TaxId[] = [
country: 'France',
placeholder: 'FRAB123456789',
vatPrefix: 'FR',
+ countryIso2: 'FR',
},
{
name: 'GB VAT',
@@ -222,17 +255,20 @@ export const TAX_IDS: TaxId[] = [
country: 'United Kingdom',
placeholder: 'GB123456789',
vatPrefix: 'GB',
+ countryIso2: 'GB',
},
{
name: 'GE VAT',
type: 'ge_vat',
country: 'Georgia',
placeholder: '123456789',
+ countryIso2: 'GE',
},
{
name: 'EL VAT',
type: 'eu_vat',
country: 'Greece',
+ countryIso2: 'GR',
placeholder: 'EL123456789',
vatPrefix: 'EL',
},
@@ -241,6 +277,7 @@ export const TAX_IDS: TaxId[] = [
type: 'hk_br',
country: 'Hong Kong SAR China',
placeholder: '12345678',
+ countryIso2: 'HK',
},
{
name: 'HR VAT',
@@ -248,6 +285,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Croatia',
placeholder: 'HR12345678912',
vatPrefix: 'HR',
+ countryIso2: 'HR',
},
{
name: 'HU VAT',
@@ -255,12 +293,14 @@ export const TAX_IDS: TaxId[] = [
country: 'Hungary',
placeholder: 'HU12345678912',
vatPrefix: 'HU',
+ countryIso2: 'HU',
},
{
name: 'ID NPWP',
type: 'id_npwp',
country: 'Indonesia',
placeholder: '12.345.678.9-012.345',
+ countryIso2: 'ID',
},
{
name: 'IE VAT',
@@ -268,24 +308,28 @@ export const TAX_IDS: TaxId[] = [
country: 'Ireland',
placeholder: 'IE1234567AB',
vatPrefix: 'IE',
+ countryIso2: 'IE',
},
{
name: 'IL VAT',
type: 'il_vat',
country: 'Israel',
placeholder: '000012345',
+ countryIso2: 'IL',
},
{
name: 'IN GST',
type: 'in_gst',
country: 'India',
placeholder: '12ABCDE3456FGZH',
+ countryIso2: 'IN',
},
{
name: 'IS VAT',
type: 'is_vat',
country: 'Iceland',
placeholder: '123456',
+ countryIso2: 'IS',
},
{
name: 'IT VAT',
@@ -293,36 +337,42 @@ export const TAX_IDS: TaxId[] = [
country: 'Italy',
placeholder: 'IT12345678912',
vatPrefix: 'IT',
+ countryIso2: 'IT',
},
{
name: 'JP CN',
type: 'jp_cn',
country: 'Japan',
placeholder: '1234567891234',
+ countryIso2: 'JP',
},
{
name: 'KE PIN',
type: 'ke_pin',
country: 'Kenya',
placeholder: 'P000111111A',
+ countryIso2: 'KE',
},
{
name: 'JP RN',
type: 'jp_rn',
country: 'Japan',
placeholder: '12345',
+ countryIso2: 'JP',
},
{
name: 'KR BRN',
type: 'kr_brn',
country: 'Korea',
placeholder: '123-45-67890',
+ countryIso2: 'Kr',
},
{
name: 'LI UID',
type: 'li_uid',
country: 'Liechtenstein',
placeholder: 'CHE123456789',
+ countryIso2: 'LI',
},
{
name: 'LT VAT',
@@ -330,6 +380,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Lithuania',
placeholder: 'LT123456789123',
vatPrefix: 'LT',
+ countryIso2: 'LT',
},
{
name: 'LU VAT',
@@ -337,6 +388,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Luxembourg',
placeholder: 'LU12345678',
vatPrefix: 'LU',
+ countryIso2: 'LU',
},
{
name: 'LV VAT',
@@ -344,6 +396,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Latvia',
placeholder: 'LV12345678912',
vatPrefix: 'LV',
+ countryIso2: 'LV',
},
{
name: 'MT VAT',
@@ -351,30 +404,35 @@ export const TAX_IDS: TaxId[] = [
country: 'Malta',
placeholder: 'MT12345678',
vatPrefix: 'MT',
+ countryIso2: 'MT',
},
{
name: 'MX RFC',
type: 'mx_rfc',
country: 'Mexico',
placeholder: 'ABC010203AB9',
+ countryIso2: 'MX',
},
{
name: 'MY FRP',
type: 'my_frp',
country: 'Malaysia',
placeholder: '12345678',
+ countryIso2: 'MY',
},
{
name: 'MY ITN',
type: 'my_itn',
country: 'Malaysia',
placeholder: 'C 1234567890',
+ countryIso2: 'MY',
},
{
name: 'MY SST',
type: 'my_sst',
country: 'Malaysia',
placeholder: 'A12-3456-78912345',
+ countryIso2: 'MY',
},
{
name: 'NL VAT',
@@ -382,30 +440,35 @@ export const TAX_IDS: TaxId[] = [
country: 'Netherlands',
placeholder: 'NL123456789B12',
vatPrefix: 'NL',
+ countryIso2: 'NL',
},
{
name: 'NO VAT',
type: 'no_vat',
country: 'Norway',
placeholder: '123456789MVA',
+ countryIso2: 'NO',
},
{
name: 'PE RUC',
type: 'pe_ruc',
country: 'Peru',
placeholder: '12345678901',
+ countryIso2: 'PE',
},
{
name: 'PH TIN',
type: 'ph_tin',
country: 'Philippines',
placeholder: '123456789012',
+ countryIso2: 'PH',
},
{
name: 'NZ GST',
type: 'nz_gst',
country: 'New Zealand',
placeholder: '123456789',
+ countryIso2: 'NZ',
},
{
name: 'PL VAT',
@@ -413,6 +476,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Poland',
placeholder: 'PL1234567890',
vatPrefix: 'PL',
+ countryIso2: 'PL',
},
{
name: 'PT VAT',
@@ -420,6 +484,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Portugal',
placeholder: 'PT123456789',
vatPrefix: 'PT',
+ countryIso2: 'PT',
},
{
name: 'RO VAT',
@@ -427,30 +492,35 @@ export const TAX_IDS: TaxId[] = [
country: 'Romania',
placeholder: 'RO1234567891',
vatPrefix: 'RO',
+ countryIso2: 'RO',
},
{
name: 'RU INN',
type: 'ru_inn',
country: 'Russia',
placeholder: '1234567891',
+ countryIso2: 'RU',
},
{
name: 'RU KPP',
type: 'ru_kpp',
country: 'Russia',
placeholder: '123456789',
+ countryIso2: 'RU',
},
{
name: 'SA VAT',
type: 'sa_vat',
country: 'Saudi Arabia',
placeholder: '123456789012345',
+ countryIso2: 'SA',
},
{
name: 'RS PIB',
type: 'rs_pib',
country: 'Serbia',
placeholder: '123456789',
+ countryIso2: 'RS',
},
{
name: 'SE VAT',
@@ -458,18 +528,21 @@ export const TAX_IDS: TaxId[] = [
country: 'Sweden',
placeholder: 'SE123456789123',
vatPrefix: 'SE',
+ countryIso2: 'SE',
},
{
name: 'SG GST',
type: 'sg_gst',
country: 'Singapore',
placeholder: 'M12345678X',
+ countryIso2: 'SG',
},
{
name: 'SG UEN',
type: 'sg_uen',
country: 'Singapore',
placeholder: '123456789F',
+ countryIso2: 'SG',
},
{
name: 'SI VAT',
@@ -477,6 +550,7 @@ export const TAX_IDS: TaxId[] = [
country: 'Slovenia',
placeholder: 'SI12345678',
vatPrefix: 'SI',
+ countryIso2: 'SI',
},
{
name: 'SK VAT',
@@ -484,36 +558,42 @@ export const TAX_IDS: TaxId[] = [
country: 'Slovakia',
placeholder: 'SK1234567891',
vatPrefix: 'SK',
+ countryIso2: 'SK',
},
{
name: 'TH VAT',
type: 'th_vat',
country: 'Thailand',
placeholder: '1234567891234',
+ countryIso2: 'TH',
},
{
name: 'TR TIN',
type: 'tr_tin',
country: 'Turkey',
placeholder: '0123456789',
+ countryIso2: 'TR',
},
{
name: 'TW VAT',
type: 'tw_vat',
country: 'Taiwan',
placeholder: '12345678',
+ countryIso2: 'TW',
},
{
name: 'UA VAT',
type: 'ua_vat',
country: 'Ukraine',
placeholder: '123456789',
+ countryIso2: 'UA',
},
{
name: 'US EIN',
type: 'us_ein',
country: 'United States',
placeholder: '12-3456789',
+ countryIso2: 'US',
},
{
name: 'XI VAT',
@@ -521,29 +601,34 @@ export const TAX_IDS: TaxId[] = [
country: 'United Kingdom (Northern Ireland)',
placeholder: 'XI123456789',
vatPrefix: 'XI',
+ countryIso2: 'GB',
},
{
name: 'ZA VAT',
type: 'za_vat',
country: 'South Africa',
placeholder: '4123456789',
+ countryIso2: 'ZA',
},
{
name: 'UY RUC',
type: 'uy_ruc',
country: 'Uruguay',
placeholder: '123456789012',
+ countryIso2: 'UY',
},
{
name: 'VE RIF',
type: 've_rif',
country: 'Venezuela',
placeholder: 'A-12345678-9',
+ countryIso2: 'VE',
},
{
name: 'VN TIN',
type: 'vn_tin',
country: 'Vietnam',
placeholder: '1234567890',
+ countryIso2: 'VN',
},
]
diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx b/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx
index 97f2c03c6e7..a50b80737e2 100644
--- a/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx
+++ b/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx
@@ -59,9 +59,9 @@ const TaxID = () => {
type: taxId.type,
value: taxId.value,
name:
- taxId.type === 'eu_vat'
- ? `${taxId.country} VAT`
- : TAX_IDS.find((option) => option.type === taxId.type)?.name ?? '',
+ TAX_IDS.find(
+ (option) => option.type === taxId.type && option.countryIso2 === taxId.country
+ )?.name ?? '',
}
: { type: '', value: '', name: '' }
@@ -94,7 +94,7 @@ const TaxID = () => {
type?.length && value?.length
? {
type: type,
- value: sanitizeTaxIdValue({ type, value }),
+ value: sanitizeTaxIdValue({ value, name: form.getValues().name }),
}
: null,
})
diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.utils.ts b/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.utils.ts
index ce69896aff4..b96a035b24a 100644
--- a/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.utils.ts
+++ b/apps/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.utils.ts
@@ -1,7 +1,7 @@
import { TAX_IDS } from './TaxID.constants'
-export const sanitizeTaxIdValue = (taxId: { type: string; value: string }) => {
- const selectedTaxId = TAX_IDS.find((option) => option.type === taxId.type)
+export const sanitizeTaxIdValue = (taxId: { name: string; value: string }) => {
+ const selectedTaxId = TAX_IDS.find((option) => option.name === taxId.name)
const vatIdPrefix = selectedTaxId?.vatPrefix
From 0bf85c32d6f0b8c955a06b4587393e5aeb46d73b Mon Sep 17 00:00:00 2001
From: Joshen Lim
Date: Mon, 24 Jun 2024 13:43:52 +0800
Subject: [PATCH 011/316] Update restore validity logic for paused projects
behind feature flag (#27404)
* Reinstate 90 day restore disable logic with feature flag
* Update types
* Fix
* Fix conditionalg
* Fix minor UI papercuts
* Add exact date for pause disable
* Error handler for pause status
* Update flag nmame
---
.../ProjectLayout/ProjectPausedState.tsx | 240 +++++++++++-------
.../organization-payment-methods-query.ts | 9 +-
packages/api-types/types/api.d.ts | 182 ++-----------
3 files changed, 169 insertions(+), 262 deletions(-)
diff --git a/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx b/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
index a2e9a794d40..4f17a56ecba 100644
--- a/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
+++ b/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
@@ -1,18 +1,18 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useQueryClient } from '@tanstack/react-query'
-import { ExternalLink, PauseCircle } from 'lucide-react'
+import { Download, ExternalLink, PauseCircle } from 'lucide-react'
import Link from 'next/link'
import { useState } from 'react'
import toast from 'react-hot-toast'
import { useParams } from 'common'
-import { useBackupsQuery } from 'data/database/backups-query'
+import { useBackupDownloadMutation } from 'data/database/backup-download-mutation'
import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query'
import { useProjectPauseStatusQuery } from 'data/projects/project-pause-status-query'
import { useProjectRestoreMutation } from 'data/projects/project-restore-mutation'
import { setProjectStatus } from 'data/projects/projects-query'
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
-import { useCheckPermissions, useSelectedOrganization } from 'hooks'
+import { useCheckPermissions, useFlag, useSelectedOrganization } from 'hooks'
import { PROJECT_STATUS } from 'lib/constants'
import {
AlertDescription_Shadcn_,
@@ -27,6 +27,9 @@ import {
import ConfirmModal from 'ui-patterns/Dialogs/ConfirmDialog'
import { WarningIcon } from 'ui-patterns/Icons/StatusIcons'
import { useProjectContext } from './ProjectContext'
+import { GenericSkeletonLoader } from 'ui-patterns'
+import dayjs from 'dayjs'
+import AlertError from 'components/ui/AlertError'
export interface ProjectPausedStateProps {
product?: string
@@ -37,26 +40,33 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
const queryClient = useQueryClient()
const { project } = useProjectContext()
const selectedOrganization = useSelectedOrganization()
+ const enableDisablingOfProjectRestores90DayLimit = useFlag('enforceNinetyDayUnpauseExpiry')
const orgSlug = selectedOrganization?.slug
const { data: subscription } = useOrgSubscriptionQuery({ orgSlug })
- // const { data: pauseStatus } = useProjectPauseStatusQuery(
- // { ref },
- // { enabled: project?.status === PROJECT_STATUS.INACTIVE }
- // )
+ const {
+ data: pauseStatus,
+ error: pauseStatusError,
+ isError,
+ isSuccess,
+ isLoading,
+ } = useProjectPauseStatusQuery(
+ { ref },
+ {
+ enabled:
+ project?.status === PROJECT_STATUS.INACTIVE && enableDisablingOfProjectRestores90DayLimit,
+ }
+ )
const isFreePlan = subscription?.plan?.id === 'free'
- const isRestoreDisabled = false // !pauseStatus?.can_restore
+ const isRestoreDisabled =
+ enableDisablingOfProjectRestores90DayLimit && isSuccess && !pauseStatus.can_restore
+ const latestBackup = pauseStatus?.latest_downloadable_backup_id
const { data: membersExceededLimit } = useFreeProjectLimitCheckQuery(
{ slug: orgSlug },
{ enabled: isFreePlan }
)
- const { data: backups } = useBackupsQuery({ projectRef: ref })
- const sortedBackups = (backups?.backups ?? []).sort(
- (a, b) => new Date(b.inserted_at).valueOf() - new Date(a.inserted_at).valueOf()
- )
- const latestBackup = sortedBackups[0]
const hasMembersExceedingFreeTierLimit = (membersExceededLimit || []).length > 0
const [showConfirmRestore, setShowConfirmRestore] = useState(false)
@@ -69,6 +79,19 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
},
})
+ const { mutate: downloadBackup, isLoading: isDownloading } = useBackupDownloadMutation({
+ onSuccess: (res) => {
+ const { fileUrl } = res
+
+ // Trigger browser download by create,trigger and remove tempLink
+ const tempLink = document.createElement('a')
+ tempLink.href = fileUrl
+ document.body.appendChild(tempLink)
+ tempLink.click()
+ document.body.removeChild(tempLink)
+ },
+ })
+
const canResumeProject = useCheckPermissions(
PermissionAction.INFRA_EXECUTE,
'queue_jobs.projects.initialize_or_resume'
@@ -88,6 +111,24 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
restoreProject({ ref: project.ref })
}
+ const onSelectDownloadBackup = () => {
+ if (ref === undefined) return console.error('Project ref is required')
+ if (!latestBackup) return toast.error('No backups available for download')
+
+ downloadBackup({
+ ref,
+ backup: {
+ id: latestBackup,
+ // [Joshen] Just FYI these params aren't required for the download backup request
+ // API types need to be updated
+ project_id: -1,
+ inserted_at: '',
+ isPhysicalBackup: false,
+ status: {},
+ },
+ })
+ }
+
return (
<>
@@ -117,88 +158,107 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
- {/* {isRestoreDisabled ? (
-
-
-
- Project cannot be restored through the dashboard
-
-
- This project has been paused for over{' '}
-
- {pauseStatus?.max_days_till_restore_disabled ?? 90} days
- {' '}
- and cannot be restored through the dashboard. However, your data remains
- intact and can be downloaded as a backup.
-
-
-
-
-
- Download backup
-
-
- {latestBackup === undefined && (
-
- No backups available
-
- )}
-
-
-
- ) : isFreePlan ? (
+ {isLoading && }
+ {isError && (
+
+ )}
+ {isSuccess && (
<>
-
- To prevent future pauses, consider upgrading to Pro.
-
-
-
- Project can be restored through the dashboard within the next{' '}
- {pauseStatus.remaining_days_till_restore_disabled} day
- {(pauseStatus?.remaining_days_till_restore_disabled ?? 0) > 1 ? 's' : ''}
-
-
- Free projects cannot be restored through the dashboard if they are paused
- for more than{' '}
-
- {pauseStatus.max_days_till_restore_disabled} days
-
- . However, your database backup will still be available for download.
-
-
+ {isRestoreDisabled ? (
+
+
+
+ Project cannot be restored through the dashboard
+
+
+ This project has been paused for over{' '}
+
+ {pauseStatus?.max_days_till_restore_disabled ?? 90} days
+ {' '}
+ and cannot be restored through the dashboard. However, your data remains
+ intact and can be downloaded as a backup.
+
+
+
+
+ }
+ loading={isDownloading}
+ disabled={!latestBackup}
+ className="pointer-events-auto"
+ onClick={() => onSelectDownloadBackup()}
+ >
+ Download backup
+
+
+ {!latestBackup && (
+
+ No backups available, please reach out via support for assistance
+
+ )}
+
+
+
+ ) : isFreePlan ? (
+ <>
+
+ To prevent future pauses, consider upgrading to Pro.
+
+
+
+ Project can be restored through the dashboard within the next{' '}
+ {pauseStatus?.remaining_days_till_restore_disabled} day
+ {(pauseStatus?.remaining_days_till_restore_disabled ?? 0) > 1
+ ? 's'
+ : ''}
+
+
+ Free projects cannot be restored through the dashboard if they are
+ paused for more than{' '}
+
+ {pauseStatus?.max_days_till_restore_disabled} days
+
+ . The latest that your project can be restored is by{' '}
+
+ {dayjs()
+ .utc()
+ .add(pauseStatus.max_days_till_restore_disabled ?? 0, 'day')
+ .format('DD MMM YYYY')}
+
+ . However, your database backup will still be available for download
+ thereafter.
+
+
+ >
+ ) : (
+
+
+
+ Project will count towards compute usage once restored
+
+
+ For every hour your instance is active, we will bill you based on the
+ instance size of your project.
+
+
+ }>
+
+ More information
+
+
+
+
+ )}
>
- ) : null} */}
-
- {!isFreePlan && (
-
-
-
- Project will count towards compute usage once restored
-
-
- For every hour your instance is active, we will bill you based on the instance
- size of your project.
-
-
- }>
-
- More information
-
-
-
-
)}
- {!isRestoreDisabled && (
+ {isSuccess && !isRestoreDisabled && (
diff --git a/apps/studio/data/organizations/organization-payment-methods-query.ts b/apps/studio/data/organizations/organization-payment-methods-query.ts
index 39b278254e1..610142e4668 100644
--- a/apps/studio/data/organizations/organization-payment-methods-query.ts
+++ b/apps/studio/data/organizations/organization-payment-methods-query.ts
@@ -5,8 +5,7 @@ import { get, handleError } from 'data/fetchers'
import { components } from 'api-types'
export type OrganizationPaymentMethodsVariables = { slug?: string }
-export type OrganizationPaymentMethodsResponse = components['schemas']['PaymentsResponseV2']
-export type OrganizationPaymentMethod = components['schemas']['PaymentV2']
+export type OrganizationPaymentMethod = components['schemas']['Payment']
export async function getOrganizationPaymentMethods(
{ slug }: OrganizationPaymentMethodsVariables,
@@ -25,11 +24,9 @@ export async function getOrganizationPaymentMethods(
},
signal,
})
- if (error) handleError(error)
- // Due to API versioning, this is not correctly recognized until the old endpoint is removed
- // @ts-ignore
- return data as OrganizationPaymentMethodsResponse
+ if (error) handleError(error)
+ return data
}
export type OrganizationPaymentMethodsData = Awaited<
diff --git a/packages/api-types/types/api.d.ts b/packages/api-types/types/api.d.ts
index 1f00abc4776..9bbf3572900 100644
--- a/packages/api-types/types/api.d.ts
+++ b/packages/api-types/types/api.d.ts
@@ -157,8 +157,6 @@ export interface paths {
get: operations['CustomerController_getCustomer']
/** Updates the billing customer */
put: operations['updateCustomerV2']
- /** Updates the Stripe customer */
- patch: operations['CustomerController_updateCustomer']
}
'/platform/organizations/{slug}/roles': {
/** Gets the given organization's roles */
@@ -267,7 +265,7 @@ export interface paths {
}
'/platform/organizations/{slug}/payments': {
/** Gets Stripe payment methods for the given organization */
- get: operations['PaymentsController_getPaymentMethods']
+ get: operations['getPaymentMethodsV2']
/** Detach payment method with the given card ID */
delete: operations['PaymentsController_detachPaymentMethod']
}
@@ -2582,51 +2580,11 @@ export interface components {
email: string
address: components['schemas']['CustomerBillingAddress'] | null
balance: number
- invoice_settings: Record
billing_via_partner: boolean
}
BillingCustomerUpdateBody: {
address?: components['schemas']['CustomerBillingAddress']
}
- CustomerUpdateResponse: {
- id: string
- object: string
- address: Record
- balance: number
- cash_balance?: Record
- created: number
- currency: string
- default_currency?: string
- default_source: string
- delinquent: boolean
- description: string
- discount: Record
- email: string
- invoice_credit_balance?: Record
- invoice_prefix: string
- invoice_settings: Record
- livemode: boolean
- metadata: Record
- name: string
- next_invoice_sequence?: number
- phone: string
- preferred_locales: string[]
- shipping: Record
- sources?: Record
- subscriptions?: Record
- tax?: Record
- tax_exempt?: string
- tax_ids?: Record
- test_clock?: Record
- lastResponse: {
- headers?: Record
- requestId?: string
- statusCode?: number
- apiVersion?: string
- idempotencyKey?: string
- stripeAccount?: string
- }
- }
OrganizationRole: {
id: number
name: string
@@ -2819,70 +2777,16 @@ export interface components {
exp_year: number
last4: string
}
- PaymentV2: {
+ Payment: {
id: string
card?: components['schemas']['PaymentMethodCard']
created: number
type: string
is_default: boolean
}
- PaymentsResponseV2: {
- defaultPaymentMethodId: string | null
- data: components['schemas']['PaymentV2'][]
- }
- Payment: {
- id: string
- object: string
- acss_debit?: Record
- affirm?: Record
- afterpay_clearpay?: Record
- alipay?: Record
- au_becs_debit?: Record
- bacs_debit?: Record
- bancontact?: Record
- billing_details: Record
- blik?: Record
- boleto?: Record
- card?: Record
- card_present?: Record
- created: number
- customer: Record
- customer_balance?: Record
- eps?: Record
- fpx?: Record
- giropay?: Record
- grabpay?: Record
- ideal?: Record
- interac_present?: Record
- klarna?: Record
- konbini?: Record
- link?: Record
- livemode: boolean
- metadata: Record
- oxxo?: Record
- p24?: Record
- paynow?: Record
- promptpay?: Record
- radar_options?: Record
- sepa_debit?: Record
- sofort?: Record
- type: string
- us_bank_account?: Record
- wechat_pay?: Record
- }
PaymentsResponse: {
- object: string
+ defaultPaymentMethodId: string | null
data: components['schemas']['Payment'][]
- has_more: boolean
- url: string
- lastResponse: {
- headers?: Record
- requestId?: string
- statusCode?: number
- apiVersion?: string
- idempotencyKey?: string
- stripeAccount?: string
- }
}
DetachPaymentMethodBody: {
card_id: string
@@ -2894,37 +2798,8 @@ export interface components {
hcaptchaToken: string
}
SetupIntentResponse: {
- id: string
- object: string
- application: Record
- attach_to_self?: boolean
- cancellation_reason: string
client_secret: string
- created: number
- customer: Record
- description: string
- flow_directions: Record
- last_setup_error: Record
- latest_attempt: Record
- livemode: boolean
- mandate: Record
- metadata: Record
- next_action: Record
- on_behalf_of: Record
payment_method: Record
- payment_method_options: Record
- payment_method_types: string[]
- single_use_mandate: Record
- status: string
- usage: string
- lastResponse: {
- headers?: Record
- requestId?: string
- statusCode?: number
- apiVersion?: string
- idempotencyKey?: string
- stripeAccount?: string
- }
}
/** @enum {string} */
BillingPlanId: 'free' | 'pro' | 'team' | 'enterprise'
@@ -2978,12 +2853,6 @@ export interface components {
name: string
ref: string
}
- PaymentMethodCardDetails: {
- last_4_digits: string
- brand: string
- expiry_month: number
- expiry_year: number
- }
ScheduledPlanChange: {
target_plan: components['schemas']['BillingPlanId']
/** Format: date-time */
@@ -3000,8 +2869,6 @@ export interface components {
addons: components['schemas']['BillingSubscriptionAddon'][]
project_addons: components['schemas']['BillingProjectAddonResponse'][]
payment_method_type: string
- payment_method_id?: string
- payment_method_card_details?: components['schemas']['PaymentMethodCardDetails']
billing_via_partner: boolean
/** @enum {string} */
billing_partner: 'fly' | 'aws'
@@ -3947,9 +3814,10 @@ export interface components {
}
Buffer: Record
PauseStatusResponse: {
- max_days_till_restore_disabled: number | null
+ max_days_till_restore_disabled: number
remaining_days_till_restore_disabled: number | null
- can_restore: boolean | null
+ can_restore: boolean
+ latest_downloadable_backup_id: number | null
}
ResizeBody: {
volume_size_gb: number
@@ -4015,16 +3883,20 @@ export interface components {
region: string
/** @enum {string} */
status:
- | 'INACTIVE'
| 'ACTIVE_HEALTHY'
| 'ACTIVE_UNHEALTHY'
| 'COMING_UP'
- | 'UNKNOWN'
| 'GOING_DOWN'
+ | 'INACTIVE'
| 'INIT_FAILED'
| 'REMOVED'
- | 'RESTORING'
+ | 'RESTARTING'
+ | 'UNKNOWN'
| 'UPGRADING'
+ | 'PAUSING'
+ | 'RESTORING'
+ | 'RESTORE_FAILED'
+ | 'PAUSE_FAILED'
subscription_id: string
connectionString: string
kpsVersion?: string
@@ -5676,6 +5548,7 @@ export interface components {
default?: Record | number | string | boolean
name?: string
names?: string[]
+ array?: boolean
}
AttributeMapping: {
keys: {
@@ -6904,7 +6777,7 @@ export interface operations {
}
}
responses: {
- 200: {
+ 204: {
content: never
}
403: {
@@ -6916,29 +6789,6 @@ export interface operations {
}
}
}
- /** Updates the Stripe customer */
- CustomerController_updateCustomer: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['CustomerUpdateResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to update the Stripe customer */
- 500: {
- content: never
- }
- }
- }
/** Gets the given organization's roles */
OrganizationRolesController_getAllRolesV2: {
parameters: {
@@ -7573,7 +7423,7 @@ export interface operations {
}
}
/** Gets Stripe payment methods for the given organization */
- PaymentsController_getPaymentMethods: {
+ getPaymentMethodsV2: {
parameters: {
path: {
/** @description Organization slug */
From 45066f6b6586d767b623ff858ec1728ccecbe353 Mon Sep 17 00:00:00 2001
From: Joshen Lim
Date: Mon, 24 Jun 2024 14:17:16 +0800
Subject: [PATCH 012/316] Handle if flag is false for restore disable check
(#27483)
---
.../ProjectLayout/ProjectPausedState.tsx | 193 +++++++++---------
.../RestorePaidPlanProjectNotice.tsx | 29 +++
2 files changed, 120 insertions(+), 102 deletions(-)
create mode 100644 apps/studio/components/layouts/ProjectLayout/RestorePaidPlanProjectNotice.tsx
diff --git a/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx b/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
index 4f17a56ecba..fc8fddea99a 100644
--- a/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
+++ b/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
@@ -1,17 +1,19 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useQueryClient } from '@tanstack/react-query'
-import { Download, ExternalLink, PauseCircle } from 'lucide-react'
+import { Download, PauseCircle } from 'lucide-react'
import Link from 'next/link'
import { useState } from 'react'
import toast from 'react-hot-toast'
import { useParams } from 'common'
+import AlertError from 'components/ui/AlertError'
import { useBackupDownloadMutation } from 'data/database/backup-download-mutation'
import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query'
import { useProjectPauseStatusQuery } from 'data/projects/project-pause-status-query'
import { useProjectRestoreMutation } from 'data/projects/project-restore-mutation'
import { setProjectStatus } from 'data/projects/projects-query'
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
+import dayjs from 'dayjs'
import { useCheckPermissions, useFlag, useSelectedOrganization } from 'hooks'
import { PROJECT_STATUS } from 'lib/constants'
import {
@@ -24,12 +26,11 @@ import {
TooltipTrigger_Shadcn_,
Tooltip_Shadcn_,
} from 'ui'
+import { GenericSkeletonLoader } from 'ui-patterns'
import ConfirmModal from 'ui-patterns/Dialogs/ConfirmDialog'
import { WarningIcon } from 'ui-patterns/Icons/StatusIcons'
import { useProjectContext } from './ProjectContext'
-import { GenericSkeletonLoader } from 'ui-patterns'
-import dayjs from 'dayjs'
-import AlertError from 'components/ui/AlertError'
+import { RestorePaidPlanProjectNotice } from './RestorePaidPlanProjectNotice'
export interface ProjectPausedStateProps {
product?: string
@@ -40,7 +41,7 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
const queryClient = useQueryClient()
const { project } = useProjectContext()
const selectedOrganization = useSelectedOrganization()
- const enableDisablingOfProjectRestores90DayLimit = useFlag('enforceNinetyDayUnpauseExpiry')
+ const enforceNinetyDayUnpauseExpiry = useFlag('enforceNinetyDayUnpauseExpiry')
const orgSlug = selectedOrganization?.slug
const { data: subscription } = useOrgSubscriptionQuery({ orgSlug })
@@ -53,14 +54,12 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
} = useProjectPauseStatusQuery(
{ ref },
{
- enabled:
- project?.status === PROJECT_STATUS.INACTIVE && enableDisablingOfProjectRestores90DayLimit,
+ enabled: project?.status === PROJECT_STATUS.INACTIVE && enforceNinetyDayUnpauseExpiry,
}
)
const isFreePlan = subscription?.plan?.id === 'free'
- const isRestoreDisabled =
- enableDisablingOfProjectRestores90DayLimit && isSuccess && !pauseStatus.can_restore
+ const isRestoreDisabled = enforceNinetyDayUnpauseExpiry && isSuccess && !pauseStatus.can_restore
const latestBackup = pauseStatus?.latest_downloadable_backup_id
const { data: membersExceededLimit } = useFreeProjectLimitCheckQuery(
@@ -158,107 +157,97 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
- {isLoading && }
- {isError && (
-
- )}
- {isSuccess && (
+ {enforceNinetyDayUnpauseExpiry && (
<>
- {isRestoreDisabled ? (
-
-
-
- Project cannot be restored through the dashboard
-
-
- This project has been paused for over{' '}
-
- {pauseStatus?.max_days_till_restore_disabled ?? 90} days
- {' '}
- and cannot be restored through the dashboard. However, your data remains
- intact and can be downloaded as a backup.
-
-
-
-
- }
- loading={isDownloading}
- disabled={!latestBackup}
- className="pointer-events-auto"
- onClick={() => onSelectDownloadBackup()}
- >
- Download backup
-
-
- {!latestBackup && (
-
- No backups available, please reach out via support for assistance
-
- )}
-
-
-
- ) : isFreePlan ? (
+ {isLoading && }
+ {isError && (
+
+ )}
+ {isSuccess && (
<>
-
- To prevent future pauses, consider upgrading to Pro.
-
-
-
- Project can be restored through the dashboard within the next{' '}
- {pauseStatus?.remaining_days_till_restore_disabled} day
- {(pauseStatus?.remaining_days_till_restore_disabled ?? 0) > 1
- ? 's'
- : ''}
-
-
- Free projects cannot be restored through the dashboard if they are
- paused for more than{' '}
-
- {pauseStatus?.max_days_till_restore_disabled} days
-
- . The latest that your project can be restored is by{' '}
-
- {dayjs()
- .utc()
- .add(pauseStatus.max_days_till_restore_disabled ?? 0, 'day')
- .format('DD MMM YYYY')}
-
- . However, your database backup will still be available for download
- thereafter.
-
-
+ {isRestoreDisabled ? (
+
+
+
+ Project cannot be restored through the dashboard
+
+
+ This project has been paused for over{' '}
+
+ {pauseStatus?.max_days_till_restore_disabled ?? 90} days
+ {' '}
+ and cannot be restored through the dashboard. However, your data
+ remains intact and can be downloaded as a backup.
+
+
+
+
+ }
+ loading={isDownloading}
+ disabled={!latestBackup}
+ className="pointer-events-auto"
+ onClick={() => onSelectDownloadBackup()}
+ >
+ Download backup
+
+
+ {!latestBackup && (
+
+ No backups available, please reach out via support for
+ assistance
+
+ )}
+
+
+
+ ) : isFreePlan ? (
+ <>
+
+ To prevent future pauses, consider upgrading to Pro.
+
+
+
+ Project can be restored through the dashboard within the next{' '}
+ {pauseStatus?.remaining_days_till_restore_disabled} day
+ {(pauseStatus?.remaining_days_till_restore_disabled ?? 0) > 1
+ ? 's'
+ : ''}
+
+
+ Free projects cannot be restored through the dashboard if they are
+ paused for more than{' '}
+
+ {pauseStatus?.max_days_till_restore_disabled} days
+
+ . The latest that your project can be restored is by{' '}
+
+ {dayjs()
+ .utc()
+ .add(pauseStatus.max_days_till_restore_disabled ?? 0, 'day')
+ .format('DD MMM YYYY')}
+
+ . However, your database backup will still be available for download
+ thereafter.
+
+
+ >
+ ) : (
+
+ )}
>
- ) : (
-
-
-
- Project will count towards compute usage once restored
-
-
- For every hour your instance is active, we will bill you based on the
- instance size of your project.
-
-
- }>
-
- More information
-
-
-
-
)}
>
)}
+
+ {!enforceNinetyDayUnpauseExpiry && !isFreePlan && }
- {isSuccess && !isRestoreDisabled && (
+ {(!enforceNinetyDayUnpauseExpiry || (isSuccess && !isRestoreDisabled)) && (
diff --git a/apps/studio/components/layouts/ProjectLayout/RestorePaidPlanProjectNotice.tsx b/apps/studio/components/layouts/ProjectLayout/RestorePaidPlanProjectNotice.tsx
new file mode 100644
index 00000000000..e121d0efec6
--- /dev/null
+++ b/apps/studio/components/layouts/ProjectLayout/RestorePaidPlanProjectNotice.tsx
@@ -0,0 +1,29 @@
+import { ExternalLink } from 'lucide-react'
+import { AlertDescription_Shadcn_, AlertTitle_Shadcn_, Alert_Shadcn_, Button } from 'ui'
+import { WarningIcon } from 'ui-patterns/Icons/StatusIcons'
+
+export const RestorePaidPlanProjectNotice = () => {
+ return (
+
+
+
+ Project will count towards compute usage once restored
+
+
+ For every hour your instance is active, we will bill you based on the instance size of your
+ project.
+
+
+ }>
+
+ More information
+
+
+
+
+ )
+}
From d80befbae29c084de354ff3115b4e281249db5fb Mon Sep 17 00:00:00 2001
From: Joshen Lim
Date: Mon, 24 Jun 2024 14:29:12 +0800
Subject: [PATCH 013/316] More auth related sentry whitelist errors (#27481)
* More auth related sentry whitelist errors
* Make pretty
---
.../interfaces/SignIn/ForgotPasswordForm.tsx | 7 ---
.../interfaces/SignIn/SignInMfaForm.tsx | 57 ++++++++-----------
.../interfaces/SignIn/SignUpForm.tsx | 13 +----
.../data/misc/reset-password-mutation.ts | 6 ++
apps/studio/data/misc/signup-mutation.ts | 11 ++++
.../mfa-challenge-and-verify-mutation.ts | 18 +++++-
6 files changed, 61 insertions(+), 51 deletions(-)
diff --git a/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx b/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx
index cb88f8ccab0..0c5630b9007 100644
--- a/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx
+++ b/apps/studio/components/interfaces/SignIn/ForgotPasswordForm.tsx
@@ -1,5 +1,4 @@
import HCaptcha from '@hcaptcha/react-hcaptcha'
-import * as Sentry from '@sentry/nextjs'
import { useRouter } from 'next/router'
import { useRef, useState } from 'react'
import toast from 'react-hot-toast'
@@ -9,8 +8,6 @@ import { useResetPasswordMutation } from 'data/misc/reset-password-mutation'
import { BASE_PATH } from 'lib/constants'
import { Button, Form, Input } from 'ui'
-const WHITELIST_ERRORS = ['email must be an email']
-
const forgotPasswordSchema = object({
email: string().email('Must be a valid email').required('Email is required'),
})
@@ -31,10 +28,6 @@ const ForgotPasswordForm = () => {
setCaptchaToken(null)
captchaRef.current?.resetCaptcha()
toast.error(`Failed to send reset email: ${error.message}`)
-
- if (!WHITELIST_ERRORS.some((e) => error.message.includes(e))) {
- Sentry.captureMessage('[CRITICAL] Failed to send reset password email: ' + error.message)
- }
},
})
diff --git a/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx b/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx
index 837a8204d1f..20c3c60ca06 100644
--- a/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx
+++ b/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx
@@ -1,12 +1,10 @@
-import type { AuthError } from '@supabase/auth-js'
import type { Factor } from '@supabase/supabase-js'
import { useQueryClient } from '@tanstack/react-query'
+import { Lock } from 'lucide-react'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useEffect, useState } from 'react'
-import toast from 'react-hot-toast'
import { object, string } from 'yup'
-import * as Sentry from '@sentry/nextjs'
import { useTelemetryProps } from 'common'
import AlertError from 'components/ui/AlertError'
@@ -16,7 +14,7 @@ import { useMfaListFactorsQuery } from 'data/profile/mfa-list-factors-query'
import { useSignOut } from 'lib/auth'
import { getReturnToPath } from 'lib/gotrue'
import Telemetry from 'lib/telemetry'
-import { Button, Form, IconLock, Input } from 'ui'
+import { Button, Form, Input } from 'ui'
const signInSchema = object({
code: string().required('MFA Code is required'),
@@ -36,7 +34,21 @@ const SignInMfaForm = () => {
isSuccess: isSuccessFactors,
isLoading: isLoadingFactors,
} = useMfaListFactorsQuery()
- const { mutate: mfaChallengeAndVerify, isLoading, isSuccess } = useMfaChallengeAndVerifyMutation()
+ const {
+ mutate: mfaChallengeAndVerify,
+ isLoading: isVerifying,
+ isSuccess,
+ } = useMfaChallengeAndVerifyMutation({
+ onSuccess: async () => {
+ Telemetry.sendEvent(
+ { category: 'account', action: 'sign_in', label: '' },
+ telemetryProps,
+ router
+ )
+ await queryClient.resetQueries()
+ router.push(getReturnToPath())
+ },
+ })
const onClickLogout = async () => {
await signOut()
@@ -44,27 +56,8 @@ const SignInMfaForm = () => {
}
const onSignIn = async ({ code }: { code: string }) => {
- const toastId = toast.loading('Signing in...')
if (selectedFactor) {
- mfaChallengeAndVerify(
- { factorId: selectedFactor.id, code, refreshFactors: false },
- {
- onSuccess: async () => {
- toast.success('Signed in successfully!', { id: toastId })
- Telemetry.sendEvent(
- { category: 'account', action: 'sign_in', label: '' },
- telemetryProps,
- router
- )
- await queryClient.resetQueries()
- router.push(getReturnToPath())
- },
- onError: (error) => {
- toast.error(`Failed to sign in: ${(error as AuthError).message}`, { id: toastId })
- Sentry.captureMessage('[CRITICAL] Failed to sign in via MFA: ' + error.message)
- },
- }
- )
+ mfaChallengeAndVerify({ factorId: selectedFactor.id, code, refreshFactors: false })
}
}
@@ -102,9 +95,9 @@ const SignInMfaForm = () => {
name="code"
type="text"
autoFocus
- icon={ }
+ icon={ }
placeholder="XXXXXX"
- disabled={isLoading}
+ disabled={isVerifying}
autoComplete="off"
spellCheck="false"
autoCapitalize="none"
@@ -121,7 +114,7 @@ const SignInMfaForm = () => {
block
type="outline"
size="large"
- disabled={isLoading || isSuccess}
+ disabled={isVerifying || isSuccess}
onClick={onClickLogout}
className="opacity-80 hover:opacity-100 transition"
>
@@ -132,10 +125,10 @@ const SignInMfaForm = () => {
form="sign-in-mfa-form"
htmlType="submit"
size="large"
- disabled={isLoading || isSuccess}
- loading={isLoading || isSuccess}
+ disabled={isVerifying || isSuccess}
+ loading={isVerifying || isSuccess}
>
- {isLoading ? 'Verifying' : isSuccess ? 'Signing in' : 'Verify'}
+ {isVerifying ? 'Verifying' : isSuccess ? 'Signing in' : 'Verify'}
@@ -163,9 +156,9 @@ const SignInMfaForm = () => {
)}
Reach out to us via support
diff --git a/apps/studio/components/interfaces/SignIn/SignUpForm.tsx b/apps/studio/components/interfaces/SignIn/SignUpForm.tsx
index 73c4b27475c..3e593e5dcca 100644
--- a/apps/studio/components/interfaces/SignIn/SignUpForm.tsx
+++ b/apps/studio/components/interfaces/SignIn/SignUpForm.tsx
@@ -1,9 +1,8 @@
import HCaptcha from '@hcaptcha/react-hcaptcha'
-import { CheckCircle } from 'lucide-react'
+import { CheckCircle, Eye, EyeOff } from 'lucide-react'
import { useRef, useState } from 'react'
import toast from 'react-hot-toast'
import * as yup from 'yup'
-import * as Sentry from '@sentry/nextjs'
import { useSignUpMutation } from 'data/misc/signup-mutation'
import { BASE_PATH } from 'lib/constants'
@@ -14,14 +13,10 @@ import {
Alert_Shadcn_,
Button,
Form,
- IconEye,
- IconEyeOff,
Input,
} from 'ui'
import PasswordConditionsHelper from './PasswordConditionsHelper'
-const WHITELIST_ERRORS = ['A user with this email already exists']
-
const signUpSchema = passwordSchema.shape({
email: yup.string().email().required().label('Email'),
})
@@ -42,10 +37,6 @@ const SignUpForm = () => {
setCaptchaToken(null)
captchaRef.current?.resetCaptcha()
toast.error(`Failed to sign up: ${error.message}`)
-
- if (!WHITELIST_ERRORS.includes(error.message)) {
- Sentry.captureMessage('[CRITICAL] Failed to sign up: ' + error.message)
- }
},
})
@@ -118,7 +109,7 @@ const SignUpForm = () => {
onFocus={() => setShowConditions(true)}
actions={
: }
+ icon={passwordHidden ? : }
type="default"
className="!mr-1"
onClick={() => setPasswordHidden((prev) => !prev)}
diff --git a/apps/studio/data/misc/reset-password-mutation.ts b/apps/studio/data/misc/reset-password-mutation.ts
index 17eeba8201b..1e2e21d597b 100644
--- a/apps/studio/data/misc/reset-password-mutation.ts
+++ b/apps/studio/data/misc/reset-password-mutation.ts
@@ -1,9 +1,12 @@
+import * as Sentry from '@sentry/nextjs'
import { useMutation, UseMutationOptions } from '@tanstack/react-query'
import { toast } from 'react-hot-toast'
import { handleError, post } from 'data/fetchers'
import type { ResponseError } from 'types'
+const WHITELIST_ERRORS = ['email must be an email']
+
export type ResetPasswordVariables = {
email: string
hcaptchaToken: string | null
@@ -42,6 +45,9 @@ export const useResetPasswordMutation = ({
} else {
onError(data, variables, context)
}
+ if (!WHITELIST_ERRORS.some((error) => data.message.includes(error))) {
+ Sentry.captureMessage('[CRITICAL] Failed to send reset password email: ' + data.message)
+ }
},
...options,
}
diff --git a/apps/studio/data/misc/signup-mutation.ts b/apps/studio/data/misc/signup-mutation.ts
index c29f2e6eaa8..e00bfbebf15 100644
--- a/apps/studio/data/misc/signup-mutation.ts
+++ b/apps/studio/data/misc/signup-mutation.ts
@@ -1,9 +1,17 @@
+import * as Sentry from '@sentry/nextjs'
import { useMutation, UseMutationOptions } from '@tanstack/react-query'
import { toast } from 'react-hot-toast'
import { handleError, post } from 'data/fetchers'
import type { ResponseError } from 'types'
+const WHITELIST_ERRORS = [
+ 'A user with this email already exists',
+ 'Password should contain at least one character of each',
+ 'You attempted to send email to an inactive recipient',
+ 'email must be an email',
+]
+
export type SignUpVariables = {
email: string
password: string
@@ -38,6 +46,9 @@ export const useSignUpMutation = ({
} else {
onError(data, variables, context)
}
+ if (!WHITELIST_ERRORS.some((error) => data.message.includes(error))) {
+ Sentry.captureMessage('[CRITICAL] Failed to sign up: ' + data.message)
+ }
},
...options,
})
diff --git a/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts b/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts
index 29f3d141661..88b90bf0b24 100644
--- a/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts
+++ b/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts
@@ -1,8 +1,13 @@
+import * as Sentry from '@sentry/nextjs'
import type { AuthMFAVerifyResponse, MFAChallengeAndVerifyParams } from '@supabase/supabase-js'
-import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
+import { UseMutationOptions, useMutation, useQueryClient } from '@tanstack/react-query'
+import toast from 'react-hot-toast'
+
import { auth } from 'lib/gotrue'
import { profileKeys } from './keys'
+const WHITELIST_ERRORS = ['Invalid TOTP code entered']
+
interface MFAChallengeAndVerifyVariables extends MFAChallengeAndVerifyParams {
refreshFactors?: boolean
}
@@ -18,6 +23,7 @@ type CustomMFAVerifyError = NonNullable
export const useMfaChallengeAndVerifyMutation = ({
onSuccess,
+ onError,
...options
}: Omit<
UseMutationOptions,
@@ -42,6 +48,16 @@ export const useMfaChallengeAndVerifyMutation = ({
await onSuccess?.(data, variables, context)
},
+ async onError(data, variables, context) {
+ if (onError === undefined) {
+ toast.error(`Failed to sign in: ${data.message}`)
+ } else {
+ onError(data, variables, context)
+ }
+ if (!WHITELIST_ERRORS.some((error) => data.message.includes(error))) {
+ Sentry.captureMessage('[CRITICAL] Failed to sign in via MFA: ' + data.message)
+ }
+ },
...options,
}
)
From d038b26751901c5c8e3883aa40a3279d9541f7a5 Mon Sep 17 00:00:00 2001
From: angelico
Date: Mon, 24 Jun 2024 15:29:04 +0800
Subject: [PATCH 014/316] fix: smol nit (#27484)
* fix: smol nit
* chore: feedback
---
.../layouts/ProjectLayout/ProjectPausedState.tsx | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx b/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
index fc8fddea99a..77639de8e07 100644
--- a/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
+++ b/apps/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx
@@ -58,6 +58,11 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
}
)
+ const finalDaysRemainingBeforeRestoreDisabled =
+ pauseStatus?.remaining_days_till_restore_disabled ??
+ pauseStatus?.max_days_till_restore_disabled ??
+ 0
+
const isFreePlan = subscription?.plan?.id === 'free'
const isRestoreDisabled = enforceNinetyDayUnpauseExpiry && isSuccess && !pauseStatus.can_restore
const latestBackup = pauseStatus?.latest_downloadable_backup_id
@@ -213,10 +218,8 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => {
Project can be restored through the dashboard within the next{' '}
- {pauseStatus?.remaining_days_till_restore_disabled} day
- {(pauseStatus?.remaining_days_till_restore_disabled ?? 0) > 1
- ? 's'
- : ''}
+ {finalDaysRemainingBeforeRestoreDisabled} day
+ {finalDaysRemainingBeforeRestoreDisabled > 1 ? 's' : ''}
Free projects cannot be restored through the dashboard if they are
From c918aea9eefa0e3e2b8da9ef5a491f1a157296b8 Mon Sep 17 00:00:00 2001
From: Alaister Young
Date: Mon, 24 Jun 2024 16:06:58 +0800
Subject: [PATCH 015/316] chore: new project statuses (#27213)
* chore: new project statuses
* add restarting layout
* add restore failed state
* update project cards
* update wording
* fix ts errors
* address feedback
* add pause failed state
---
.../Home/ProjectList/ProjectCard.utils.ts | 12 ++++++
.../Home/ProjectList/ProjectCardStatus.tsx | 10 ++++-
.../Infrastructure/RestartServerButton.tsx | 4 +-
.../ProjectLayout/PauseFailedState.tsx | 42 +++++++++++++++++++
.../layouts/ProjectLayout/ProjectLayout.tsx | 20 ++++++++-
.../layouts/ProjectLayout/RestartingState.tsx | 42 +++++++++++++++++++
.../ProjectLayout/RestoreFailedState.tsx | 42 +++++++++++++++++++
.../layouts/ProjectLayout/RestoringState.tsx | 38 +++--------------
.../data/projects/project-detail-query.ts | 3 +-
apps/studio/data/projects/projects-query.ts | 6 ++-
apps/studio/lib/constants/infrastructure.ts | 8 ++--
apps/studio/pages/new/[slug].tsx | 10 +++--
12 files changed, 189 insertions(+), 48 deletions(-)
create mode 100644 apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx
create mode 100644 apps/studio/components/layouts/ProjectLayout/RestartingState.tsx
create mode 100644 apps/studio/components/layouts/ProjectLayout/RestoreFailedState.tsx
diff --git a/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.utils.ts b/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.utils.ts
index 26b01d598e2..960d73a495e 100644
--- a/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.utils.ts
+++ b/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.utils.ts
@@ -14,9 +14,18 @@ export const inferProjectStatus = (project: ProjectInfo) => {
case PROJECT_STATUS.INACTIVE:
status = 'isPaused'
break
+ case PROJECT_STATUS.PAUSE_FAILED:
+ status = 'isPauseFailed'
+ break
+ case PROJECT_STATUS.RESTARTING:
+ status = 'isRestarting'
+ break
case PROJECT_STATUS.RESTORING:
status = 'isRestoring'
break
+ case PROJECT_STATUS.RESTORE_FAILED:
+ status = 'isRestoreFailed'
+ break
case PROJECT_STATUS.UNKNOWN:
case PROJECT_STATUS.COMING_UP:
status = 'isComingUp'
@@ -29,6 +38,9 @@ export type InferredProjectStatus =
| 'isHealthy'
| 'isPausing'
| 'isPaused'
+ | 'isPauseFailed'
+ | 'isRestarting'
| 'isRestoring'
+ | 'isRestoreFailed'
| 'isComingUp'
| undefined
diff --git a/apps/studio/components/interfaces/Home/ProjectList/ProjectCardStatus.tsx b/apps/studio/components/interfaces/Home/ProjectList/ProjectCardStatus.tsx
index 65fa35bf8ba..7a4dca27677 100644
--- a/apps/studio/components/interfaces/Home/ProjectList/ProjectCardStatus.tsx
+++ b/apps/studio/components/interfaces/Home/ProjectList/ProjectCardStatus.tsx
@@ -39,8 +39,11 @@ export const ProjectCardStatus = ({
const getTitle = () => {
if (projectStatus === 'isPaused') return 'Project is paused'
if (projectStatus === 'isPausing') return 'Project is pausing'
+ if (projectStatus === 'isRestarting') return 'Project is restarting'
if (projectStatus === 'isComingUp') return 'Project is coming up'
if (projectStatus === 'isRestoring') return 'Project is restoring'
+ if (projectStatus === 'isRestoreFailed') return 'Project restore failed'
+ if (projectStatus === 'isPauseFailed') return 'Project pause failed'
if (!resourceWarnings) return undefined
@@ -55,8 +58,11 @@ export const ProjectCardStatus = ({
const getDescription = () => {
if (projectStatus === 'isPaused') return 'This project will not accept requests until resumed'
if (projectStatus === 'isPausing') return 'The pause process will complete in a few minutes'
+ if (projectStatus === 'isRestarting') return 'Your project will be ready in a few minutes'
if (projectStatus === 'isComingUp') return 'Your project will be ready in a few minutes'
if (projectStatus === 'isRestoring') return 'Your project will be ready in a few minutes'
+ if (projectStatus === 'isRestoreFailed') return 'Please contact support for assistance'
+ if (projectStatus === 'isPauseFailed') return 'Please contact support for assistance'
if (!resourceWarnings) return undefined
@@ -95,7 +101,9 @@ export const ProjectCardStatus = ({
>
{projectStatus === 'isPaused' || projectStatus === 'isPausing' ? (
- ) : projectStatus === 'isRestoring' || projectStatus === 'isComingUp' ? (
+ ) : projectStatus === 'isRestoring' ||
+ projectStatus === 'isComingUp' ||
+ projectStatus === 'isRestarting' ? (
) : (
diff --git a/apps/studio/components/interfaces/Settings/General/Infrastructure/RestartServerButton.tsx b/apps/studio/components/interfaces/Settings/General/Infrastructure/RestartServerButton.tsx
index 75b9ad11351..2f9a4b10c99 100644
--- a/apps/studio/components/interfaces/Settings/General/Infrastructure/RestartServerButton.tsx
+++ b/apps/studio/components/interfaces/Settings/General/Infrastructure/RestartServerButton.tsx
@@ -11,7 +11,7 @@ import {
} from 'components/layouts/ProjectLayout/ProjectContext'
import { useProjectRestartMutation } from 'data/projects/project-restart-mutation'
import { useProjectRestartServicesMutation } from 'data/projects/project-restart-services-mutation'
-import { setProjectPostgrestStatus } from 'data/projects/projects-query'
+import { setProjectStatus } from 'data/projects/projects-query'
import { useCheckPermissions, useFlag } from 'hooks'
import {
Button,
@@ -76,7 +76,7 @@ const RestartServerButton = () => {
}
const onRestartSuccess = () => {
- setProjectPostgrestStatus(queryClient, projectRef, 'OFFLINE')
+ setProjectStatus(queryClient, projectRef, 'RESTARTING')
toast.success('Restarting server...')
router.push(`/project/${projectRef}`)
setServiceToRestart(undefined)
diff --git a/apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx b/apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx
new file mode 100644
index 00000000000..2fd1b163ea3
--- /dev/null
+++ b/apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx
@@ -0,0 +1,42 @@
+import Link from 'next/link'
+import { Button } from 'ui'
+import { CriticalIcon } from 'ui-patterns/Icons/StatusIcons'
+
+import { useProjectContext } from './ProjectContext'
+
+const PauseFailedState = () => {
+ const { project } = useProjectContext()
+
+ return (
+
+
+
+
+
+
+
+
+
Something went wrong while pausing your project
+
+ Your project's data is intact, but your project is inaccessible due to the failure
+ while pausing. Please contact support for assistance.
+
+
+
+
+
+
+
+ Contact support
+
+
+
+
+
+
+ )
+}
+
+export default PauseFailedState
diff --git a/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx b/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx
index 52971bb3e0c..87e115bc729 100644
--- a/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx
+++ b/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx
@@ -10,6 +10,7 @@ import ResourceExhaustionWarningBanner from 'components/ui/ResourceExhaustionWar
import { useFlag, useSelectedOrganization, useSelectedProject, withAuth } from 'hooks'
import { IS_PLATFORM, PROJECT_STATUS } from 'lib/constants'
import { useDatabaseSelectorStateSnapshot } from 'state/database-selector'
+import { ResizableHandle, ResizablePanel, ResizablePanelGroup, cn } from 'ui'
import AppLayout from '../AppLayout/AppLayout'
import EnableBranchingModal from '../AppLayout/EnableBranchingButton/EnableBranchingModal'
import BuildingState from './BuildingState'
@@ -17,13 +18,15 @@ import ConnectingState from './ConnectingState'
import { LayoutHeader } from './LayoutHeader'
import LoadingState from './LoadingState'
import NavigationBar from './NavigationBar/NavigationBar'
+import PauseFailedState from './PauseFailedState'
import PausingState from './PausingState'
import ProductMenuBar from './ProductMenuBar'
import { ProjectContextProvider } from './ProjectContext'
import ProjectPausedState from './ProjectPausedState'
+import RestartingState from './RestartingState'
+import RestoreFailedState from './RestoreFailedState'
import RestoringState from './RestoringState'
import { UpgradingState } from './UpgradingState'
-import { ResizableHandle, ResizablePanelGroup, ResizablePanel, cn } from 'ui'
// [Joshen] This is temporary while we unblock users from managing their project
// if their project is not responding well for any reason. Eventually needs a bit of an overhaul
@@ -221,14 +224,17 @@ const ContentWrapper = ({ isLoading, isBlocking = true, children }: ContentWrapp
const requiresPostgrestConnection = !routesToIgnorePostgrestConnection.includes(router.pathname)
const requiresProjectDetails = !routesToIgnoreProjectDetailsRequest.includes(router.pathname)
+ const isRestarting = selectedProject?.status === PROJECT_STATUS.RESTARTING
const isProjectUpgrading = selectedProject?.status === PROJECT_STATUS.UPGRADING
const isProjectRestoring = selectedProject?.status === PROJECT_STATUS.RESTORING
+ const isProjectRestoreFailed = selectedProject?.status === PROJECT_STATUS.RESTORE_FAILED
const isProjectBuilding =
selectedProject?.status === PROJECT_STATUS.COMING_UP ||
selectedProject?.status === PROJECT_STATUS.UNKNOWN
const isProjectPausing =
selectedProject?.status === PROJECT_STATUS.GOING_DOWN ||
selectedProject?.status === PROJECT_STATUS.PAUSING
+ const isProjectPauseFailed = selectedProject?.status === PROJECT_STATUS.PAUSE_FAILED
const isProjectOffline = selectedProject?.postgrestStatus === 'OFFLINE'
useEffect(() => {
@@ -239,6 +245,10 @@ const ContentWrapper = ({ isLoading, isBlocking = true, children }: ContentWrapp
return router.pathname.endsWith('[ref]') ? :
}
+ if (isRestarting) {
+ return
+ }
+
if (isProjectUpgrading) {
return
}
@@ -247,6 +257,10 @@ const ContentWrapper = ({ isLoading, isBlocking = true, children }: ContentWrapp
return
}
+ if (isProjectPauseFailed) {
+ return
+ }
+
if (requiresPostgrestConnection && isProjectOffline) {
return
}
@@ -255,6 +269,10 @@ const ContentWrapper = ({ isLoading, isBlocking = true, children }: ContentWrapp
return
}
+ if (isProjectRestoreFailed) {
+ return
+ }
+
if (requiresDbConnection && isProjectBuilding) {
return
}
diff --git a/apps/studio/components/layouts/ProjectLayout/RestartingState.tsx b/apps/studio/components/layouts/ProjectLayout/RestartingState.tsx
new file mode 100644
index 00000000000..6394fd5627d
--- /dev/null
+++ b/apps/studio/components/layouts/ProjectLayout/RestartingState.tsx
@@ -0,0 +1,42 @@
+import { useParams } from 'common'
+import { Loader2 } from 'lucide-react'
+
+import { useProjectDetailQuery } from 'data/projects/project-detail-query'
+import { PROJECT_STATUS } from 'lib/constants'
+
+const RestartingState = () => {
+ const { ref } = useParams()
+ useProjectDetailQuery(
+ { ref },
+ {
+ // setting a refetch interval here will cause the `useSelectedProject()` in `ProjectLayout.tsx` to
+ // rerender every 4 seconds while the project is restarting. Once restarting is complete, it will
+ // no longer show this state.
+ refetchInterval(data) {
+ return data?.status !== PROJECT_STATUS.ACTIVE_HEALTHY ? 4000 : false
+ },
+ }
+ )
+
+ return (
+
+
+
+
+
+
+
+
+
Restarting...
+
+ Restarting can take a few minutes. Your project will be offline while it restarts.
+
+
+
+
+
+
+ )
+}
+
+export default RestartingState
diff --git a/apps/studio/components/layouts/ProjectLayout/RestoreFailedState.tsx b/apps/studio/components/layouts/ProjectLayout/RestoreFailedState.tsx
new file mode 100644
index 00000000000..5e6273c6149
--- /dev/null
+++ b/apps/studio/components/layouts/ProjectLayout/RestoreFailedState.tsx
@@ -0,0 +1,42 @@
+import Link from 'next/link'
+import { Button } from 'ui'
+import { CriticalIcon } from 'ui-patterns/Icons/StatusIcons'
+
+import { useProjectContext } from './ProjectContext'
+
+const RestoreFailedState = () => {
+ const { project } = useProjectContext()
+
+ return (
+
+
+
+
+
+
+
+
+
Something went wrong while restoring your project
+
+ Your project's data is intact, but your project is inaccessible due to the
+ restoration failure. Please contact support for assistance.
+
+
+
+
+
+
+
+ Contact support
+
+
+
+
+
+
+ )
+}
+
+export default RestoreFailedState
diff --git a/apps/studio/components/layouts/ProjectLayout/RestoringState.tsx b/apps/studio/components/layouts/ProjectLayout/RestoringState.tsx
index 67dc31d1560..a4f75929165 100644
--- a/apps/studio/components/layouts/ProjectLayout/RestoringState.tsx
+++ b/apps/studio/components/layouts/ProjectLayout/RestoringState.tsx
@@ -1,9 +1,9 @@
import { useQueryClient } from '@tanstack/react-query'
import { useParams } from 'common'
-import Link from 'next/link'
import { useEffect, useRef, useState } from 'react'
-import { Button, IconAlertCircle, IconCheckCircle, IconLoader } from 'ui'
+import { Button, IconCheckCircle, IconLoader } from 'ui'
+import { projectKeys } from 'data/projects/keys'
import { invalidateProjectDetailsQuery } from 'data/projects/project-detail-query'
import { getWithTimeout } from 'lib/common/fetch'
import { API_URL, PROJECT_STATUS } from 'lib/constants'
@@ -16,7 +16,6 @@ const RestoringState = () => {
const checkServerInterval = useRef()
const [loading, setLoading] = useState(false)
- const [isFailed, setIsFailed] = useState(false)
const [isCompleted, setIsCompleted] = useState(false)
useEffect(() => {
@@ -32,12 +31,11 @@ const RestoringState = () => {
})
if (projectStatus && !projectStatus.error) {
const { status } = projectStatus
- if (status === PROJECT_STATUS.RESTORATION_FAILED) {
- clearInterval(checkServerInterval.current)
- setIsFailed(true)
- } else if (status === PROJECT_STATUS.ACTIVE_HEALTHY) {
+ if (status === PROJECT_STATUS.ACTIVE_HEALTHY) {
clearInterval(checkServerInterval.current)
setIsCompleted(true)
+ } else {
+ queryClient.invalidateQueries(projectKeys.detail(ref))
}
}
}
@@ -71,32 +69,6 @@ const RestoringState = () => {
- ) : isFailed ? (
-
-
-
-
-
-
-
Something went wrong while restoring your project
-
- Our engineers have already been notified of this, do hang tight while we are
- investigating into the issue.
-
-
-
- {isFailed && (
-
-
-
- Contact support
-
-
-
- )}
-
) : (
diff --git a/apps/studio/data/projects/project-detail-query.ts b/apps/studio/data/projects/project-detail-query.ts
index 66427808b74..6f791b0c85b 100644
--- a/apps/studio/data/projects/project-detail-query.ts
+++ b/apps/studio/data/projects/project-detail-query.ts
@@ -10,13 +10,14 @@ export type ProjectDetailVariables = { ref?: string }
export type ProjectMinimal = components['schemas']['ProjectInfo']
export type ProjectDetail = components['schemas']['ProjectDetailResponse']
-export interface Project extends ProjectDetail {
+export interface Project extends Omit
{
/**
* postgrestStatus is available on client side only.
* We use this status to check if a project instance is HEALTHY or not
* If not we will show ConnectingState and run a polling until it's back online
*/
postgrestStatus?: 'ONLINE' | 'OFFLINE'
+ status: components['schemas']['ResourceWithServicesStatusResponse']['status']
}
export async function getProjectDetail({ ref }: ProjectDetailVariables, signal?: AbortSignal) {
diff --git a/apps/studio/data/projects/projects-query.ts b/apps/studio/data/projects/projects-query.ts
index cbb2067adb6..89d28eb0da6 100644
--- a/apps/studio/data/projects/projects-query.ts
+++ b/apps/studio/data/projects/projects-query.ts
@@ -11,13 +11,15 @@ export type ProjectsVariables = {
ref?: string
}
-export type ProjectInfo = components['schemas']['ProjectInfo']
+export type ProjectInfo = components['schemas']['ProjectInfo'] & {
+ status: components['schemas']['ResourceWithServicesStatusResponse']['status']
+}
export async function getProjects(signal?: AbortSignal) {
const { data, error } = await get('/platform/projects', { signal })
if (error) handleError(error)
- return data
+ return data as ProjectInfo[]
}
export type ProjectsData = Awaited>
diff --git a/apps/studio/lib/constants/infrastructure.ts b/apps/studio/lib/constants/infrastructure.ts
index a8f3212bd34..c7a15c75386 100644
--- a/apps/studio/lib/constants/infrastructure.ts
+++ b/apps/studio/lib/constants/infrastructure.ts
@@ -69,7 +69,7 @@ export const PROVIDERS = {
} as const
export const PROJECT_STATUS: {
- [key: string]: components['schemas']['ProjectDetailResponse']['status']
+ [key: string]: components['schemas']['ResourceWithServicesStatusResponse']['status']
} = {
INACTIVE: 'INACTIVE',
ACTIVE_HEALTHY: 'ACTIVE_HEALTHY',
@@ -79,12 +79,12 @@ export const PROJECT_STATUS: {
GOING_DOWN: 'GOING_DOWN',
INIT_FAILED: 'INIT_FAILED',
REMOVED: 'REMOVED',
+ RESTARTING: 'RESTARTING',
RESTORING: 'RESTORING',
+ RESTORE_FAILED: 'RESTORE_FAILED',
UPGRADING: 'UPGRADING',
- // @ts-ignore [Joshen] API codegen seems to be wrong here, pausing is still a valid status
PAUSING: 'PAUSING',
- // @ts-ignore [Joshen] This is no longer part of the project status enum, but leaving here for now just in case
- RESTORATION_FAILED: 'RESTORATION_FAILED',
+ PAUSE_FAILED: 'PAUSE_FAILED',
}
export const DEFAULT_MINIMUM_PASSWORD_STRENGTH = 4
diff --git a/apps/studio/pages/new/[slug].tsx b/apps/studio/pages/new/[slug].tsx
index 7a9a56becf7..b0ed5dafb40 100644
--- a/apps/studio/pages/new/[slug].tsx
+++ b/apps/studio/pages/new/[slug].tsx
@@ -1,5 +1,6 @@
import { zodResolver } from '@hookform/resolvers/zod'
import { PermissionAction } from '@supabase/shared-types/out/constants'
+import { PopoverSeparator } from '@ui/components/shadcn/ui/popover'
import { components } from 'api-types'
import { useParams } from 'common'
import {
@@ -19,6 +20,7 @@ import {
ProjectCreateVariables,
useProjectCreateMutation,
} from 'data/projects/project-create-mutation'
+import { useProjectsQuery } from 'data/projects/projects-query'
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
import generator from 'generate-password-browser'
import { useCheckPermissions, useFlag, withAuth } from 'hooks'
@@ -26,6 +28,7 @@ import {
CloudProvider,
DEFAULT_MINIMUM_PASSWORD_STRENGTH,
DEFAULT_PROVIDER,
+ PROJECT_STATUS,
PROVIDERS,
} from 'lib/constants'
import { passwordStrength } from 'lib/helpers'
@@ -59,10 +62,8 @@ import {
} from 'ui'
import { Input } from 'ui-patterns/DataInputs/Input'
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
-import { z } from 'zod'
import { InfoTooltip } from 'ui-patterns/info-tooltip'
-import { useProjectsQuery } from 'data/projects/projects-query'
-import { PopoverSeparator } from '@ui/components/shadcn/ui/popover'
+import { z } from 'zod'
type DesiredInstanceSize = components['schemas']['DesiredInstanceSize']
@@ -173,7 +174,8 @@ const Wizard: NextPageWithLayout = () => {
const { data: allProjects } = useProjectsQuery({})
const organizationProjects =
allProjects?.filter(
- (project) => project.organization_id === currentOrg?.id && project.status !== 'paused'
+ (project) =>
+ project.organization_id === currentOrg?.id && project.status !== PROJECT_STATUS.INACTIVE
) ?? []
const { data: orgSubscription } = useOrgSubscriptionQuery({
From 8c14611348b0784ed5494ff5aafa3ba154e45ec3 Mon Sep 17 00:00:00 2001
From: Chris Gwilliams <517923+encima@users.noreply.github.com>
Date: Mon, 24 Jun 2024 13:35:03 +0300
Subject: [PATCH 016/316] Fix for labelling issues and handling errors (#27393)
* fix for labelling issues and handling errors
* fix typos
---
.github/workflows/auto-label-issues.yml | 66 +++++++++----------------
1 file changed, 23 insertions(+), 43 deletions(-)
diff --git a/.github/workflows/auto-label-issues.yml b/.github/workflows/auto-label-issues.yml
index eb248c823e0..d5b441349a4 100644
--- a/.github/workflows/auto-label-issues.yml
+++ b/.github/workflows/auto-label-issues.yml
@@ -5,61 +5,41 @@ on:
jobs:
check-external:
runs-on: ubuntu-latest
- outputs:
- result: ${{ steps.is-member.outputs.result }}
+ permissions:
+ issues: write
steps:
- - name: Get deps
- run: |
- sudo apt-get update && sudo apt-get install -y jq
- - name: Get org members
- id: is-member
- env:
- GH_ORG: supabase
- GH_USER: ${{ github.event.issue.user.login }}
- GH_TOKEN: ${{ secrets.SB_ORG_MEMBERSHIP_PAT }}
- run: |
- gh api /orgs/supabase/members/$GH_USER
- - if: failure()
- name: is-member
- run: |
- echo "User is not a member of Supabase org"
- echo "result=false" >> "$GITHUB_OUTPUT"
- - if: success()
- run: |
- echo "User is a member of Supabase org"
- echo "result=true" >> "$GITHUB_OUTPUT"
- - name: Label contributor
- id: label-contributor
- if: ${{ steps.is-member.outputs.result == 'false' }}
+ - name: Check if organization member
+ id: is-org-member
+ uses: JamesSingleton/is-organization-member@1.0.0
+ with:
+ organization: ${{ github.repository_owner }}
+ username: ${{ github.event.issue.user.login }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+ - name: label-member
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- USERNAME: ${{ github.event.issue.user.login }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
- LABELS: external-issue
run: |
- echo "applying external label"
- gh issue edit $NUMBER --add-label $LABELS
- - name: Label internal
- id: label-internal
- if: ${{ steps.is-member.outputs.result == 'true' }}
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- USERNAME: ${{ github.event.issue.user.login }}
- GH_REPO: ${{ github.repository }}
- NUMBER: ${{ github.event.issue.number }}
- LABELS: internal-issue
- run: |
- echo "applying internal label"
- gh issue edit $NUMBER --add-label $LABELS
+ if [ ${{ steps.is-org-member.outputs.result }} != "true" ]; then
+ echo "User is outside of organization, labeling external"
+ gh issue edit "$NUMBER" --add-label "external-issue"
+ else
+ echo "User is within the organization, labeling internal"
+ gh issue edit "$NUMBER" --add-label "internal-issue"
+ fi
triage-new:
runs-on: ubuntu-latest
+ permissions:
+ issues: write
steps:
- name: Label triage
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
LABELS: to-triage
run: |
- echo "applying triage label"
- gh issue edit $NUMBER --add-label $LABELS
+ echo "Applying triage label for new issue"
+ gh issue edit "$NUMBER" --add-label "$LABELS"
+
From 1537792ee18e8dfe9cdbe9de4200ba1612acbd4b Mon Sep 17 00:00:00 2001
From: Ivan Vasilov
Date: Mon, 24 Jun 2024 18:17:30 +0200
Subject: [PATCH 017/316] chore: Regenerate `api-types` file with sorted option
(#27495)
* Regenerate api types.
* Codegen the api types with the alphabetize option.
---
packages/api-types/package.json | 2 +-
packages/api-types/types/api.d.ts | 16699 ++++++++++++++--------------
2 files changed, 8353 insertions(+), 8348 deletions(-)
diff --git a/packages/api-types/package.json b/packages/api-types/package.json
index 312168248f2..a71266edcba 100644
--- a/packages/api-types/package.json
+++ b/packages/api-types/package.json
@@ -5,7 +5,7 @@
"main": "./index.ts",
"types": "./index.ts",
"scripts": {
- "codegen": "openapi-typescript http://localhost:8080/api-json -o types/api.d.ts && prettier --write types/api.d.ts"
+ "codegen": "openapi-typescript http://localhost:8080/api-json -o types/api.d.ts --alphabetize && prettier --write types/api.d.ts"
},
"author": "",
"license": "MIT",
diff --git a/packages/api-types/types/api.d.ts b/packages/api-types/types/api.d.ts
index 9bbf3572900..49294c36d6f 100644
--- a/packages/api-types/types/api.d.ts
+++ b/packages/api-types/types/api.d.ts
@@ -13,60 +13,43 @@ type OneOf = T extends [infer Only]
: never
export interface paths {
- '/platform/notifications': {
- /** Get notifications */
- get: operations['NotificationsController_getNotificationsV2']
- /** Delete notifications */
- delete: operations['NotificationsController_deleteNotifications']
- /** Update notifications */
- patch: operations['NotificationsController_updateNotificationsV2']
+ '/partners/flyio/callback': {
+ /** Redirects to Supabase dashboard after completing Fly sso */
+ get: operations['CallbackController_redirectToDashboardFlyioExtensionScreen']
}
- '/platform/notifications/summary': {
- /** Get an aggregated data of interest across all notifications for the user */
- get: operations['NotificationsController_getNotificationsSummary']
+ '/partners/flyio/extensions': {
+ /** Creates a database */
+ post: operations['FlyExtensionsController_provisionResource']
}
- '/platform/notifications/archive-all': {
- /** Archives all notifications */
- patch: operations['NotificationsController_archiveAllNotifications']
+ '/partners/flyio/extensions/{extension_id}': {
+ /** Gets database status */
+ get: operations['ExtensionController_getResourceStatus']
+ /** Deletes a database */
+ delete: operations['ExtensionController_deleteResource']
}
- '/platform/reset-password': {
- /** Reset password for email */
- post: operations['ResetPasswordController_resetPassword']
+ '/partners/flyio/extensions/{extension_id}/sso': {
+ /** Starts Fly single sign on */
+ get: operations['ExtensionController_startFlyioSSO']
}
- '/platform/feedback/send': {
- /** Send feedback */
- post: operations['SendFeedbackController_sendFeedback']
+ '/partners/flyio/organizations/{organization_id}': {
+ /** Gets details of the organization linked to the provided Fly organization id */
+ get: operations['FlyOrganizationsController_getOrganization']
}
- '/platform/feedback/downgrade': {
- /** Send exit survey to HubSpot */
- post: operations['SendExitSurveyController_sendExitSurvey']
+ '/partners/flyio/organizations/{organization_id}/billing': {
+ /** Gets the organizations current unbilled charges */
+ get: operations['FlyBillingController_getResourceBilling']
}
- '/platform/feedback/upgrade': {
- /** Send upgrade survey to survey_responses table */
- post: operations['SendUpgradeSurveyController_sendUpgradeSurvey']
+ '/partners/flyio/organizations/{organization_id}/extensions': {
+ /** Gets all databases that belong to the given Fly organization id */
+ get: operations['FlyOrganizationsController_getOrgExtensions']
}
- '/platform/feedback/docs': {
- /** Send feedback on docs */
- post: operations['SendDocsFeedbackController_sendDocsFeedback']
+ '/partners/flyio/organizations/{organization_id}/sso': {
+ /** Starts Fly single sign on */
+ get: operations['FlyOrganizationsController_startFlyioSSO']
}
- '/platform/signup': {
- /** Sign up with email and password */
- post: operations['SignUpController_signUp']
- }
- '/platform/status': {
- /** Get infrastructure status */
- get: operations['StatusController_getStatus']
- }
- '/platform/projects-resource-warnings': {
- /**
- * Gets resource warnings for all projects accessible by the user
- * @description Only returns the minimal project info
- */
- get: operations['ProjectsResourceWarningsController_getProjectsResourceWarnings']
- }
- '/platform/tos/fly': {
- /** Redirects to Fly sso flow */
- get: operations['TermsOfServiceController_flyTosAccepted']
+ '/partners/flyio/organizations/{organization_id}/subscription': {
+ /** Updates organization subscription linked to the provided Fly organization id */
+ put: operations['FlyOrganizationsController_updateOrganization']
}
'/platform/auth/{ref}/config': {
/** Gets GoTrue config */
@@ -104,17 +87,29 @@ export interface paths {
/** Delete all factors associated to a user */
delete: operations['FactorsController_deleteFactors']
}
+ '/platform/cli/login': {
+ /** Create CLI login session */
+ post: operations['CliLoginController_createCliLoginSession']
+ }
+ '/platform/cli/login/{session_id}': {
+ /** Retrieve CLI login session */
+ get: operations['CliLoginController_getCliLoginSession']
+ }
'/platform/database/{ref}/backups': {
/** Gets project backups */
get: operations['BackupsController_getBackups']
}
+ '/platform/database/{ref}/backups/download': {
+ /** Download project backup */
+ post: operations['BackupsController_downloadBackup']
+ }
'/platform/database/{ref}/backups/enable-physical-backups': {
/** Enable usage of physical backups */
post: operations['BackupsController_enablePhysicalBackup']
}
- '/platform/database/{ref}/backups/download': {
- /** Download project backup */
- post: operations['BackupsController_downloadBackup']
+ '/platform/database/{ref}/backups/pitr': {
+ /** Restore project to a previous point in time */
+ post: operations['BackupsController_restorePointInTimeBackup']
}
'/platform/database/{ref}/backups/restore': {
/** Restore project backup */
@@ -124,17 +119,116 @@ export interface paths {
/** Restore project with a physical backup */
post: operations['BackupsController_restorePhysicalBackup']
}
- '/platform/database/{ref}/backups/pitr': {
- /** Restore project to a previous point in time */
- post: operations['BackupsController_restorePointInTimeBackup']
+ '/platform/database/{ref}/hook-enable': {
+ /** Enables Database Webhooks on the project */
+ post: operations['HooksController_enableHooks']
}
'/platform/database/{ref}/hook-logs': {
/** Gets hook logs with the given ID */
get: operations['HooksController_getHookLogs']
}
- '/platform/database/{ref}/hook-enable': {
- /** Enables Database Webhooks on the project */
- post: operations['HooksController_enableHooks']
+ '/platform/feedback/docs': {
+ /** Send feedback on docs */
+ post: operations['SendDocsFeedbackController_sendDocsFeedback']
+ }
+ '/platform/feedback/downgrade': {
+ /** Send exit survey to HubSpot */
+ post: operations['SendExitSurveyController_sendExitSurvey']
+ }
+ '/platform/feedback/send': {
+ /** Send feedback */
+ post: operations['SendFeedbackController_sendFeedback']
+ }
+ '/platform/feedback/upgrade': {
+ /** Send upgrade survey to survey_responses table */
+ post: operations['SendUpgradeSurveyController_sendUpgradeSurvey']
+ }
+ '/platform/integrations': {
+ /** Gets user's integrations */
+ get: operations['IntegrationsController_getUserInstallations']
+ }
+ '/platform/integrations/{slug}': {
+ /** Gets integration with the given organization slug */
+ get: operations['IntegrationsController_getUserInstallationForOrg']
+ }
+ '/platform/integrations/github/authorization': {
+ /** Get GitHub authorization */
+ get: operations['GitHubAuthorizationsController_getGitHubAuthorization']
+ /** Create GitHub authorization */
+ post: operations['GitHubAuthorizationsController_createGitHubAuthorization']
+ }
+ '/platform/integrations/github/branches/{connectionId}': {
+ /** List GitHub connection branches */
+ get: operations['GitHubBranchesController_listConnectionBranches']
+ }
+ '/platform/integrations/github/branches/{connectionId}/{branchName}': {
+ /** Get GitHub connection branch */
+ get: operations['GitHubBranchesController_getConnectionBranch']
+ }
+ '/platform/integrations/github/connections': {
+ /** List organization GitHub connections */
+ get: operations['GitHubConnectionsController_listOrganizationGitHubConnections']
+ /** Connects a GitHub project to a supabase project */
+ post: operations['GitHubConnectionsController_createGitHubConnection']
+ }
+ '/platform/integrations/github/connections/{connection_id}': {
+ /** Deletes github project connection */
+ delete: operations['GitHubConnectionsController_deleteGitHubConnection']
+ /** Updates a GitHub connection for a supabase project */
+ patch: operations['GitHubConnectionsController_updateGitHubConnection']
+ }
+ '/platform/integrations/github/repositories': {
+ /** Gets GitHub repositories for user */
+ get: operations['GitHubRepositoriesController_listRepositories']
+ }
+ '/platform/integrations/vercel': {
+ /**
+ * Create vercel integration
+ * @description Exchanges a vercel code for an access token and saves the access token to the new integration record
+ */
+ post: operations['VercelIntegrationController_createVercelIntegration']
+ }
+ '/platform/integrations/vercel/{organization_integration_id}': {
+ /** Removes Vercel organization integration with the given id */
+ delete: operations['VercelIntegrationController_removeVercelIntegration']
+ }
+ '/platform/integrations/vercel/connections': {
+ /** Connects a Vercel project to a supabase project */
+ post: operations['VercelConnectionsController_createVercelConnection']
+ }
+ '/platform/integrations/vercel/connections/{connection_id}': {
+ /** Deletes vercel project connection */
+ delete: operations['VercelConnectionsController_deleteVercelConnection']
+ /** Updates a Vercel connection for a supabase project */
+ patch: operations['VercelConnectionsController_updateVercelConnection']
+ }
+ '/platform/integrations/vercel/connections/{connection_id}/sync-envs': {
+ /** Syncs supabase project envs with given connection id */
+ post: operations['VercelConnectionsController_syncVercelConnectionEnvironments']
+ }
+ '/platform/integrations/vercel/connections/{organization_integration_id}': {
+ /** Gets installed vercel project connections for the given organization integration */
+ get: operations['VercelConnectionsController_getVercelConnections']
+ }
+ '/platform/integrations/vercel/projects/{organization_integration_id}': {
+ /** Gets vercel projects with the given organization integration id */
+ get: operations['VercelProjectController_getVercelProjects']
+ }
+ '/platform/notifications': {
+ /** Get notifications */
+ get: operations['NotificationsController_getNotificationsV2']
+ /** Delete notifications */
+ delete: operations['NotificationsController_deleteNotifications']
+ /** Update notifications */
+ patch: operations['NotificationsController_updateNotificationsV2']
+ }
+ '/platform/notifications/archive-all': {
+ /** Archives all notifications */
+ patch: operations['NotificationsController_archiveAllNotifications']
+ }
+ '/platform/notifications/summary': {
+ /** Get an aggregated data of interest across all notifications for the user */
+ get: operations['NotificationsController_getNotificationsSummary']
}
'/platform/organizations': {
/** Gets user's organizations */
@@ -142,40 +236,54 @@ export interface paths {
/** Creates an organization */
post: operations['OrganizationsController_createOrganizationWithTier']
}
- '/platform/organizations/fly/{fly_organization_id}': {
- /** Gets organization linked to fly organization id */
- get: operations['OrganizationsController_getOrganizationByFlyOrganizationId']
- }
'/platform/organizations/{slug}': {
/** Deletes organization */
delete: operations['OrganizationSlugController_deleteOrganization']
/** Updates organization */
patch: operations['OrganizationSlugController_updateOrganization']
}
+ '/platform/organizations/{slug}/audit': {
+ /** Gets an organization's audit logs */
+ get: operations['OrgAuditLogsController_getAuditLogs']
+ }
+ '/platform/organizations/{slug}/billing/invoices': {
+ /** Gets invoices for the given organization */
+ get: operations['OrgInvoicesController_getInvoices']
+ /** Gets the total count of invoices for the given organization */
+ head: operations['OrgInvoicesController_countInvoices']
+ }
+ '/platform/organizations/{slug}/billing/invoices/{invoiceId}': {
+ /** Gets invoice with the given invoice ID */
+ get: operations['OrgInvoicesController_getInvoice']
+ }
+ '/platform/organizations/{slug}/billing/invoices/upcoming': {
+ /** Gets the upcoming invoice */
+ get: operations['OrgInvoicesController_getUpcomingInvoice']
+ }
+ '/platform/organizations/{slug}/billing/plans': {
+ /** Gets subscription plans */
+ get: operations['OrgPlansController_getAvailablePlans']
+ }
+ '/platform/organizations/{slug}/billing/subscription': {
+ /** Gets the current subscription */
+ get: operations['SubscriptionController_getSubscription']
+ /** Updates subscription */
+ put: operations['SubscriptionController_updateSubscription']
+ }
+ '/platform/organizations/{slug}/billing/subscription/preview': {
+ /** Preview subscription changes */
+ post: operations['SubscriptionController_previewSubscriptionChange']
+ }
+ '/platform/organizations/{slug}/billing/subscription/schedule': {
+ /** Deletes any upcoming subscription schedule */
+ delete: operations['SubscriptionController_deleteSubscriptionSchedule']
+ }
'/platform/organizations/{slug}/customer': {
/** Gets the Stripe customer */
get: operations['CustomerController_getCustomer']
/** Updates the billing customer */
put: operations['updateCustomerV2']
}
- '/platform/organizations/{slug}/roles': {
- /** Gets the given organization's roles */
- get: operations['OrganizationRolesController_getAllRolesV2']
- }
- '/platform/organizations/{slug}/tax-ids': {
- /** Gets the given organization's tax IDs */
- get: operations['TaxIdsController_getTaxIds']
- /** Creates or updates a tax ID for the given organization */
- put: operations['TaxIdsController_updateTaxId']
- /** Creates a tax ID for the given organization */
- post: operations['TaxIdsController_createTaxId']
- /** Delete the tax ID with the given ID */
- delete: operations['TaxIdsController_deleteTaxId']
- }
- '/platform/organizations/{slug}/transfer': {
- /** Transfers the organization to the given member */
- post: operations['TransferController_transferOrganization']
- }
'/platform/organizations/{slug}/daily-stats': {
/** Gets daily organization stats */
get: operations['OrgDailyStatsController_getDailyStats']
@@ -184,21 +292,43 @@ export interface paths {
/** Gets daily organization stats for compute */
get: operations['OrgDailyStatsController_getDailyStatsCompute']
}
- '/platform/organizations/{slug}/usage': {
- /** Gets usage stats */
- get: operations['OrgUsageController_getOrgUsage']
+ '/platform/organizations/{slug}/documents/soc2-type-2-report': {
+ /** Get SOC2 Type 2 report URL */
+ get: operations['OrgDocumentsController_getSoc2Type2ReportUrl']
}
'/platform/organizations/{slug}/documents/standard-security-questionnaire': {
/** Get standard security questionnaire URL */
get: operations['OrgDocumentsController_getStandardSecurityQuestionnaireUrl']
}
- '/platform/organizations/{slug}/documents/soc2-type-2-report': {
- /** Get SOC2 Type 2 report URL */
- get: operations['OrgDocumentsController_getSoc2Type2ReportUrl']
+ '/platform/organizations/{slug}/members': {
+ /** Gets organization's members */
+ get: operations['MembersController_getMembers']
}
- '/platform/organizations/{slug}/audit': {
- /** Gets an organization's audit logs */
- get: operations['OrgAuditLogsController_getAuditLogs']
+ '/platform/organizations/{slug}/members/{gotrue_id}': {
+ /** Removes organization member */
+ delete: operations['MembersController_deleteMember']
+ /** Updates organization member role */
+ patch: operations['MembersController_updateMemberRoleV2']
+ }
+ '/platform/organizations/{slug}/members/{gotrue_id}/roles/{role_id}': {
+ /** Removes organization member */
+ delete: operations['MembersController_deleteMemberRole']
+ }
+ '/platform/organizations/{slug}/members/invitations': {
+ /** Gets organization invitations */
+ get: operations['InvitationsController_getAllInvitations']
+ /** Creates organization invitation */
+ post: operations['InvitationsController_createInvitation']
+ }
+ '/platform/organizations/{slug}/members/invitations/{id}': {
+ /** Deletes organization invitation with given id */
+ delete: operations['InvitationsController_deleteInvitation']
+ }
+ '/platform/organizations/{slug}/members/invitations/{token}': {
+ /** Gets organization invitation by token */
+ get: operations['InvitationsController_getInvitationByToken']
+ /** Accepts organization invitation by token */
+ post: operations['InvitationsController_acceptInvitationByToken']
}
'/platform/organizations/{slug}/members/invite': {
/**
@@ -229,40 +359,10 @@ export interface paths {
*/
post: operations['JoinController_joinOrganization']
}
- '/platform/organizations/{slug}/members': {
- /** Gets organization's members */
- get: operations['MembersController_getMembers']
- }
- '/platform/organizations/{slug}/members/{gotrue_id}': {
- /** Removes organization member */
- delete: operations['MembersController_deleteMember']
- /** Updates organization member role */
- patch: operations['MembersController_updateMemberRoleV2']
- }
- '/platform/organizations/{slug}/members/{gotrue_id}/roles/{role_id}': {
- /** Removes organization member */
- delete: operations['MembersController_deleteMemberRole']
- }
'/platform/organizations/{slug}/members/reached-free-project-limit': {
/** Gets organization members who have reached their free project limit */
get: operations['ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit']
}
- '/platform/organizations/{slug}/members/invitations': {
- /** Gets organization invitations */
- get: operations['InvitationsController_getAllInvitations']
- /** Creates organization invitation */
- post: operations['InvitationsController_createInvitation']
- }
- '/platform/organizations/{slug}/members/invitations/{token}': {
- /** Gets organization invitation by token */
- get: operations['InvitationsController_getInvitationByToken']
- /** Accepts organization invitation by token */
- post: operations['InvitationsController_acceptInvitationByToken']
- }
- '/platform/organizations/{slug}/members/invitations/{id}': {
- /** Deletes organization invitation with given id */
- delete: operations['InvitationsController_deleteInvitation']
- }
'/platform/organizations/{slug}/payments': {
/** Gets Stripe payment methods for the given organization */
get: operations['getPaymentMethodsV2']
@@ -277,37 +377,31 @@ export interface paths {
/** Sets up a payment method */
post: operations['SetupIntentOrgController_setUpPaymentMethod']
}
- '/platform/organizations/{slug}/billing/subscription': {
- /** Gets the current subscription */
- get: operations['SubscriptionController_getSubscription']
- /** Updates subscription */
- put: operations['SubscriptionController_updateSubscription']
+ '/platform/organizations/{slug}/roles': {
+ /** Gets the given organization's roles */
+ get: operations['OrganizationRolesController_getAllRolesV2']
}
- '/platform/organizations/{slug}/billing/subscription/preview': {
- /** Preview subscription changes */
- post: operations['SubscriptionController_previewSubscriptionChange']
+ '/platform/organizations/{slug}/tax-ids': {
+ /** Gets the given organization's tax IDs */
+ get: operations['TaxIdsController_getTaxIds']
+ /** Creates or updates a tax ID for the given organization */
+ put: operations['TaxIdsController_updateTaxId']
+ /** Creates a tax ID for the given organization */
+ post: operations['TaxIdsController_createTaxId']
+ /** Delete the tax ID with the given ID */
+ delete: operations['TaxIdsController_deleteTaxId']
}
- '/platform/organizations/{slug}/billing/subscription/schedule': {
- /** Deletes any upcoming subscription schedule */
- delete: operations['SubscriptionController_deleteSubscriptionSchedule']
+ '/platform/organizations/{slug}/transfer': {
+ /** Transfers the organization to the given member */
+ post: operations['TransferController_transferOrganization']
}
- '/platform/organizations/{slug}/billing/plans': {
- /** Gets subscription plans */
- get: operations['OrgPlansController_getAvailablePlans']
+ '/platform/organizations/{slug}/usage': {
+ /** Gets usage stats */
+ get: operations['OrgUsageController_getOrgUsage']
}
- '/platform/organizations/{slug}/billing/invoices/upcoming': {
- /** Gets the upcoming invoice */
- get: operations['OrgInvoicesController_getUpcomingInvoice']
- }
- '/platform/organizations/{slug}/billing/invoices': {
- /** Gets invoices for the given organization */
- get: operations['OrgInvoicesController_getInvoices']
- /** Gets the total count of invoices for the given organization */
- head: operations['OrgInvoicesController_countInvoices']
- }
- '/platform/organizations/{slug}/billing/invoices/{invoiceId}': {
- /** Gets invoice with the given invoice ID */
- get: operations['OrgInvoicesController_getInvoice']
+ '/platform/organizations/fly/{fly_organization_id}': {
+ /** Gets organization linked to fly organization id */
+ get: operations['OrganizationsController_getOrganizationByFlyOrganizationId']
}
'/platform/pg-meta/{ref}/column-privileges': {
/** Retrieve column privileges */
@@ -405,14 +499,14 @@ export interface paths {
/** Updates project pg.schema with the given ID */
patch: operations['SchemasController_updateSchema']
}
- '/platform/pg-meta/{ref}/search/tables': {
- /** Searches project pg.tables. Return maximum 50 results. */
- post: operations['SearchController_searchTables']
- }
'/platform/pg-meta/{ref}/search/columns': {
/** Searches project pg.columns. Return maximum 50 results. */
post: operations['SearchController_searchColumns']
}
+ '/platform/pg-meta/{ref}/search/tables': {
+ /** Searches project pg.tables. Return maximum 50 results. */
+ post: operations['SearchController_searchTables']
+ }
'/platform/pg-meta/{ref}/table-privileges': {
/** Retrieve table privileges */
get: operations['TablePrivilegesController_getTablePrivileges']
@@ -449,6 +543,16 @@ export interface paths {
/** Retrieve database views */
get: operations['ViewsController_getViews']
}
+ '/platform/profile': {
+ /** Gets the user's profile */
+ get: operations['ProfileController_getProfile']
+ /** Creates user's profile */
+ post: operations['ProfileController_createProfile']
+ /** Deletes user's profile */
+ delete: operations['ProfileController_deleteProfile']
+ /** Updates user's profile */
+ patch: operations['ProfileController_updateProfile']
+ }
'/platform/profile/access-tokens': {
/** Gets the user's access tokens */
get: operations['AccessTokensController_getAccessTokens']
@@ -465,14 +569,6 @@ export interface paths {
/** Gets a user's audit logs */
get: operations['UserAuditLogsController_getAuditLogs']
}
- '/platform/profile/search': {
- /** Search profiles by username, email with the given keywords */
- post: operations['SearchProfileController_searchProfile']
- }
- '/platform/profile/subscriptions': {
- /** Gets the user's subscription statistics */
- get: operations['SubscriptionsController_getSubscriptionsStatistics']
- }
'/platform/profile/password-check': {
/** Check password strength */
post: operations['PasswordCheckController_checkPassword']
@@ -481,15 +577,13 @@ export interface paths {
/** Gets all the user's permissions */
get: operations['PermissionsController_getPermissions']
}
- '/platform/profile': {
- /** Gets the user's profile */
- get: operations['ProfileController_getProfile']
- /** Creates user's profile */
- post: operations['ProfileController_createProfile']
- /** Deletes user's profile */
- delete: operations['ProfileController_deleteProfile']
- /** Updates user's profile */
- patch: operations['ProfileController_updateProfile']
+ '/platform/profile/search': {
+ /** Search profiles by username, email with the given keywords */
+ post: operations['SearchProfileController_searchProfile']
+ }
+ '/platform/profile/subscriptions': {
+ /** Gets the user's subscription statistics */
+ get: operations['SubscriptionsController_getSubscriptionsStatistics']
}
'/platform/projects': {
/**
@@ -500,101 +594,12 @@ export interface paths {
/** Creates a project */
post: operations['ProjectsController_createProject']
}
- '/platform/projects/fly/{fly_extension_id}': {
- /** Gets project linked to fly extension id */
- get: operations['ProjectsController_getProjectByFlyExtensionId']
- }
- '/platform/projects/{ref}/content': {
+ '/platform/projects-resource-warnings': {
/**
- * Gets project's content
- * @deprecated
+ * Gets resource warnings for all projects accessible by the user
+ * @description Only returns the minimal project info
*/
- get: operations['ContentController_getContent']
- /** Updates project's content */
- put: operations['ContentController_updateWholeContentV2']
- /** Creates project's content */
- post: operations['ContentController_createContentV2']
- /** Deletes project's contents */
- delete: operations['ContentController_deleteContents']
- /**
- * Updates project's content
- * @deprecated
- */
- patch: operations['ContentController_updateContent']
- }
- '/platform/projects/{ref}/content/item/{id}': {
- /** Gets project's content by the given id */
- get: operations['ContentController_getContentById']
- }
- '/platform/projects/{ref}/content/folders': {
- /** Gets project's content root folder */
- get: operations['ContentFoldersController_getRootFolder']
- /** Creates project's content folder */
- post: operations['ContentFoldersController_createFolder']
- /** Deletes project's content folders */
- delete: operations['ContentFoldersController_DeleteFolder']
- }
- '/platform/projects/{ref}/content/folders/{id}': {
- /** Gets project's content folder */
- get: operations['ContentFoldersController_getFolder']
- /** Updates project's content folder */
- patch: operations['ContentFoldersController_updateFolder']
- }
- '/platform/projects/{ref}/daily-stats': {
- /** Gets daily project stats */
- get: operations['DailyStatsController_getDailyStats']
- }
- '/platform/projects/{ref}/databases': {
- /** Gets non-removed databases of a specified project */
- get: operations['DatabasesController_getDatabases']
- }
- '/platform/projects/{ref}/databases-statuses': {
- /** Gets statuses of databases within a project */
- get: operations['DatabasesStatusesController_getStatus']
- }
- '/platform/projects/{ref}/db-password': {
- /** Updates the database password */
- patch: operations['DbPasswordController_updatePassword']
- }
- '/platform/projects/{ref}/live': {
- /** Gets project health check */
- get: operations['HealthCheckController_projectHealthCheck']
- }
- '/platform/projects/{ref}/load-balancers': {
- /** Gets non-removed databases of a specified project */
- get: operations['LoadBalancersController_getLoadBalancers']
- }
- '/platform/projects/{ref}/api/rest': {
- /** Gets project OpenApi */
- get: operations['ProjectsApiController_projectOpenApi']
- }
- '/platform/projects/{ref}/api/graphql': {
- /** Queries project Graphql */
- post: operations['ProjectsApiController_projectGraphql']
- }
- '/platform/projects/{ref}/infra-monitoring': {
- /** Gets project's usage metrics */
- get: operations['InfraMonitoringController_getUsageMetrics']
- }
- '/platform/projects/{ref}/pause': {
- /** Pauses the project */
- post: operations['PauseController_pauseProject']
- }
- '/platform/projects/{ref}/pause/status': {
- /** Gets the latest pause event for a project if a project is paused */
- get: operations['PauseController_getProject']
- }
- '/platform/projects/{ref}/resize': {
- /** Resize database disk */
- post: operations['ResizeController_resizeDatabase']
- }
- '/platform/projects/{ref}/restart': {
- /** Restarts project */
- post: operations['RestartController_restartProject']
- }
- '/platform/projects/{ref}/run-lints': {
- /** Run project lints */
- get: operations['ProjectRunLintsController_runProjectLints']
+ get: operations['ProjectsResourceWarningsController_getProjectsResourceWarnings']
}
'/platform/projects/{ref}': {
/** Gets a specific project that belongs to the authenticated user */
@@ -604,38 +609,6 @@ export interface paths {
/** Updates the given project */
patch: operations['ProjectsRefController_updateProject']
}
- '/platform/projects/{ref}/restore': {
- /** Restores project */
- post: operations['RestoreController_restoreProject']
- }
- '/platform/projects/{ref}/restart-services': {
- /** Restarts given services */
- post: operations['RestartServicesController_restartServices']
- }
- '/platform/projects/{ref}/settings': {
- /** Gets project's settings */
- get: operations['SettingsController_getProjectApi']
- }
- '/platform/projects/{ref}/status': {
- /** Gets project's status */
- get: operations['ProjectStatusController_getStatus']
- }
- '/platform/projects/{ref}/update': {
- /**
- * Updates the project
- * @deprecated
- * @description Replaced by PATCH /platform/projects/:ref
- */
- post: operations['UpdateController_updateProject']
- }
- '/platform/projects/{ref}/transfer/preview': {
- /** Previews transfering a project to a different organizations, shows eligibility and impact. */
- post: operations['ProjectTransferController_previewTransfer']
- }
- '/platform/projects/{ref}/transfer': {
- /** Transfers a project to a different organization. */
- post: operations['ProjectTransferController_transferProject']
- }
'/platform/projects/{ref}/analytics/endpoints/functions.inv-stats': {
/** Gets a project's function invocation statistics */
get: operations['FunctionInvocationLogsController_getStatus']
@@ -660,9 +633,15 @@ export interface paths {
/** Gets project's usage api requests count */
get: operations['UsageApiController_getApiRequestsCount']
}
- '/platform/projects/{ref}/analytics/warehouse/tenant': {
- /** Gets project's warehouse tenant from logflare */
- get: operations['TenantController_getTenant']
+ '/platform/projects/{ref}/analytics/warehouse/access-tokens': {
+ /** Lists project's warehouse access tokens from logflare */
+ get: operations['AccessTokenController_listAccessTokens']
+ /** Create a warehouse access token */
+ post: operations['AccessTokenController_createAccessToken']
+ }
+ '/platform/projects/{ref}/analytics/warehouse/access-tokens/{token}': {
+ /** Delete a warehouse access token */
+ delete: operations['AccessTokenController_deleteAccessToken']
}
'/platform/projects/{ref}/analytics/warehouse/collections': {
/** Lists project's warehouse collections from logflare */
@@ -678,16 +657,6 @@ export interface paths {
/** Update a warehouse collection */
patch: operations['CollectionController_updateCollection']
}
- '/platform/projects/{ref}/analytics/warehouse/access-tokens': {
- /** Lists project's warehouse access tokens from logflare */
- get: operations['AccessTokenController_listAccessTokens']
- /** Create a warehouse access token */
- post: operations['AccessTokenController_createAccessToken']
- }
- '/platform/projects/{ref}/analytics/warehouse/access-tokens/{token}': {
- /** Delete a warehouse access token */
- delete: operations['AccessTokenController_deleteAccessToken']
- }
'/platform/projects/{ref}/analytics/warehouse/endpoints': {
/** Lists project's warehouse endpoints from logflare */
get: operations['EndpointController_listEndpoints']
@@ -704,6 +673,18 @@ export interface paths {
/** Lists project's warehouse queries from logflare */
get: operations['WarehouseQueryController_runQuery']
}
+ '/platform/projects/{ref}/analytics/warehouse/tenant': {
+ /** Gets project's warehouse tenant from logflare */
+ get: operations['TenantController_getTenant']
+ }
+ '/platform/projects/{ref}/api/graphql': {
+ /** Queries project Graphql */
+ post: operations['ProjectsApiController_projectGraphql']
+ }
+ '/platform/projects/{ref}/api/rest': {
+ /** Gets project OpenApi */
+ get: operations['ProjectsApiController_projectOpenApi']
+ }
'/platform/projects/{ref}/billing/addons': {
/** Gets project addons */
get: operations['ProjectAddonController_getProjectAddons']
@@ -724,18 +705,18 @@ export interface paths {
/** Gets project's pgbouncer status */
get: operations['PgbouncerConfigController_getPgbouncerStatus']
}
- '/platform/projects/{ref}/config/postgrest': {
- /** Gets project's postgrest config */
- get: operations['PostgrestConfigController_getPostgRESTConfig']
- /** Updates project's postgrest config */
- patch: operations['PostgrestConfigController_updatePostgRESTConfig']
- }
'/platform/projects/{ref}/config/postgres': {
/** Gets project's Postgres config */
get: operations['v1-get-postgres-config']
/** Updates project's Postgres config */
put: operations['v1-update-postgres-config']
}
+ '/platform/projects/{ref}/config/postgrest': {
+ /** Gets project's postgrest config */
+ get: operations['PostgrestConfigController_getPostgRESTConfig']
+ /** Updates project's postgrest config */
+ patch: operations['PostgrestConfigController_updatePostgRESTConfig']
+ }
'/platform/projects/{ref}/config/secrets': {
/** Updates project's secrets config */
patch: operations['SecretsConfigController_updateConfig']
@@ -752,6 +733,126 @@ export interface paths {
/** Updates project's supavisor config */
patch: operations['v1-update-supavisor-config']
}
+ '/platform/projects/{ref}/content': {
+ /**
+ * Gets project's content
+ * @deprecated
+ */
+ get: operations['ContentController_getContent']
+ /** Updates project's content */
+ put: operations['ContentController_updateWholeContentV2']
+ /** Creates project's content */
+ post: operations['ContentController_createContentV2']
+ /** Deletes project's contents */
+ delete: operations['ContentController_deleteContents']
+ /**
+ * Updates project's content
+ * @deprecated
+ */
+ patch: operations['ContentController_updateContent']
+ }
+ '/platform/projects/{ref}/content/folders': {
+ /** Gets project's content root folder */
+ get: operations['ContentFoldersController_getRootFolder']
+ /** Creates project's content folder */
+ post: operations['ContentFoldersController_createFolder']
+ /** Deletes project's content folders */
+ delete: operations['ContentFoldersController_DeleteFolder']
+ }
+ '/platform/projects/{ref}/content/folders/{id}': {
+ /** Gets project's content folder */
+ get: operations['ContentFoldersController_getFolder']
+ /** Updates project's content folder */
+ patch: operations['ContentFoldersController_updateFolder']
+ }
+ '/platform/projects/{ref}/content/item/{id}': {
+ /** Gets project's content by the given id */
+ get: operations['ContentController_getContentById']
+ }
+ '/platform/projects/{ref}/daily-stats': {
+ /** Gets daily project stats */
+ get: operations['DailyStatsController_getDailyStats']
+ }
+ '/platform/projects/{ref}/databases': {
+ /** Gets non-removed databases of a specified project */
+ get: operations['DatabasesController_getDatabases']
+ }
+ '/platform/projects/{ref}/databases-statuses': {
+ /** Gets statuses of databases within a project */
+ get: operations['DatabasesStatusesController_getStatus']
+ }
+ '/platform/projects/{ref}/db-password': {
+ /** Updates the database password */
+ patch: operations['DbPasswordController_updatePassword']
+ }
+ '/platform/projects/{ref}/infra-monitoring': {
+ /** Gets project's usage metrics */
+ get: operations['InfraMonitoringController_getUsageMetrics']
+ }
+ '/platform/projects/{ref}/live': {
+ /** Gets project health check */
+ get: operations['HealthCheckController_projectHealthCheck']
+ }
+ '/platform/projects/{ref}/load-balancers': {
+ /** Gets non-removed databases of a specified project */
+ get: operations['LoadBalancersController_getLoadBalancers']
+ }
+ '/platform/projects/{ref}/pause': {
+ /** Pauses the project */
+ post: operations['PauseController_pauseProject']
+ }
+ '/platform/projects/{ref}/pause/status': {
+ /** Gets the latest pause event for a project if a project is paused */
+ get: operations['PauseController_getProject']
+ }
+ '/platform/projects/{ref}/resize': {
+ /** Resize database disk */
+ post: operations['ResizeController_resizeDatabase']
+ }
+ '/platform/projects/{ref}/restart': {
+ /** Restarts project */
+ post: operations['RestartController_restartProject']
+ }
+ '/platform/projects/{ref}/restart-services': {
+ /** Restarts given services */
+ post: operations['RestartServicesController_restartServices']
+ }
+ '/platform/projects/{ref}/restore': {
+ /** Restores project */
+ post: operations['RestoreController_restoreProject']
+ }
+ '/platform/projects/{ref}/run-lints': {
+ /** Run project lints */
+ get: operations['ProjectRunLintsController_runProjectLints']
+ }
+ '/platform/projects/{ref}/settings': {
+ /** Gets project's settings */
+ get: operations['SettingsController_getProjectApi']
+ }
+ '/platform/projects/{ref}/status': {
+ /** Gets project's status */
+ get: operations['ProjectStatusController_getStatus']
+ }
+ '/platform/projects/{ref}/transfer': {
+ /** Transfers a project to a different organization. */
+ post: operations['ProjectTransferController_transferProject']
+ }
+ '/platform/projects/{ref}/transfer/preview': {
+ /** Previews transfering a project to a different organizations, shows eligibility and impact. */
+ post: operations['ProjectTransferController_previewTransfer']
+ }
+ '/platform/projects/{ref}/update': {
+ /**
+ * Updates the project
+ * @deprecated
+ * @description Replaced by PATCH /platform/projects/:ref
+ */
+ post: operations['UpdateController_updateProject']
+ }
+ '/platform/projects/fly/{fly_extension_id}': {
+ /** Gets project linked to fly extension id */
+ get: operations['ProjectsController_getProjectByFlyExtensionId']
+ }
'/platform/props/project/{ref}/api': {
/**
* Gets project's api info
@@ -770,6 +871,24 @@ export interface paths {
*/
get: operations['PropsSettingsController_getProjectApi']
}
+ '/platform/reset-password': {
+ /** Reset password for email */
+ post: operations['ResetPasswordController_resetPassword']
+ }
+ '/platform/signup': {
+ /** Sign up with email and password */
+ post: operations['SignUpController_signUp']
+ }
+ '/platform/status': {
+ /** Get infrastructure status */
+ get: operations['StatusController_getStatus']
+ }
+ '/platform/storage/{ref}/buckets': {
+ /** Gets list of buckets */
+ get: operations['StorageBucketsController_getBuckets']
+ /** Create bucket */
+ post: operations['StorageBucketsController_createBucket']
+ }
'/platform/storage/{ref}/buckets/{id}': {
/** Gets bucket */
get: operations['StorageBucketIdController_getBucket']
@@ -782,24 +901,30 @@ export interface paths {
/** Removes all objects inside a single bucket. */
post: operations['StorageBucketIdController_emptyBucket']
}
- '/platform/storage/{ref}/buckets': {
- /** Gets list of buckets */
- get: operations['StorageBucketsController_getBuckets']
- /** Create bucket */
- post: operations['StorageBucketsController_createBucket']
+ '/platform/storage/{ref}/buckets/{id}/objects': {
+ /** Deletes objects */
+ delete: operations['StorageObjectsController_deleteObjects']
+ }
+ '/platform/storage/{ref}/buckets/{id}/objects/copy': {
+ /** Copys object */
+ post: operations['StorageObjectsController_copyObject']
+ }
+ '/platform/storage/{ref}/buckets/{id}/objects/download': {
+ /** Downloads a file from a private bucket */
+ post: operations['StorageObjectsController_download']
}
'/platform/storage/{ref}/buckets/{id}/objects/list': {
/** Gets list of objects with the given bucket */
post: operations['StorageObjectsController_getObjects']
}
+ '/platform/storage/{ref}/buckets/{id}/objects/move': {
+ /** Move object */
+ post: operations['StorageObjectsController_moveObject']
+ }
'/platform/storage/{ref}/buckets/{id}/objects/public-url': {
/** Creates URL for an asset in a public bucket */
post: operations['StorageObjectsController_createPublicUrl']
}
- '/platform/storage/{ref}/buckets/{id}/objects/download': {
- /** Downloads a file from a private bucket */
- post: operations['StorageObjectsController_download']
- }
'/platform/storage/{ref}/buckets/{id}/objects/sign': {
/** Creates a signed URL */
post: operations['StorageObjectsController_createSignedUrl']
@@ -808,18 +933,6 @@ export interface paths {
/** Gets multiple signed URLs */
post: operations['StorageObjectsController_createSignedUrls']
}
- '/platform/storage/{ref}/buckets/{id}/objects/copy': {
- /** Copys object */
- post: operations['StorageObjectsController_copyObject']
- }
- '/platform/storage/{ref}/buckets/{id}/objects/move': {
- /** Move object */
- post: operations['StorageObjectsController_moveObject']
- }
- '/platform/storage/{ref}/buckets/{id}/objects': {
- /** Deletes objects */
- delete: operations['StorageObjectsController_deleteObjects']
- }
'/platform/storage/{ref}/credentials': {
/** Gets project storage credentials */
get: operations['StorageS3CredentialsController_getAllCredentials']
@@ -838,6 +951,10 @@ export interface paths {
/** Sets up a payment method */
post: operations['SetupIntentController_setUpPaymentMethod']
}
+ '/platform/telemetry/activity': {
+ /** Sends server activity */
+ post: operations['TelemetryActivityController_sendServerActivity']
+ }
'/platform/telemetry/event': {
/** Sends analytics server event */
post: operations['TelemetryEventController_sendServerEvent']
@@ -850,17 +967,13 @@ export interface paths {
/** Send server page event */
post: operations['TelemetryPageController_sendServerPage']
}
- '/platform/telemetry/activity': {
- /** Sends server activity */
- post: operations['TelemetryActivityController_sendServerActivity']
- }
'/platform/telemetry/pageview': {
/** Send pageview event */
post: operations['TelemetryPageviewController_sendServerPageViewed']
}
- '/platform/vercel/token': {
- /** Gets the Vercel access token for the given code */
- get: operations['VercelAccessTokenController_getAccessToken']
+ '/platform/tos/fly': {
+ /** Redirects to Fly sso flow */
+ get: operations['TermsOfServiceController_flyTosAccepted']
}
'/platform/vercel/projects': {
/** Gets the list of Vercel projects */
@@ -876,84 +989,9 @@ export interface paths {
/** Creates the environment variable for the given project ID on behalf of the given team ID */
post: operations['VercelEnvironmentVariablesController_createEnvironmentVariable']
}
- '/platform/integrations': {
- /** Gets user's integrations */
- get: operations['IntegrationsController_getUserInstallations']
- }
- '/platform/integrations/{slug}': {
- /** Gets integration with the given organization slug */
- get: operations['IntegrationsController_getUserInstallationForOrg']
- }
- '/platform/integrations/vercel': {
- /**
- * Create vercel integration
- * @description Exchanges a vercel code for an access token and saves the access token to the new integration record
- */
- post: operations['VercelIntegrationController_createVercelIntegration']
- }
- '/platform/integrations/vercel/{organization_integration_id}': {
- /** Removes Vercel organization integration with the given id */
- delete: operations['VercelIntegrationController_removeVercelIntegration']
- }
- '/platform/integrations/vercel/projects/{organization_integration_id}': {
- /** Gets vercel projects with the given organization integration id */
- get: operations['VercelProjectController_getVercelProjects']
- }
- '/platform/integrations/vercel/connections/{organization_integration_id}': {
- /** Gets installed vercel project connections for the given organization integration */
- get: operations['VercelConnectionsController_getVercelConnections']
- }
- '/platform/integrations/vercel/connections': {
- /** Connects a Vercel project to a supabase project */
- post: operations['VercelConnectionsController_createVercelConnection']
- }
- '/platform/integrations/vercel/connections/{connection_id}/sync-envs': {
- /** Syncs supabase project envs with given connection id */
- post: operations['VercelConnectionsController_syncVercelConnectionEnvironments']
- }
- '/platform/integrations/vercel/connections/{connection_id}': {
- /** Deletes vercel project connection */
- delete: operations['VercelConnectionsController_deleteVercelConnection']
- /** Updates a Vercel connection for a supabase project */
- patch: operations['VercelConnectionsController_updateVercelConnection']
- }
- '/platform/integrations/github/authorization': {
- /** Get GitHub authorization */
- get: operations['GitHubAuthorizationsController_getGitHubAuthorization']
- /** Create GitHub authorization */
- post: operations['GitHubAuthorizationsController_createGitHubAuthorization']
- }
- '/platform/integrations/github/connections': {
- /** List organization GitHub connections */
- get: operations['GitHubConnectionsController_listOrganizationGitHubConnections']
- /** Connects a GitHub project to a supabase project */
- post: operations['GitHubConnectionsController_createGitHubConnection']
- }
- '/platform/integrations/github/connections/{connection_id}': {
- /** Deletes github project connection */
- delete: operations['GitHubConnectionsController_deleteGitHubConnection']
- /** Updates a GitHub connection for a supabase project */
- patch: operations['GitHubConnectionsController_updateGitHubConnection']
- }
- '/platform/integrations/github/branches/{connectionId}': {
- /** List GitHub connection branches */
- get: operations['GitHubBranchesController_listConnectionBranches']
- }
- '/platform/integrations/github/branches/{connectionId}/{branchName}': {
- /** Get GitHub connection branch */
- get: operations['GitHubBranchesController_getConnectionBranch']
- }
- '/platform/integrations/github/repositories': {
- /** Gets GitHub repositories for user */
- get: operations['GitHubRepositoriesController_listRepositories']
- }
- '/platform/cli/login': {
- /** Create CLI login session */
- post: operations['CliLoginController_createCliLoginSession']
- }
- '/platform/cli/login/{session_id}': {
- /** Retrieve CLI login session */
- get: operations['CliLoginController_getCliLoginSession']
+ '/platform/vercel/token': {
+ /** Gets the Vercel access token for the given code */
+ get: operations['VercelAccessTokenController_getAccessToken']
}
'/system/auth/{ref}/templates/{template}': {
/** Gets GoTrue template */
@@ -967,17 +1005,59 @@ export interface paths {
/** Reset JWT if leaked keys found by GitHub secret scanning */
post: operations['GithubSecretAlertController_resetJwt']
}
- '/system/projects/{ref}/functions/{function_slug}': {
- /**
- * Delete a function
- * @description Deletes a function with the specified slug from the specified project.
- */
- delete: operations['v1-delete-a-function']
- /**
- * Update a function
- * @description Updates a function with the specified slug and project.
- */
- patch: operations['v1-update-a-function']
+ '/system/health': {
+ /** Get API health status */
+ get: operations['HealthController_getStatus']
+ }
+ '/system/integrations/github/webhooks': {
+ /** Processes GitHub event */
+ post: operations['GitHubWebhooksController_processEvent']
+ }
+ '/system/integrations/vercel/webhooks': {
+ /** Processes Vercel event */
+ post: operations['VercelWebhooksController_processEvent']
+ }
+ '/system/organizations/{slug}/billing/partner/usage-and-costs': {
+ /** Gets the partner usage and costs */
+ get: operations['PartnerBillingSystemController_getPartnerUsageAndCosts']
+ }
+ '/system/organizations/{slug}/billing/subscription': {
+ /** Gets the current subscription */
+ get: operations['OrgSubscriptionSystemController_getSubscription']
+ /** Updates subscription */
+ put: operations['OrgSubscriptionSystemController_updateSubscription']
+ }
+ '/system/organizations/{slug}/restrictions': {
+ /** Updates restriction status of an org */
+ put: operations['OrgRestrictionsSystemController_updateRestriction']
+ }
+ '/system/organizations/{slug}/usage': {
+ /** Gets usage stats */
+ get: operations['OrgUsageSystemController_getOrgUsage']
+ }
+ '/system/partner-organizations': {
+ /** Creates a partner organization */
+ post: operations['AwsPartnerOrganizationsSystemController_createPartnerOrganization']
+ }
+ '/system/projects': {
+ /** Create a project */
+ post: operations['SystemProjectsController_createProject']
+ }
+ '/system/projects/{ref}/billing/addons': {
+ /** Updates project addon */
+ post: operations['AddonsController_updateAddon']
+ }
+ '/system/projects/{ref}/billing/addons/{addon_variant}': {
+ /** Removes project addon */
+ delete: operations['AddonsController_removeAddon']
+ }
+ '/system/projects/{ref}/config/update-jwt/complete': {
+ /** Handle update project jwt on completion */
+ post: operations['ProjectUpdateJwtController_completeUpdateJwt']
+ }
+ '/system/projects/{ref}/credentials/aws': {
+ /** Allows a project to obtain temporary credentials. */
+ post: operations['AwsCredentialsController_getTemporaryCredentials']
}
'/system/projects/{ref}/functions': {
/**
@@ -993,6 +1073,26 @@ export interface paths {
/** Deletes all Edge Functions from a project */
delete: operations['SystemFunctionsController_systemDeleteAllFunctions']
}
+ '/system/projects/{ref}/functions/{function_slug}': {
+ /**
+ * Delete a function
+ * @description Deletes a function with the specified slug from the specified project.
+ */
+ delete: operations['v1-delete-a-function']
+ /**
+ * Update a function
+ * @description Updates a function with the specified slug and project.
+ */
+ patch: operations['v1-update-a-function']
+ }
+ '/system/projects/{ref}/ha-events': {
+ /** Records an HA event */
+ put: operations['HaEventsController_updateStatus']
+ }
+ '/system/projects/{ref}/health-reporting': {
+ /** Updates a project's health status. */
+ put: operations['HealthReportingController_updateStatus']
+ }
'/system/projects/{ref}/run-lints': {
/** Run project lints */
get: operations['SystemProjectRunLintsController_runProjectLints']
@@ -1018,95 +1118,13 @@ export interface paths {
/** Refreshes secrets */
post: operations['SecretsRefreshController_refreshSecrets']
}
- '/system/health': {
- /** Get API health status */
- get: operations['HealthController_getStatus']
- }
- '/system/projects/{ref}/health-reporting': {
- /** Updates a project's health status. */
- put: operations['HealthReportingController_updateStatus']
- }
- '/system/projects/{ref}/ha-events': {
- /** Records an HA event */
- put: operations['HaEventsController_updateStatus']
- }
- '/system/projects/{ref}/credentials/aws': {
- /** Allows a project to obtain temporary credentials. */
- post: operations['AwsCredentialsController_getTemporaryCredentials']
- }
- '/system/projects/{ref}/billing/addons': {
- /** Updates project addon */
- post: operations['AddonsController_updateAddon']
- }
- '/system/projects/{ref}/billing/addons/{addon_variant}': {
- /** Removes project addon */
- delete: operations['AddonsController_removeAddon']
- }
- '/system/projects/{ref}/config/update-jwt/complete': {
- /** Handle update project jwt on completion */
- post: operations['ProjectUpdateJwtController_completeUpdateJwt']
- }
- '/system/projects': {
- /** Create a project */
- post: operations['SystemProjectsController_createProject']
- }
- '/system/organizations/{slug}/usage': {
- /** Gets usage stats */
- get: operations['OrgUsageSystemController_getOrgUsage']
- }
- '/system/organizations/{slug}/billing/partner/usage-and-costs': {
- /** Gets the partner usage and costs */
- get: operations['PartnerBillingSystemController_getPartnerUsageAndCosts']
- }
- '/system/organizations/{slug}/billing/subscription': {
- /** Gets the current subscription */
- get: operations['OrgSubscriptionSystemController_getSubscription']
- /** Updates subscription */
- put: operations['OrgSubscriptionSystemController_updateSubscription']
- }
- '/system/organizations/{slug}/restrictions': {
- /** Updates restriction status of an org */
- put: operations['OrgRestrictionsSystemController_updateRestriction']
- }
- '/system/partner-organizations': {
- /** Creates a partner organization */
- post: operations['AwsPartnerOrganizationsSystemController_createPartnerOrganization']
- }
- '/system/integrations/vercel/webhooks': {
- /** Processes Vercel event */
- post: operations['VercelWebhooksController_processEvent']
- }
- '/system/integrations/github/webhooks': {
- /** Processes GitHub event */
- post: operations['GitHubWebhooksController_processEvent']
- }
- '/system/stripe/webhooks-v2': {
- /** Processes Stripe event */
- post: operations['StripeWebhooksController_processEvent']
- }
'/system/stripe/webhooks': {
/** Processes Stripe event */
post: operations['StripeWebhooksController_processEvent']
}
- '/v0/notifications': {
- /** Get notifications */
- get: operations['NotificationsController_getNotificationsV2']
- /** Delete notifications */
- delete: operations['NotificationsController_deleteNotifications']
- /** Update notifications */
- patch: operations['NotificationsController_updateNotificationsV2']
- }
- '/v0/notifications/summary': {
- /** Get an aggregated data of interest across all notifications for the user */
- get: operations['NotificationsController_getNotificationsSummary']
- }
- '/v0/notifications/archive-all': {
- /** Archives all notifications */
- patch: operations['NotificationsController_archiveAllNotifications']
- }
- '/v0/status': {
- /** Get infrastructure status */
- get: operations['StatusController_getStatus']
+ '/system/stripe/webhooks-v2': {
+ /** Processes Stripe event */
+ post: operations['StripeWebhooksController_processEvent']
}
'/v0/auth/{ref}/config': {
/** Gets GoTrue config */
@@ -1148,13 +1166,17 @@ export interface paths {
/** Gets project backups */
get: operations['BackupsController_getBackups']
}
+ '/v0/database/{ref}/backups/download': {
+ /** Download project backup */
+ post: operations['BackupsController_downloadBackup']
+ }
'/v0/database/{ref}/backups/enable-physical-backups': {
/** Enable usage of physical backups */
post: operations['BackupsController_enablePhysicalBackup']
}
- '/v0/database/{ref}/backups/download': {
- /** Download project backup */
- post: operations['BackupsController_downloadBackup']
+ '/v0/database/{ref}/backups/pitr': {
+ /** Restore project to a previous point in time */
+ post: operations['BackupsController_restorePointInTimeBackup']
}
'/v0/database/{ref}/backups/restore': {
/** Restore project backup */
@@ -1164,17 +1186,29 @@ export interface paths {
/** Restore project with a physical backup */
post: operations['BackupsController_restorePhysicalBackup']
}
- '/v0/database/{ref}/backups/pitr': {
- /** Restore project to a previous point in time */
- post: operations['BackupsController_restorePointInTimeBackup']
+ '/v0/database/{ref}/hook-enable': {
+ /** Enables Database Webhooks on the project */
+ post: operations['HooksController_enableHooks']
}
'/v0/database/{ref}/hook-logs': {
/** Gets hook logs with the given ID */
get: operations['HooksController_getHookLogs']
}
- '/v0/database/{ref}/hook-enable': {
- /** Enables Database Webhooks on the project */
- post: operations['HooksController_enableHooks']
+ '/v0/notifications': {
+ /** Get notifications */
+ get: operations['NotificationsController_getNotificationsV2']
+ /** Delete notifications */
+ delete: operations['NotificationsController_deleteNotifications']
+ /** Update notifications */
+ patch: operations['NotificationsController_updateNotificationsV2']
+ }
+ '/v0/notifications/archive-all': {
+ /** Archives all notifications */
+ patch: operations['NotificationsController_archiveAllNotifications']
+ }
+ '/v0/notifications/summary': {
+ /** Get an aggregated data of interest across all notifications for the user */
+ get: operations['NotificationsController_getNotificationsSummary']
}
'/v0/organizations': {
/** Gets user's organizations */
@@ -1182,19 +1216,25 @@ export interface paths {
/** Creates an organization */
post: operations['OrganizationsController_createOrganizationWithTier']
}
- '/v0/organizations/fly/{fly_organization_id}': {
- /** Gets organization linked to fly organization id */
- get: operations['OrganizationsController_getOrganizationByFlyOrganizationId']
- }
'/v0/organizations/{slug}': {
/** Deletes organization */
delete: operations['OrganizationSlugController_deleteOrganization']
/** Updates organization */
patch: operations['OrganizationSlugController_updateOrganization']
}
- '/v0/organizations/{slug}/roles': {
- /** Gets the given organization's roles */
- get: operations['OrganizationRolesController_getAllRolesV2']
+ '/v0/organizations/{slug}/members': {
+ /** Gets organization's members */
+ get: operations['MembersController_getMembers']
+ }
+ '/v0/organizations/{slug}/members/{gotrue_id}': {
+ /** Removes organization member */
+ delete: operations['MembersController_deleteMember']
+ /** Updates organization member role */
+ patch: operations['MembersController_updateMemberRoleV2']
+ }
+ '/v0/organizations/{slug}/members/{gotrue_id}/roles/{role_id}': {
+ /** Removes organization member */
+ delete: operations['MembersController_deleteMemberRole']
}
'/v0/organizations/{slug}/members/invite': {
/**
@@ -1225,19 +1265,13 @@ export interface paths {
*/
post: operations['JoinController_joinOrganization']
}
- '/v0/organizations/{slug}/members': {
- /** Gets organization's members */
- get: operations['MembersController_getMembers']
+ '/v0/organizations/{slug}/roles': {
+ /** Gets the given organization's roles */
+ get: operations['OrganizationRolesController_getAllRolesV2']
}
- '/v0/organizations/{slug}/members/{gotrue_id}': {
- /** Removes organization member */
- delete: operations['MembersController_deleteMember']
- /** Updates organization member role */
- patch: operations['MembersController_updateMemberRoleV2']
- }
- '/v0/organizations/{slug}/members/{gotrue_id}/roles/{role_id}': {
- /** Removes organization member */
- delete: operations['MembersController_deleteMemberRole']
+ '/v0/organizations/fly/{fly_organization_id}': {
+ /** Gets organization linked to fly organization id */
+ get: operations['OrganizationsController_getOrganizationByFlyOrganizationId']
}
'/v0/pg-meta/{ref}/column-privileges': {
/** Retrieve column privileges */
@@ -1335,14 +1369,14 @@ export interface paths {
/** Updates project pg.schema with the given ID */
patch: operations['SchemasController_updateSchema']
}
- '/v0/pg-meta/{ref}/search/tables': {
- /** Searches project pg.tables. Return maximum 50 results. */
- post: operations['SearchController_searchTables']
- }
'/v0/pg-meta/{ref}/search/columns': {
/** Searches project pg.columns. Return maximum 50 results. */
post: operations['SearchController_searchColumns']
}
+ '/v0/pg-meta/{ref}/search/tables': {
+ /** Searches project pg.tables. Return maximum 50 results. */
+ post: operations['SearchController_searchTables']
+ }
'/v0/pg-meta/{ref}/table-privileges': {
/** Retrieve table privileges */
get: operations['TablePrivilegesController_getTablePrivileges']
@@ -1388,17 +1422,137 @@ export interface paths {
/** Creates a project */
post: operations['ProjectsController_createProject']
}
- '/v0/projects/fly/{fly_extension_id}': {
- /** Gets project linked to fly extension id */
- get: operations['ProjectsController_getProjectByFlyExtensionId']
+ '/v0/projects/{ref}': {
+ /** Gets a specific project that belongs to the authenticated user */
+ get: operations['ProjectsRefController_getProject']
+ /** Deletes the given project */
+ delete: operations['ProjectsRefController_deleteProject']
+ /** Updates the given project */
+ patch: operations['ProjectsRefController_updateProject']
}
- '/v0/projects/metrics': {
- /**
- * Get metrics
- * @description At most 50 projects can be queried at a time.
- * Currently supports '1d', '3d', and '7d' intervals.
- */
- get: operations['V0ProjectsMetricsController_getProjectsMetrics']
+ '/v0/projects/{ref}/analytics/endpoints/functions.inv-stats': {
+ /** Gets a project's function invocation statistics */
+ get: operations['FunctionInvocationLogsController_getStatus']
+ }
+ '/v0/projects/{ref}/analytics/endpoints/functions.req-stats': {
+ /** Gets a project's function request statistics */
+ get: operations['FunctionRequestLogsController_getStatus']
+ }
+ '/v0/projects/{ref}/analytics/endpoints/functions.resource-usage': {
+ /** Gets a project's function resource usage */
+ get: operations['FunctionResourceLogsController_getStatus']
+ }
+ '/v0/projects/{ref}/analytics/endpoints/logs.all': {
+ /** Gets project's logs */
+ get: operations['LogsController_getApiPaths']
+ }
+ '/v0/projects/{ref}/analytics/endpoints/usage.api-counts': {
+ /** Gets project's usage api counts */
+ get: operations['UsageApiController_getApiCounts']
+ }
+ '/v0/projects/{ref}/analytics/endpoints/usage.api-requests-count': {
+ /** Gets project's usage api requests count */
+ get: operations['UsageApiController_getApiRequestsCount']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/access-tokens': {
+ /** Lists project's warehouse access tokens from logflare */
+ get: operations['AccessTokenController_listAccessTokens']
+ /** Create a warehouse access token */
+ post: operations['AccessTokenController_createAccessToken']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/access-tokens/{token}': {
+ /** Delete a warehouse access token */
+ delete: operations['AccessTokenController_deleteAccessToken']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/collections': {
+ /** Lists project's warehouse collections from logflare */
+ get: operations['CollectionController_listCollections']
+ /** Create a warehouse collection */
+ post: operations['CollectionController_createCollection']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/collections/{token}': {
+ /** Get a warehouse collection */
+ get: operations['CollectionController_getCollection']
+ /** Delete a warehouse collection */
+ delete: operations['CollectionController_deleteCollection']
+ /** Update a warehouse collection */
+ patch: operations['CollectionController_updateCollection']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/endpoints': {
+ /** Lists project's warehouse endpoints from logflare */
+ get: operations['EndpointController_listEndpoints']
+ /** Create a warehouse endpoint */
+ post: operations['EndpointController_createEndpoint']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/endpoints/{token}': {
+ /** Update a warehouse endpoint */
+ put: operations['EndpointController_updateEndpoint']
+ /** Delete a warehouse endpoint */
+ delete: operations['EndpointController_deleteEndpoint']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/query': {
+ /** Lists project's warehouse queries from logflare */
+ get: operations['WarehouseQueryController_runQuery']
+ }
+ '/v0/projects/{ref}/analytics/warehouse/tenant': {
+ /** Gets project's warehouse tenant from logflare */
+ get: operations['TenantController_getTenant']
+ }
+ '/v0/projects/{ref}/api/graphql': {
+ /** Queries project Graphql */
+ post: operations['ProjectsApiController_projectGraphql']
+ }
+ '/v0/projects/{ref}/api/rest': {
+ /** Gets project OpenApi */
+ get: operations['ProjectsApiController_projectOpenApi']
+ }
+ '/v0/projects/{ref}/billing/addons': {
+ /** Gets project addons */
+ get: operations['ProjectAddonController_getProjectAddons']
+ /** Updates project addon */
+ post: operations['ProjectAddonController_updateAddon']
+ }
+ '/v0/projects/{ref}/billing/addons/{addon_variant}': {
+ /** Removes project addon */
+ delete: operations['ProjectAddonController_removeAddon']
+ }
+ '/v0/projects/{ref}/config/pgbouncer': {
+ /** Gets project's pgbouncer config */
+ get: operations['PgbouncerConfigController_getPgbouncerConfig']
+ /** Updates project's pgbouncer config */
+ patch: operations['PgbouncerConfigController_updatePgbouncerConfig']
+ }
+ '/v0/projects/{ref}/config/pgbouncer/status': {
+ /** Gets project's pgbouncer status */
+ get: operations['PgbouncerConfigController_getPgbouncerStatus']
+ }
+ '/v0/projects/{ref}/config/postgres': {
+ /** Gets project's Postgres config */
+ get: operations['v1-get-postgres-config']
+ /** Updates project's Postgres config */
+ put: operations['v1-update-postgres-config']
+ }
+ '/v0/projects/{ref}/config/postgrest': {
+ /** Gets project's postgrest config */
+ get: operations['PostgrestConfigController_getPostgRESTConfig']
+ /** Updates project's postgrest config */
+ patch: operations['PostgrestConfigController_updatePostgRESTConfig']
+ }
+ '/v0/projects/{ref}/config/secrets': {
+ /** Updates project's secrets config */
+ patch: operations['SecretsConfigController_updateConfig']
+ }
+ '/v0/projects/{ref}/config/storage': {
+ /** Gets project's storage config */
+ get: operations['StorageConfigController_getConfig']
+ /** Updates project's storage config */
+ patch: operations['StorageConfigController_updateConfig']
+ }
+ '/v0/projects/{ref}/config/supavisor': {
+ /** Gets project's supavisor config */
+ get: operations['v1-get-supavisor-config']
+ /** Updates project's supavisor config */
+ patch: operations['v1-update-supavisor-config']
}
'/v0/projects/{ref}/content': {
/**
@@ -1434,6 +1588,10 @@ export interface paths {
/** Updates the database password */
patch: operations['DbPasswordController_updatePassword']
}
+ '/v0/projects/{ref}/infra-monitoring': {
+ /** Gets project's usage metrics */
+ get: operations['InfraMonitoringController_getUsageMetrics']
+ }
'/v0/projects/{ref}/live': {
/** Gets project health check */
get: operations['HealthCheckController_projectHealthCheck']
@@ -1442,18 +1600,6 @@ export interface paths {
/** Gets non-removed databases of a specified project */
get: operations['LoadBalancersController_getLoadBalancers']
}
- '/v0/projects/{ref}/api/rest': {
- /** Gets project OpenApi */
- get: operations['ProjectsApiController_projectOpenApi']
- }
- '/v0/projects/{ref}/api/graphql': {
- /** Queries project Graphql */
- post: operations['ProjectsApiController_projectGraphql']
- }
- '/v0/projects/{ref}/infra-monitoring': {
- /** Gets project's usage metrics */
- get: operations['InfraMonitoringController_getUsageMetrics']
- }
'/v0/projects/{ref}/pause': {
/** Pauses the project */
post: operations['PauseController_pauseProject']
@@ -1470,22 +1616,14 @@ export interface paths {
/** Restarts project */
post: operations['RestartController_restartProject']
}
- '/v0/projects/{ref}': {
- /** Gets a specific project that belongs to the authenticated user */
- get: operations['ProjectsRefController_getProject']
- /** Deletes the given project */
- delete: operations['ProjectsRefController_deleteProject']
- /** Updates the given project */
- patch: operations['ProjectsRefController_updateProject']
+ '/v0/projects/{ref}/restart-services': {
+ /** Restarts given services */
+ post: operations['RestartServicesController_restartServices']
}
'/v0/projects/{ref}/restore': {
/** Restores project */
post: operations['RestoreController_restoreProject']
}
- '/v0/projects/{ref}/restart-services': {
- /** Restarts given services */
- post: operations['RestartServicesController_restartServices']
- }
'/v0/projects/{ref}/settings': {
/** Gets project's settings */
get: operations['SettingsController_getProjectApi']
@@ -1494,121 +1632,27 @@ export interface paths {
/** Gets project's status */
get: operations['ProjectStatusController_getStatus']
}
- '/v0/projects/{ref}/analytics/endpoints/functions.inv-stats': {
- /** Gets a project's function invocation statistics */
- get: operations['FunctionInvocationLogsController_getStatus']
+ '/v0/projects/fly/{fly_extension_id}': {
+ /** Gets project linked to fly extension id */
+ get: operations['ProjectsController_getProjectByFlyExtensionId']
}
- '/v0/projects/{ref}/analytics/endpoints/functions.req-stats': {
- /** Gets a project's function request statistics */
- get: operations['FunctionRequestLogsController_getStatus']
+ '/v0/projects/metrics': {
+ /**
+ * Get metrics
+ * @description At most 50 projects can be queried at a time.
+ * Currently supports '1d', '3d', and '7d' intervals.
+ */
+ get: operations['V0ProjectsMetricsController_getProjectsMetrics']
}
- '/v0/projects/{ref}/analytics/endpoints/functions.resource-usage': {
- /** Gets a project's function resource usage */
- get: operations['FunctionResourceLogsController_getStatus']
+ '/v0/status': {
+ /** Get infrastructure status */
+ get: operations['StatusController_getStatus']
}
- '/v0/projects/{ref}/analytics/endpoints/logs.all': {
- /** Gets project's logs */
- get: operations['LogsController_getApiPaths']
- }
- '/v0/projects/{ref}/analytics/endpoints/usage.api-counts': {
- /** Gets project's usage api counts */
- get: operations['UsageApiController_getApiCounts']
- }
- '/v0/projects/{ref}/analytics/endpoints/usage.api-requests-count': {
- /** Gets project's usage api requests count */
- get: operations['UsageApiController_getApiRequestsCount']
- }
- '/v0/projects/{ref}/analytics/warehouse/tenant': {
- /** Gets project's warehouse tenant from logflare */
- get: operations['TenantController_getTenant']
- }
- '/v0/projects/{ref}/analytics/warehouse/collections': {
- /** Lists project's warehouse collections from logflare */
- get: operations['CollectionController_listCollections']
- /** Create a warehouse collection */
- post: operations['CollectionController_createCollection']
- }
- '/v0/projects/{ref}/analytics/warehouse/collections/{token}': {
- /** Get a warehouse collection */
- get: operations['CollectionController_getCollection']
- /** Delete a warehouse collection */
- delete: operations['CollectionController_deleteCollection']
- /** Update a warehouse collection */
- patch: operations['CollectionController_updateCollection']
- }
- '/v0/projects/{ref}/analytics/warehouse/access-tokens': {
- /** Lists project's warehouse access tokens from logflare */
- get: operations['AccessTokenController_listAccessTokens']
- /** Create a warehouse access token */
- post: operations['AccessTokenController_createAccessToken']
- }
- '/v0/projects/{ref}/analytics/warehouse/access-tokens/{token}': {
- /** Delete a warehouse access token */
- delete: operations['AccessTokenController_deleteAccessToken']
- }
- '/v0/projects/{ref}/analytics/warehouse/endpoints': {
- /** Lists project's warehouse endpoints from logflare */
- get: operations['EndpointController_listEndpoints']
- /** Create a warehouse endpoint */
- post: operations['EndpointController_createEndpoint']
- }
- '/v0/projects/{ref}/analytics/warehouse/endpoints/{token}': {
- /** Update a warehouse endpoint */
- put: operations['EndpointController_updateEndpoint']
- /** Delete a warehouse endpoint */
- delete: operations['EndpointController_deleteEndpoint']
- }
- '/v0/projects/{ref}/analytics/warehouse/query': {
- /** Lists project's warehouse queries from logflare */
- get: operations['WarehouseQueryController_runQuery']
- }
- '/v0/projects/{ref}/config/pgbouncer': {
- /** Gets project's pgbouncer config */
- get: operations['PgbouncerConfigController_getPgbouncerConfig']
- /** Updates project's pgbouncer config */
- patch: operations['PgbouncerConfigController_updatePgbouncerConfig']
- }
- '/v0/projects/{ref}/config/pgbouncer/status': {
- /** Gets project's pgbouncer status */
- get: operations['PgbouncerConfigController_getPgbouncerStatus']
- }
- '/v0/projects/{ref}/config/postgrest': {
- /** Gets project's postgrest config */
- get: operations['PostgrestConfigController_getPostgRESTConfig']
- /** Updates project's postgrest config */
- patch: operations['PostgrestConfigController_updatePostgRESTConfig']
- }
- '/v0/projects/{ref}/config/postgres': {
- /** Gets project's Postgres config */
- get: operations['v1-get-postgres-config']
- /** Updates project's Postgres config */
- put: operations['v1-update-postgres-config']
- }
- '/v0/projects/{ref}/config/secrets': {
- /** Updates project's secrets config */
- patch: operations['SecretsConfigController_updateConfig']
- }
- '/v0/projects/{ref}/config/storage': {
- /** Gets project's storage config */
- get: operations['StorageConfigController_getConfig']
- /** Updates project's storage config */
- patch: operations['StorageConfigController_updateConfig']
- }
- '/v0/projects/{ref}/config/supavisor': {
- /** Gets project's supavisor config */
- get: operations['v1-get-supavisor-config']
- /** Updates project's supavisor config */
- patch: operations['v1-update-supavisor-config']
- }
- '/v0/projects/{ref}/billing/addons': {
- /** Gets project addons */
- get: operations['ProjectAddonController_getProjectAddons']
- /** Updates project addon */
- post: operations['ProjectAddonController_updateAddon']
- }
- '/v0/projects/{ref}/billing/addons/{addon_variant}': {
- /** Removes project addon */
- delete: operations['ProjectAddonController_removeAddon']
+ '/v0/storage/{ref}/buckets': {
+ /** Gets list of buckets */
+ get: operations['StorageBucketsController_getBuckets']
+ /** Create bucket */
+ post: operations['StorageBucketsController_createBucket']
}
'/v0/storage/{ref}/buckets/{id}': {
/** Gets bucket */
@@ -1622,24 +1666,30 @@ export interface paths {
/** Removes all objects inside a single bucket. */
post: operations['StorageBucketIdController_emptyBucket']
}
- '/v0/storage/{ref}/buckets': {
- /** Gets list of buckets */
- get: operations['StorageBucketsController_getBuckets']
- /** Create bucket */
- post: operations['StorageBucketsController_createBucket']
+ '/v0/storage/{ref}/buckets/{id}/objects': {
+ /** Deletes objects */
+ delete: operations['StorageObjectsController_deleteObjects']
+ }
+ '/v0/storage/{ref}/buckets/{id}/objects/copy': {
+ /** Copys object */
+ post: operations['StorageObjectsController_copyObject']
+ }
+ '/v0/storage/{ref}/buckets/{id}/objects/download': {
+ /** Downloads a file from a private bucket */
+ post: operations['StorageObjectsController_download']
}
'/v0/storage/{ref}/buckets/{id}/objects/list': {
/** Gets list of objects with the given bucket */
post: operations['StorageObjectsController_getObjects']
}
+ '/v0/storage/{ref}/buckets/{id}/objects/move': {
+ /** Move object */
+ post: operations['StorageObjectsController_moveObject']
+ }
'/v0/storage/{ref}/buckets/{id}/objects/public-url': {
/** Creates URL for an asset in a public bucket */
post: operations['StorageObjectsController_createPublicUrl']
}
- '/v0/storage/{ref}/buckets/{id}/objects/download': {
- /** Downloads a file from a private bucket */
- post: operations['StorageObjectsController_download']
- }
'/v0/storage/{ref}/buckets/{id}/objects/sign': {
/** Creates a signed URL */
post: operations['StorageObjectsController_createSignedUrl']
@@ -1648,18 +1698,6 @@ export interface paths {
/** Gets multiple signed URLs */
post: operations['StorageObjectsController_createSignedUrls']
}
- '/v0/storage/{ref}/buckets/{id}/objects/copy': {
- /** Copys object */
- post: operations['StorageObjectsController_copyObject']
- }
- '/v0/storage/{ref}/buckets/{id}/objects/move': {
- /** Move object */
- post: operations['StorageObjectsController_moveObject']
- }
- '/v0/storage/{ref}/buckets/{id}/objects': {
- /** Deletes objects */
- delete: operations['StorageObjectsController_deleteObjects']
- }
'/v0/storage/{ref}/credentials': {
/** Gets project storage credentials */
get: operations['StorageS3CredentialsController_getAllCredentials']
@@ -1694,6 +1732,31 @@ export interface paths {
*/
post: operations['v1-reset-a-branch']
}
+ '/v1/oauth/authorize': {
+ /** [Beta] Authorize user through oauth */
+ get: operations['v1-authorize-user']
+ }
+ '/v1/oauth/token': {
+ /** [Beta] Exchange auth code for user's access and refresh token */
+ post: operations['v1-exchange-oauth-token']
+ }
+ '/v1/organizations': {
+ /**
+ * List all organizations
+ * @description Returns a list of organizations that you currently belong to.
+ */
+ get: operations['v1-list-all-organizations']
+ /** Create an organization */
+ post: operations['v1-create-an-organization']
+ }
+ '/v1/organizations/{slug}': {
+ /** Gets information about the organization */
+ get: operations['v1-get-an-organization']
+ }
+ '/v1/organizations/{slug}/members': {
+ /** List members of an organization */
+ get: operations['v1-list-organization-members']
+ }
'/v1/projects': {
/**
* List all projects
@@ -1703,6 +1766,10 @@ export interface paths {
/** Create a project */
post: operations['v1-create-a-project']
}
+ '/v1/projects/{ref}': {
+ /** Deletes the given project */
+ delete: operations['v1-Delete a project']
+ }
'/v1/projects/{ref}/api-keys': {
/** Get project api keys */
get: operations['v1-get-project-api-keys']
@@ -1724,148 +1791,6 @@ export interface paths {
*/
delete: operations['v1-disable-preview-branching']
}
- '/v1/projects/{ref}/custom-hostname': {
- /** [Beta] Gets project's custom hostname config */
- get: operations['v1-get-hostname-config']
- /** [Beta] Deletes a project's custom hostname configuration */
- delete: operations['v1-Delete hostname config']
- }
- '/v1/projects/{ref}/custom-hostname/initialize': {
- /** [Beta] Updates project's custom hostname configuration */
- post: operations['v1-update-hostname-config']
- }
- '/v1/projects/{ref}/custom-hostname/reverify': {
- /** [Beta] Attempts to verify the DNS configuration for project's custom hostname configuration */
- post: operations['v1-verify-dns-config']
- }
- '/v1/projects/{ref}/custom-hostname/activate': {
- /** [Beta] Activates a custom hostname for a project. */
- post: operations['v1-activate-custom-hostname']
- }
- '/v1/projects/{ref}/network-bans/retrieve': {
- /** [Beta] Gets project's network bans */
- post: operations['v1-list-all-network-bans']
- }
- '/v1/projects/{ref}/network-bans': {
- /** [Beta] Remove network bans. */
- delete: operations['v1-delete-network-bans']
- }
- '/v1/projects/{ref}/network-restrictions': {
- /** [Beta] Gets project's network restrictions */
- get: operations['v1-get-network-restrictions']
- }
- '/v1/projects/{ref}/network-restrictions/apply': {
- /** [Beta] Updates project's network restrictions */
- post: operations['v1-update-network-restrictions']
- }
- '/v1/projects/{ref}/pgsodium': {
- /** [Beta] Gets project's pgsodium config */
- get: operations['v1-get-pgsodium-config']
- /** [Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */
- put: operations['v1-update-pgsodium-config']
- }
- '/v1/projects/{ref}/postgrest': {
- /** Gets project's postgrest config */
- get: operations['v1-get-postgrest-service-config']
- /** Updates project's postgrest config */
- patch: operations['v1-update-postgrest-service-config']
- }
- '/v1/projects/{ref}': {
- /** Deletes the given project */
- delete: operations['v1-Delete a project']
- }
- '/v1/projects/{ref}/secrets': {
- /**
- * List all secrets
- * @description Returns all secrets you've previously added to the specified project.
- */
- get: operations['v1-list-all-secrets']
- /**
- * Bulk create secrets
- * @description Creates multiple secrets and adds them to the specified project.
- */
- post: operations['v1-bulk-create-secrets']
- /**
- * Bulk delete secrets
- * @description Deletes all secrets with the given names from the specified project
- */
- delete: operations['v1-bulk-delete-secrets']
- }
- '/v1/projects/{ref}/ssl-enforcement': {
- /** [Beta] Get project's SSL enforcement configuration. */
- get: operations['v1-get-ssl-enforcement-config']
- /** [Beta] Update project's SSL enforcement configuration. */
- put: operations['v1-update-ssl-enforcement-config']
- }
- '/v1/projects/{ref}/types/typescript': {
- /**
- * Generate TypeScript types
- * @description Returns the TypeScript types of your schema for use with supabase-js.
- */
- get: operations['v1-generate-typescript-types']
- }
- '/v1/projects/{ref}/vanity-subdomain': {
- /** [Beta] Gets current vanity subdomain config */
- get: operations['v1-get-vanity-subdomain-config']
- /** [Beta] Deletes a project's vanity subdomain configuration */
- delete: operations['v1-deactivate-vanity-subdomain-config']
- }
- '/v1/projects/{ref}/vanity-subdomain/check-availability': {
- /** [Beta] Checks vanity subdomain availability */
- post: operations['v1-check-vanity-subdomain-availability']
- }
- '/v1/projects/{ref}/vanity-subdomain/activate': {
- /** [Beta] Activates a vanity subdomain for a project. */
- post: operations['v1-activate-vanity-subdomain-config']
- }
- '/v1/projects/{ref}/upgrade': {
- /** [Beta] Upgrades the project's Postgres version */
- post: operations['v1-upgrade-postgres-version']
- }
- '/v1/projects/{ref}/upgrade/eligibility': {
- /** [Beta] Returns the project's eligibility for upgrades */
- get: operations['v1-get-postgrest-upgrade-eligibility']
- }
- '/v1/projects/{ref}/upgrade/status': {
- /** [Beta] Gets the latest status of the project's upgrade */
- get: operations['v1-get-postgrest-upgrade-status']
- }
- '/v1/projects/{ref}/readonly': {
- /** Returns project's readonly mode status */
- get: operations['v1-get-readonly-mode-status']
- }
- '/v1/projects/{ref}/readonly/temporary-disable': {
- /** Disables project's readonly mode for the next 15 minutes */
- post: operations['v1-disable-readonly-mode-temporarily']
- }
- '/v1/projects/{ref}/read-replicas/setup': {
- /** [Beta] Set up a read replica */
- post: operations['v1-setup-a-read-replica']
- }
- '/v1/projects/{ref}/read-replicas/remove': {
- /** [Beta] Remove a read replica */
- post: operations['v1-remove-a-read-replica']
- }
- '/v1/projects/{ref}/health': {
- /** Gets project's service health status */
- get: operations['v1-get-services-health']
- }
- '/v1/projects/{ref}/config/database/postgres': {
- /** Gets project's Postgres config */
- get: operations['v1-get-postgres-config']
- /** Updates project's Postgres config */
- put: operations['v1-update-postgres-config']
- }
- '/v1/projects/{ref}/config/database/pgbouncer': {
- /** Get project's pgbouncer config */
- get: operations['v1-get-project-pgbouncer-config']
- }
- '/v1/projects/{ref}/config/database/pooler': {
- /** Gets project's supavisor config */
- get: operations['v1-get-supavisor-config']
- /** Updates project's supavisor config */
- patch: operations['v1-update-supavisor-config']
- }
'/v1/projects/{ref}/config/auth': {
/** Gets project's auth config */
get: operations['v1-get-auth-service-config']
@@ -1886,13 +1811,39 @@ export interface paths {
/** Removes a SSO provider by its UUID */
delete: operations['v1-delete-a-sso-provider']
}
- '/v1/projects/{ref}/database/query': {
- /** [Beta] Run sql query */
- post: operations['v1-run-a-query']
+ '/v1/projects/{ref}/config/database/pgbouncer': {
+ /** Get project's pgbouncer config */
+ get: operations['v1-get-project-pgbouncer-config']
}
- '/v1/projects/{ref}/database/webhooks/enable': {
- /** [Beta] Enables Database Webhooks on the project */
- post: operations['v1-enable-database-webhook']
+ '/v1/projects/{ref}/config/database/pooler': {
+ /** Gets project's supavisor config */
+ get: operations['v1-get-supavisor-config']
+ /** Updates project's supavisor config */
+ patch: operations['v1-update-supavisor-config']
+ }
+ '/v1/projects/{ref}/config/database/postgres': {
+ /** Gets project's Postgres config */
+ get: operations['v1-get-postgres-config']
+ /** Updates project's Postgres config */
+ put: operations['v1-update-postgres-config']
+ }
+ '/v1/projects/{ref}/custom-hostname': {
+ /** [Beta] Gets project's custom hostname config */
+ get: operations['v1-get-hostname-config']
+ /** [Beta] Deletes a project's custom hostname configuration */
+ delete: operations['v1-Delete hostname config']
+ }
+ '/v1/projects/{ref}/custom-hostname/activate': {
+ /** [Beta] Activates a custom hostname for a project. */
+ post: operations['v1-activate-custom-hostname']
+ }
+ '/v1/projects/{ref}/custom-hostname/initialize': {
+ /** [Beta] Updates project's custom hostname configuration */
+ post: operations['v1-update-hostname-config']
+ }
+ '/v1/projects/{ref}/custom-hostname/reverify': {
+ /** [Beta] Attempts to verify the DNS configuration for project's custom hostname configuration */
+ post: operations['v1-verify-dns-config']
}
'/v1/projects/{ref}/database/backups': {
/** Lists all backups */
@@ -1902,6 +1853,14 @@ export interface paths {
/** Restores a PITR backup for a database */
post: operations['v1-restore-pitr-backup']
}
+ '/v1/projects/{ref}/database/query': {
+ /** [Beta] Run sql query */
+ post: operations['v1-run-a-query']
+ }
+ '/v1/projects/{ref}/database/webhooks/enable': {
+ /** [Beta] Enables Database Webhooks on the project */
+ post: operations['v1-enable-database-webhook']
+ }
'/v1/projects/{ref}/functions': {
/**
* List all functions
@@ -1938,34 +1897,113 @@ export interface paths {
*/
get: operations['v1-get-a-function-body']
}
+ '/v1/projects/{ref}/health': {
+ /** Gets project's service health status */
+ get: operations['v1-get-services-health']
+ }
+ '/v1/projects/{ref}/network-bans': {
+ /** [Beta] Remove network bans. */
+ delete: operations['v1-delete-network-bans']
+ }
+ '/v1/projects/{ref}/network-bans/retrieve': {
+ /** [Beta] Gets project's network bans */
+ post: operations['v1-list-all-network-bans']
+ }
+ '/v1/projects/{ref}/network-restrictions': {
+ /** [Beta] Gets project's network restrictions */
+ get: operations['v1-get-network-restrictions']
+ }
+ '/v1/projects/{ref}/network-restrictions/apply': {
+ /** [Beta] Updates project's network restrictions */
+ post: operations['v1-update-network-restrictions']
+ }
+ '/v1/projects/{ref}/pgsodium': {
+ /** [Beta] Gets project's pgsodium config */
+ get: operations['v1-get-pgsodium-config']
+ /** [Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */
+ put: operations['v1-update-pgsodium-config']
+ }
+ '/v1/projects/{ref}/postgrest': {
+ /** Gets project's postgrest config */
+ get: operations['v1-get-postgrest-service-config']
+ /** Updates project's postgrest config */
+ patch: operations['v1-update-postgrest-service-config']
+ }
+ '/v1/projects/{ref}/read-replicas/remove': {
+ /** [Beta] Remove a read replica */
+ post: operations['v1-remove-a-read-replica']
+ }
+ '/v1/projects/{ref}/read-replicas/setup': {
+ /** [Beta] Set up a read replica */
+ post: operations['v1-setup-a-read-replica']
+ }
+ '/v1/projects/{ref}/readonly': {
+ /** Returns project's readonly mode status */
+ get: operations['v1-get-readonly-mode-status']
+ }
+ '/v1/projects/{ref}/readonly/temporary-disable': {
+ /** Disables project's readonly mode for the next 15 minutes */
+ post: operations['v1-disable-readonly-mode-temporarily']
+ }
+ '/v1/projects/{ref}/secrets': {
+ /**
+ * List all secrets
+ * @description Returns all secrets you've previously added to the specified project.
+ */
+ get: operations['v1-list-all-secrets']
+ /**
+ * Bulk create secrets
+ * @description Creates multiple secrets and adds them to the specified project.
+ */
+ post: operations['v1-bulk-create-secrets']
+ /**
+ * Bulk delete secrets
+ * @description Deletes all secrets with the given names from the specified project
+ */
+ delete: operations['v1-bulk-delete-secrets']
+ }
+ '/v1/projects/{ref}/ssl-enforcement': {
+ /** [Beta] Get project's SSL enforcement configuration. */
+ get: operations['v1-get-ssl-enforcement-config']
+ /** [Beta] Update project's SSL enforcement configuration. */
+ put: operations['v1-update-ssl-enforcement-config']
+ }
'/v1/projects/{ref}/storage/buckets': {
/** Lists all buckets */
get: operations['v1-list-all-buckets']
}
- '/v1/organizations': {
+ '/v1/projects/{ref}/types/typescript': {
/**
- * List all organizations
- * @description Returns a list of organizations that you currently belong to.
+ * Generate TypeScript types
+ * @description Returns the TypeScript types of your schema for use with supabase-js.
*/
- get: operations['v1-list-all-organizations']
- /** Create an organization */
- post: operations['v1-create-an-organization']
+ get: operations['v1-generate-typescript-types']
}
- '/v1/organizations/{slug}/members': {
- /** List members of an organization */
- get: operations['v1-list-organization-members']
+ '/v1/projects/{ref}/upgrade': {
+ /** [Beta] Upgrades the project's Postgres version */
+ post: operations['v1-upgrade-postgres-version']
}
- '/v1/organizations/{slug}': {
- /** Gets information about the organization */
- get: operations['v1-get-an-organization']
+ '/v1/projects/{ref}/upgrade/eligibility': {
+ /** [Beta] Returns the project's eligibility for upgrades */
+ get: operations['v1-get-postgrest-upgrade-eligibility']
}
- '/v1/oauth/authorize': {
- /** [Beta] Authorize user through oauth */
- get: operations['v1-authorize-user']
+ '/v1/projects/{ref}/upgrade/status': {
+ /** [Beta] Gets the latest status of the project's upgrade */
+ get: operations['v1-get-postgrest-upgrade-status']
}
- '/v1/oauth/token': {
- /** [Beta] Exchange auth code for user's access and refresh token */
- post: operations['v1-exchange-oauth-token']
+ '/v1/projects/{ref}/vanity-subdomain': {
+ /** [Beta] Gets current vanity subdomain config */
+ get: operations['v1-get-vanity-subdomain-config']
+ /** [Beta] Deletes a project's vanity subdomain configuration */
+ delete: operations['v1-deactivate-vanity-subdomain-config']
+ }
+ '/v1/projects/{ref}/vanity-subdomain/activate': {
+ /** [Beta] Activates a vanity subdomain for a project. */
+ post: operations['v1-activate-vanity-subdomain-config']
+ }
+ '/v1/projects/{ref}/vanity-subdomain/check-availability': {
+ /** [Beta] Checks vanity subdomain availability */
+ post: operations['v1-check-vanity-subdomain-availability']
}
'/v1/snippets': {
/** Lists SQL snippets for the logged in user */
@@ -1975,845 +2013,23 @@ export interface paths {
/** Gets a specific SQL snippet */
get: operations['v1-get-a-snippet']
}
- '/partners/flyio/callback': {
- /** Redirects to Supabase dashboard after completing Fly sso */
- get: operations['CallbackController_redirectToDashboardFlyioExtensionScreen']
- }
- '/partners/flyio/extensions/{extension_id}': {
- /** Gets database status */
- get: operations['ExtensionController_getResourceStatus']
- /** Deletes a database */
- delete: operations['ExtensionController_deleteResource']
- }
- '/partners/flyio/extensions/{extension_id}/sso': {
- /** Starts Fly single sign on */
- get: operations['ExtensionController_startFlyioSSO']
- }
- '/partners/flyio/extensions': {
- /** Creates a database */
- post: operations['FlyExtensionsController_provisionResource']
- }
- '/partners/flyio/organizations/{organization_id}': {
- /** Gets details of the organization linked to the provided Fly organization id */
- get: operations['FlyOrganizationsController_getOrganization']
- }
- '/partners/flyio/organizations/{organization_id}/extensions': {
- /** Gets all databases that belong to the given Fly organization id */
- get: operations['FlyOrganizationsController_getOrgExtensions']
- }
- '/partners/flyio/organizations/{organization_id}/sso': {
- /** Starts Fly single sign on */
- get: operations['FlyOrganizationsController_startFlyioSSO']
- }
- '/partners/flyio/organizations/{organization_id}/subscription': {
- /** Updates organization subscription linked to the provided Fly organization id */
- put: operations['FlyOrganizationsController_updateOrganization']
- }
- '/partners/flyio/organizations/{organization_id}/billing': {
- /** Gets the organizations current unbilled charges */
- get: operations['FlyBillingController_getResourceBilling']
- }
}
export type webhooks = Record
export interface components {
schemas: {
- NotificationResponseV1: {
- id: string
- inserted_at: string
- project_id: number
- notification_name: string
- notification_status: string
- data: Record
- meta: Record
- }
- UpdateNotificationsBodyV1: {
- ids: string[]
- }
- NotificationAction: {
- label: string
- url?: string
- action_type?: string
- }
- NotificationData: {
- org_slug?: string
- project_ref?: string
- title: string
- message?: string
- actions?: components['schemas']['NotificationAction'][]
- }
- NotificationResponseV2: {
+ AccessToken: {
+ created_at: string
+ id: number
+ name: string
/** @enum {string} */
- status: 'new' | 'seen' | 'archived'
- /** @enum {string} */
- priority: 'Critical' | 'Warning' | 'Info'
- data: components['schemas']['NotificationData']
- id: string
- inserted_at: string
- name: string
- meta: Record
+ scope?: 'V0'
+ token_alias: string
}
- NotificationsSummary: {
- unread_count: number
- has_warning: boolean
- has_critical: boolean
+ ActivateVanitySubdomainResponse: {
+ custom_domain: string
}
- UpdateNotificationBodyV2: {
- id: string
- /** @enum {string} */
- status: 'new' | 'seen' | 'archived'
- }
- ResetPasswordBody: {
- email: string
- redirectTo?: string
- }
- SendFeedbackBody: {
- message: string
- affectedServices?: string
- library?: string
- category: string
- subject?: string
- tags: string[]
- additionalRedirectUrls?: string
- pathname?: string
- projectRef?: string
- organizationSlug?: string
- severity?: string
- siteUrl?: string
- urlToAirTable?: string
- allowSupportAccess?: boolean
- verified?: boolean
- browserInformation?: string
- }
- SendFeedbackResponse: {
- result: string
- }
- SendExitSurveyBody: {
- projectRef?: string
- orgSlug?: string
- reasons: string
- additionalFeedback?: string
- exitAction?: string
- }
- SendUpgradeSurveyBody: {
- orgSlug?: string
- prevPlan?: string
- currentPlan?: string
- reasons: string[]
- additionalFeedback?: string
- }
- SendDocsFeedbackBody: {
- page: string
- isHelpful: boolean
- title: string
- feedback?: string
- team?: string
- }
- SignUpBody: {
- email: string
- password: string
- redirectTo?: string
- }
- ProjectResourceWarningsResponse: {
- /** @enum {string|null} */
- need_pitr: 'critical' | 'warning' | null
- /** @enum {string|null} */
- disk_io_exhaustion: 'critical' | 'warning' | null
- /** @enum {string|null} */
- disk_space_exhaustion: 'critical' | 'warning' | null
- /** @enum {string|null} */
- cpu_exhaustion: 'critical' | 'warning' | null
- /** @enum {string|null} */
- memory_and_swap_exhaustion: 'critical' | 'warning' | null
- /** @enum {string|null} */
- auth_rate_limit_exhaustion: 'critical' | 'warning' | null
- project: string
- is_readonly_mode_enabled: boolean
- }
- GoTrueConfigResponse: {
- SITE_URL: string
- DISABLE_SIGNUP: boolean
- JWT_EXP: number
- SMTP_ADMIN_EMAIL: string
- SMTP_HOST: string
- SMTP_PORT: string
- SMTP_USER: string
- SMTP_PASS: string
- SMTP_MAX_FREQUENCY: number
- SMTP_SENDER_NAME: string
- MAILER_AUTOCONFIRM: boolean
- MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS: boolean
- MAILER_SUBJECTS_INVITE: string
- MAILER_SUBJECTS_CONFIRMATION: string
- MAILER_SUBJECTS_RECOVERY: string
- MAILER_SUBJECTS_EMAIL_CHANGE: string
- MAILER_SUBJECTS_MAGIC_LINK: string
- MAILER_SUBJECTS_REAUTHENTICATION: string
- MAILER_TEMPLATES_INVITE_CONTENT: string
- MAILER_TEMPLATES_CONFIRMATION_CONTENT: string
- MAILER_TEMPLATES_RECOVERY_CONTENT: string
- MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT: string
- MAILER_TEMPLATES_MAGIC_LINK_CONTENT: string
- MAILER_TEMPLATES_REAUTHENTICATION_CONTENT: string
- MFA_MAX_ENROLLED_FACTORS: number
- URI_ALLOW_LIST: string
- EXTERNAL_ANONYMOUS_USERS_ENABLED: boolean
- EXTERNAL_EMAIL_ENABLED: boolean
- EXTERNAL_PHONE_ENABLED: boolean
- SAML_ENABLED: boolean
- SECURITY_CAPTCHA_ENABLED: boolean
- SECURITY_CAPTCHA_PROVIDER: string
- SECURITY_CAPTCHA_SECRET: string
- SESSIONS_TIMEBOX: number
- SESSIONS_INACTIVITY_TIMEOUT: number
- SESSIONS_SINGLE_PER_USER: boolean
- SESSIONS_TAGS: string
- RATE_LIMIT_ANONYMOUS_USERS: number
- RATE_LIMIT_EMAIL_SENT: number
- RATE_LIMIT_SMS_SENT: number
- RATE_LIMIT_VERIFY: number
- RATE_LIMIT_TOKEN_REFRESH: number
- MAILER_SECURE_EMAIL_CHANGE_ENABLED: boolean
- REFRESH_TOKEN_ROTATION_ENABLED: boolean
- PASSWORD_HIBP_ENABLED: boolean
- PASSWORD_MIN_LENGTH: number
- PASSWORD_REQUIRED_CHARACTERS: string
- SECURITY_MANUAL_LINKING_ENABLED: boolean
- SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION: boolean
- SECURITY_REFRESH_TOKEN_REUSE_INTERVAL: number
- MAILER_OTP_EXP: number
- MAILER_OTP_LENGTH: number
- SMS_AUTOCONFIRM: boolean
- SMS_MAX_FREQUENCY: number
- SMS_OTP_EXP: number
- SMS_OTP_LENGTH: number
- SMS_PROVIDER: string
- SMS_MESSAGEBIRD_ACCESS_KEY: string
- SMS_MESSAGEBIRD_ORIGINATOR: string
- SMS_TEXTLOCAL_API_KEY: string
- SMS_TEXTLOCAL_SENDER: string
- SMS_TWILIO_ACCOUNT_SID: string
- SMS_TWILIO_AUTH_TOKEN: string
- SMS_TWILIO_CONTENT_SID: string
- SMS_TWILIO_MESSAGE_SERVICE_SID: string
- SMS_TWILIO_VERIFY_ACCOUNT_SID: string
- SMS_TWILIO_VERIFY_AUTH_TOKEN: string
- SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID: string
- SMS_VONAGE_API_KEY: string
- SMS_VONAGE_API_SECRET: string
- SMS_VONAGE_FROM: string
- SMS_TEMPLATE: string
- SMS_TEST_OTP: string
- SMS_TEST_OTP_VALID_UNTIL: string
- HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED: boolean
- HOOK_MFA_VERIFICATION_ATTEMPT_URI: string
- HOOK_MFA_VERIFICATION_ATTEMPT_SECRETS: string
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED: boolean
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI: string
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_SECRETS: string
- HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: boolean
- HOOK_CUSTOM_ACCESS_TOKEN_URI: string
- HOOK_CUSTOM_ACCESS_TOKEN_SECRETS: string
- HOOK_SEND_SMS_ENABLED: boolean
- HOOK_SEND_SMS_URI: string
- HOOK_SEND_SMS_SECRETS: string
- HOOK_SEND_EMAIL_ENABLED: boolean
- HOOK_SEND_EMAIL_URI: string
- HOOK_SEND_EMAIL_SECRETS: string
- EXTERNAL_APPLE_ENABLED: boolean
- EXTERNAL_APPLE_CLIENT_ID: string
- EXTERNAL_APPLE_SECRET: string
- EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS: string
- EXTERNAL_AZURE_ENABLED: boolean
- EXTERNAL_AZURE_CLIENT_ID: string
- EXTERNAL_AZURE_SECRET: string
- EXTERNAL_AZURE_URL: string
- EXTERNAL_BITBUCKET_ENABLED: boolean
- EXTERNAL_BITBUCKET_CLIENT_ID: string
- EXTERNAL_BITBUCKET_SECRET: string
- EXTERNAL_DISCORD_ENABLED: boolean
- EXTERNAL_DISCORD_CLIENT_ID: string
- EXTERNAL_DISCORD_SECRET: string
- EXTERNAL_FACEBOOK_ENABLED: boolean
- EXTERNAL_FACEBOOK_CLIENT_ID: string
- EXTERNAL_FACEBOOK_SECRET: string
- EXTERNAL_FIGMA_ENABLED: boolean
- EXTERNAL_FIGMA_CLIENT_ID: string
- EXTERNAL_FIGMA_SECRET: string
- EXTERNAL_GITHUB_ENABLED: boolean
- EXTERNAL_GITHUB_CLIENT_ID: string
- EXTERNAL_GITHUB_SECRET: string
- EXTERNAL_GITLAB_ENABLED: boolean
- EXTERNAL_GITLAB_CLIENT_ID: string
- EXTERNAL_GITLAB_SECRET: string
- EXTERNAL_GITLAB_URL: string
- EXTERNAL_GOOGLE_ENABLED: boolean
- EXTERNAL_GOOGLE_CLIENT_ID: string
- EXTERNAL_GOOGLE_SECRET: string
- EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS: string
- EXTERNAL_GOOGLE_SKIP_NONCE_CHECK: boolean
- EXTERNAL_KAKAO_ENABLED: boolean
- EXTERNAL_KAKAO_CLIENT_ID: string
- EXTERNAL_KAKAO_SECRET: string
- EXTERNAL_KEYCLOAK_ENABLED: boolean
- EXTERNAL_KEYCLOAK_CLIENT_ID: string
- EXTERNAL_KEYCLOAK_SECRET: string
- EXTERNAL_KEYCLOAK_URL: string
- EXTERNAL_LINKEDIN_OIDC_ENABLED: boolean
- EXTERNAL_LINKEDIN_OIDC_CLIENT_ID: string
- EXTERNAL_LINKEDIN_OIDC_SECRET: string
- EXTERNAL_NOTION_ENABLED: boolean
- EXTERNAL_NOTION_CLIENT_ID: string
- EXTERNAL_NOTION_SECRET: string
- EXTERNAL_SLACK_ENABLED: boolean
- EXTERNAL_SLACK_CLIENT_ID: string
- EXTERNAL_SLACK_SECRET: string
- EXTERNAL_SPOTIFY_ENABLED: boolean
- EXTERNAL_SPOTIFY_CLIENT_ID: string
- EXTERNAL_SPOTIFY_SECRET: string
- EXTERNAL_TWITCH_ENABLED: boolean
- EXTERNAL_TWITCH_CLIENT_ID: string
- EXTERNAL_TWITCH_SECRET: string
- EXTERNAL_TWITTER_ENABLED: boolean
- EXTERNAL_TWITTER_CLIENT_ID: string
- EXTERNAL_TWITTER_SECRET: string
- EXTERNAL_WORKOS_ENABLED: boolean
- EXTERNAL_WORKOS_CLIENT_ID: string
- EXTERNAL_WORKOS_SECRET: string
- EXTERNAL_WORKOS_URL: string
- EXTERNAL_ZOOM_ENABLED: boolean
- EXTERNAL_ZOOM_CLIENT_ID: string
- EXTERNAL_ZOOM_SECRET: string
- DB_MAX_POOL_SIZE: number | null
- API_MAX_REQUEST_DURATION: number | null
- }
- UpdateGoTrueConfigBody: {
- SITE_URL?: string
- DISABLE_SIGNUP?: boolean
- JWT_EXP?: number
- SMTP_ADMIN_EMAIL?: string
- SMTP_HOST?: string
- SMTP_PORT?: string
- SMTP_USER?: string
- SMTP_PASS?: string
- SMTP_MAX_FREQUENCY?: number
- SMTP_SENDER_NAME?: string
- MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS?: boolean
- MAILER_AUTOCONFIRM?: boolean
- MAILER_SUBJECTS_INVITE?: string
- MAILER_SUBJECTS_CONFIRMATION?: string
- MAILER_SUBJECTS_RECOVERY?: string
- MAILER_SUBJECTS_EMAIL_CHANGE?: string
- MAILER_SUBJECTS_MAGIC_LINK?: string
- MAILER_SUBJECTS_REAUTHENTICATION?: string
- MAILER_TEMPLATES_INVITE_CONTENT?: string
- MAILER_TEMPLATES_REAUTHENTICATION_CONTENT?: string
- MAILER_TEMPLATES_CONFIRMATION_CONTENT?: string
- MAILER_TEMPLATES_RECOVERY_CONTENT?: string
- MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT?: string
- MAILER_TEMPLATES_MAGIC_LINK_CONTENT?: string
- MFA_MAX_ENROLLED_FACTORS?: number
- URI_ALLOW_LIST?: string
- EXTERNAL_ANONYMOUS_USERS_ENABLED?: boolean
- EXTERNAL_EMAIL_ENABLED?: boolean
- EXTERNAL_PHONE_ENABLED?: boolean
- SAML_ENABLED?: boolean
- SECURITY_CAPTCHA_ENABLED?: boolean
- SECURITY_CAPTCHA_PROVIDER?: string
- SECURITY_CAPTCHA_SECRET?: string
- SESSIONS_TIMEBOX?: number
- SESSIONS_INACTIVITY_TIMEOUT?: number
- SESSIONS_SINGLE_PER_USER?: boolean
- SESSIONS_TAGS?: string
- RATE_LIMIT_ANONYMOUS_USERS?: number
- RATE_LIMIT_EMAIL_SENT?: number
- RATE_LIMIT_SMS_SENT?: number
- RATE_LIMIT_VERIFY?: number
- RATE_LIMIT_TOKEN_REFRESH?: number
- MAILER_SECURE_EMAIL_CHANGE_ENABLED?: boolean
- REFRESH_TOKEN_ROTATION_ENABLED?: boolean
- PASSWORD_HIBP_ENABLED?: boolean
- PASSWORD_MIN_LENGTH?: number
- /** @enum {string} */
- PASSWORD_REQUIRED_CHARACTERS?:
- | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
- | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
- | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~'
- | ''
- SECURITY_MANUAL_LINKING_ENABLED?: boolean
- SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION?: boolean
- SECURITY_REFRESH_TOKEN_REUSE_INTERVAL?: number
- MAILER_OTP_EXP?: number
- MAILER_OTP_LENGTH?: number
- SMS_AUTOCONFIRM?: boolean
- SMS_MAX_FREQUENCY?: number
- SMS_OTP_EXP?: number
- SMS_OTP_LENGTH?: number
- SMS_PROVIDER?: string
- SMS_MESSAGEBIRD_ACCESS_KEY?: string
- SMS_MESSAGEBIRD_ORIGINATOR?: string
- SMS_TEST_OTP?: string
- SMS_TEST_OTP_VALID_UNTIL?: string
- SMS_TEXTLOCAL_API_KEY?: string
- SMS_TEXTLOCAL_SENDER?: string
- SMS_TWILIO_ACCOUNT_SID?: string
- SMS_TWILIO_AUTH_TOKEN?: string
- SMS_TWILIO_CONTENT_SID?: string
- SMS_TWILIO_MESSAGE_SERVICE_SID?: string
- SMS_TWILIO_VERIFY_ACCOUNT_SID?: string
- SMS_TWILIO_VERIFY_AUTH_TOKEN?: string
- SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID?: string
- SMS_VONAGE_API_KEY?: string
- SMS_VONAGE_API_SECRET?: string
- SMS_VONAGE_FROM?: string
- SMS_TEMPLATE?: string
- HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED?: boolean
- HOOK_MFA_VERIFICATION_ATTEMPT_URI?: string
- HOOK_MFA_VERIFICATION_ATTEMPT_SECRETS?: string
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED?: boolean
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI?: string
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_SECRETS?: string
- HOOK_CUSTOM_ACCESS_TOKEN_ENABLED?: boolean
- HOOK_CUSTOM_ACCESS_TOKEN_URI?: string
- HOOK_CUSTOM_ACCESS_TOKEN_SECRETS?: string
- HOOK_SEND_SMS_ENABLED?: boolean
- HOOK_SEND_SMS_URI?: string
- HOOK_SEND_SMS_SECRETS?: string
- HOOK_SEND_EMAIL_ENABLED?: boolean
- HOOK_SEND_EMAIL_URI?: string
- HOOK_SEND_EMAIL_SECRETS?: string
- EXTERNAL_APPLE_ENABLED?: boolean
- EXTERNAL_APPLE_CLIENT_ID?: string
- EXTERNAL_APPLE_SECRET?: string
- EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS?: string
- EXTERNAL_AZURE_ENABLED?: boolean
- EXTERNAL_AZURE_CLIENT_ID?: string
- EXTERNAL_AZURE_SECRET?: string
- EXTERNAL_AZURE_URL?: string
- EXTERNAL_BITBUCKET_ENABLED?: boolean
- EXTERNAL_BITBUCKET_CLIENT_ID?: string
- EXTERNAL_BITBUCKET_SECRET?: string
- EXTERNAL_DISCORD_ENABLED?: boolean
- EXTERNAL_DISCORD_CLIENT_ID?: string
- EXTERNAL_DISCORD_SECRET?: string
- EXTERNAL_FACEBOOK_ENABLED?: boolean
- EXTERNAL_FACEBOOK_CLIENT_ID?: string
- EXTERNAL_FACEBOOK_SECRET?: string
- EXTERNAL_FIGMA_ENABLED?: boolean
- EXTERNAL_FIGMA_CLIENT_ID?: string
- EXTERNAL_FIGMA_SECRET?: string
- EXTERNAL_GITHUB_ENABLED?: boolean
- EXTERNAL_GITHUB_CLIENT_ID?: string
- EXTERNAL_GITHUB_SECRET?: string
- EXTERNAL_GITLAB_ENABLED?: boolean
- EXTERNAL_GITLAB_CLIENT_ID?: string
- EXTERNAL_GITLAB_SECRET?: string
- EXTERNAL_GITLAB_URL?: string
- EXTERNAL_GOOGLE_ENABLED?: boolean
- EXTERNAL_GOOGLE_CLIENT_ID?: string
- EXTERNAL_GOOGLE_SECRET?: string
- EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS?: string
- EXTERNAL_GOOGLE_SKIP_NONCE_CHECK?: boolean
- EXTERNAL_KAKAO_ENABLED?: boolean
- EXTERNAL_KAKAO_CLIENT_ID?: string
- EXTERNAL_KAKAO_SECRET?: string
- EXTERNAL_KEYCLOAK_ENABLED?: boolean
- EXTERNAL_KEYCLOAK_CLIENT_ID?: string
- EXTERNAL_KEYCLOAK_SECRET?: string
- EXTERNAL_KEYCLOAK_URL?: string
- EXTERNAL_LINKEDIN_OIDC_ENABLED?: boolean
- EXTERNAL_LINKEDIN_OIDC_CLIENT_ID?: string
- EXTERNAL_LINKEDIN_OIDC_SECRET?: string
- EXTERNAL_NOTION_ENABLED?: boolean
- EXTERNAL_NOTION_CLIENT_ID?: string
- EXTERNAL_NOTION_SECRET?: string
- EXTERNAL_SLACK_ENABLED?: boolean
- EXTERNAL_SLACK_CLIENT_ID?: string
- EXTERNAL_SLACK_SECRET?: string
- EXTERNAL_SPOTIFY_ENABLED?: boolean
- EXTERNAL_SPOTIFY_CLIENT_ID?: string
- EXTERNAL_SPOTIFY_SECRET?: string
- EXTERNAL_TWITCH_ENABLED?: boolean
- EXTERNAL_TWITCH_CLIENT_ID?: string
- EXTERNAL_TWITCH_SECRET?: string
- EXTERNAL_TWITTER_ENABLED?: boolean
- EXTERNAL_TWITTER_CLIENT_ID?: string
- EXTERNAL_TWITTER_SECRET?: string
- EXTERNAL_WORKOS_ENABLED?: boolean
- EXTERNAL_WORKOS_CLIENT_ID?: string
- EXTERNAL_WORKOS_SECRET?: string
- EXTERNAL_WORKOS_URL?: string
- EXTERNAL_ZOOM_ENABLED?: boolean
- EXTERNAL_ZOOM_CLIENT_ID?: string
- EXTERNAL_ZOOM_SECRET?: string
- DB_MAX_POOL_SIZE?: number
- API_MAX_REQUEST_DURATION?: number
- }
- UserBody: {
- id?: string
- aud?: string
- banned_until?: string
- confirmation_sent_at?: string
- confirmation_token?: string
- confirmed_at?: string
- created_at?: string
- email?: string
- email_change?: string
- email_change_confirm_status?: number
- email_change_sent_at?: string
- email_change_token_current?: string
- email_change_token_new?: string
- email_confirmed_at?: string
- encrypted_password?: string
- instance_id?: string
- invited_at?: string
- is_super_admin?: boolean
- last_sign_in_at?: string
- phone?: string
- phone_change?: string
- phone_change_sent_at?: string
- phone_change_token?: string
- phone_confirmed_at?: string
- raw_app_meta_data?: Record
- raw_user_meta_data?: Record
- reauthentication_sent_at?: string
- reauthentication_token?: string
- recovery_sent_at?: string
- recovery_token?: string
- role?: string
- updated_at?: string
- is_sso_user?: boolean
- deleted_at?: string
- is_anonymous?: boolean
- }
- UsersResponse: {
- total: number
- users: components['schemas']['UserBody'][]
- }
- Backup: {
- id: number
- isPhysicalBackup: boolean
- project_id: number
- status: Record
- inserted_at: string
- }
- BackupsResponse: {
- tierKey: string
- region: string
- walg_enabled: boolean
- pitr_enabled: boolean
- backups: components['schemas']['Backup'][]
- physicalBackupData: {
- earliestPhysicalBackupDateUnix?: number
- latestPhysicalBackupDateUnix?: number
- }
- }
- DownloadBackupBody: {
- id: number
- data: Record
- inserted_at: string
- project_id: number
- s3_bucket: string
- s3_path: string
- status: string
- }
- DownloadBackupResponse: {
- fileUrl: string
- }
- RestoreLogicalBackupBody: {
- id: number
- }
- RestorePhysicalBackupBody: {
- id: number
- recovery_time_target: string
- }
- PointInTimeRestoreBody: {
- recovery_time_target_unix: number
- }
- OrganizationResponse: {
- /** @enum {string|null} */
- restriction_status: 'grace_period' | 'grace_period_over' | 'restricted' | null
- id: number
- slug: string
- name: string
- billing_email: string | null
- is_owner: boolean
- stripe_customer_id: string | null
- subscription_id: string | null
- opt_in_tags: string[]
- restriction_data: Record
- }
- GetOrganizationByFlyOrganizationIdResponse: {
- slug: string
- }
- CreateOrganizationBody: {
- name: string
- kind?: string
- size?: string
- /** @enum {string} */
- tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise'
- payment_method?: string
- }
- UpdateOrganizationBody: {
- name: string
- billing_email: string
- opt_in_tags: string[]
- }
- OrganizationSlugResponse: {
- id: number
- slug: string
- name: string
- billing_email?: string
- stripe_customer_id?: string
- opt_in_tags: string[]
- }
- CustomerBillingAddress: {
- city?: string
- country: string
- line1: string
- line2?: string
- postal_code?: string
- state?: string
- }
- CustomerResponse: {
- email: string
- address: components['schemas']['CustomerBillingAddress'] | null
- balance: number
- billing_via_partner: boolean
- }
- BillingCustomerUpdateBody: {
- address?: components['schemas']['CustomerBillingAddress']
- }
- OrganizationRole: {
- id: number
- name: string
- description: string
- }
- OrganizationRoleV2: {
- id: number
- name: string
- description: string
- project_ids: number[]
- base_role_id: number
- }
- OrganizationRoleResponseV2: {
- org_scoped_roles: components['schemas']['OrganizationRoleV2'][]
- project_scoped_roles: components['schemas']['OrganizationRoleV2'][]
- }
- TaxIdV2: {
- country: string
- type: string
- value: string
- }
- TaxIdV2Response: {
- tax_id: components['schemas']['TaxIdV2'] | null
- }
- TaxId: {
- id: string
- country: string
- type: string
- value: string
- }
- TaxIdResponse: {
- data: components['schemas']['TaxId'][]
- }
- CreateTaxIdBody: {
- type: string
- value: string
- }
- CreateTaxIdResponse: {
- id: string
- country: string
- created: number
- type: string
- value: string
- }
- DeleteTaxIdBody: {
- id: string
- }
- TransferOrganizationBody: {
- member_gotrue_id: string
- member_id: number
- org_id: number
- }
- ProjectAllocation: {
- ref: string
- usage: number
- name: string
- }
- OrgMetricUsage: {
- usage: number
- usage_original: number
- cost: number
- unit_price_desc: string
- available_in_plan: boolean
- unlimited: boolean
- capped: boolean
- /** @enum {string} */
- metric:
- | 'EGRESS'
- | 'DATABASE_SIZE'
- | 'STORAGE_SIZE'
- | 'MONTHLY_ACTIVE_USERS'
- | 'MONTHLY_ACTIVE_SSO_USERS'
- | 'FUNCTION_INVOCATIONS'
- | 'FUNCTION_COUNT'
- | 'STORAGE_IMAGES_TRANSFORMED'
- | 'REALTIME_MESSAGE_COUNT'
- | 'REALTIME_PEAK_CONNECTIONS'
- | 'COMPUTE_HOURS_BRANCH'
- | 'COMPUTE_HOURS_XS'
- | 'COMPUTE_HOURS_SM'
- | 'COMPUTE_HOURS_MD'
- | 'COMPUTE_HOURS_L'
- | 'COMPUTE_HOURS_XL'
- | 'COMPUTE_HOURS_2XL'
- | 'COMPUTE_HOURS_4XL'
- | 'COMPUTE_HOURS_8XL'
- | 'COMPUTE_HOURS_12XL'
- | 'COMPUTE_HOURS_16XL'
- | 'CUSTOM_DOMAIN'
- | 'PITR_7'
- | 'PITR_14'
- | 'PITR_28'
- | 'IPV4'
- /** @enum {string} */
- pricing_strategy: 'UNIT' | 'PACKAGE' | 'NONE'
- pricing_free_units?: number
- pricing_package_price?: number
- pricing_package_size?: number
- pricing_per_unit_price?: number
- project_allocations: components['schemas']['ProjectAllocation'][]
- }
- OrgUsageResponse: {
- usage_billing_enabled: boolean
- slugs: string[]
- usages: components['schemas']['OrgMetricUsage'][]
- }
- OrgDocumentUrlResponse: {
- fileUrl: string
- }
- AuditLogsResponse: {
- result: Record[]
- retention_period: number
- }
- Invite: {
- invited_id: number
- invited_at: string
- invited_email: string
- role_id: number
- }
- InviteUserBody: {
- invited_email: string
- owner_id: number
- role_id: number
- }
- SendInviteResponse: {
- invited_at: string
- invited_email: string
- role_id: number
- }
- InviteResponse: {
- organization_name: string
- invite_id: string
- token_does_not_exist: boolean
- sso_mismatch: boolean
- email_match: boolean
- authorized_user: boolean
- expired_token: boolean
- }
- JoinResponse: {
- billing_email: string
- id: number
- name: string
- slug: string
- stripe_customer_id: string
- }
- Member: {
- gotrue_id: string
- primary_email: string | null
- role_ids: number[]
- username: string
- mfa_enabled: boolean
- }
- UpdateMemberBody: {
- role_id: number
- }
- UpdateMemberRoleBodyV2: {
- role_id: number
- role_scoped_projects?: string[]
- }
- MemberWithFreeProjectLimit: {
- free_project_limit: number
- primary_email: string
- username: string
- }
- Invitation: {
- id: number
- invited_at: string
- invited_email: string
- role_id: number
- }
- InvitationResponse: {
- invitations: components['schemas']['Invitation'][]
- }
- InvitationByTokenResponse: {
- organization_name: string
- invite_id?: number
- token_does_not_exist: boolean
- email_match: boolean
- authorized_user: boolean
- expired_token: boolean
- }
- CreateInvitationBody: {
- email: string
- role_id: number
- role_scoped_projects?: string[]
- }
- PaymentMethodCard: {
- brand: string
- exp_month: number
- exp_year: number
- last4: string
- }
- Payment: {
- id: string
- card?: components['schemas']['PaymentMethodCard']
- created: number
- type: string
- is_default: boolean
- }
- PaymentsResponse: {
- defaultPaymentMethodId: string | null
- data: components['schemas']['Payment'][]
- }
- DetachPaymentMethodBody: {
- card_id: string
- }
- MarkDefaultPaymentMethodBody: {
- payment_method_id: string
- }
- HCaptchaBody: {
- hcaptchaToken: string
- }
- SetupIntentResponse: {
- client_secret: string
- payment_method: Record
- }
- /** @enum {string} */
- BillingPlanId: 'free' | 'pro' | 'team' | 'enterprise'
- BillingSubscriptionPlan: {
- id: components['schemas']['BillingPlanId']
- name: string
- }
- BillingSubscriptionAddon: {
- name: string
- supabase_prod_id: string
- price: number
- }
- /** @enum {string} */
- ProjectAddonType: 'custom_domain' | 'compute_instance' | 'pitr' | 'ipv4'
/** @enum {string} */
AddonVariantId:
| 'ci_micro'
@@ -2831,1185 +2047,9 @@ export interface components {
| 'pitr_14'
| 'pitr_28'
| 'ipv4_default'
- /** @enum {string} */
- ProjectAddonVariantPricingType: 'fixed' | 'usage'
- /** @enum {string} */
- ProjectAddonPricingInterval: 'monthly' | 'hourly'
- ProjectAddonVariantResponse: {
- identifier: components['schemas']['AddonVariantId']
- price_type: components['schemas']['ProjectAddonVariantPricingType']
- price_interval: components['schemas']['ProjectAddonPricingInterval']
- name: string
- price_description: string
- price: number
- meta?: Record
- }
- SelectedAddonResponse: {
- type: components['schemas']['ProjectAddonType']
- variant: components['schemas']['ProjectAddonVariantResponse']
- }
- BillingProjectAddonResponse: {
- addons: components['schemas']['SelectedAddonResponse'][]
- name: string
- ref: string
- }
- ScheduledPlanChange: {
- target_plan: components['schemas']['BillingPlanId']
- /** Format: date-time */
- at: string
- usage_billing_enabled: boolean
- }
- GetSubscriptionResponse: {
- billing_cycle_anchor: number
- current_period_end: number
- current_period_start: number
- next_invoice_at: number
- usage_billing_enabled: boolean
- plan: components['schemas']['BillingSubscriptionPlan']
- addons: components['schemas']['BillingSubscriptionAddon'][]
- project_addons: components['schemas']['BillingProjectAddonResponse'][]
- payment_method_type: string
- billing_via_partner: boolean
- /** @enum {string} */
- billing_partner: 'fly' | 'aws'
- scheduled_plan_change: components['schemas']['ScheduledPlanChange'] | null
- customer_balance: number
- nano_enabled: boolean
- }
- UpdateSubscriptionBody: {
- payment_method?: string
- /** @enum {string} */
- tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise'
- }
- /** @enum {string} */
- BillingPlanChangeType: 'upgrade' | 'downgrade' | 'none'
- /** @enum {string} */
- BillingPlanEffectiveAt: 'now' | 'end_of_billing_period' | 'none'
- PlanResponse: {
- id: components['schemas']['BillingPlanId']
- change_type: components['schemas']['BillingPlanChangeType']
- effective_at: components['schemas']['BillingPlanEffectiveAt']
- name: string
- price: number
- is_current: boolean
- }
- PlansResponse: {
- plans: components['schemas']['PlanResponse'][]
- }
- UpcomingInvoice: Record
- Invoice: {
- id: string
- invoice_pdf: string
- subscription: string | null
- subtotal: number
- number: string
- period_end: number
- status: string
- }
- ColumnPrivilege: {
- grantor: string
- grantee: string
- /** @enum {string} */
- privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES'
- is_grantable: boolean
- }
- PostgresColumnPrivileges: {
- column_id: string
- relation_schema: string
- relation_name: string
- column_name: string
- privileges: components['schemas']['ColumnPrivilege'][]
- }
- GrantColumnPrivilegesBody: {
- is_grantable?: boolean
- column_id: string
- grantee: string
- /** @enum {string} */
- privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES'
- }
- RevokeColumnPrivilegesBody: {
- column_id: string
- grantee: string
- /** @enum {string} */
- privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES'
- }
- PostgresColumn: {
- table_id: number
- schema: string
- table: string
- id: string
- ordinal_position: number
- name: string
- default_value: Record
- data_type: string
- format: string
- is_identity: boolean
- identity_generation: Record
- is_generated: boolean
- is_nullable: boolean
- is_updatable: boolean
- is_unique: boolean
- enums: string[]
- check: string | null
- comment: string | null
- }
- CreateColumnBody: {
- tableId: number
- name: string
- type: string
- check?: string
- comment?: string
- defaultValue?: Record
- /** @enum {string} */
- defaultValueFormat?: 'expression' | 'literal'
- /** @enum {string} */
- identityGeneration?: 'BY DEFAULT' | 'ALWAYS'
- isIdentity?: boolean
- isNullable?: boolean
- isPrimaryKey?: boolean
- isUnique?: boolean
- }
- UpdateColumnBody: {
- dropDefault?: boolean
- name?: string
- type?: string
- id?: number
- check?: string
- comment?: string
- defaultValue?: Record
- /** @enum {string} */
- defaultValueFormat?: 'expression' | 'literal'
- /** @enum {string} */
- identityGeneration?: 'BY DEFAULT' | 'ALWAYS'
- isIdentity?: boolean
- isNullable?: boolean
- isUnique?: boolean
- }
- PostgresExtension: {
- name: string
- schema: string | null
- default_version: string
- installed_version: string | null
- comment: string | null
- }
- CreateExtensionBody: {
- cascade: boolean
- name: string
- schema: string
- version: string
- }
- PostgresForeignTable: {
- id: number
- schema: string
- name: string
- comment: string | null
- columns?: components['schemas']['PostgresColumn'][]
- }
- PostgresFunction: {
- id: number
- schema: string
- name: string
- language: string
- definition: string
- complete_statement: string
- argument_types: string
- identity_argument_types: string
- return_type: string
- /** @enum {string} */
- behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE'
- security_definer: boolean
- config_params: unknown
- }
- CreateFunctionBody: {
- args: string[]
- /** @enum {string} */
- behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE'
- config_params?: Record
- definition: string
- language: string
- name: string
- return_type: string
- schema: string
- security_definer: boolean
- }
- UpdateFunctionBody: {
- id?: number
- args?: string[]
- /** @enum {string} */
- behavior?: 'VOLATILE' | 'STABLE' | 'IMMUTABLE'
- config_params?: Record
- definition?: string
- language?: string
- name?: string
- return_type?: string
- schema?: string
- security_definer?: boolean
- }
- PostgresMaterializedView: {
- id: number
- schema: string
- name: string
- is_populated: boolean
- comment: string | null
- columns?: components['schemas']['PostgresColumn'][]
- }
- PostgresPolicy: {
- id: number
- schema: string
- table: string
- table_id: number
- name: string
- /** @enum {string} */
- action: 'PERMISSIVE' | 'RESTRICTIVE'
- roles: string[]
- /** @enum {string} */
- command: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL'
- definition: string | null
- check: string | null
- }
- CreatePolicyBody: {
- name: string
- table: string
- schema?: string
- definition?: string
- check?: string
- /** @enum {string} */
- action?: 'PERMISSIVE' | 'RESTRICTIVE'
- /** @enum {string} */
- command?: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL'
- roles?: string[]
- }
- UpdatePolicyBody: {
- id?: number
- name?: string
- definition?: string
- check?: string
- roles?: string[]
- }
- Table: {
- id: number
- name: string
- schema: string
- }
- PostgresPublication: {
- id: number
- name: string
- owner: string
- publish_insert: boolean
- publish_update: boolean
- publish_delete: boolean
- publish_truncate: boolean
- tables: components['schemas']['Table'][] | null
- }
- CreatePublicationBody: {
- name: string
- owner?: string
- tables?: string[] | null
- publish_insert?: boolean
- publish_update?: boolean
- publish_delete?: boolean
- publish_truncate?: boolean
- }
- UpdatePublicationBody: {
- id?: number
- name?: string
- owner?: string
- tables?: string[] | null
- publish_insert?: boolean
- publish_update?: boolean
- publish_delete?: boolean
- publish_truncate?: boolean
- }
- RunQueryBody: {
- query: string
- }
- FormatQueryBody: {
- query: string
- }
- ValidateQueryBody: {
- query: string
- }
- ValidateQueryResponse: {
- valid: boolean
- }
- PostgresRole: {
- id: number
- name: string
- is_superuser: boolean
- can_create_db: boolean
- can_create_role: boolean
- inherit_role: boolean
- can_login: boolean
- is_replication_role: boolean
- can_bypass_rls: boolean
- active_connections: number
- connection_limit: number
- password: string
- valid_until: string | null
- config: string[] | null
- }
- CreateRoleBody: {
- name: string
- password?: string
- inherit_role?: boolean
- can_login?: boolean
- is_superuser?: boolean
- can_create_db?: boolean
- can_create_role?: boolean
- is_replication_role?: boolean
- can_bypass_rls?: boolean
- connection_limit?: number
- member_of?: string[]
- members?: string[]
- admins?: string[]
- valid_until?: string
- config?: Record
- }
- UpdateRoleBody: {
- name?: string
- password?: string
- inherit_role?: boolean
- can_login?: boolean
- is_superuser?: boolean
- can_create_db?: boolean
- can_create_role?: boolean
- is_replication_role?: boolean
- can_bypass_rls?: boolean
- connection_limit?: number
- valid_until?: string
- config?: Record
- }
- PostgresSchema: {
- id: number
- name: string
- owner: string
- }
- CreateSchemaBody: {
- name: string
- owner: string
- }
- UpdateSchemaBody: {
- name?: string
- owner?: string
- }
- SearchTableBody: {
- name: string
- schema: string
- }
- SearchColumnBody: {
- name: string
- schema: string
- }
- Column: {
- id: number
- name: string
- schema: string
- table_id: number
- table: string
- }
- TablePrivilege: {
- grantor: string
- grantee: string
- /** @enum {string} */
- privilege_type:
- | 'ALL'
- | 'SELECT'
- | 'INSERT'
- | 'UPDATE'
- | 'DELETE'
- | 'TRUNCATE'
- | 'REFERENCES'
- | 'TRIGGER'
- is_grantable: boolean
- }
- PostgresTablePrivileges: {
- schema: string
- name: string
- kind: string
- privileges: components['schemas']['TablePrivilege'][]
- }
- GrantTablePrivilegesBody: {
- is_grantable?: boolean
- relation_id: number
- grantee: string
- /** @enum {string} */
- privilege_type:
- | 'ALL'
- | 'SELECT'
- | 'INSERT'
- | 'UPDATE'
- | 'DELETE'
- | 'TRUNCATE'
- | 'REFERENCES'
- | 'TRIGGER'
- }
- RevokeTablePrivilegesBody: {
- relation_id: number
- grantee: string
- /** @enum {string} */
- privilege_type:
- | 'ALL'
- | 'SELECT'
- | 'INSERT'
- | 'UPDATE'
- | 'DELETE'
- | 'TRUNCATE'
- | 'REFERENCES'
- | 'TRIGGER'
- }
- PrimaryKey: {
- schema: string
- table_name: string
- name: string
- table_id: number
- }
- Relationship: {
- id: number
- constraint_name: string
- source_schema: string
- source_table_name: string
- source_column_name: string
- target_table_schema: string
- target_table_name: string
- target_column_name: string
- }
- PostgresTable: {
- id: number
- schema: string
- name: string
- rls_enabled: boolean
- rls_forced: boolean
- /** @enum {string} */
- replica_identity: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING'
- bytes: number
- size: string
- live_rows_estimate: number
- dead_rows_estimate: number
- comment: string | null
- columns?: components['schemas']['PostgresColumn'][]
- primary_keys: components['schemas']['PrimaryKey'][]
- relationships: components['schemas']['Relationship'][]
- }
- CreateTableBody: {
- name: string
- schema?: string
- comment?: string
- }
- UpdateTableBody: {
- id?: number
- rls_enabled?: boolean
- rls_forced?: boolean
- /** @enum {string} */
- replica_identity?: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING'
- replica_identity_index?: string
- name?: string
- schema?: string
- comment?: string
- }
- PostgresTrigger: {
- id: number
- table_id: number
- /** @enum {string} */
- enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED'
- name: string
- table: string
- schema: string
- condition: string | null
- /** @enum {string} */
- orientation: 'ROW' | 'STATEMENT'
- /** @enum {string} */
- activation: 'AFTER' | 'BEFORE'
- events: string[]
- function_schema: string
- function_name: string
- function_args: string[]
- }
- CreateTriggerBody: {
- /** @enum {string} */
- activation: 'AFTER' | 'BEFORE'
- /** @enum {string} */
- enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED'
- events: ('INSERT' | 'UPDATE' | 'DELETE')[]
- function_args: string[]
- function_name: string
- function_schema: string
- name: string
- /** @enum {string} */
- orientation: 'ROW' | 'STATEMENT'
- schema: string
- table: string
- table_id?: number
- }
- UpdateTriggerBody: {
- id?: number
- /** @enum {string} */
- activation?: 'AFTER' | 'BEFORE'
- /** @enum {string} */
- enabled_mode?: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED'
- events?: ('INSERT' | 'UPDATE' | 'DELETE')[]
- function_args?: string[]
- function_name?: string
- function_schema?: string
- name?: string
- /** @enum {string} */
- orientation?: 'ROW' | 'STATEMENT'
- schema?: string
- table?: string
- table_id?: number
- }
- PostgresType: {
- id: number
- name: string
- schema: string
- format: string
- enums: string[]
- comment: string | null
- }
- PostgresView: {
- id: number
- schema: string
- name: string
- is_updatable: boolean
- comment: string | null
- columns?: components['schemas']['PostgresColumn'][]
- }
- AccessToken: {
- created_at: string
- id: number
- token_alias: string
- name: string
- /** @enum {string} */
- scope?: 'V0'
- }
- CreateAccessTokenBody: {
- name: string
- /** @enum {string} */
- scope?: 'V0'
- }
- CreateAccessTokenResponse: {
- created_at: string
- id: number
- token_alias: string
- name: string
- /** @enum {string} */
- scope?: 'V0'
- token: string
- }
- SearchProfileBody: {
- keywords: string
- }
- Profile: {
- first_name: string
- gotrue_id: string
- id: number
- last_name: string
- username: string
- }
- SubscriptionStatisticsResponse: {
- total_paid_projects: number
- total_free_projects: number
- total_active_free_projects: number
- total_paused_free_projects: number
- total_pro_projects: number
- total_payg_projects: number
- total_team_projects: number
- total_enterprise_projects: number
- }
- PasswordCheckBody: {
- password: string
- }
- PasswordCheckResponse: {
- result: {
- feedback?: {
- warning?: string
- suggestions?: string[]
- }
- score?: number
- }
- }
- Permission: {
- actions: (
- | 'analytics:Read'
- | 'auth:Execute'
- | 'billing:Read'
- | 'billing:Write'
- | 'write:Create'
- | 'write:Delete'
- | 'functions:Read'
- | 'functions:Write'
- | 'infra:Execute'
- | 'read:Read'
- | 'sql:Read:Select'
- | 'sql:Write:Delete'
- | 'sql:Write:Insert'
- | 'sql:Write:Update'
- | 'storage:Admin:Read'
- | 'storage:Admin:Write'
- | 'tenant:Sql:Admin:Read'
- | 'tenant:Sql:Admin:Write'
- | 'tenant:Sql:CreateTable'
- | 'tenant:Sql:Write:Delete'
- | 'tenant:Sql:Write:Insert'
- | 'tenant:Sql:Query'
- | 'tenant:Sql:Read:Select'
- | 'tenant:Sql:Write:Update'
- | 'write:Update'
- )[]
- condition: unknown
- organization_id: number
- resources: string[]
- }
- ProfileResponse: {
- id: number
- auth0_id: string
- primary_email: string
- username: string
- first_name: string
- last_name: string
- mobile: string
- is_alpha_user: boolean
- gotrue_id: string
- free_project_limit: number
- disabled_features: (
- | 'organizations:create'
- | 'organizations:delete'
- | 'organization_members:create'
- | 'organization_members:delete'
- | 'projects:create'
- | 'projects:transfer'
- | 'project_auth:all'
- | 'project_storage:all'
- | 'project_edge_function:all'
- | 'profile:update'
- | 'billing:account_data'
- | 'billing:credits'
- | 'billing:invoices'
- | 'billing:payment_methods'
- | 'realtime:all'
- )[]
- }
- UpdateProfileBody: {
- first_name: string
- last_name: string
- }
- /** @enum {string} */
- DbInstanceSize:
- | 'nano'
- | 'micro'
- | 'small'
- | 'medium'
- | 'large'
- | 'xlarge'
- | '2xlarge'
- | '4xlarge'
- | '8xlarge'
- | '12xlarge'
- | '16xlarge'
- ProjectInfo: {
- infra_compute_size?: components['schemas']['DbInstanceSize']
- cloud_provider: string
- id: number
- inserted_at: string
- name: string
- organization_id: number
- ref: string
- region: string
- status: string
- subscription_id: string
- is_branch_enabled: boolean
- is_physical_backups_enabled: boolean
- preview_branch_refs: string[]
- disk_volume_size_gb?: number
- }
- GetProjectByFlyExtensionIdResponse: {
- ref: string
- }
- /**
- * @description Desired instance size, will use default size if not defined. Paid plans only.
- * @enum {string}
- */
- DesiredInstanceSize:
- | 'micro'
- | 'small'
- | 'medium'
- | 'large'
- | 'xlarge'
- | '2xlarge'
- | '4xlarge'
- | '8xlarge'
- | '12xlarge'
- | '16xlarge'
AmiSearchOptions: {
search_tags?: Record
}
- CustomSupabaseInternalRequests: {
- ami: components['schemas']['AmiSearchOptions']
- }
- CreateProjectBody: {
- desired_instance_size?: components['schemas']['DesiredInstanceSize']
- cloud_provider: string
- org_id: number
- name: string
- db_pass: string
- db_region: string
- db_pricing_tier_id?: string
- db_sql?: string
- auth_site_url?: string
- vercel_configuration_id?: string
- custom_supabase_internal_requests?: components['schemas']['CustomSupabaseInternalRequests']
- data_api_exposed_schemas?: string[]
- }
- CreateProjectResponse: {
- infra_compute_size?: components['schemas']['DbInstanceSize']
- cloud_provider: string
- id: number
- inserted_at: string
- name: string
- organization_id: number
- ref: string
- region: string
- status: string
- subscription_id: string
- is_branch_enabled: boolean
- is_physical_backups_enabled: boolean
- preview_branch_refs: string[]
- disk_volume_size_gb?: number
- endpoint: string
- anon_key: string
- service_key: string
- }
- GetUserContentObject: {
- owner: {
- id?: number
- username?: string
- }
- updated_by: {
- id?: number
- username?: string
- }
- id: string
- inserted_at: string
- updated_at: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- name: string
- description?: string
- content: Record
- project_id: number
- owner_id: number
- last_updated_by?: number
- }
- GetUserContentResponse: {
- data: components['schemas']['GetUserContentObject'][]
- }
- GetUserContentByIdResponse: {
- folder_id?: string
- id: string
- inserted_at: string
- updated_at: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- name: string
- description?: string
- content: Record
- project_id: number
- owner_id: number
- last_updated_by?: number
- }
- CreateContentBody: {
- id?: string
- name: string
- description?: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- content?: Record
- owner_id?: number
- }
- UserContentObject: {
- id: string
- inserted_at: string
- updated_at: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- name: string
- description?: string
- content: Record
- project_id: number
- owner_id: number
- last_updated_by?: number
- }
- CreateContentBodyV2: {
- id?: string
- name: string
- description?: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- content?: Record
- owner_id?: number
- folder_id?: string
- }
- UserContentObjectV2: {
- id: string
- inserted_at: string
- updated_at: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- name: string
- description?: string
- content: Record
- project_id: number
- owner_id: number
- last_updated_by?: number
- folder_id?: string
- }
- UpdateContentBody: {
- id?: string
- name?: string
- description?: string
- /** @enum {string} */
- type?: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility?: 'user' | 'project' | 'org' | 'public'
- content?: Record
- owner_id?: number
- }
- UpsertContentBody: {
- id?: string
- name: string
- description?: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- content?: Record
- owner_id?: number
- project_id: number
- }
- UpsertContentBodyV2: {
- id?: string
- name: string
- description?: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- content?: Record
- owner_id?: number
- project_id: number
- folder_id?: string
- }
- BulkDeleteUserContentResponse: {
- id: string
- }
- UserContentFolder: {
- id: string
- name: string
- project_id: number
- owner_id: number
- parent_id?: string | null
- }
- UserContentObjectMeta: {
- id: string
- inserted_at: string
- updated_at: string
- /** @enum {string} */
- type: 'sql' | 'report' | 'log_sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
- name: string
- description?: string
- project_id: number
- owner_id: number
- last_updated_by?: number
- folder_id?: string
- }
- GetUserContentFolderResponse: {
- data: {
- folders?: components['schemas']['UserContentFolder'][]
- contents?: components['schemas']['UserContentObjectMeta'][]
- }
- }
- CreateContentFolderBody: {
- name: string
- parent_id?: string
- }
- CreateUserContentFolderResponse: {
- id: string
- name: string
- project_id: number
- owner_id: number
- parent_id?: string | null
- }
- UpdateContentFolderBody: {
- name: string
- }
- DatabaseDetailResponse: {
- /** @enum {string} */
- status:
- | 'ACTIVE_HEALTHY'
- | 'ACTIVE_UNHEALTHY'
- | 'COMING_UP'
- | 'GOING_DOWN'
- | 'INIT_FAILED'
- | 'REMOVED'
- | 'RESTORING'
- | 'UNKNOWN'
- | 'UPGRADING'
- | 'INIT_READ_REPLICA'
- | 'INIT_READ_REPLICA_FAILED'
- /** @enum {string} */
- cloud_provider: 'AWS' | 'FLY'
- db_port: number
- db_name: string
- db_user: string
- restUrl: string
- db_host: string
- connectionString: string
- identifier: string
- inserted_at: string
- size: string
- region: string
- }
- DatabaseStatusResponse: {
- /** @enum {string} */
- status:
- | 'ACTIVE_HEALTHY'
- | 'ACTIVE_UNHEALTHY'
- | 'COMING_UP'
- | 'GOING_DOWN'
- | 'INIT_FAILED'
- | 'REMOVED'
- | 'RESTORING'
- | 'UNKNOWN'
- | 'UPGRADING'
- | 'INIT_READ_REPLICA'
- | 'INIT_READ_REPLICA_FAILED'
- identifier: string
- replicaInitializationStatus?: Record
- }
- UpdatePasswordBody: {
- password: string
- }
- LoadBalancerDatabase: {
- identifier: string
- /** @enum {string} */
- type: 'PRIMARY' | 'READ_REPLICA'
- status: string
- }
- LoadBalancerDetailResponse: {
- endpoint: string
- databases: components['schemas']['LoadBalancerDatabase'][]
- }
- Buffer: Record
- PauseStatusResponse: {
- max_days_till_restore_disabled: number
- remaining_days_till_restore_disabled: number | null
- can_restore: boolean
- latest_downloadable_backup_id: number | null
- }
- ResizeBody: {
- volume_size_gb: number
- }
- RestartProjectInfo: {
- database_identifier?: string
- }
- ProjectLintMetadata: {
- /** @enum {string} */
- type?: 'table' | 'view' | 'auth' | 'function' | 'extension'
- schema?: string
- name?: string
- entity?: string
- fkey_name?: string
- fkey_columns?: number[]
- }
- ProjectLintResponse: {
- /** @enum {string} */
- name:
- | 'unindexed_foreign_keys'
- | 'auth_users_exposed'
- | 'auth_rls_initplan'
- | 'no_primary_key'
- | 'unused_index'
- | 'multiple_permissive_policies'
- | 'policy_exists_rls_disabled'
- | 'rls_enabled_no_policy'
- | 'duplicate_index'
- | 'security_definer_view'
- | 'function_search_path_mutable'
- | 'rls_disabled_in_public'
- | 'extension_in_public'
- | 'rls_references_user_metadata'
- | 'materialized_view_in_api'
- | 'foreign_table_in_api'
- | 'auth_otp_long_expiry'
- | 'auth_otp_short_length'
- /** @enum {string} */
- level: 'ERROR' | 'WARN' | 'INFO'
- categories: ('PERFORMANCE' | 'SECURITY')[]
- title: string
- facing: string
- description: string
- detail: string
- remediation: Record
- metadata: components['schemas']['ProjectLintMetadata'] | null
- cache_key: string
- }
- ServiceVersions: {
- gotrue: string
- postgrest: string
- 'supabase-postgres': string
- }
- ProjectDetailResponse: {
- infra_compute_size?: components['schemas']['DbInstanceSize']
- cloud_provider: string
- db_host: string
- id: number
- inserted_at: string
- name: string
- organization_id: number
- ref: string
- region: string
- /** @enum {string} */
- status:
- | 'ACTIVE_HEALTHY'
- | 'ACTIVE_UNHEALTHY'
- | 'COMING_UP'
- | 'GOING_DOWN'
- | 'INACTIVE'
- | 'INIT_FAILED'
- | 'REMOVED'
- | 'RESTARTING'
- | 'UNKNOWN'
- | 'UPGRADING'
- | 'PAUSING'
- | 'RESTORING'
- | 'RESTORE_FAILED'
- | 'PAUSE_FAILED'
- subscription_id: string
- connectionString: string
- kpsVersion?: string
- dbVersion?: string
- restUrl: string
- serviceVersions?: components['schemas']['ServiceVersions']
- volumeSizeGb?: number
- maxDatabasePreprovisionGb?: number
- lastDatabaseResizeAt?: string
- is_branch_enabled: boolean
- parent_project_ref?: string
- is_physical_backups_enabled: boolean
- v2MaintenanceWindow: {
- start?: string
- end?: string
- }
- }
- ProjectRefResponse: {
- id: number
- ref: string
- name: string
- }
- UpdateProjectBody: {
- name: string
- }
- BackupId: {
- id: number
- }
- RestoreProjectInfo: {
- id: number
- status: string
- organization_id: number
- subscription_id: string
- region: string
- cloud_provider: string
- back_ups: components['schemas']['BackupId'][]
- }
- RestartServiceRequest: {
- services: (
- | 'adminapi'
- | 'api-gateway'
- | 'envoy'
- | 'functions'
- | 'gotrue'
- | 'kong'
- | 'pgbouncer'
- | 'pgsodium'
- | 'postgresql'
- | 'postgrest'
- | 'realtime'
- | 'storage'
- | 'walg'
- | 'autoshutdown'
- )[]
- source_notification_id?: string
- region: string
- database_identifier?: string
- }
- RestartServicesBody: {
- restartRequest: components['schemas']['RestartServiceRequest']
- }
- ProjectAppConfigResponse: {
- db_schema: string
- endpoint: string
- }
- ProjectServiceApiKeyResponse: {
- api_key: string
- name: string
- tags: string
- }
- ProjectSettingsResponse: {
- name: string
- ref: string
- status: string
- inserted_at: string
- db_dns_name: string
- db_host: string
- db_name: string
- db_user: string
- db_port: string
- ssl_enforced: boolean
- cloud_provider: string
- region: string
- app_config?: components['schemas']['ProjectAppConfigResponse']
- jwt_secret?: string
- service_api_keys?: components['schemas']['ProjectServiceApiKeyResponse'][]
- /** @enum {string|null} */
- db_ip_addr_config: 'legacy' | 'static-ipv4' | 'concurrent-ipv6' | 'ipv6' | null
- }
- TransferProjectBody: {
- target_organization_slug: string
- }
- PreviewTransferInfo: {
- key: string
- message: string
- }
- MemberExceedingFreeProjectLimit: {
- name: string
- limit: number
- }
- PreviewProjectTransferResponse: {
- source_subscription_plan: components['schemas']['BillingPlanId']
- target_subscription_plan: components['schemas']['BillingPlanId']
- valid: boolean
- warnings: components['schemas']['PreviewTransferInfo'][]
- errors: components['schemas']['PreviewTransferInfo'][]
- members_exceeding_free_project_limit: components['schemas']['MemberExceedingFreeProjectLimit'][]
- has_permissions_on_source_organization: boolean
- has_access_to_target_organization: boolean
- source_project_eligible: boolean
- target_organization_eligible: boolean | null
- target_organization_has_free_project_slots: boolean | null
- }
AnalyticsResponse: {
error?: OneOf<
[
@@ -4030,1200 +2070,27 @@ export interface components {
>
result?: Record[]
}
- LFUser: {
- token: string
- email: string | null
- bigquery_project_id: string | null
- bigquery_dataset_location: string | null
- bigquery_dataset_id: string | null
- email_me_product: string | null
- phone: string | null
- company: string | null
- metadata: {
- project_ref?: string
- }
- }
- LFSource: {
- token: string
- id: number
+ ApiKeyResponse: {
+ api_key: string
name: string
- favourite: boolean
- webhook_notification_url: string | null
- slack_hook_url: string | null
- bigquery_table_ttl: number
- public_token: string | null
- custom_event_message_keys: string | null
- }
- LFAccessToken: {
- token: string
- id: number
- inserted_at: string
- scopes: string
- description: string | null
- }
- LFEndpoint: {
- token: string
- id: number
- name: string
- description: string
- query: string
- language: Record
- sandboxable: boolean | null
- cache_duration_seconds: number
- proactive_requerying_seconds: number
- max_limit: number
- enable_auth: number
- }
- AvailableAddonResponse: {
- type: components['schemas']['ProjectAddonType']
- name: string
- variants: components['schemas']['ProjectAddonVariantResponse'][]
- }
- ProjectAddonsResponse: {
- ref: string
- selected_addons: components['schemas']['SelectedAddonResponse'][]
- available_addons: components['schemas']['AvailableAddonResponse'][]
- }
- UpdateAddonBody: {
- addon_variant: components['schemas']['AddonVariantId']
- addon_type: components['schemas']['ProjectAddonType']
- }
- PgbouncerConfigResponse: {
- default_pool_size?: number
- ignore_startup_parameters?: string
- max_client_conn?: number
- /** @enum {string} */
- pool_mode?: 'transaction' | 'session' | 'statement'
- inserted_at: string
- db_dns_name: string
- db_user: string
- db_host: string
- db_port: number
- db_name: string
- ssl_enforced: boolean
- pgbouncer_enabled: boolean
- supavisor_enabled: boolean
- /** @enum {string} */
- pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING'
- connectionString: string
- }
- PgbouncerStatusResponse: {
- active: boolean
- }
- UpdatePgbouncerConfigBody: {
- default_pool_size?: number
- max_client_conn?: number | null
- ignore_startup_parameters: string
- pgbouncer_enabled: boolean
- /** @enum {string} */
- pool_mode: 'transaction' | 'session' | 'statement'
- }
- UpdatePoolingConfigResponse: {
- default_pool_size?: number
- max_client_conn?: number | null
- ignore_startup_parameters: string
- pgbouncer_enabled: boolean
- /** @enum {string} */
- pool_mode: 'transaction' | 'session' | 'statement'
- /** @enum {string} */
- pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING'
- }
- PostgrestConfigResponse: {
- db_schema: string
- db_anon_role: string
- role_claim_key: string
- jwt_secret: string
- max_rows: number
- db_extra_search_path: string
- }
- UpdatePostgrestConfigBody: {
- max_rows?: number
- db_pool?: number
- db_extra_search_path?: string
- db_schema?: string
- }
- V1PostgrestConfigResponse: {
- max_rows: number
- /** @description If `null`, the value is automatically configured based on compute size. */
- db_pool: number | null
- db_schema: string
- db_extra_search_path: string
- }
- PostgresConfigResponse: {
- statement_timeout?: string
- effective_cache_size?: string
- maintenance_work_mem?: string
- max_connections?: number
- max_locks_per_transaction?: number
- max_parallel_maintenance_workers?: number
- max_parallel_workers?: number
- max_parallel_workers_per_gather?: number
- max_standby_archive_delay?: string
- max_standby_streaming_delay?: string
- max_worker_processes?: number
- shared_buffers?: string
- work_mem?: string
- /** @enum {string} */
- session_replication_role?: 'origin' | 'replica' | 'local'
- }
- UpdatePostgresConfigBody: {
- statement_timeout?: string
- effective_cache_size?: string
- maintenance_work_mem?: string
- max_connections?: number
- max_locks_per_transaction?: number
- max_parallel_maintenance_workers?: number
- max_parallel_workers?: number
- max_parallel_workers_per_gather?: number
- max_standby_archive_delay?: string
- max_standby_streaming_delay?: string
- max_worker_processes?: number
- shared_buffers?: string
- work_mem?: string
- /** @enum {string} */
- session_replication_role?: 'origin' | 'replica' | 'local'
- }
- UpdateSecretsConfigBody: {
- jwt_secret: string
- change_tracking_id: string
- }
- UpdateSecretsResponse: {
- message: string
- }
- StorageConfigResponse: {
- isFreeTier: boolean
- fileSizeLimit: number
- }
- UpdateStorageConfigBody: {
- fileSizeLimit: number
- }
- UpdateStorageConfigResponse: {
- fileSizeLimit: number
- }
- SupavisorConfigResponse: {
- identifier: string
- /** @enum {string} */
- database_type: 'PRIMARY' | 'READ_REPLICA'
- is_using_scram_auth: boolean
- db_user: string
- db_host: string
- db_port: number
- db_name: string
- connectionString: string
- default_pool_size: number | null
- max_client_conn: number | null
- /** @enum {string} */
- pool_mode: 'transaction' | 'session'
- }
- UpdateSupavisorConfigBody: {
- default_pool_size?: number | null
- /**
- * @deprecated
- * @description This field is deprecated and is ignored in this request
- * @enum {string}
- */
- pool_mode?: 'transaction' | 'session'
- }
- UpdateSupavisorConfigResponse: {
- default_pool_size: number | null
- /** @enum {string} */
- pool_mode: 'transaction' | 'session'
- }
- ServiceApiKey: {
- api_key_encrypted?: string
- tags: string
- name: string
- }
- AutoApiService: {
- protocol: string
- endpoint: string
- restUrl: string
- project: {
- ref?: string
- }
- defaultApiKey: string
- serviceApiKey: string
- id: number
- name: string
- app_config: Record
- app: {
- id?: number
- name?: string
- }
- service_api_keys: components['schemas']['ServiceApiKey'][]
}
ApiResponse: {
autoApiService: components['schemas']['AutoApiService']
}
- JwtSecretUpdateStatus: {
- jwtSecretUpdateStatus: {
- change_tracking_id?: string
- /** @enum {number} */
- error?: 0 | 1 | 2 | 3 | 4 | 5
- /** @enum {number} */
- progress?: 0 | 1 | 2 | 3 | 4 | 5
- /** @enum {number} */
- status?: 0 | 1 | 2
+ AttributeMapping: {
+ keys: {
+ [key: string]: components['schemas']['AttributeValue']
}
}
- ServiceApiKeyResponse: {
- api_key_encrypted?: string
- tags: string
- name: string
- api_key?: string
- }
- ServiceResponse: {
- service_api_keys: components['schemas']['ServiceApiKeyResponse'][]
- id: number
- name: string
- app_config: Record
- app: {
- id?: number
- name?: string
- }
- }
- ProjectResponse: {
- jwt_secret: string
- services?: components['schemas']['ServiceResponse'][]
- id: number
- name: string
- ref: string
- status: string
- inserted_at: string
- db_dns_name: string
- db_host: string
- db_name: string
- db_user: string
- db_port: string
- ssl_enforced: boolean
- cloud_provider: string
- region: string
- }
- SettingsResponse: {
- project: components['schemas']['ProjectResponse']
- services: components['schemas']['ServiceResponse'][]
- }
- StorageBucket: {
- id: string
- name: string
- owner: string
- created_at: string
- updated_at: string
- public: boolean
- }
- UpdateStorageBucketBody: {
- public: boolean
- file_size_limit: number
- allowed_mime_types: string[]
- }
- CreateStorageBucketBody: {
- id: string
- public: boolean
- file_size_limit: number
- allowed_mime_types: string[]
- }
- StorageObjectSortBy: {
- column?: string
- order?: string
- }
- StorageObjectSearchOptions: {
- limit?: number
- offset?: number
- sortBy?: components['schemas']['StorageObjectSortBy']
- search?: string
- }
- GetObjectsBody: {
- path: string
- options: components['schemas']['StorageObjectSearchOptions']
- }
- StorageObject: {
- name: string
- bucket_id: string
- owner: string
- id: string
- updated_at: string
- created_at: string
- last_accessed_at: string
- metadata: Record
- buckets: components['schemas']['StorageBucket']
- }
- StorageObjectTransformOptions: {
- width?: number
- height?: number
- /** @enum {string} */
- resize?: 'cover' | 'contain' | 'fill'
- quality?: number
- /** @enum {string} */
- format?: 'origin'
- }
- PublicUrlOptions: {
- transform?: components['schemas']['StorageObjectTransformOptions']
- download?: boolean
- downloadName?: string
- }
- GetPublicUrlBody: {
- path: string
- options?: components['schemas']['PublicUrlOptions']
- }
- PublicUrlResponse: {
- publicUrl: string
- }
- DownloadObjectOptions: {
- transform?: components['schemas']['StorageObjectTransformOptions']
- download?: boolean
- downloadName?: string
- }
- DownloadObjectBody: {
- path: string
- options?: components['schemas']['DownloadObjectOptions']
- }
- SignedUrlOptions: {
- transform?: components['schemas']['StorageObjectTransformOptions']
- download?: boolean
- downloadName?: string
- }
- GetSignedUrlBody: {
- path: string
- expiresIn: number
- options?: components['schemas']['SignedUrlOptions']
- }
- SignedUrlResponse: {
- signedUrl: string
- }
- SignedUrlsOptions: {
- download?: boolean
- downloadName?: string
- }
- GetSignedUrlsBody: {
- path: string[]
- expiresIn: number
- options?: components['schemas']['SignedUrlsOptions']
- }
- SignedUrlsResponse: {
- signedUrl: string
- error: string | null
- path: string | null
- }
- CopyObjectBody: {
- from: string
- to: string
- }
- CopyObjectResponse: {
- path: string
- }
- MoveObjectBody: {
- from: string
- to: string
- }
- DeleteObjectsBody: {
- paths: string[]
- }
- GetStorageCredential: {
- id: string
- description: string
- created_at: string
- }
- GetStorageCredentialsResponse: {
- data: components['schemas']['GetStorageCredential'][]
- }
- CreateStorageCredentialBody: {
- description: string
- }
- CreateStorageCredentialResponse: {
- id: string
- access_key: string
- secret_key: string
- description: string
- }
- OverdueInvoiceCount: {
- organization_id: number
- overdue_invoice_count: number
- }
- GoogleAnalyticBody: {
- language?: string
- screen_resolution?: string
- session_id: string
- }
- TelemetryEventBody: {
- category: string
- action: string
- label?: Record
- value?: string
- page_referrer?: string
- page_title?: string
- page_location?: string
- ga?: components['schemas']['GoogleAnalyticBody']
- }
- IdentifyUserBody: {
- id: number
- gotrue_id: string
- mobile?: string
- primary_email: string
- username?: string
- first_name?: string
- last_name?: string
- is_alpha_user?: boolean
- free_project_limit?: number
- auth0_id?: string
- }
- TelemetryIdentifyBody: {
- user: components['schemas']['IdentifyUserBody']
- ga?: components['schemas']['GoogleAnalyticBody']
- }
- TelemetryPageBody: {
- referrer: string
- title: string
- route?: string
- ga?: components['schemas']['GoogleAnalyticBody']
- }
- PageBody: {
- path: string
- location: string
- referrer?: string
- title?: string
- }
- TelemetryActivityBody: {
- activity: string
- source: string
- projectRef?: string
- orgSlug?: string
- data?: Record
- page: components['schemas']['PageBody']
- }
- TelemetryPageviewBody: {
- projectRef?: string
- orgSlug?: string
- referrer: string
- title: string
- path: string
- location: string
- }
- CreateVercelEnvironmentVariableBody: {
- key: string
- target: string[]
- type: string
- value: string
- }
- GetUserOrganizationIntegrationResponse: {
- id: string
- inserted_at: string
- updated_at: string
- metadata: Record
- integration: {
- name?: string
- }
- added_by: {
- username?: string
- primary_email?: string
- }
- organization: {
- slug?: string
- }
- }
- ProjectIntegrationConnection: {
- id: string
- inserted_at: string
- updated_at: string
- organization_integration_id: string
- supabase_project_ref: string
- added_by: {
- username?: string
- primary_email?: string
- }
- }
- GetOrganizationIntegrationResponse: {
- id: string
- inserted_at: string
- updated_at: string
- metadata: Record
- integration: {
- name?: string
- }
- added_by: {
- username?: string
- primary_email?: string
- }
- organization: {
- slug?: string
- }
- connections: components['schemas']['ProjectIntegrationConnection'][]
- }
- CreateVercelIntegrationBody: {
- code: string
- configuration_id: string
- organization_slug: string
- metadata: Record
- source: string
- teamId?: string
- }
- VercelProjectDeployHooks: {
- createdAt?: number
- id: string
- name: string
- ref: string
- url: string
- }
- VercelProjectLink: {
- type?: string
- deployHooks: components['schemas']['VercelProjectDeployHooks'][]
- gitCredentialId?: string
- productionBranch?: string
- }
- IntegrationVercelProject: {
- id: string
- name: string
- framework?: string | null
- link?: components['schemas']['VercelProjectLink']
- }
- GetVercelProjectsResponse: {
- projects: components['schemas']['IntegrationVercelProject'][]
- pagination: {
- count?: number
- next?: number | null
- prev?: number | null
- }
- }
- GetVercelConnections: {
- id: string
- inserted_at: string
- updated_at: string
- organization_integration_id: string
- supabase_project_ref: string
- foreign_project_id: string
- metadata: Record
- }
- IntegrationConnectionVercel: {
- foreign_project_id: string
- supabase_project_ref: string
- metadata: Record
- }
- CreateVercelConnectionsBody: {
- organization_integration_id: string
- connection: components['schemas']['IntegrationConnectionVercel']
- }
- SyncVercelEnvError: {
- message: string
- }
- CreateVercelConnectionResponse: {
- id: string
- env_sync_error?: components['schemas']['SyncVercelEnvError']
- }
- UpdateVercelConnectionsBody: {
- env_sync_targets?: ('production' | 'preview' | 'development')[]
- }
- DeleteVercelConnectionResponse: {
- id: string
- }
- GitHubAuthorization: {
- id: number
- user_id: number
- sender_id: number
- }
- CreateGitHubAuthorizationBody: {
- code: string
- }
- ListGitHubConnectionsProject: {
- id: number
- ref: string
- name: string
- }
- ListGitHubConnectionsRepository: {
- id: number
- name: string
- }
- ListGitHubConnectionsUser: {
- id: number
- username: string
- primary_email: string | null
- }
- ListGitHubConnectionsConnection: {
- id: number
- inserted_at: string
- updated_at: string
- installation_id: number
- project: components['schemas']['ListGitHubConnectionsProject']
- repository: components['schemas']['ListGitHubConnectionsRepository']
- user: components['schemas']['ListGitHubConnectionsUser'] | null
- workdir: string
- supabase_changes_only: boolean
- branch_limit: number
- }
- ListGitHubConnectionsResponse: {
- connections: components['schemas']['ListGitHubConnectionsConnection'][]
- }
- CreateGitHubConnectionsBody: {
- project_ref: string
- installation_id: number
- repository_id: number
- }
- UpdateGitHubConnectionsBody: {
- workdir?: string
- supabase_changes_only?: boolean
- branch_limit?: number
- }
- CreateCliLoginSessionBody: {
- session_id: string
- public_key: string
- token_name?: string
- }
- V1UpdateFunctionBody: {
+ AttributeValue: {
+ array?: boolean
+ default?: Record | number | string | boolean
name?: string
- body?: string
- verify_jwt?: boolean
+ names?: string[]
}
- FunctionResponse: {
- id: string
- slug: string
- name: string
- /** @enum {string} */
- status: 'ACTIVE' | 'REMOVED' | 'THROTTLED'
- version: number
- created_at: number
- updated_at: number
- verify_jwt?: boolean
- import_map?: boolean
- entrypoint_path?: string
- import_map_path?: string
- }
- V1CreateFunctionBody: {
- slug: string
- name: string
- body: string
- verify_jwt?: boolean
- }
- SecretResponse: {
- name: string
- value: string
- }
- CreateSecretBody: {
- /**
- * @description Secret name must not start with the SUPABASE_ prefix.
- * @example string
- */
- name: string
- value: string
- }
- HealthResponse: {
- healthy: boolean
- }
- ReportStatusBody: {
- /** @enum {string} */
- status:
- | 'ACTIVE_HEALTHY'
- | 'ACTIVE_UNHEALTHY'
- | 'COMING_UP'
- | 'GOING_DOWN'
- | 'INIT_FAILED'
- | 'REMOVED'
- | 'RESTORING'
- | 'UNKNOWN'
- | 'UPGRADING'
- | 'INIT_READ_REPLICA'
- | 'INIT_READ_REPLICA_FAILED'
- reportingToken: string
- databaseIdentifier: string
- }
- EventBody: {
- reportingToken: string
- eventType: string
- message: string
- }
- CredentialsRequestBody: {
- projectToken: string
- }
- CredentialsResponseBody: {
- access_key_id: string
- secret_access_key: string
- session_token: string
- /** Format: date-time */
- expiry_time: string
- }
- UpdateAddonAdminBody: {
- addon_variant: components['schemas']['AddonVariantId']
- addon_type: components['schemas']['ProjectAddonType']
- /** @enum {string} */
- proration_behaviour?: 'prorate_and_invoice_end_of_cycle' | 'prorate_and_invoice_now'
- price_id?: string
- }
- SystemCreateProjectBody: {
- /** @description Database password */
- db_pass: string
- /** @description Name of your project, should not contain dots */
- name: string
- /** @description Slug of your organization */
- organization_id: string
- /**
- * @description Subscription plan
- * @example free
- * @enum {string}
- */
- plan: 'free' | 'pro'
- /**
- * @description Region you want your server to reside in
- * @example us-east-1
- * @enum {string}
- */
- region:
- | 'us-east-1'
- | 'us-west-1'
- | 'us-west-2'
- | 'ap-east-1'
- | 'ap-southeast-1'
- | 'ap-northeast-1'
- | 'ap-northeast-2'
- | 'ap-southeast-2'
- | 'eu-west-1'
- | 'eu-west-2'
- | 'eu-west-3'
- | 'eu-central-1'
- | 'ca-central-1'
- | 'ap-south-1'
- | 'sa-east-1'
- jwt_secret: string
- anon_key: string
- service_key: string
- api_key_supabase: string
- db_pass_supabase: string
- }
- SystemDatabaseResponse: {
- /** @description Database host */
- host: string
- /** @description Database version */
- version: string
- }
- SystemProjectResponse: {
- /** @description Id of your project */
- id: string
- /** @description Slug of your organization */
- organization_id: string
- /** @description Name of your project */
- name: string
- /**
- * @description Region of your project
- * @example us-east-1
- */
- region: string
- /**
- * @description Creation timestamp
- * @example 2023-03-29T16:32:59Z
- */
- created_at: string
- database?: components['schemas']['SystemDatabaseResponse']
- }
- UpdateSubscriptionV2AdminBody: {
- payment_method?: string
- /** @enum {string} */
- tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise'
- price_id?: string
- skip_free_plan_validations?: boolean
- }
- RestrictionData: {
- grace_period_end?: string
- /** @enum {string} */
- restrictions?: 'drop_requests_402'
- violations?: (
- | 'exceed_db_size_quota'
- | 'exceed_egress_quota'
- | 'exceed_edge_functions_count_quota'
- | 'exceed_edge_functions_invocations_quota'
- | 'exceed_monthly_active_users_quota'
- | 'exceed_realtime_connection_count_quota'
- | 'exceed_realtime_message_count_quota'
- | 'exceed_storage_size_quota'
- | 'overdue_payment'
- )[]
- }
- UpdateRestrictionsBody: {
- /** @enum {string} */
- restriction_status: 'grace_period' | 'grace_period_over' | 'null' | 'restricted'
- restriction_data?: components['schemas']['RestrictionData']
- no_notification?: boolean
- }
- UpdateRestrictionsResponse: {
- slug: string
- /** @enum {string} */
- restriction_status?: 'grace_period' | 'grace_period_over' | 'null' | 'restricted'
- restriction_data?: components['schemas']['RestrictionData']
- message?: string
- }
- AwsPartnerBillingBody: {
- aws_customer_id: string
- aws_customer_account_id: string
- aws_product_code: string
- aws_private_offer_id: string
- aws_subscription_start: string
- aws_subscription_end: string
- }
- CreateAwsPartnerOrganizationBody: {
- primary_email: string
- name: string
- partner_billing: components['schemas']['AwsPartnerBillingBody']
- }
- AwsPartnerOrganizationResponse: {
- id: number
- slug: string
- name: string
- }
- GetMetricsBody: {
- /** @enum {string} */
- metric: 'user_queries'
- /** @enum {string} */
- interval: '1d' | '3d' | '7d'
- project_refs: string[]
- region: string
- }
- ProjectMetric: {
- project_ref: string
- metric: string
- value: number
- }
- GetMetricsResponse: {
- metrics: components['schemas']['ProjectMetric'][]
- }
- BranchDetailResponse: {
- db_port: number
- ref: string
- postgres_version: string
- /** @enum {string} */
- status:
- | 'ACTIVE_HEALTHY'
- | 'ACTIVE_UNHEALTHY'
- | 'COMING_UP'
- | 'GOING_DOWN'
- | 'INACTIVE'
- | 'INIT_FAILED'
- | 'REMOVED'
- | 'RESTARTING'
- | 'UNKNOWN'
- | 'UPGRADING'
- | 'PAUSING'
- | 'RESTORING'
- | 'RESTORE_FAILED'
- | 'PAUSE_FAILED'
- db_host: string
- db_user?: string
- db_pass?: string
- jwt_secret?: string
- }
- UpdateBranchBody: {
- branch_name?: string
- git_branch?: string
- reset_on_push?: boolean
- persistent?: boolean
- }
- BranchResponse: {
- id: string
- name: string
- project_ref: string
- parent_project_ref: string
- is_default: boolean
- git_branch?: string
- pr_number?: number
- latest_check_run_id?: number
- reset_on_push: boolean
- persistent: boolean
- /** @enum {string} */
- status:
- | 'CREATING_PROJECT'
- | 'RUNNING_MIGRATIONS'
- | 'MIGRATIONS_PASSED'
- | 'MIGRATIONS_FAILED'
- | 'FUNCTIONS_DEPLOYED'
- | 'FUNCTIONS_FAILED'
- created_at: string
- updated_at: string
- }
- BranchDeleteResponse: {
- message: string
- }
- BranchResetResponse: {
- message: string
- }
- V1DatabaseResponse: {
- /** @description Database host */
- host: string
- /** @description Database version */
- version: string
- }
- V1ProjectResponse: {
- /** @description Id of your project */
- id: string
- /** @description Slug of your organization */
- organization_id: string
- /** @description Name of your project */
- name: string
- /**
- * @description Region of your project
- * @example us-east-1
- */
- region: string
- /**
- * @description Creation timestamp
- * @example 2023-03-29T16:32:59Z
- */
- created_at: string
- database?: components['schemas']['V1DatabaseResponse']
- /** @enum {string} */
- status:
- | 'ACTIVE_HEALTHY'
- | 'ACTIVE_UNHEALTHY'
- | 'COMING_UP'
- | 'GOING_DOWN'
- | 'INACTIVE'
- | 'INIT_FAILED'
- | 'REMOVED'
- | 'RESTARTING'
- | 'UNKNOWN'
- | 'UPGRADING'
- | 'PAUSING'
- | 'RESTORING'
- | 'RESTORE_FAILED'
- | 'PAUSE_FAILED'
- }
- V1CreateProjectBody: {
- /** @description Database password */
- db_pass: string
- /** @description Name of your project, should not contain dots */
- name: string
- /** @description Slug of your organization */
- organization_id: string
- /**
- * @deprecated
- * @description Subscription plan is now set on organization level and is ignored in this request
- * @example free
- * @enum {string}
- */
- plan?: 'free' | 'pro'
- /**
- * @description Region you want your server to reside in
- * @example us-east-1
- * @enum {string}
- */
- region:
- | 'us-east-1'
- | 'us-west-1'
- | 'us-west-2'
- | 'ap-east-1'
- | 'ap-southeast-1'
- | 'ap-northeast-1'
- | 'ap-northeast-2'
- | 'ap-southeast-2'
- | 'eu-west-1'
- | 'eu-west-2'
- | 'eu-west-3'
- | 'eu-central-1'
- | 'ca-central-1'
- | 'ap-south-1'
- | 'sa-east-1'
- /**
- * @deprecated
- * @description This field is deprecated and is ignored in this request
- */
- kps_enabled?: boolean
- desired_instance_size?: components['schemas']['DesiredInstanceSize']
- /**
- * @description Template URL used to create the project from the CLI.
- * @example https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone
- */
- template_url?: string
- }
- ApiKeyResponse: {
- name: string
- api_key: string
- }
- CreateBranchBody: {
- branch_name: string
- git_branch?: string
- region?: string
- }
- UpdateCustomHostnameResponse: {
- /** @enum {string} */
- status:
- | '1_not_started'
- | '2_initiated'
- | '3_challenge_verified'
- | '4_origin_setup_completed'
- | '5_services_reconfigured'
- custom_hostname: string
- data: Record
- }
- UpdateCustomHostnameBody: {
- custom_hostname: string
- }
- NetworkBanResponse: {
- banned_ipv4_addresses: string[]
- }
- RemoveNetworkBanRequest: {
- ipv4_addresses: string[]
- }
- NetworkRestrictionsRequest: {
- dbAllowedCidrs?: string[]
- dbAllowedCidrsV6?: string[]
- }
- NetworkRestrictionsResponse: {
- /** @enum {string} */
- entitlement: 'disallowed' | 'allowed'
- config: components['schemas']['NetworkRestrictionsRequest']
- old_config?: components['schemas']['NetworkRestrictionsRequest']
- /** @enum {string} */
- status: 'stored' | 'applied'
- }
- PgsodiumConfigResponse: {
- root_key: string
- }
- UpdatePgsodiumConfigBody: {
- root_key: string
- }
- PostgrestConfigWithJWTSecretResponse: {
- max_rows: number
- /** @description If `null`, the value is automatically configured based on compute size. */
- db_pool: number | null
- db_schema: string
- db_extra_search_path: string
- jwt_secret?: string
- }
- V1ProjectRefResponse: {
- id: number
- ref: string
- name: string
- }
- SslEnforcements: {
- database: boolean
- }
- SslEnforcementResponse: {
- currentConfig: components['schemas']['SslEnforcements']
- appliedSuccessfully: boolean
- }
- SslEnforcementRequest: {
- requestedConfig: components['schemas']['SslEnforcements']
- }
- TypescriptResponse: {
- types: string
- }
- VanitySubdomainConfigResponse: {
- /** @enum {string} */
- status: 'not-used' | 'custom-domain-used' | 'active'
- custom_domain?: string
- }
- VanitySubdomainBody: {
- vanity_subdomain: string
- }
- SubdomainAvailabilityResponse: {
- available: boolean
- }
- ActivateVanitySubdomainResponse: {
- custom_domain: string
- }
- UpgradeDatabaseBody: {
- target_version: number
- }
- ProjectUpgradeInitiateResponse: {
- tracking_id: string
- }
- ProjectVersion: {
- postgres_version: number
- app_version: string
- }
- ProjectUpgradeEligibilityResponse: {
- eligible: boolean
- current_app_version: string
- latest_app_version: string
- target_upgrade_versions: components['schemas']['ProjectVersion'][]
- potential_breaking_changes: string[]
- duration_estimate_hours: number
- legacy_auth_custom_roles: string[]
- extension_dependent_objects: string[]
- }
- DatabaseUpgradeStatus: {
- initiated_at: string
- target_version: number
- /** @enum {string} */
- error?:
- | '1_upgraded_instance_launch_failed'
- | '2_volume_detachchment_from_upgraded_instance_failed'
- | '3_volume_attachment_to_original_instance_failed'
- | '4_data_upgrade_initiation_failed'
- | '5_data_upgrade_completion_failed'
- | '6_volume_detachchment_from_original_instance_failed'
- | '7_volume_attachment_to_upgraded_instance_failed'
- | '8_upgrade_completion_failed'
- /** @enum {string} */
- progress?:
- | '0_requested'
- | '1_started'
- | '2_launched_upgraded_instance'
- | '3_detached_volume_from_upgraded_instance'
- | '4_attached_volume_to_original_instance'
- | '5_initiated_data_upgrade'
- | '6_completed_data_upgrade'
- | '7_detached_volume_from_original_instance'
- | '8_attached_volume_to_upgraded_instance'
- | '9_completed_upgrade'
- /** @enum {number} */
- status: 0 | 1 | 2
- }
- DatabaseUpgradeStatusResponse: {
- databaseUpgradeStatus: components['schemas']['DatabaseUpgradeStatus'] | null
- }
- ReadOnlyStatusResponse: {
- enabled: boolean
- override_enabled: boolean
- override_active_until: string
- }
- SetUpReadReplicaBody: {
- /**
- * @description Region you want your read replica to reside in
- * @example us-east-1
- * @enum {string}
- */
- read_replica_region:
- | 'us-east-1'
- | 'us-west-1'
- | 'us-west-2'
- | 'ap-east-1'
- | 'ap-southeast-1'
- | 'ap-northeast-1'
- | 'ap-northeast-2'
- | 'ap-southeast-2'
- | 'eu-west-1'
- | 'eu-west-2'
- | 'eu-west-3'
- | 'eu-central-1'
- | 'ca-central-1'
- | 'ap-south-1'
- | 'sa-east-1'
- }
- RemoveReadReplicaBody: {
- database_identifier: string
- }
- AuthHealthResponse: {
- name: string
- version: string
- description: string
- }
- RealtimeHealthResponse: {
- healthy: boolean
- db_connected: boolean
- connected_cluster: number
- }
- V1ServiceHealthResponse: {
- info?:
- | components['schemas']['AuthHealthResponse']
- | components['schemas']['RealtimeHealthResponse']
- /** @enum {string} */
- name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage'
- healthy: boolean
- /** @enum {string} */
- status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY'
- error?: string
- }
- V1PgbouncerConfigResponse: {
- /** @enum {string} */
- pool_mode?: 'transaction' | 'session' | 'statement'
- default_pool_size?: number
- ignore_startup_parameters?: string
- max_client_conn?: number
- connection_string?: string
+ AuditLogsResponse: {
+ result: Record[]
+ retention_period: number
}
AuthConfigResponse: {
api_max_request_duration: number | null
@@ -5297,20 +2164,20 @@ export interface components {
external_zoom_enabled: boolean | null
external_zoom_secret: string | null
hook_custom_access_token_enabled: boolean | null
- hook_custom_access_token_uri: string | null
hook_custom_access_token_secrets: string | null
+ hook_custom_access_token_uri: string | null
hook_mfa_verification_attempt_enabled: boolean | null
- hook_mfa_verification_attempt_uri: string | null
hook_mfa_verification_attempt_secrets: string | null
+ hook_mfa_verification_attempt_uri: string | null
hook_password_verification_attempt_enabled: boolean | null
- hook_password_verification_attempt_uri: string | null
hook_password_verification_attempt_secrets: string | null
- hook_send_sms_enabled: boolean | null
- hook_send_sms_uri: string | null
- hook_send_sms_secrets: string | null
+ hook_password_verification_attempt_uri: string | null
hook_send_email_enabled: boolean | null
- hook_send_email_uri: string | null
hook_send_email_secrets: string | null
+ hook_send_email_uri: string | null
+ hook_send_sms_enabled: boolean | null
+ hook_send_sms_secrets: string | null
+ hook_send_sms_uri: string | null
jwt_exp: number | null
mailer_allow_unverified_email_sign_ins: boolean | null
mailer_autoconfirm: boolean | null
@@ -5335,6 +2202,7 @@ export interface components {
password_required_characters: string | null
rate_limit_anonymous_users: number | null
rate_limit_email_sent: number | null
+ rate_limit_otp: number | null
rate_limit_sms_sent: number | null
rate_limit_token_refresh: number | null
rate_limit_verify: number | null
@@ -5382,401 +2250,103 @@ export interface components {
smtp_user: string | null
uri_allow_list: string | null
}
- UpdateAuthConfigBody: {
- site_url?: string
- disable_signup?: boolean
- jwt_exp?: number
- smtp_admin_email?: string
- smtp_host?: string
- smtp_port?: string
- smtp_user?: string
- smtp_pass?: string
- smtp_max_frequency?: number
- smtp_sender_name?: string
- mailer_allow_unverified_email_sign_ins?: boolean
- mailer_autoconfirm?: boolean
- mailer_subjects_invite?: string
- mailer_subjects_confirmation?: string
- mailer_subjects_recovery?: string
- mailer_subjects_email_change?: string
- mailer_subjects_magic_link?: string
- mailer_subjects_reauthentication?: string
- mailer_templates_invite_content?: string
- mailer_templates_confirmation_content?: string
- mailer_templates_recovery_content?: string
- mailer_templates_email_change_content?: string
- mailer_templates_magic_link_content?: string
- mailer_templates_reauthentication_content?: string
- mfa_max_enrolled_factors?: number
- uri_allow_list?: string
- external_anonymous_users_enabled?: boolean
- external_email_enabled?: boolean
- external_phone_enabled?: boolean
- saml_enabled?: boolean
- security_captcha_enabled?: boolean
- security_captcha_provider?: string
- security_captcha_secret?: string
- sessions_timebox?: number
- sessions_inactivity_timeout?: number
- sessions_single_per_user?: boolean
- sessions_tags?: string
- rate_limit_anonymous_users?: number
- rate_limit_email_sent?: number
- rate_limit_sms_sent?: number
- rate_limit_verify?: number
- rate_limit_token_refresh?: number
- mailer_secure_email_change_enabled?: boolean
- refresh_token_rotation_enabled?: boolean
- password_hibp_enabled?: boolean
- password_min_length?: number
- /** @enum {string} */
- password_required_characters?:
- | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
- | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
- | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~'
- | ''
- security_manual_linking_enabled?: boolean
- security_update_password_require_reauthentication?: boolean
- security_refresh_token_reuse_interval?: number
- mailer_otp_exp?: number
- mailer_otp_length?: number
- sms_autoconfirm?: boolean
- sms_max_frequency?: number
- sms_otp_exp?: number
- sms_otp_length?: number
- sms_provider?: string
- sms_messagebird_access_key?: string
- sms_messagebird_originator?: string
- sms_test_otp?: string
- sms_test_otp_valid_until?: string
- sms_textlocal_api_key?: string
- sms_textlocal_sender?: string
- sms_twilio_account_sid?: string
- sms_twilio_auth_token?: string
- sms_twilio_content_sid?: string
- sms_twilio_message_service_sid?: string
- sms_twilio_verify_account_sid?: string
- sms_twilio_verify_auth_token?: string
- sms_twilio_verify_message_service_sid?: string
- sms_vonage_api_key?: string
- sms_vonage_api_secret?: string
- sms_vonage_from?: string
- sms_template?: string
- hook_mfa_verification_attempt_enabled?: boolean
- hook_mfa_verification_attempt_uri?: string
- hook_mfa_verification_attempt_secrets?: string
- hook_password_verification_attempt_enabled?: boolean
- hook_password_verification_attempt_uri?: string
- hook_password_verification_attempt_secrets?: string
- hook_custom_access_token_enabled?: boolean
- hook_custom_access_token_uri?: string
- hook_custom_access_token_secrets?: string
- hook_send_sms_enabled?: boolean
- hook_send_sms_uri?: string
- hook_send_sms_secrets?: string
- hook_send_email_enabled?: boolean
- hook_send_email_uri?: string
- hook_send_email_secrets?: string
- external_apple_enabled?: boolean
- external_apple_client_id?: string
- external_apple_secret?: string
- external_apple_additional_client_ids?: string
- external_azure_enabled?: boolean
- external_azure_client_id?: string
- external_azure_secret?: string
- external_azure_url?: string
- external_bitbucket_enabled?: boolean
- external_bitbucket_client_id?: string
- external_bitbucket_secret?: string
- external_discord_enabled?: boolean
- external_discord_client_id?: string
- external_discord_secret?: string
- external_facebook_enabled?: boolean
- external_facebook_client_id?: string
- external_facebook_secret?: string
- external_figma_enabled?: boolean
- external_figma_client_id?: string
- external_figma_secret?: string
- external_github_enabled?: boolean
- external_github_client_id?: string
- external_github_secret?: string
- external_gitlab_enabled?: boolean
- external_gitlab_client_id?: string
- external_gitlab_secret?: string
- external_gitlab_url?: string
- external_google_enabled?: boolean
- external_google_client_id?: string
- external_google_secret?: string
- external_google_additional_client_ids?: string
- external_google_skip_nonce_check?: boolean
- external_kakao_enabled?: boolean
- external_kakao_client_id?: string
- external_kakao_secret?: string
- external_keycloak_enabled?: boolean
- external_keycloak_client_id?: string
- external_keycloak_secret?: string
- external_keycloak_url?: string
- external_linkedin_oidc_enabled?: boolean
- external_linkedin_oidc_client_id?: string
- external_linkedin_oidc_secret?: string
- external_notion_enabled?: boolean
- external_notion_client_id?: string
- external_notion_secret?: string
- external_slack_enabled?: boolean
- external_slack_client_id?: string
- external_slack_secret?: string
- external_spotify_enabled?: boolean
- external_spotify_client_id?: string
- external_spotify_secret?: string
- external_twitch_enabled?: boolean
- external_twitch_client_id?: string
- external_twitch_secret?: string
- external_twitter_enabled?: boolean
- external_twitter_client_id?: string
- external_twitter_secret?: string
- external_workos_enabled?: boolean
- external_workos_client_id?: string
- external_workos_secret?: string
- external_workos_url?: string
- external_zoom_enabled?: boolean
- external_zoom_client_id?: string
- external_zoom_secret?: string
- db_max_pool_size?: number
- api_max_request_duration?: number
+ AuthHealthResponse: {
+ description: string
+ name: string
+ version: string
}
- AttributeValue: {
- default?: Record | number | string | boolean
- name?: string
- names?: string[]
- array?: boolean
- }
- AttributeMapping: {
- keys: {
- [key: string]: components['schemas']['AttributeValue']
+ AutoApiService: {
+ app: {
+ id?: number
+ name?: string
}
+ app_config: Record
+ defaultApiKey: string
+ endpoint: string
+ id: number
+ name: string
+ project: {
+ ref?: string
+ }
+ protocol: string
+ restUrl: string
+ service_api_keys: components['schemas']['ServiceApiKey'][]
+ serviceApiKey: string
}
- CreateProviderBody: {
- /**
- * @description What type of provider will be created
- * @enum {string}
- */
- type: 'saml'
- metadata_xml?: string
- metadata_url?: string
- domains?: string[]
- attribute_mapping?: components['schemas']['AttributeMapping']
+ AvailableAddonResponse: {
+ name: string
+ type: components['schemas']['ProjectAddonType']
+ variants: components['schemas']['ProjectAddonVariantResponse'][]
}
- SamlDescriptor: {
- id: string
- entity_id: string
- metadata_url?: string
- metadata_xml?: string
- attribute_mapping?: components['schemas']['AttributeMapping']
+ AwsPartnerBillingBody: {
+ aws_customer_account_id: string
+ aws_customer_id: string
+ aws_private_offer_id: string
+ aws_product_code: string
+ aws_subscription_end: string
+ aws_subscription_start: string
}
- Domain: {
- id: string
- domain?: string
- created_at?: string
- updated_at?: string
- }
- CreateProviderResponse: {
- id: string
- saml?: components['schemas']['SamlDescriptor']
- domains?: components['schemas']['Domain'][]
- created_at?: string
- updated_at?: string
- }
- Provider: {
- id: string
- saml?: components['schemas']['SamlDescriptor']
- domains?: components['schemas']['Domain'][]
- created_at?: string
- updated_at?: string
- }
- ListProvidersResponse: {
- items: components['schemas']['Provider'][]
- }
- GetProviderResponse: {
- id: string
- saml?: components['schemas']['SamlDescriptor']
- domains?: components['schemas']['Domain'][]
- created_at?: string
- updated_at?: string
- }
- UpdateProviderBody: {
- metadata_xml?: string
- metadata_url?: string
- domains?: string[]
- attribute_mapping?: components['schemas']['AttributeMapping']
- }
- UpdateProviderResponse: {
- id: string
- saml?: components['schemas']['SamlDescriptor']
- domains?: components['schemas']['Domain'][]
- created_at?: string
- updated_at?: string
- }
- DeleteProviderResponse: {
- id: string
- saml?: components['schemas']['SamlDescriptor']
- domains?: components['schemas']['Domain'][]
- created_at?: string
- updated_at?: string
- }
- V1RunQueryBody: {
- query: string
- }
- V1Backup: {
- /** @enum {string} */
- status: 'COMPLETED' | 'FAILED' | 'PENDING' | 'REMOVED' | 'ARCHIVED'
- is_physical_backup: boolean
- inserted_at: string
- }
- V1PhysicalBackup: {
- earliest_physical_backup_date_unix?: number
- latest_physical_backup_date_unix?: number
- }
- V1BackupsResponse: {
- region: string
- walg_enabled: boolean
- pitr_enabled: boolean
- backups: components['schemas']['V1Backup'][]
- physical_backup_data: components['schemas']['V1PhysicalBackup']
- }
- V1RestorePitrBody: {
- recovery_time_target_unix: number
- }
- FunctionSlugResponse: {
- id: string
+ AwsPartnerOrganizationResponse: {
+ id: number
+ name: string
slug: string
- name: string
- /** @enum {string} */
- status: 'ACTIVE' | 'REMOVED' | 'THROTTLED'
- version: number
- created_at: number
- updated_at: number
- verify_jwt?: boolean
- import_map?: boolean
- entrypoint_path?: string
- import_map_path?: string
}
- V1StorageBucketResponse: {
- id: string
- name: string
- owner: string
- created_at: string
- updated_at: string
- public: boolean
- }
- OrganizationResponseV1: {
- id: string
- name: string
- }
- CreateOrganizationBodyV1: {
- name: string
- }
- V1OrganizationMemberResponse: {
- user_id: string
- user_name: string
- email?: string
- role_name: string
- mfa_enabled: boolean
- }
- V1OrganizationSlugResponse: {
- plan?: components['schemas']['BillingPlanId']
- opt_in_tags: 'AI_SQL_GENERATOR_OPT_IN'[]
- id: string
- name: string
- }
- OAuthTokenBody: {
- /** @enum {string} */
- grant_type: 'authorization_code' | 'refresh_token'
- client_id: string
- client_secret: string
- code?: string
- code_verifier?: string
- redirect_uri?: string
- refresh_token?: string
- }
- OAuthTokenResponse: {
- /** @enum {string} */
- token_type: 'Bearer'
- access_token: string
- refresh_token: string
- expires_in: number
- }
- SnippetProject: {
+ Backup: {
id: number
- name: string
+ inserted_at: string
+ isPhysicalBackup: boolean
+ project_id: number
+ status: Record
}
- SnippetUser: {
+ BackupId: {
id: number
- username: string
}
- SnippetMeta: {
- id: string
- inserted_at: string
- updated_at: string
- /** @enum {string} */
- type: 'sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
+ BackupsResponse: {
+ backups: components['schemas']['Backup'][]
+ physicalBackupData: {
+ earliestPhysicalBackupDateUnix?: number
+ latestPhysicalBackupDateUnix?: number
+ }
+ pitr_enabled: boolean
+ region: string
+ tierKey: string
+ walg_enabled: boolean
+ }
+ BillingCustomerUpdateBody: {
+ address?: components['schemas']['CustomerBillingAddress']
+ }
+ /** @enum {string} */
+ BillingPlanChangeType: 'upgrade' | 'downgrade' | 'none'
+ /** @enum {string} */
+ BillingPlanEffectiveAt: 'now' | 'end_of_billing_period' | 'none'
+ /** @enum {string} */
+ BillingPlanId: 'free' | 'pro' | 'team' | 'enterprise'
+ BillingProjectAddonResponse: {
+ addons: components['schemas']['SelectedAddonResponse'][]
name: string
- description?: string
- project: components['schemas']['SnippetProject']
- owner: components['schemas']['SnippetUser']
- updated_by: components['schemas']['SnippetUser']
+ ref: string
}
- SnippetList: {
- data: components['schemas']['SnippetMeta'][]
- }
- SnippetContent: {
- favorite: boolean
- schema_version: string
- sql: string
- }
- SnippetResponse: {
- id: string
- inserted_at: string
- updated_at: string
- /** @enum {string} */
- type: 'sql'
- /** @enum {string} */
- visibility: 'user' | 'project' | 'org' | 'public'
+ BillingSubscriptionAddon: {
name: string
- description?: string
- project: components['schemas']['SnippetProject']
- owner: components['schemas']['SnippetUser']
- updated_by: components['schemas']['SnippetUser']
- content: components['schemas']['SnippetContent']
+ price: number
+ supabase_prod_id: string
}
- ServiceHealthResponse: {
- /**
- * @description Service name
- * @enum {string}
- */
- name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage'
- /** @description Whether the service is healthy */
- healthy: boolean
- /**
- * @description Service health status
- * @example COMING_UP
- * @enum {string}
- */
- status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY'
- /** @description Service health check error */
- error?: string
+ BillingSubscriptionPlan: {
+ id: components['schemas']['BillingPlanId']
+ name: string
}
- ResourceWithServicesStatusResponse: {
- /** @description Supabase project instance compute size */
- compute: string
- /** @description Unique ID representing the fly extension */
- id: string
- /**
- * @description Supabase project status
- * @example ACTIVE_HEALTHY
- * @enum {string}
- */
+ BranchDeleteResponse: {
+ message: string
+ }
+ BranchDetailResponse: {
+ db_host: string
+ db_pass?: string
+ db_port: number
+ db_user?: string
+ jwt_secret?: string
+ postgres_version: string
+ ref: string
+ /** @enum {string} */
status:
| 'ACTIVE_HEALTHY'
| 'ACTIVE_UNHEALTHY'
@@ -5792,94 +2362,1239 @@ export interface components {
| 'RESTORING'
| 'RESTORE_FAILED'
| 'PAUSE_FAILED'
+ }
+ BranchResetResponse: {
+ message: string
+ }
+ BranchResponse: {
+ created_at: string
+ git_branch?: string
+ id: string
+ is_default: boolean
+ latest_check_run_id?: number
+ name: string
+ parent_project_ref: string
+ persistent: boolean
+ pr_number?: number
+ project_ref: string
+ reset_on_push: boolean
+ /** @enum {string} */
+ status:
+ | 'CREATING_PROJECT'
+ | 'RUNNING_MIGRATIONS'
+ | 'MIGRATIONS_PASSED'
+ | 'MIGRATIONS_FAILED'
+ | 'FUNCTIONS_DEPLOYED'
+ | 'FUNCTIONS_FAILED'
+ updated_at: string
+ }
+ Buffer: Record
+ BulkDeleteUserContentResponse: {
+ id: string
+ }
+ Column: {
+ id: number
+ name: string
+ schema: string
+ table: string
+ table_id: number
+ }
+ ColumnPrivilege: {
+ grantee: string
+ grantor: string
+ is_grantable: boolean
+ /** @enum {string} */
+ privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES'
+ }
+ CopyObjectBody: {
+ from: string
+ to: string
+ }
+ CopyObjectResponse: {
+ path: string
+ }
+ CreateAccessTokenBody: {
+ name: string
+ /** @enum {string} */
+ scope?: 'V0'
+ }
+ CreateAccessTokenResponse: {
+ created_at: string
+ id: number
+ name: string
+ /** @enum {string} */
+ scope?: 'V0'
+ token: string
+ token_alias: string
+ }
+ CreateAwsPartnerOrganizationBody: {
+ name: string
+ partner_billing: components['schemas']['AwsPartnerBillingBody']
+ primary_email: string
+ }
+ CreateBranchBody: {
+ branch_name: string
+ git_branch?: string
+ region?: string
+ }
+ CreateCliLoginSessionBody: {
+ public_key: string
+ session_id: string
+ token_name?: string
+ }
+ CreateColumnBody: {
+ check?: string
+ comment?: string
+ defaultValue?: Record
+ /** @enum {string} */
+ defaultValueFormat?: 'expression' | 'literal'
+ /** @enum {string} */
+ identityGeneration?: 'BY DEFAULT' | 'ALWAYS'
+ isIdentity?: boolean
+ isNullable?: boolean
+ isPrimaryKey?: boolean
+ isUnique?: boolean
+ name: string
+ tableId: number
+ type: string
+ }
+ CreateContentBody: {
+ content?: Record
+ description?: string
+ id?: string
+ name: string
+ owner_id?: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ CreateContentBodyV2: {
+ content?: Record
+ description?: string
+ folder_id?: string
+ id?: string
+ name: string
+ owner_id?: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ CreateContentFolderBody: {
+ name: string
+ parent_id?: string
+ }
+ CreateExtensionBody: {
+ cascade: boolean
+ name: string
+ schema: string
+ version: string
+ }
+ CreateFunctionBody: {
+ args: string[]
+ /** @enum {string} */
+ behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE'
+ config_params?: Record
+ definition: string
+ language: string
+ name: string
+ return_type: string
+ schema: string
+ security_definer: boolean
+ }
+ CreateGitHubAuthorizationBody: {
+ code: string
+ }
+ CreateGitHubConnectionsBody: {
+ installation_id: number
+ project_ref: string
+ repository_id: number
+ }
+ CreateInvitationBody: {
+ email: string
+ role_id: number
+ role_scoped_projects?: string[]
+ }
+ CreateOrganizationBody: {
+ kind?: string
+ name: string
+ payment_method?: string
+ size?: string
+ /** @enum {string} */
+ tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise'
+ }
+ CreateOrganizationBodyV1: {
+ name: string
+ }
+ CreatePolicyBody: {
+ /** @enum {string} */
+ action?: 'PERMISSIVE' | 'RESTRICTIVE'
+ check?: string
+ /** @enum {string} */
+ command?: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL'
+ definition?: string
+ name: string
+ roles?: string[]
+ schema?: string
+ table: string
+ }
+ CreateProjectBody: {
+ auth_site_url?: string
+ cloud_provider: string
+ custom_supabase_internal_requests?: components['schemas']['CustomSupabaseInternalRequests']
+ data_api_exposed_schemas?: string[]
+ db_pass: string
+ db_pricing_tier_id?: string
+ db_region: string
+ db_sql?: string
+ desired_instance_size?: components['schemas']['DesiredInstanceSize']
+ name: string
+ org_id: number
+ vercel_configuration_id?: string
+ }
+ CreateProjectResponse: {
+ anon_key: string
+ cloud_provider: string
+ disk_volume_size_gb?: number
+ endpoint: string
+ id: number
+ infra_compute_size?: components['schemas']['DbInstanceSize']
+ inserted_at: string
+ is_branch_enabled: boolean
+ is_physical_backups_enabled: boolean
+ name: string
+ organization_id: number
+ preview_branch_refs: string[]
+ ref: string
+ region: string
+ service_key: string
+ status: string
+ subscription_id: string
+ }
+ CreateProviderBody: {
+ attribute_mapping?: components['schemas']['AttributeMapping']
+ domains?: string[]
+ metadata_url?: string
+ metadata_xml?: string
/**
- * @description Supabase organization id
- * @example fly_123456789
+ * @description What type of provider will be created
+ * @enum {string}
*/
- supabase_org_id: string
- /** @description Supabase project services health status */
- services: components['schemas']['ServiceHealthResponse'][]
+ type: 'saml'
+ }
+ CreateProviderResponse: {
+ created_at?: string
+ domains?: components['schemas']['Domain'][]
+ id: string
+ saml?: components['schemas']['SamlDescriptor']
+ updated_at?: string
+ }
+ CreatePublicationBody: {
+ name: string
+ owner?: string
+ publish_delete?: boolean
+ publish_insert?: boolean
+ publish_truncate?: boolean
+ publish_update?: boolean
+ tables?: string[] | null
+ }
+ CreateRoleBody: {
+ admins?: string[]
+ can_bypass_rls?: boolean
+ can_create_db?: boolean
+ can_create_role?: boolean
+ can_login?: boolean
+ config?: Record
+ connection_limit?: number
+ inherit_role?: boolean
+ is_replication_role?: boolean
+ is_superuser?: boolean
+ member_of?: string[]
+ members?: string[]
+ name: string
+ password?: string
+ valid_until?: string
+ }
+ CreateSchemaBody: {
+ name: string
+ owner: string
+ }
+ CreateSecretBody: {
+ /**
+ * @description Secret name must not start with the SUPABASE_ prefix.
+ * @example string
+ */
+ name: string
+ value: string
+ }
+ CreateStorageBucketBody: {
+ allowed_mime_types: string[]
+ file_size_limit: number
+ id: string
+ public: boolean
+ }
+ CreateStorageCredentialBody: {
+ description: string
+ }
+ CreateStorageCredentialResponse: {
+ access_key: string
+ description: string
+ id: string
+ secret_key: string
+ }
+ CreateTableBody: {
+ comment?: string
+ name: string
+ schema?: string
+ }
+ CreateTaxIdBody: {
+ country?: string
+ type: string
+ value: string
+ }
+ CreateTaxIdResponse: {
+ country: string
+ created: number
+ id: string
+ type: string
+ value: string
+ }
+ CreateTriggerBody: {
+ /** @enum {string} */
+ activation: 'AFTER' | 'BEFORE'
+ /** @enum {string} */
+ enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED'
+ events: ('INSERT' | 'UPDATE' | 'DELETE')[]
+ function_args: string[]
+ function_name: string
+ function_schema: string
+ name: string
+ /** @enum {string} */
+ orientation: 'ROW' | 'STATEMENT'
+ schema: string
+ table: string
+ table_id?: number
+ }
+ CreateUserContentFolderResponse: {
+ id: string
+ name: string
+ owner_id: number
+ parent_id?: string | null
+ project_id: number
+ }
+ CreateVercelConnectionResponse: {
+ env_sync_error?: components['schemas']['SyncVercelEnvError']
+ id: string
+ }
+ CreateVercelConnectionsBody: {
+ connection: components['schemas']['IntegrationConnectionVercel']
+ organization_integration_id: string
+ }
+ CreateVercelEnvironmentVariableBody: {
+ key: string
+ target: string[]
+ type: string
+ value: string
+ }
+ CreateVercelIntegrationBody: {
+ code: string
+ configuration_id: string
+ metadata: Record
+ organization_slug: string
+ source: string
+ teamId?: string
+ }
+ CredentialsRequestBody: {
+ projectToken: string
+ }
+ CredentialsResponseBody: {
+ access_key_id: string
+ /** Format: date-time */
+ expiry_time: string
+ secret_access_key: string
+ session_token: string
+ }
+ CustomerBillingAddress: {
+ city?: string
+ country: string
+ line1: string
+ line2?: string
+ postal_code?: string
+ state?: string
+ }
+ CustomerResponse: {
+ address: components['schemas']['CustomerBillingAddress'] | null
+ balance: number
+ billing_via_partner: boolean
+ email: string
+ }
+ CustomSupabaseInternalRequests: {
+ ami: components['schemas']['AmiSearchOptions']
+ }
+ DatabaseDetailResponse: {
+ /** @enum {string} */
+ cloud_provider: 'AWS' | 'FLY'
+ connectionString: string
+ db_host: string
+ db_name: string
+ db_port: number
+ db_user: string
+ identifier: string
+ inserted_at: string
+ region: string
+ restUrl: string
+ size: string
+ /** @enum {string} */
+ status:
+ | 'ACTIVE_HEALTHY'
+ | 'ACTIVE_UNHEALTHY'
+ | 'COMING_UP'
+ | 'GOING_DOWN'
+ | 'INIT_FAILED'
+ | 'REMOVED'
+ | 'RESTORING'
+ | 'UNKNOWN'
+ | 'UPGRADING'
+ | 'INIT_READ_REPLICA'
+ | 'INIT_READ_REPLICA_FAILED'
+ }
+ DatabaseStatusResponse: {
+ identifier: string
+ replicaInitializationStatus?: Record
+ /** @enum {string} */
+ status:
+ | 'ACTIVE_HEALTHY'
+ | 'ACTIVE_UNHEALTHY'
+ | 'COMING_UP'
+ | 'GOING_DOWN'
+ | 'INIT_FAILED'
+ | 'REMOVED'
+ | 'RESTORING'
+ | 'UNKNOWN'
+ | 'UPGRADING'
+ | 'INIT_READ_REPLICA'
+ | 'INIT_READ_REPLICA_FAILED'
+ }
+ DatabaseUpgradeStatus: {
+ /** @enum {string} */
+ error?:
+ | '1_upgraded_instance_launch_failed'
+ | '2_volume_detachchment_from_upgraded_instance_failed'
+ | '3_volume_attachment_to_original_instance_failed'
+ | '4_data_upgrade_initiation_failed'
+ | '5_data_upgrade_completion_failed'
+ | '6_volume_detachchment_from_original_instance_failed'
+ | '7_volume_attachment_to_upgraded_instance_failed'
+ | '8_upgrade_completion_failed'
+ initiated_at: string
+ /** @enum {string} */
+ progress?:
+ | '0_requested'
+ | '1_started'
+ | '2_launched_upgraded_instance'
+ | '3_detached_volume_from_upgraded_instance'
+ | '4_attached_volume_to_original_instance'
+ | '5_initiated_data_upgrade'
+ | '6_completed_data_upgrade'
+ | '7_detached_volume_from_original_instance'
+ | '8_attached_volume_to_upgraded_instance'
+ | '9_completed_upgrade'
+ /** @enum {number} */
+ status: 0 | 1 | 2
+ target_version: number
+ }
+ DatabaseUpgradeStatusResponse: {
+ databaseUpgradeStatus: components['schemas']['DatabaseUpgradeStatus'] | null
+ }
+ /** @enum {string} */
+ DbInstanceSize:
+ | 'nano'
+ | 'micro'
+ | 'small'
+ | 'medium'
+ | 'large'
+ | 'xlarge'
+ | '2xlarge'
+ | '4xlarge'
+ | '8xlarge'
+ | '12xlarge'
+ | '16xlarge'
+ DeleteObjectsBody: {
+ paths: string[]
+ }
+ DeleteProviderResponse: {
+ created_at?: string
+ domains?: components['schemas']['Domain'][]
+ id: string
+ saml?: components['schemas']['SamlDescriptor']
+ updated_at?: string
+ }
+ DeleteTaxIdBody: {
+ id: string
+ }
+ DeleteVercelConnectionResponse: {
+ id: string
}
/**
- * @description Organization subscription plan
+ * @description Desired instance size, will use default size if not defined. Paid plans only.
* @enum {string}
*/
- SelfServePlanId: 'free' | 'pro' | 'team'
- FlyResourceProvisioningBody: {
- /** @description A UNIX epoch timestamp value */
- timestamp: number
- /** @description A random unique string identifying the individual request */
- nonce: string
- /** @description The full request target URL */
- url: string
- /** @description Name of the extension */
+ DesiredInstanceSize:
+ | 'micro'
+ | 'small'
+ | 'medium'
+ | 'large'
+ | 'xlarge'
+ | '2xlarge'
+ | '4xlarge'
+ | '8xlarge'
+ | '12xlarge'
+ | '16xlarge'
+ DetachPaymentMethodBody: {
+ card_id: string
+ }
+ Domain: {
+ created_at?: string
+ domain?: string
+ id: string
+ updated_at?: string
+ }
+ DownloadBackupBody: {
+ data: Record
+ id: number
+ inserted_at: string
+ project_id: number
+ s3_bucket: string
+ s3_path: string
+ status: string
+ }
+ DownloadBackupResponse: {
+ fileUrl: string
+ }
+ DownloadObjectBody: {
+ options?: components['schemas']['DownloadObjectOptions']
+ path: string
+ }
+ DownloadObjectOptions: {
+ download?: boolean
+ downloadName?: string
+ transform?: components['schemas']['StorageObjectTransformOptions']
+ }
+ EventBody: {
+ eventType: string
+ message: string
+ reportingToken: string
+ }
+ FlyOrganization: {
+ free_db_eligible: boolean
+ id: string
name: string
+ plan: components['schemas']['BillingPlanId']
+ supabase_org_id: string
+ }
+ FlyResourceProvisioningBody: {
+ /** @description Database password (Optional, don't send to generate one) */
+ db_pass?: string
+ /** @example large */
+ desired_instance_size?: components['schemas']['DesiredInstanceSize']
/** @description Unique ID representing the extension */
id: string
+ /** @description An IPv6 address on the customer network assigned to this extension */
+ ip_address: string
+ /** @description Name of the extension */
+ name: string
+ /** @description A random unique string identifying the individual request */
+ nonce: string
/** @description Unique ID representing an organization */
organization_id: string
/** @description Display name for an organization */
organization_name: string
- /** @description Obfuscated email that routes to the provisioning user */
- user_email: string
- /** @description Unique ID representing an user */
- user_id: string
+ /** @example pro */
+ organization_plan?: components['schemas']['SelfServePlanId']
/** @description The three-letter, primary Fly.io region where the target app intends to write from */
primary_region: string
- /** @description An IPv6 address on the customer network assigned to this extension */
- ip_address: string
/**
* @description An array of Fly.io region codes where read replicas should be provisioned
* @default []
*/
read_regions: string[]
- /** @description Database password (Optional, don't send to generate one) */
- db_pass?: string
- /** @example large */
- desired_instance_size?: components['schemas']['DesiredInstanceSize']
- /** @example pro */
- organization_plan?: components['schemas']['SelfServePlanId']
+ /** @description A UNIX epoch timestamp value */
+ timestamp: number
+ /** @description The full request target URL */
+ url: string
+ /** @description Obfuscated email that routes to the provisioning user */
+ user_email: string
+ /** @description Unique ID representing an user */
+ user_id: string
user_name: string
}
- ResourceProvisioningConfigResponse: {
- /**
- * @description PSQL connection string
- * @example postgresql://postgres:dbpass@db.abcdefghijklmnop.supabase.co:5432/postgres
- */
- DATABASE_URL: string
- /**
- * @description Pooler connection string
- * @example postgres://postgres.abcdefghijklmnop:dbpass@aws-0-us-east-1.pooler.supabase.com:6543/postgres
- */
- DATABASE_POOLER_URL: string
+ FlyUpdateOrganizationSubscriptionBody: {
+ /** @description A random unique string identifying the individual request */
+ nonce: string
+ /** @example pro */
+ plan: components['schemas']['SelfServePlanId']
+ /** @description A UNIX epoch timestamp value */
+ timestamp: number
+ /** @description The full request target URL */
+ url: string
}
- ResourceProvisioningResponse: {
- /** @description Supabase envs config */
- config: components['schemas']['ResourceProvisioningConfigResponse']
- /**
- * @description The target Fly application for internal traffic
- * @example ext-db-pgshhamktpsgnptvcadw
- */
- fly_app_name: string
- /**
- * @description Supabase project id
- * @example pgshhamktpsgnptvcadw
- */
- id: string
- /** @description Welcome message */
- message: string
- /**
- * @description Supabase organization id
- * @example fly_123456789
- */
- supabase_org_id: string
+ FormatQueryBody: {
+ query: string
}
- FlyOrganization: {
- plan: components['schemas']['BillingPlanId']
+ FunctionResponse: {
+ created_at: number
+ entrypoint_path?: string
id: string
- supabase_org_id: string
+ import_map?: boolean
+ import_map_path?: string
name: string
- free_db_eligible: boolean
+ slug: string
+ /** @enum {string} */
+ status: 'ACTIVE' | 'REMOVED' | 'THROTTLED'
+ updated_at: number
+ verify_jwt?: boolean
+ version: number
+ }
+ FunctionSlugResponse: {
+ created_at: number
+ entrypoint_path?: string
+ id: string
+ import_map?: boolean
+ import_map_path?: string
+ name: string
+ slug: string
+ /** @enum {string} */
+ status: 'ACTIVE' | 'REMOVED' | 'THROTTLED'
+ updated_at: number
+ verify_jwt?: boolean
+ version: number
+ }
+ GetMetricsBody: {
+ /** @enum {string} */
+ interval: '1d' | '3d' | '7d'
+ /** @enum {string} */
+ metric: 'user_queries'
+ project_refs: string[]
+ region: string
+ }
+ GetMetricsResponse: {
+ metrics: components['schemas']['ProjectMetric'][]
+ }
+ GetObjectsBody: {
+ options: components['schemas']['StorageObjectSearchOptions']
+ path: string
+ }
+ GetOrganizationByFlyOrganizationIdResponse: {
+ slug: string
+ }
+ GetOrganizationIntegrationResponse: {
+ added_by: {
+ primary_email?: string
+ username?: string
+ }
+ connections: components['schemas']['ProjectIntegrationConnection'][]
+ id: string
+ inserted_at: string
+ integration: {
+ name?: string
+ }
+ metadata: Record
+ organization: {
+ slug?: string
+ }
+ updated_at: string
+ }
+ GetProjectByFlyExtensionIdResponse: {
+ ref: string
+ }
+ GetProviderResponse: {
+ created_at?: string
+ domains?: components['schemas']['Domain'][]
+ id: string
+ saml?: components['schemas']['SamlDescriptor']
+ updated_at?: string
+ }
+ GetPublicUrlBody: {
+ options?: components['schemas']['PublicUrlOptions']
+ path: string
+ }
+ GetSignedUrlBody: {
+ expiresIn: number
+ options?: components['schemas']['SignedUrlOptions']
+ path: string
+ }
+ GetSignedUrlsBody: {
+ expiresIn: number
+ options?: components['schemas']['SignedUrlsOptions']
+ path: string[]
+ }
+ GetStorageCredential: {
+ created_at: string
+ description: string
+ id: string
+ }
+ GetStorageCredentialsResponse: {
+ data: components['schemas']['GetStorageCredential'][]
+ }
+ GetSubscriptionResponse: {
+ addons: components['schemas']['BillingSubscriptionAddon'][]
+ billing_cycle_anchor: number
+ /** @enum {string} */
+ billing_partner: 'fly' | 'aws'
+ billing_via_partner: boolean
+ current_period_end: number
+ current_period_start: number
+ customer_balance: number
+ nano_enabled: boolean
+ next_invoice_at: number
+ payment_method_type: string
+ plan: components['schemas']['BillingSubscriptionPlan']
+ project_addons: components['schemas']['BillingProjectAddonResponse'][]
+ scheduled_plan_change: components['schemas']['ScheduledPlanChange'] | null
+ usage_billing_enabled: boolean
+ }
+ GetUserContentByIdResponse: {
+ content: Record
+ description?: string
+ folder_id?: string
+ id: string
+ inserted_at: string
+ last_updated_by?: number
+ name: string
+ owner_id: number
+ project_id: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ updated_at: string
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ GetUserContentFolderResponse: {
+ data: {
+ contents?: components['schemas']['UserContentObjectMeta'][]
+ folders?: components['schemas']['UserContentFolder'][]
+ }
+ }
+ GetUserContentObject: {
+ content: Record
+ description?: string
+ id: string
+ inserted_at: string
+ last_updated_by?: number
+ name: string
+ owner: {
+ id?: number
+ username?: string
+ }
+ owner_id: number
+ project_id: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ updated_at: string
+ updated_by: {
+ id?: number
+ username?: string
+ }
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ GetUserContentResponse: {
+ data: components['schemas']['GetUserContentObject'][]
+ }
+ GetUserOrganizationIntegrationResponse: {
+ added_by: {
+ primary_email?: string
+ username?: string
+ }
+ id: string
+ inserted_at: string
+ integration: {
+ name?: string
+ }
+ metadata: Record
+ organization: {
+ slug?: string
+ }
+ updated_at: string
+ }
+ GetVercelConnections: {
+ foreign_project_id: string
+ id: string
+ inserted_at: string
+ metadata: Record
+ organization_integration_id: string
+ supabase_project_ref: string
+ updated_at: string
+ }
+ GetVercelProjectsResponse: {
+ pagination: {
+ count?: number
+ next?: number | null
+ prev?: number | null
+ }
+ projects: components['schemas']['IntegrationVercelProject'][]
+ }
+ GitHubAuthorization: {
+ id: number
+ sender_id: number
+ user_id: number
+ }
+ GoogleAnalyticBody: {
+ language?: string
+ screen_resolution?: string
+ session_id: string
+ }
+ GoTrueConfigResponse: {
+ API_MAX_REQUEST_DURATION: number | null
+ DB_MAX_POOL_SIZE: number | null
+ DISABLE_SIGNUP: boolean
+ EXTERNAL_ANONYMOUS_USERS_ENABLED: boolean
+ EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS: string
+ EXTERNAL_APPLE_CLIENT_ID: string
+ EXTERNAL_APPLE_ENABLED: boolean
+ EXTERNAL_APPLE_SECRET: string
+ EXTERNAL_AZURE_CLIENT_ID: string
+ EXTERNAL_AZURE_ENABLED: boolean
+ EXTERNAL_AZURE_SECRET: string
+ EXTERNAL_AZURE_URL: string
+ EXTERNAL_BITBUCKET_CLIENT_ID: string
+ EXTERNAL_BITBUCKET_ENABLED: boolean
+ EXTERNAL_BITBUCKET_SECRET: string
+ EXTERNAL_DISCORD_CLIENT_ID: string
+ EXTERNAL_DISCORD_ENABLED: boolean
+ EXTERNAL_DISCORD_SECRET: string
+ EXTERNAL_EMAIL_ENABLED: boolean
+ EXTERNAL_FACEBOOK_CLIENT_ID: string
+ EXTERNAL_FACEBOOK_ENABLED: boolean
+ EXTERNAL_FACEBOOK_SECRET: string
+ EXTERNAL_FIGMA_CLIENT_ID: string
+ EXTERNAL_FIGMA_ENABLED: boolean
+ EXTERNAL_FIGMA_SECRET: string
+ EXTERNAL_GITHUB_CLIENT_ID: string
+ EXTERNAL_GITHUB_ENABLED: boolean
+ EXTERNAL_GITHUB_SECRET: string
+ EXTERNAL_GITLAB_CLIENT_ID: string
+ EXTERNAL_GITLAB_ENABLED: boolean
+ EXTERNAL_GITLAB_SECRET: string
+ EXTERNAL_GITLAB_URL: string
+ EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS: string
+ EXTERNAL_GOOGLE_CLIENT_ID: string
+ EXTERNAL_GOOGLE_ENABLED: boolean
+ EXTERNAL_GOOGLE_SECRET: string
+ EXTERNAL_GOOGLE_SKIP_NONCE_CHECK: boolean
+ EXTERNAL_KAKAO_CLIENT_ID: string
+ EXTERNAL_KAKAO_ENABLED: boolean
+ EXTERNAL_KAKAO_SECRET: string
+ EXTERNAL_KEYCLOAK_CLIENT_ID: string
+ EXTERNAL_KEYCLOAK_ENABLED: boolean
+ EXTERNAL_KEYCLOAK_SECRET: string
+ EXTERNAL_KEYCLOAK_URL: string
+ EXTERNAL_LINKEDIN_OIDC_CLIENT_ID: string
+ EXTERNAL_LINKEDIN_OIDC_ENABLED: boolean
+ EXTERNAL_LINKEDIN_OIDC_SECRET: string
+ EXTERNAL_NOTION_CLIENT_ID: string
+ EXTERNAL_NOTION_ENABLED: boolean
+ EXTERNAL_NOTION_SECRET: string
+ EXTERNAL_PHONE_ENABLED: boolean
+ EXTERNAL_SLACK_CLIENT_ID: string
+ EXTERNAL_SLACK_ENABLED: boolean
+ EXTERNAL_SLACK_SECRET: string
+ EXTERNAL_SPOTIFY_CLIENT_ID: string
+ EXTERNAL_SPOTIFY_ENABLED: boolean
+ EXTERNAL_SPOTIFY_SECRET: string
+ EXTERNAL_TWITCH_CLIENT_ID: string
+ EXTERNAL_TWITCH_ENABLED: boolean
+ EXTERNAL_TWITCH_SECRET: string
+ EXTERNAL_TWITTER_CLIENT_ID: string
+ EXTERNAL_TWITTER_ENABLED: boolean
+ EXTERNAL_TWITTER_SECRET: string
+ EXTERNAL_WORKOS_CLIENT_ID: string
+ EXTERNAL_WORKOS_ENABLED: boolean
+ EXTERNAL_WORKOS_SECRET: string
+ EXTERNAL_WORKOS_URL: string
+ EXTERNAL_ZOOM_CLIENT_ID: string
+ EXTERNAL_ZOOM_ENABLED: boolean
+ EXTERNAL_ZOOM_SECRET: string
+ HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: boolean
+ HOOK_CUSTOM_ACCESS_TOKEN_SECRETS: string
+ HOOK_CUSTOM_ACCESS_TOKEN_URI: string
+ HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED: boolean
+ HOOK_MFA_VERIFICATION_ATTEMPT_SECRETS: string
+ HOOK_MFA_VERIFICATION_ATTEMPT_URI: string
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED: boolean
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_SECRETS: string
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI: string
+ HOOK_SEND_EMAIL_ENABLED: boolean
+ HOOK_SEND_EMAIL_SECRETS: string
+ HOOK_SEND_EMAIL_URI: string
+ HOOK_SEND_SMS_ENABLED: boolean
+ HOOK_SEND_SMS_SECRETS: string
+ HOOK_SEND_SMS_URI: string
+ JWT_EXP: number
+ MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS: boolean
+ MAILER_AUTOCONFIRM: boolean
+ MAILER_OTP_EXP: number
+ MAILER_OTP_LENGTH: number
+ MAILER_SECURE_EMAIL_CHANGE_ENABLED: boolean
+ MAILER_SUBJECTS_CONFIRMATION: string
+ MAILER_SUBJECTS_EMAIL_CHANGE: string
+ MAILER_SUBJECTS_INVITE: string
+ MAILER_SUBJECTS_MAGIC_LINK: string
+ MAILER_SUBJECTS_REAUTHENTICATION: string
+ MAILER_SUBJECTS_RECOVERY: string
+ MAILER_TEMPLATES_CONFIRMATION_CONTENT: string
+ MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT: string
+ MAILER_TEMPLATES_INVITE_CONTENT: string
+ MAILER_TEMPLATES_MAGIC_LINK_CONTENT: string
+ MAILER_TEMPLATES_REAUTHENTICATION_CONTENT: string
+ MAILER_TEMPLATES_RECOVERY_CONTENT: string
+ MFA_MAX_ENROLLED_FACTORS: number
+ PASSWORD_HIBP_ENABLED: boolean
+ PASSWORD_MIN_LENGTH: number
+ PASSWORD_REQUIRED_CHARACTERS: string
+ RATE_LIMIT_ANONYMOUS_USERS: number
+ RATE_LIMIT_EMAIL_SENT: number
+ RATE_LIMIT_OTP: number
+ RATE_LIMIT_SMS_SENT: number
+ RATE_LIMIT_TOKEN_REFRESH: number
+ RATE_LIMIT_VERIFY: number
+ REFRESH_TOKEN_ROTATION_ENABLED: boolean
+ SAML_ENABLED: boolean
+ SECURITY_CAPTCHA_ENABLED: boolean
+ SECURITY_CAPTCHA_PROVIDER: string
+ SECURITY_CAPTCHA_SECRET: string
+ SECURITY_MANUAL_LINKING_ENABLED: boolean
+ SECURITY_REFRESH_TOKEN_REUSE_INTERVAL: number
+ SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION: boolean
+ SESSIONS_INACTIVITY_TIMEOUT: number
+ SESSIONS_SINGLE_PER_USER: boolean
+ SESSIONS_TAGS: string
+ SESSIONS_TIMEBOX: number
+ SITE_URL: string
+ SMS_AUTOCONFIRM: boolean
+ SMS_MAX_FREQUENCY: number
+ SMS_MESSAGEBIRD_ACCESS_KEY: string
+ SMS_MESSAGEBIRD_ORIGINATOR: string
+ SMS_OTP_EXP: number
+ SMS_OTP_LENGTH: number
+ SMS_PROVIDER: string
+ SMS_TEMPLATE: string
+ SMS_TEST_OTP: string
+ SMS_TEST_OTP_VALID_UNTIL: string
+ SMS_TEXTLOCAL_API_KEY: string
+ SMS_TEXTLOCAL_SENDER: string
+ SMS_TWILIO_ACCOUNT_SID: string
+ SMS_TWILIO_AUTH_TOKEN: string
+ SMS_TWILIO_CONTENT_SID: string
+ SMS_TWILIO_MESSAGE_SERVICE_SID: string
+ SMS_TWILIO_VERIFY_ACCOUNT_SID: string
+ SMS_TWILIO_VERIFY_AUTH_TOKEN: string
+ SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID: string
+ SMS_VONAGE_API_KEY: string
+ SMS_VONAGE_API_SECRET: string
+ SMS_VONAGE_FROM: string
+ SMTP_ADMIN_EMAIL: string
+ SMTP_HOST: string
+ SMTP_MAX_FREQUENCY: number
+ SMTP_PASS: string
+ SMTP_PORT: string
+ SMTP_SENDER_NAME: string
+ SMTP_USER: string
+ URI_ALLOW_LIST: string
+ }
+ GrantColumnPrivilegesBody: {
+ column_id: string
+ grantee: string
+ is_grantable?: boolean
+ /** @enum {string} */
+ privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES'
+ }
+ GrantTablePrivilegesBody: {
+ grantee: string
+ is_grantable?: boolean
+ /** @enum {string} */
+ privilege_type:
+ | 'ALL'
+ | 'SELECT'
+ | 'INSERT'
+ | 'UPDATE'
+ | 'DELETE'
+ | 'TRUNCATE'
+ | 'REFERENCES'
+ | 'TRIGGER'
+ relation_id: number
+ }
+ HCaptchaBody: {
+ hcaptchaToken: string
+ }
+ HealthResponse: {
+ healthy: boolean
+ }
+ IdentifyUserBody: {
+ auth0_id?: string
+ first_name?: string
+ free_project_limit?: number
+ gotrue_id: string
+ id: number
+ is_alpha_user?: boolean
+ last_name?: string
+ mobile?: string
+ primary_email: string
+ username?: string
+ }
+ IntegrationConnectionVercel: {
+ foreign_project_id: string
+ metadata: Record
+ supabase_project_ref: string
+ }
+ IntegrationVercelProject: {
+ framework?: string | null
+ id: string
+ link?: components['schemas']['VercelProjectLink']
+ name: string
+ }
+ Invitation: {
+ id: number
+ invited_at: string
+ invited_email: string
+ role_id: number
+ }
+ InvitationByTokenResponse: {
+ authorized_user: boolean
+ email_match: boolean
+ expired_token: boolean
+ invite_id?: number
+ organization_name: string
+ token_does_not_exist: boolean
+ }
+ InvitationResponse: {
+ invitations: components['schemas']['Invitation'][]
+ }
+ Invite: {
+ invited_at: string
+ invited_email: string
+ invited_id: number
+ role_id: number
+ }
+ InviteResponse: {
+ authorized_user: boolean
+ email_match: boolean
+ expired_token: boolean
+ invite_id: string
+ organization_name: string
+ sso_mismatch: boolean
+ token_does_not_exist: boolean
+ }
+ InviteUserBody: {
+ invited_email: string
+ owner_id: number
+ role_id: number
+ }
+ Invoice: {
+ id: string
+ invoice_pdf: string
+ number: string
+ period_end: number
+ status: string
+ subscription: string | null
+ subtotal: number
+ }
+ JoinResponse: {
+ billing_email: string
+ id: number
+ name: string
+ slug: string
+ stripe_customer_id: string
+ }
+ JwtSecretUpdateStatus: {
+ jwtSecretUpdateStatus: {
+ change_tracking_id?: string
+ /** @enum {number} */
+ error?: 0 | 1 | 2 | 3 | 4 | 5
+ /** @enum {number} */
+ progress?: 0 | 1 | 2 | 3 | 4 | 5
+ /** @enum {number} */
+ status?: 0 | 1 | 2
+ }
+ }
+ LFAccessToken: {
+ description: string | null
+ id: number
+ inserted_at: string
+ scopes: string
+ token: string
+ }
+ LFEndpoint: {
+ cache_duration_seconds: number
+ description: string
+ enable_auth: number
+ id: number
+ language: Record
+ max_limit: number
+ name: string
+ proactive_requerying_seconds: number
+ query: string
+ sandboxable: boolean | null
+ token: string
+ }
+ LFSource: {
+ bigquery_table_ttl: number
+ custom_event_message_keys: string | null
+ favourite: boolean
+ id: number
+ name: string
+ public_token: string | null
+ slack_hook_url: string | null
+ token: string
+ webhook_notification_url: string | null
+ }
+ LFUser: {
+ bigquery_dataset_id: string | null
+ bigquery_dataset_location: string | null
+ bigquery_project_id: string | null
+ company: string | null
+ email: string | null
+ email_me_product: string | null
+ metadata: {
+ project_ref?: string
+ }
+ phone: string | null
+ token: string
+ }
+ ListGitHubConnectionsConnection: {
+ branch_limit: number
+ id: number
+ inserted_at: string
+ installation_id: number
+ project: components['schemas']['ListGitHubConnectionsProject']
+ repository: components['schemas']['ListGitHubConnectionsRepository']
+ supabase_changes_only: boolean
+ updated_at: string
+ user: components['schemas']['ListGitHubConnectionsUser'] | null
+ workdir: string
+ }
+ ListGitHubConnectionsProject: {
+ id: number
+ name: string
+ ref: string
+ }
+ ListGitHubConnectionsRepository: {
+ id: number
+ name: string
+ }
+ ListGitHubConnectionsResponse: {
+ connections: components['schemas']['ListGitHubConnectionsConnection'][]
+ }
+ ListGitHubConnectionsUser: {
+ id: number
+ primary_email: string | null
+ username: string
+ }
+ ListProvidersResponse: {
+ items: components['schemas']['Provider'][]
+ }
+ LoadBalancerDatabase: {
+ identifier: string
+ status: string
+ /** @enum {string} */
+ type: 'PRIMARY' | 'READ_REPLICA'
+ }
+ LoadBalancerDetailResponse: {
+ databases: components['schemas']['LoadBalancerDatabase'][]
+ endpoint: string
+ }
+ MarkDefaultPaymentMethodBody: {
+ payment_method_id: string
+ }
+ Member: {
+ gotrue_id: string
+ mfa_enabled: boolean
+ primary_email: string | null
+ role_ids: number[]
+ username: string
+ }
+ MemberExceedingFreeProjectLimit: {
+ limit: number
+ name: string
+ }
+ MemberWithFreeProjectLimit: {
+ free_project_limit: number
+ primary_email: string
+ username: string
+ }
+ MoveObjectBody: {
+ from: string
+ to: string
+ }
+ NetworkBanResponse: {
+ banned_ipv4_addresses: string[]
+ }
+ NetworkRestrictionsRequest: {
+ dbAllowedCidrs?: string[]
+ dbAllowedCidrsV6?: string[]
+ }
+ NetworkRestrictionsResponse: {
+ config: components['schemas']['NetworkRestrictionsRequest']
+ /** @enum {string} */
+ entitlement: 'disallowed' | 'allowed'
+ old_config?: components['schemas']['NetworkRestrictionsRequest']
+ /** @enum {string} */
+ status: 'stored' | 'applied'
+ }
+ NotificationAction: {
+ action_type?: string
+ label: string
+ url?: string
+ }
+ NotificationData: {
+ actions?: components['schemas']['NotificationAction'][]
+ message?: string
+ org_slug?: string
+ project_ref?: string
+ title: string
+ }
+ NotificationResponseV1: {
+ data: Record
+ id: string
+ inserted_at: string
+ meta: Record
+ notification_name: string
+ notification_status: string
+ project_id: number
+ }
+ NotificationResponseV2: {
+ data: components['schemas']['NotificationData']
+ id: string
+ inserted_at: string
+ meta: Record
+ name: string
+ /** @enum {string} */
+ priority: 'Critical' | 'Warning' | 'Info'
+ /** @enum {string} */
+ status: 'new' | 'seen' | 'archived'
+ }
+ NotificationsSummary: {
+ has_critical: boolean
+ has_warning: boolean
+ unread_count: number
+ }
+ OAuthTokenBody: {
+ client_id: string
+ client_secret: string
+ code?: string
+ code_verifier?: string
+ /** @enum {string} */
+ grant_type: 'authorization_code' | 'refresh_token'
+ redirect_uri?: string
+ refresh_token?: string
+ }
+ OAuthTokenResponse: {
+ access_token: string
+ expires_in: number
+ refresh_token: string
+ /** @enum {string} */
+ token_type: 'Bearer'
}
OrganizationExtensionStatus: {
/** @description Supabase project instance compute size */
@@ -5912,17 +3627,773 @@ export interface components {
*/
supabase_org_id: string
}
- FlyUpdateOrganizationSubscriptionBody: {
- /** @description A UNIX epoch timestamp value */
- timestamp: number
- /** @description A random unique string identifying the individual request */
- nonce: string
- /** @description The full request target URL */
- url: string
- /** @example pro */
- plan: components['schemas']['SelfServePlanId']
+ OrganizationResponse: {
+ billing_email: string | null
+ id: number
+ is_owner: boolean
+ name: string
+ opt_in_tags: string[]
+ restriction_data: Record
+ /** @enum {string|null} */
+ restriction_status: 'grace_period' | 'grace_period_over' | 'restricted' | null
+ slug: string
+ stripe_customer_id: string | null
+ subscription_id: string | null
+ }
+ OrganizationResponseV1: {
+ id: string
+ name: string
+ }
+ OrganizationRole: {
+ description: string
+ id: number
+ name: string
+ }
+ OrganizationRoleResponseV2: {
+ org_scoped_roles: components['schemas']['OrganizationRoleV2'][]
+ project_scoped_roles: components['schemas']['OrganizationRoleV2'][]
+ }
+ OrganizationRoleV2: {
+ base_role_id: number
+ description: string
+ id: number
+ name: string
+ project_ids: number[]
+ }
+ OrganizationSlugResponse: {
+ billing_email?: string
+ id: number
+ name: string
+ opt_in_tags: string[]
+ slug: string
+ stripe_customer_id?: string
+ }
+ OrgDocumentUrlResponse: {
+ fileUrl: string
+ }
+ OrgMetricUsage: {
+ available_in_plan: boolean
+ capped: boolean
+ cost: number
+ /** @enum {string} */
+ metric:
+ | 'EGRESS'
+ | 'DATABASE_SIZE'
+ | 'STORAGE_SIZE'
+ | 'MONTHLY_ACTIVE_USERS'
+ | 'MONTHLY_ACTIVE_SSO_USERS'
+ | 'FUNCTION_INVOCATIONS'
+ | 'FUNCTION_COUNT'
+ | 'STORAGE_IMAGES_TRANSFORMED'
+ | 'REALTIME_MESSAGE_COUNT'
+ | 'REALTIME_PEAK_CONNECTIONS'
+ | 'COMPUTE_HOURS_BRANCH'
+ | 'COMPUTE_HOURS_XS'
+ | 'COMPUTE_HOURS_SM'
+ | 'COMPUTE_HOURS_MD'
+ | 'COMPUTE_HOURS_L'
+ | 'COMPUTE_HOURS_XL'
+ | 'COMPUTE_HOURS_2XL'
+ | 'COMPUTE_HOURS_4XL'
+ | 'COMPUTE_HOURS_8XL'
+ | 'COMPUTE_HOURS_12XL'
+ | 'COMPUTE_HOURS_16XL'
+ | 'CUSTOM_DOMAIN'
+ | 'PITR_7'
+ | 'PITR_14'
+ | 'PITR_28'
+ | 'IPV4'
+ pricing_free_units?: number
+ pricing_package_price?: number
+ pricing_package_size?: number
+ pricing_per_unit_price?: number
+ /** @enum {string} */
+ pricing_strategy: 'UNIT' | 'PACKAGE' | 'NONE'
+ project_allocations: components['schemas']['ProjectAllocation'][]
+ unit_price_desc: string
+ unlimited: boolean
+ usage: number
+ usage_original: number
+ }
+ OrgUsageResponse: {
+ slugs: string[]
+ usage_billing_enabled: boolean
+ usages: components['schemas']['OrgMetricUsage'][]
+ }
+ OverdueInvoiceCount: {
+ organization_id: number
+ overdue_invoice_count: number
+ }
+ PageBody: {
+ location: string
+ path: string
+ referrer?: string
+ title?: string
+ }
+ PasswordCheckBody: {
+ password: string
+ }
+ PasswordCheckResponse: {
+ result: {
+ feedback?: {
+ suggestions?: string[]
+ warning?: string
+ }
+ score?: number
+ }
+ }
+ PauseStatusResponse: {
+ can_restore: boolean
+ latest_downloadable_backup_id: number | null
+ max_days_till_restore_disabled: number
+ remaining_days_till_restore_disabled: number | null
+ }
+ Payment: {
+ card?: components['schemas']['PaymentMethodCard']
+ created: number
+ id: string
+ is_default: boolean
+ type: string
+ }
+ PaymentMethodCard: {
+ brand: string
+ exp_month: number
+ exp_year: number
+ last4: string
+ }
+ PaymentsResponse: {
+ data: components['schemas']['Payment'][]
+ defaultPaymentMethodId: string | null
+ }
+ Permission: {
+ actions: (
+ | 'analytics:Read'
+ | 'auth:Execute'
+ | 'billing:Read'
+ | 'billing:Write'
+ | 'write:Create'
+ | 'write:Delete'
+ | 'functions:Read'
+ | 'functions:Write'
+ | 'infra:Execute'
+ | 'read:Read'
+ | 'sql:Read:Select'
+ | 'sql:Write:Delete'
+ | 'sql:Write:Insert'
+ | 'sql:Write:Update'
+ | 'storage:Admin:Read'
+ | 'storage:Admin:Write'
+ | 'tenant:Sql:Admin:Read'
+ | 'tenant:Sql:Admin:Write'
+ | 'tenant:Sql:CreateTable'
+ | 'tenant:Sql:Write:Delete'
+ | 'tenant:Sql:Write:Insert'
+ | 'tenant:Sql:Query'
+ | 'tenant:Sql:Read:Select'
+ | 'tenant:Sql:Write:Update'
+ | 'write:Update'
+ )[]
+ condition: unknown
+ organization_id: number
+ resources: string[]
+ }
+ PgbouncerConfigResponse: {
+ connectionString: string
+ db_dns_name: string
+ db_host: string
+ db_name: string
+ db_port: number
+ db_user: string
+ default_pool_size?: number
+ ignore_startup_parameters?: string
+ inserted_at: string
+ max_client_conn?: number
+ pgbouncer_enabled: boolean
+ /** @enum {string} */
+ pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING'
+ /** @enum {string} */
+ pool_mode?: 'transaction' | 'session' | 'statement'
+ ssl_enforced: boolean
+ supavisor_enabled: boolean
+ }
+ PgbouncerStatusResponse: {
+ active: boolean
+ }
+ PgsodiumConfigResponse: {
+ root_key: string
+ }
+ PlanResponse: {
+ change_type: components['schemas']['BillingPlanChangeType']
+ effective_at: components['schemas']['BillingPlanEffectiveAt']
+ id: components['schemas']['BillingPlanId']
+ is_current: boolean
+ name: string
+ price: number
+ }
+ PlansResponse: {
+ plans: components['schemas']['PlanResponse'][]
+ }
+ PointInTimeRestoreBody: {
+ recovery_time_target_unix: number
+ }
+ PostgresColumn: {
+ check: string | null
+ comment: string | null
+ data_type: string
+ default_value: Record
+ enums: string[]
+ format: string
+ id: string
+ identity_generation: Record
+ is_generated: boolean
+ is_identity: boolean
+ is_nullable: boolean
+ is_unique: boolean
+ is_updatable: boolean
+ name: string
+ ordinal_position: number
+ schema: string
+ table: string
+ table_id: number
+ }
+ PostgresColumnPrivileges: {
+ column_id: string
+ column_name: string
+ privileges: components['schemas']['ColumnPrivilege'][]
+ relation_name: string
+ relation_schema: string
+ }
+ PostgresConfigResponse: {
+ effective_cache_size?: string
+ maintenance_work_mem?: string
+ max_connections?: number
+ max_locks_per_transaction?: number
+ max_parallel_maintenance_workers?: number
+ max_parallel_workers?: number
+ max_parallel_workers_per_gather?: number
+ max_standby_archive_delay?: string
+ max_standby_streaming_delay?: string
+ max_worker_processes?: number
+ /** @enum {string} */
+ session_replication_role?: 'origin' | 'replica' | 'local'
+ shared_buffers?: string
+ statement_timeout?: string
+ work_mem?: string
+ }
+ PostgresExtension: {
+ comment: string | null
+ default_version: string
+ installed_version: string | null
+ name: string
+ schema: string | null
+ }
+ PostgresForeignTable: {
+ columns?: components['schemas']['PostgresColumn'][]
+ comment: string | null
+ id: number
+ name: string
+ schema: string
+ }
+ PostgresFunction: {
+ argument_types: string
+ /** @enum {string} */
+ behavior: 'VOLATILE' | 'STABLE' | 'IMMUTABLE'
+ complete_statement: string
+ config_params: unknown
+ definition: string
+ id: number
+ identity_argument_types: string
+ language: string
+ name: string
+ return_type: string
+ schema: string
+ security_definer: boolean
+ }
+ PostgresMaterializedView: {
+ columns?: components['schemas']['PostgresColumn'][]
+ comment: string | null
+ id: number
+ is_populated: boolean
+ name: string
+ schema: string
+ }
+ PostgresPolicy: {
+ /** @enum {string} */
+ action: 'PERMISSIVE' | 'RESTRICTIVE'
+ check: string | null
+ /** @enum {string} */
+ command: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL'
+ definition: string | null
+ id: number
+ name: string
+ roles: string[]
+ schema: string
+ table: string
+ table_id: number
+ }
+ PostgresPublication: {
+ id: number
+ name: string
+ owner: string
+ publish_delete: boolean
+ publish_insert: boolean
+ publish_truncate: boolean
+ publish_update: boolean
+ tables: components['schemas']['Table'][] | null
+ }
+ PostgresRole: {
+ active_connections: number
+ can_bypass_rls: boolean
+ can_create_db: boolean
+ can_create_role: boolean
+ can_login: boolean
+ config: string[] | null
+ connection_limit: number
+ id: number
+ inherit_role: boolean
+ is_replication_role: boolean
+ is_superuser: boolean
+ name: string
+ password: string
+ valid_until: string | null
+ }
+ PostgresSchema: {
+ id: number
+ name: string
+ owner: string
+ }
+ PostgresTable: {
+ bytes: number
+ columns?: components['schemas']['PostgresColumn'][]
+ comment: string | null
+ dead_rows_estimate: number
+ id: number
+ live_rows_estimate: number
+ name: string
+ primary_keys: components['schemas']['PrimaryKey'][]
+ relationships: components['schemas']['Relationship'][]
+ /** @enum {string} */
+ replica_identity: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING'
+ rls_enabled: boolean
+ rls_forced: boolean
+ schema: string
+ size: string
+ }
+ PostgresTablePrivileges: {
+ kind: string
+ name: string
+ privileges: components['schemas']['TablePrivilege'][]
+ schema: string
+ }
+ PostgrestConfigResponse: {
+ db_anon_role: string
+ db_extra_search_path: string
+ db_schema: string
+ jwt_secret: string
+ max_rows: number
+ role_claim_key: string
+ }
+ PostgrestConfigWithJWTSecretResponse: {
+ db_extra_search_path: string
+ /** @description If `null`, the value is automatically configured based on compute size. */
+ db_pool: number | null
+ db_schema: string
+ jwt_secret?: string
+ max_rows: number
+ }
+ PostgresTrigger: {
+ /** @enum {string} */
+ activation: 'AFTER' | 'BEFORE'
+ condition: string | null
+ /** @enum {string} */
+ enabled_mode: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED'
+ events: string[]
+ function_args: string[]
+ function_name: string
+ function_schema: string
+ id: number
+ name: string
+ /** @enum {string} */
+ orientation: 'ROW' | 'STATEMENT'
+ schema: string
+ table: string
+ table_id: number
+ }
+ PostgresType: {
+ comment: string | null
+ enums: string[]
+ format: string
+ id: number
+ name: string
+ schema: string
+ }
+ PostgresView: {
+ columns?: components['schemas']['PostgresColumn'][]
+ comment: string | null
+ id: number
+ is_updatable: boolean
+ name: string
+ schema: string
+ }
+ PreviewProjectTransferResponse: {
+ errors: components['schemas']['PreviewTransferInfo'][]
+ has_access_to_target_organization: boolean
+ has_permissions_on_source_organization: boolean
+ members_exceeding_free_project_limit: components['schemas']['MemberExceedingFreeProjectLimit'][]
+ source_project_eligible: boolean
+ source_subscription_plan: components['schemas']['BillingPlanId']
+ target_organization_eligible: boolean | null
+ target_organization_has_free_project_slots: boolean | null
+ target_subscription_plan: components['schemas']['BillingPlanId']
+ valid: boolean
+ warnings: components['schemas']['PreviewTransferInfo'][]
+ }
+ PreviewTransferInfo: {
+ key: string
+ message: string
+ }
+ PrimaryKey: {
+ name: string
+ schema: string
+ table_id: number
+ table_name: string
+ }
+ Profile: {
+ first_name: string
+ gotrue_id: string
+ id: number
+ last_name: string
+ username: string
+ }
+ ProfileResponse: {
+ auth0_id: string
+ disabled_features: (
+ | 'organizations:create'
+ | 'organizations:delete'
+ | 'organization_members:create'
+ | 'organization_members:delete'
+ | 'projects:create'
+ | 'projects:transfer'
+ | 'project_auth:all'
+ | 'project_storage:all'
+ | 'project_edge_function:all'
+ | 'profile:update'
+ | 'billing:account_data'
+ | 'billing:credits'
+ | 'billing:invoices'
+ | 'billing:payment_methods'
+ | 'realtime:all'
+ )[]
+ first_name: string
+ free_project_limit: number
+ gotrue_id: string
+ id: number
+ is_alpha_user: boolean
+ last_name: string
+ mobile: string
+ primary_email: string
+ username: string
+ }
+ /** @enum {string} */
+ ProjectAddonPricingInterval: 'monthly' | 'hourly'
+ ProjectAddonsResponse: {
+ available_addons: components['schemas']['AvailableAddonResponse'][]
+ ref: string
+ selected_addons: components['schemas']['SelectedAddonResponse'][]
+ }
+ /** @enum {string} */
+ ProjectAddonType: 'custom_domain' | 'compute_instance' | 'pitr' | 'ipv4'
+ /** @enum {string} */
+ ProjectAddonVariantPricingType: 'fixed' | 'usage'
+ ProjectAddonVariantResponse: {
+ identifier: components['schemas']['AddonVariantId']
+ meta?: Record
+ name: string
+ price: number
+ price_description: string
+ price_interval: components['schemas']['ProjectAddonPricingInterval']
+ price_type: components['schemas']['ProjectAddonVariantPricingType']
+ }
+ ProjectAllocation: {
+ name: string
+ ref: string
+ usage: number
+ }
+ ProjectAppConfigResponse: {
+ db_schema: string
+ endpoint: string
+ }
+ ProjectDetailResponse: {
+ cloud_provider: string
+ connectionString: string
+ db_host: string
+ dbVersion?: string
+ id: number
+ infra_compute_size?: components['schemas']['DbInstanceSize']
+ inserted_at: string
+ is_branch_enabled: boolean
+ is_physical_backups_enabled: boolean
+ kpsVersion?: string
+ lastDatabaseResizeAt?: string
+ maxDatabasePreprovisionGb?: number
+ name: string
+ organization_id: number
+ parent_project_ref?: string
+ ref: string
+ region: string
+ restUrl: string
+ serviceVersions?: components['schemas']['ServiceVersions']
+ /** @enum {string} */
+ status:
+ | 'ACTIVE_HEALTHY'
+ | 'ACTIVE_UNHEALTHY'
+ | 'COMING_UP'
+ | 'GOING_DOWN'
+ | 'INACTIVE'
+ | 'INIT_FAILED'
+ | 'REMOVED'
+ | 'RESTARTING'
+ | 'UNKNOWN'
+ | 'UPGRADING'
+ | 'PAUSING'
+ | 'RESTORING'
+ | 'RESTORE_FAILED'
+ | 'PAUSE_FAILED'
+ subscription_id: string
+ v2MaintenanceWindow: {
+ end?: string
+ start?: string
+ }
+ volumeSizeGb?: number
+ }
+ ProjectInfo: {
+ cloud_provider: string
+ disk_volume_size_gb?: number
+ id: number
+ infra_compute_size?: components['schemas']['DbInstanceSize']
+ inserted_at: string
+ is_branch_enabled: boolean
+ is_physical_backups_enabled: boolean
+ name: string
+ organization_id: number
+ preview_branch_refs: string[]
+ ref: string
+ region: string
+ status: string
+ subscription_id: string
+ }
+ ProjectIntegrationConnection: {
+ added_by: {
+ primary_email?: string
+ username?: string
+ }
+ id: string
+ inserted_at: string
+ organization_integration_id: string
+ supabase_project_ref: string
+ updated_at: string
+ }
+ ProjectLintMetadata: {
+ entity?: string
+ fkey_columns?: number[]
+ fkey_name?: string
+ name?: string
+ schema?: string
+ /** @enum {string} */
+ type?: 'table' | 'view' | 'auth' | 'function' | 'extension'
+ }
+ ProjectLintResponse: {
+ cache_key: string
+ categories: ('PERFORMANCE' | 'SECURITY')[]
+ description: string
+ detail: string
+ facing: string
+ /** @enum {string} */
+ level: 'ERROR' | 'WARN' | 'INFO'
+ metadata: components['schemas']['ProjectLintMetadata'] | null
+ /** @enum {string} */
+ name:
+ | 'unindexed_foreign_keys'
+ | 'auth_users_exposed'
+ | 'auth_rls_initplan'
+ | 'no_primary_key'
+ | 'unused_index'
+ | 'multiple_permissive_policies'
+ | 'policy_exists_rls_disabled'
+ | 'rls_enabled_no_policy'
+ | 'duplicate_index'
+ | 'security_definer_view'
+ | 'function_search_path_mutable'
+ | 'rls_disabled_in_public'
+ | 'extension_in_public'
+ | 'rls_references_user_metadata'
+ | 'materialized_view_in_api'
+ | 'foreign_table_in_api'
+ | 'auth_otp_long_expiry'
+ | 'auth_otp_short_length'
+ remediation: Record
+ title: string
+ }
+ ProjectMetric: {
+ metric: string
+ project_ref: string
+ value: number
+ }
+ ProjectRefResponse: {
+ id: number
+ name: string
+ ref: string
+ }
+ ProjectResourceWarningsResponse: {
+ /** @enum {string|null} */
+ auth_rate_limit_exhaustion: 'critical' | 'warning' | null
+ /** @enum {string|null} */
+ cpu_exhaustion: 'critical' | 'warning' | null
+ /** @enum {string|null} */
+ disk_io_exhaustion: 'critical' | 'warning' | null
+ /** @enum {string|null} */
+ disk_space_exhaustion: 'critical' | 'warning' | null
+ is_readonly_mode_enabled: boolean
+ /** @enum {string|null} */
+ memory_and_swap_exhaustion: 'critical' | 'warning' | null
+ /** @enum {string|null} */
+ need_pitr: 'critical' | 'warning' | null
+ project: string
+ }
+ ProjectResponse: {
+ cloud_provider: string
+ db_dns_name: string
+ db_host: string
+ db_name: string
+ db_port: string
+ db_user: string
+ id: number
+ inserted_at: string
+ jwt_secret: string
+ name: string
+ ref: string
+ region: string
+ services?: components['schemas']['ServiceResponse'][]
+ ssl_enforced: boolean
+ status: string
+ }
+ ProjectServiceApiKeyResponse: {
+ api_key: string
+ name: string
+ tags: string
+ }
+ ProjectSettingsResponse: {
+ app_config?: components['schemas']['ProjectAppConfigResponse']
+ cloud_provider: string
+ db_dns_name: string
+ db_host: string
+ /** @enum {string|null} */
+ db_ip_addr_config: 'legacy' | 'static-ipv4' | 'concurrent-ipv6' | 'ipv6' | null
+ db_name: string
+ db_port: string
+ db_user: string
+ inserted_at: string
+ jwt_secret?: string
+ name: string
+ ref: string
+ region: string
+ service_api_keys?: components['schemas']['ProjectServiceApiKeyResponse'][]
+ ssl_enforced: boolean
+ status: string
+ }
+ ProjectUpgradeEligibilityResponse: {
+ current_app_version: string
+ duration_estimate_hours: number
+ eligible: boolean
+ extension_dependent_objects: string[]
+ latest_app_version: string
+ legacy_auth_custom_roles: string[]
+ potential_breaking_changes: string[]
+ target_upgrade_versions: components['schemas']['ProjectVersion'][]
+ }
+ ProjectUpgradeInitiateResponse: {
+ tracking_id: string
+ }
+ ProjectVersion: {
+ app_version: string
+ postgres_version: number
+ }
+ Provider: {
+ created_at?: string
+ domains?: components['schemas']['Domain'][]
+ id: string
+ saml?: components['schemas']['SamlDescriptor']
+ updated_at?: string
+ }
+ PublicUrlOptions: {
+ download?: boolean
+ downloadName?: string
+ transform?: components['schemas']['StorageObjectTransformOptions']
+ }
+ PublicUrlResponse: {
+ publicUrl: string
+ }
+ ReadOnlyStatusResponse: {
+ enabled: boolean
+ override_active_until: string
+ override_enabled: boolean
+ }
+ RealtimeHealthResponse: {
+ connected_cluster: number
+ db_connected: boolean
+ healthy: boolean
+ }
+ Relationship: {
+ constraint_name: string
+ id: number
+ source_column_name: string
+ source_schema: string
+ source_table_name: string
+ target_column_name: string
+ target_table_name: string
+ target_table_schema: string
+ }
+ RemoveNetworkBanRequest: {
+ ipv4_addresses: string[]
+ }
+ RemoveReadReplicaBody: {
+ database_identifier: string
+ }
+ ReportStatusBody: {
+ databaseIdentifier: string
+ reportingToken: string
+ /** @enum {string} */
+ status:
+ | 'ACTIVE_HEALTHY'
+ | 'ACTIVE_UNHEALTHY'
+ | 'COMING_UP'
+ | 'GOING_DOWN'
+ | 'INIT_FAILED'
+ | 'REMOVED'
+ | 'RESTORING'
+ | 'UNKNOWN'
+ | 'UPGRADING'
+ | 'INIT_READ_REPLICA'
+ | 'INIT_READ_REPLICA_FAILED'
+ }
+ ResetPasswordBody: {
+ email: string
+ redirectTo?: string
+ }
+ ResizeBody: {
+ volume_size_gb: number
}
ResourceBillingItem: {
+ /**
+ * @description Costs of the item in cents
+ * @example 100
+ */
+ costs: number
+ /**
+ * @description In case of a usage item, the free usage included in the customers plan
+ * @example 100
+ */
+ freeUnitsInPlan?: number
/**
* @description Non-Unique identifier of the item
* @example usage_egress
@@ -5935,33 +4406,1567 @@ export interface components {
itemName: string
/** @enum {string} */
type: 'usage' | 'plan' | 'addon' | 'proration' | 'compute_credits'
- /**
- * @description In case of a usage item, the free usage included in the customers plan
- * @example 100
- */
- freeUnitsInPlan?: number
- /**
- * @description In case of a usage item, the total usage
- * @example 100
- */
- usageTotal?: number
/**
* @description In case of a usage item, the billable usage amount, free usage has been deducted
* @example 100
*/
usageBillable?: number
/**
- * @description Costs of the item in cents
+ * @description In case of a usage item, the total usage
* @example 100
*/
- costs: number
+ usageTotal?: number
}
ResourceBillingResponse: {
/** @description Whether the user is exceeding the included quotas in the plan - only relevant for users on usage-capped plans. */
exceedsPlanLimits: boolean
+ items: components['schemas']['ResourceBillingItem'][]
/** @description Whether the user is can have over-usage, which will be billed - this will be false on usage-capped plans. */
overusageAllowed: boolean
- items: components['schemas']['ResourceBillingItem'][]
+ }
+ ResourceProvisioningConfigResponse: {
+ /**
+ * @description Pooler connection string
+ * @example postgres://postgres.abcdefghijklmnop:dbpass@aws-0-us-east-1.pooler.supabase.com:6543/postgres
+ */
+ DATABASE_POOLER_URL: string
+ /**
+ * @description PSQL connection string
+ * @example postgresql://postgres:dbpass@db.abcdefghijklmnop.supabase.co:5432/postgres
+ */
+ DATABASE_URL: string
+ }
+ ResourceProvisioningResponse: {
+ /** @description Supabase envs config */
+ config: components['schemas']['ResourceProvisioningConfigResponse']
+ /**
+ * @description The target Fly application for internal traffic
+ * @example ext-db-pgshhamktpsgnptvcadw
+ */
+ fly_app_name: string
+ /**
+ * @description Supabase project id
+ * @example pgshhamktpsgnptvcadw
+ */
+ id: string
+ /** @description Welcome message */
+ message: string
+ /**
+ * @description Supabase organization id
+ * @example fly_123456789
+ */
+ supabase_org_id: string
+ }
+ ResourceWithServicesStatusResponse: {
+ /** @description Supabase project instance compute size */
+ compute: string
+ /** @description Unique ID representing the fly extension */
+ id: string
+ /** @description Supabase project services health status */
+ services: components['schemas']['ServiceHealthResponse'][]
+ /**
+ * @description Supabase project status
+ * @example ACTIVE_HEALTHY
+ * @enum {string}
+ */
+ status:
+ | 'ACTIVE_HEALTHY'
+ | 'ACTIVE_UNHEALTHY'
+ | 'COMING_UP'
+ | 'GOING_DOWN'
+ | 'INACTIVE'
+ | 'INIT_FAILED'
+ | 'REMOVED'
+ | 'RESTARTING'
+ | 'UNKNOWN'
+ | 'UPGRADING'
+ | 'PAUSING'
+ | 'RESTORING'
+ | 'RESTORE_FAILED'
+ | 'PAUSE_FAILED'
+ /**
+ * @description Supabase organization id
+ * @example fly_123456789
+ */
+ supabase_org_id: string
+ }
+ RestartProjectInfo: {
+ database_identifier?: string
+ }
+ RestartServiceRequest: {
+ database_identifier?: string
+ region: string
+ services: (
+ | 'adminapi'
+ | 'api-gateway'
+ | 'envoy'
+ | 'functions'
+ | 'gotrue'
+ | 'kong'
+ | 'pgbouncer'
+ | 'pgsodium'
+ | 'postgresql'
+ | 'postgrest'
+ | 'realtime'
+ | 'storage'
+ | 'walg'
+ | 'autoshutdown'
+ )[]
+ source_notification_id?: string
+ }
+ RestartServicesBody: {
+ restartRequest: components['schemas']['RestartServiceRequest']
+ }
+ RestoreLogicalBackupBody: {
+ id: number
+ }
+ RestorePhysicalBackupBody: {
+ id: number
+ recovery_time_target: string
+ }
+ RestoreProjectInfo: {
+ back_ups: components['schemas']['BackupId'][]
+ cloud_provider: string
+ id: number
+ organization_id: number
+ region: string
+ status: string
+ subscription_id: string
+ }
+ RestrictionData: {
+ grace_period_end?: string
+ /** @enum {string} */
+ restrictions?: 'drop_requests_402'
+ violations?: (
+ | 'exceed_db_size_quota'
+ | 'exceed_egress_quota'
+ | 'exceed_edge_functions_count_quota'
+ | 'exceed_edge_functions_invocations_quota'
+ | 'exceed_monthly_active_users_quota'
+ | 'exceed_realtime_connection_count_quota'
+ | 'exceed_realtime_message_count_quota'
+ | 'exceed_storage_size_quota'
+ | 'overdue_payment'
+ )[]
+ }
+ RevokeColumnPrivilegesBody: {
+ column_id: string
+ grantee: string
+ /** @enum {string} */
+ privilege_type: 'ALL' | 'SELECT' | 'INSERT' | 'UPDATE' | 'REFERENCES'
+ }
+ RevokeTablePrivilegesBody: {
+ grantee: string
+ /** @enum {string} */
+ privilege_type:
+ | 'ALL'
+ | 'SELECT'
+ | 'INSERT'
+ | 'UPDATE'
+ | 'DELETE'
+ | 'TRUNCATE'
+ | 'REFERENCES'
+ | 'TRIGGER'
+ relation_id: number
+ }
+ RunQueryBody: {
+ query: string
+ }
+ SamlDescriptor: {
+ attribute_mapping?: components['schemas']['AttributeMapping']
+ entity_id: string
+ id: string
+ metadata_url?: string
+ metadata_xml?: string
+ }
+ ScheduledPlanChange: {
+ /** Format: date-time */
+ at: string
+ target_plan: components['schemas']['BillingPlanId']
+ usage_billing_enabled: boolean
+ }
+ SearchColumnBody: {
+ name: string
+ schema: string
+ }
+ SearchProfileBody: {
+ keywords: string
+ }
+ SearchTableBody: {
+ name: string
+ schema: string
+ }
+ SecretResponse: {
+ name: string
+ value: string
+ }
+ SelectedAddonResponse: {
+ type: components['schemas']['ProjectAddonType']
+ variant: components['schemas']['ProjectAddonVariantResponse']
+ }
+ /**
+ * @description Organization subscription plan
+ * @enum {string}
+ */
+ SelfServePlanId: 'free' | 'pro' | 'team'
+ SendDocsFeedbackBody: {
+ feedback?: string
+ isHelpful: boolean
+ page: string
+ team?: string
+ title: string
+ }
+ SendExitSurveyBody: {
+ additionalFeedback?: string
+ exitAction?: string
+ orgSlug?: string
+ projectRef?: string
+ reasons: string
+ }
+ SendFeedbackBody: {
+ additionalRedirectUrls?: string
+ affectedServices?: string
+ allowSupportAccess?: boolean
+ browserInformation?: string
+ category: string
+ library?: string
+ message: string
+ organizationSlug?: string
+ pathname?: string
+ projectRef?: string
+ severity?: string
+ siteUrl?: string
+ subject?: string
+ tags: string[]
+ urlToAirTable?: string
+ verified?: boolean
+ }
+ SendFeedbackResponse: {
+ result: string
+ }
+ SendInviteResponse: {
+ invited_at: string
+ invited_email: string
+ role_id: number
+ }
+ SendUpgradeSurveyBody: {
+ additionalFeedback?: string
+ currentPlan?: string
+ orgSlug?: string
+ prevPlan?: string
+ reasons: string[]
+ }
+ ServiceApiKey: {
+ api_key_encrypted?: string
+ name: string
+ tags: string
+ }
+ ServiceApiKeyResponse: {
+ api_key?: string
+ api_key_encrypted?: string
+ name: string
+ tags: string
+ }
+ ServiceHealthResponse: {
+ /** @description Service health check error */
+ error?: string
+ /** @description Whether the service is healthy */
+ healthy: boolean
+ /**
+ * @description Service name
+ * @enum {string}
+ */
+ name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage'
+ /**
+ * @description Service health status
+ * @example COMING_UP
+ * @enum {string}
+ */
+ status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY'
+ }
+ ServiceResponse: {
+ app: {
+ id?: number
+ name?: string
+ }
+ app_config: Record
+ id: number
+ name: string
+ service_api_keys: components['schemas']['ServiceApiKeyResponse'][]
+ }
+ ServiceVersions: {
+ gotrue: string
+ postgrest: string
+ 'supabase-postgres': string
+ }
+ SettingsResponse: {
+ project: components['schemas']['ProjectResponse']
+ services: components['schemas']['ServiceResponse'][]
+ }
+ SetupIntentResponse: {
+ client_secret: string
+ payment_method: Record
+ }
+ SetUpReadReplicaBody: {
+ /**
+ * @description Region you want your read replica to reside in
+ * @example us-east-1
+ * @enum {string}
+ */
+ read_replica_region:
+ | 'us-east-1'
+ | 'us-west-1'
+ | 'us-west-2'
+ | 'ap-east-1'
+ | 'ap-southeast-1'
+ | 'ap-northeast-1'
+ | 'ap-northeast-2'
+ | 'ap-southeast-2'
+ | 'eu-west-1'
+ | 'eu-west-2'
+ | 'eu-west-3'
+ | 'eu-central-1'
+ | 'ca-central-1'
+ | 'ap-south-1'
+ | 'sa-east-1'
+ }
+ SignedUrlOptions: {
+ download?: boolean
+ downloadName?: string
+ transform?: components['schemas']['StorageObjectTransformOptions']
+ }
+ SignedUrlResponse: {
+ signedUrl: string
+ }
+ SignedUrlsOptions: {
+ download?: boolean
+ downloadName?: string
+ }
+ SignedUrlsResponse: {
+ error: string | null
+ path: string | null
+ signedUrl: string
+ }
+ SignUpBody: {
+ email: string
+ password: string
+ redirectTo?: string
+ }
+ SnippetContent: {
+ favorite: boolean
+ schema_version: string
+ sql: string
+ }
+ SnippetList: {
+ data: components['schemas']['SnippetMeta'][]
+ }
+ SnippetMeta: {
+ description?: string
+ id: string
+ inserted_at: string
+ name: string
+ owner: components['schemas']['SnippetUser']
+ project: components['schemas']['SnippetProject']
+ /** @enum {string} */
+ type: 'sql'
+ updated_at: string
+ updated_by: components['schemas']['SnippetUser']
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ SnippetProject: {
+ id: number
+ name: string
+ }
+ SnippetResponse: {
+ content: components['schemas']['SnippetContent']
+ description?: string
+ id: string
+ inserted_at: string
+ name: string
+ owner: components['schemas']['SnippetUser']
+ project: components['schemas']['SnippetProject']
+ /** @enum {string} */
+ type: 'sql'
+ updated_at: string
+ updated_by: components['schemas']['SnippetUser']
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ SnippetUser: {
+ id: number
+ username: string
+ }
+ SslEnforcementRequest: {
+ requestedConfig: components['schemas']['SslEnforcements']
+ }
+ SslEnforcementResponse: {
+ appliedSuccessfully: boolean
+ currentConfig: components['schemas']['SslEnforcements']
+ }
+ SslEnforcements: {
+ database: boolean
+ }
+ StorageBucket: {
+ created_at: string
+ id: string
+ name: string
+ owner: string
+ public: boolean
+ updated_at: string
+ }
+ StorageConfigResponse: {
+ fileSizeLimit: number
+ isFreeTier: boolean
+ }
+ StorageObject: {
+ bucket_id: string
+ buckets: components['schemas']['StorageBucket']
+ created_at: string
+ id: string
+ last_accessed_at: string
+ metadata: Record
+ name: string
+ owner: string
+ updated_at: string
+ }
+ StorageObjectSearchOptions: {
+ limit?: number
+ offset?: number
+ search?: string
+ sortBy?: components['schemas']['StorageObjectSortBy']
+ }
+ StorageObjectSortBy: {
+ column?: string
+ order?: string
+ }
+ StorageObjectTransformOptions: {
+ /** @enum {string} */
+ format?: 'origin'
+ height?: number
+ quality?: number
+ /** @enum {string} */
+ resize?: 'cover' | 'contain' | 'fill'
+ width?: number
+ }
+ SubdomainAvailabilityResponse: {
+ available: boolean
+ }
+ SubscriptionStatisticsResponse: {
+ total_active_free_projects: number
+ total_enterprise_projects: number
+ total_free_projects: number
+ total_paid_projects: number
+ total_paused_free_projects: number
+ total_payg_projects: number
+ total_pro_projects: number
+ total_team_projects: number
+ }
+ SupavisorConfigResponse: {
+ connectionString: string
+ /** @enum {string} */
+ database_type: 'PRIMARY' | 'READ_REPLICA'
+ db_host: string
+ db_name: string
+ db_port: number
+ db_user: string
+ default_pool_size: number | null
+ identifier: string
+ is_using_scram_auth: boolean
+ max_client_conn: number | null
+ /** @enum {string} */
+ pool_mode: 'transaction' | 'session'
+ }
+ SyncVercelEnvError: {
+ message: string
+ }
+ SystemCreateProjectBody: {
+ anon_key: string
+ api_key_supabase: string
+ /** @description Database password */
+ db_pass: string
+ db_pass_supabase: string
+ jwt_secret: string
+ /** @description Name of your project, should not contain dots */
+ name: string
+ /** @description Slug of your organization */
+ organization_id: string
+ /**
+ * @description Subscription plan
+ * @example free
+ * @enum {string}
+ */
+ plan: 'free' | 'pro'
+ /**
+ * @description Region you want your server to reside in
+ * @example us-east-1
+ * @enum {string}
+ */
+ region:
+ | 'us-east-1'
+ | 'us-west-1'
+ | 'us-west-2'
+ | 'ap-east-1'
+ | 'ap-southeast-1'
+ | 'ap-northeast-1'
+ | 'ap-northeast-2'
+ | 'ap-southeast-2'
+ | 'eu-west-1'
+ | 'eu-west-2'
+ | 'eu-west-3'
+ | 'eu-central-1'
+ | 'ca-central-1'
+ | 'ap-south-1'
+ | 'sa-east-1'
+ service_key: string
+ }
+ SystemDatabaseResponse: {
+ /** @description Database host */
+ host: string
+ /** @description Database version */
+ version: string
+ }
+ SystemProjectResponse: {
+ /**
+ * @description Creation timestamp
+ * @example 2023-03-29T16:32:59Z
+ */
+ created_at: string
+ database?: components['schemas']['SystemDatabaseResponse']
+ /** @description Id of your project */
+ id: string
+ /** @description Name of your project */
+ name: string
+ /** @description Slug of your organization */
+ organization_id: string
+ /**
+ * @description Region of your project
+ * @example us-east-1
+ */
+ region: string
+ }
+ Table: {
+ id: number
+ name: string
+ schema: string
+ }
+ TablePrivilege: {
+ grantee: string
+ grantor: string
+ is_grantable: boolean
+ /** @enum {string} */
+ privilege_type:
+ | 'ALL'
+ | 'SELECT'
+ | 'INSERT'
+ | 'UPDATE'
+ | 'DELETE'
+ | 'TRUNCATE'
+ | 'REFERENCES'
+ | 'TRIGGER'
+ }
+ TaxId: {
+ country: string
+ id: string
+ type: string
+ value: string
+ }
+ TaxIdResponse: {
+ data: components['schemas']['TaxId'][]
+ }
+ TaxIdV2: {
+ country: string
+ type: string
+ value: string
+ }
+ TaxIdV2Response: {
+ tax_id: components['schemas']['TaxIdV2'] | null
+ }
+ TelemetryActivityBody: {
+ activity: string
+ data?: Record
+ orgSlug?: string
+ page: components['schemas']['PageBody']
+ projectRef?: string
+ source: string
+ }
+ TelemetryEventBody: {
+ action: string
+ category: string
+ ga?: components['schemas']['GoogleAnalyticBody']
+ label?: Record
+ page_location?: string
+ page_referrer?: string
+ page_title?: string
+ value?: string
+ }
+ TelemetryIdentifyBody: {
+ ga?: components['schemas']['GoogleAnalyticBody']
+ user: components['schemas']['IdentifyUserBody']
+ }
+ TelemetryPageBody: {
+ ga?: components['schemas']['GoogleAnalyticBody']
+ referrer: string
+ route?: string
+ title: string
+ }
+ TelemetryPageviewBody: {
+ location: string
+ orgSlug?: string
+ path: string
+ projectRef?: string
+ referrer: string
+ title: string
+ }
+ TransferOrganizationBody: {
+ member_gotrue_id: string
+ member_id: number
+ org_id: number
+ }
+ TransferProjectBody: {
+ target_organization_slug: string
+ }
+ TypescriptResponse: {
+ types: string
+ }
+ UpcomingInvoice: Record
+ UpdateAddonAdminBody: {
+ addon_type: components['schemas']['ProjectAddonType']
+ addon_variant: components['schemas']['AddonVariantId']
+ price_id?: string
+ /** @enum {string} */
+ proration_behaviour?: 'prorate_and_invoice_end_of_cycle' | 'prorate_and_invoice_now'
+ }
+ UpdateAddonBody: {
+ addon_type: components['schemas']['ProjectAddonType']
+ addon_variant: components['schemas']['AddonVariantId']
+ }
+ UpdateAuthConfigBody: {
+ api_max_request_duration?: number
+ db_max_pool_size?: number
+ disable_signup?: boolean
+ external_anonymous_users_enabled?: boolean
+ external_apple_additional_client_ids?: string
+ external_apple_client_id?: string
+ external_apple_enabled?: boolean
+ external_apple_secret?: string
+ external_azure_client_id?: string
+ external_azure_enabled?: boolean
+ external_azure_secret?: string
+ external_azure_url?: string
+ external_bitbucket_client_id?: string
+ external_bitbucket_enabled?: boolean
+ external_bitbucket_secret?: string
+ external_discord_client_id?: string
+ external_discord_enabled?: boolean
+ external_discord_secret?: string
+ external_email_enabled?: boolean
+ external_facebook_client_id?: string
+ external_facebook_enabled?: boolean
+ external_facebook_secret?: string
+ external_figma_client_id?: string
+ external_figma_enabled?: boolean
+ external_figma_secret?: string
+ external_github_client_id?: string
+ external_github_enabled?: boolean
+ external_github_secret?: string
+ external_gitlab_client_id?: string
+ external_gitlab_enabled?: boolean
+ external_gitlab_secret?: string
+ external_gitlab_url?: string
+ external_google_additional_client_ids?: string
+ external_google_client_id?: string
+ external_google_enabled?: boolean
+ external_google_secret?: string
+ external_google_skip_nonce_check?: boolean
+ external_kakao_client_id?: string
+ external_kakao_enabled?: boolean
+ external_kakao_secret?: string
+ external_keycloak_client_id?: string
+ external_keycloak_enabled?: boolean
+ external_keycloak_secret?: string
+ external_keycloak_url?: string
+ external_linkedin_oidc_client_id?: string
+ external_linkedin_oidc_enabled?: boolean
+ external_linkedin_oidc_secret?: string
+ external_notion_client_id?: string
+ external_notion_enabled?: boolean
+ external_notion_secret?: string
+ external_phone_enabled?: boolean
+ external_slack_client_id?: string
+ external_slack_enabled?: boolean
+ external_slack_secret?: string
+ external_spotify_client_id?: string
+ external_spotify_enabled?: boolean
+ external_spotify_secret?: string
+ external_twitch_client_id?: string
+ external_twitch_enabled?: boolean
+ external_twitch_secret?: string
+ external_twitter_client_id?: string
+ external_twitter_enabled?: boolean
+ external_twitter_secret?: string
+ external_workos_client_id?: string
+ external_workos_enabled?: boolean
+ external_workos_secret?: string
+ external_workos_url?: string
+ external_zoom_client_id?: string
+ external_zoom_enabled?: boolean
+ external_zoom_secret?: string
+ hook_custom_access_token_enabled?: boolean
+ hook_custom_access_token_secrets?: string
+ hook_custom_access_token_uri?: string
+ hook_mfa_verification_attempt_enabled?: boolean
+ hook_mfa_verification_attempt_secrets?: string
+ hook_mfa_verification_attempt_uri?: string
+ hook_password_verification_attempt_enabled?: boolean
+ hook_password_verification_attempt_secrets?: string
+ hook_password_verification_attempt_uri?: string
+ hook_send_email_enabled?: boolean
+ hook_send_email_secrets?: string
+ hook_send_email_uri?: string
+ hook_send_sms_enabled?: boolean
+ hook_send_sms_secrets?: string
+ hook_send_sms_uri?: string
+ jwt_exp?: number
+ mailer_allow_unverified_email_sign_ins?: boolean
+ mailer_autoconfirm?: boolean
+ mailer_otp_exp?: number
+ mailer_otp_length?: number
+ mailer_secure_email_change_enabled?: boolean
+ mailer_subjects_confirmation?: string
+ mailer_subjects_email_change?: string
+ mailer_subjects_invite?: string
+ mailer_subjects_magic_link?: string
+ mailer_subjects_reauthentication?: string
+ mailer_subjects_recovery?: string
+ mailer_templates_confirmation_content?: string
+ mailer_templates_email_change_content?: string
+ mailer_templates_invite_content?: string
+ mailer_templates_magic_link_content?: string
+ mailer_templates_reauthentication_content?: string
+ mailer_templates_recovery_content?: string
+ mfa_max_enrolled_factors?: number
+ password_hibp_enabled?: boolean
+ password_min_length?: number
+ /** @enum {string} */
+ password_required_characters?:
+ | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
+ | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
+ | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~'
+ | ''
+ rate_limit_anonymous_users?: number
+ rate_limit_email_sent?: number
+ rate_limit_otp?: number
+ rate_limit_sms_sent?: number
+ rate_limit_token_refresh?: number
+ rate_limit_verify?: number
+ refresh_token_rotation_enabled?: boolean
+ saml_enabled?: boolean
+ security_captcha_enabled?: boolean
+ security_captcha_provider?: string
+ security_captcha_secret?: string
+ security_manual_linking_enabled?: boolean
+ security_refresh_token_reuse_interval?: number
+ security_update_password_require_reauthentication?: boolean
+ sessions_inactivity_timeout?: number
+ sessions_single_per_user?: boolean
+ sessions_tags?: string
+ sessions_timebox?: number
+ site_url?: string
+ sms_autoconfirm?: boolean
+ sms_max_frequency?: number
+ sms_messagebird_access_key?: string
+ sms_messagebird_originator?: string
+ sms_otp_exp?: number
+ sms_otp_length?: number
+ sms_provider?: string
+ sms_template?: string
+ sms_test_otp?: string
+ sms_test_otp_valid_until?: string
+ sms_textlocal_api_key?: string
+ sms_textlocal_sender?: string
+ sms_twilio_account_sid?: string
+ sms_twilio_auth_token?: string
+ sms_twilio_content_sid?: string
+ sms_twilio_message_service_sid?: string
+ sms_twilio_verify_account_sid?: string
+ sms_twilio_verify_auth_token?: string
+ sms_twilio_verify_message_service_sid?: string
+ sms_vonage_api_key?: string
+ sms_vonage_api_secret?: string
+ sms_vonage_from?: string
+ smtp_admin_email?: string
+ smtp_host?: string
+ smtp_max_frequency?: number
+ smtp_pass?: string
+ smtp_port?: string
+ smtp_sender_name?: string
+ smtp_user?: string
+ uri_allow_list?: string
+ }
+ UpdateBranchBody: {
+ branch_name?: string
+ git_branch?: string
+ persistent?: boolean
+ reset_on_push?: boolean
+ }
+ UpdateColumnBody: {
+ check?: string
+ comment?: string
+ defaultValue?: Record
+ /** @enum {string} */
+ defaultValueFormat?: 'expression' | 'literal'
+ dropDefault?: boolean
+ id?: number
+ /** @enum {string} */
+ identityGeneration?: 'BY DEFAULT' | 'ALWAYS'
+ isIdentity?: boolean
+ isNullable?: boolean
+ isUnique?: boolean
+ name?: string
+ type?: string
+ }
+ UpdateContentBody: {
+ content?: Record
+ description?: string
+ id?: string
+ name?: string
+ owner_id?: number
+ /** @enum {string} */
+ type?: 'sql' | 'report' | 'log_sql'
+ /** @enum {string} */
+ visibility?: 'user' | 'project' | 'org' | 'public'
+ }
+ UpdateContentFolderBody: {
+ name: string
+ }
+ UpdateCustomHostnameBody: {
+ custom_hostname: string
+ }
+ UpdateCustomHostnameResponse: {
+ custom_hostname: string
+ data: Record
+ /** @enum {string} */
+ status:
+ | '1_not_started'
+ | '2_initiated'
+ | '3_challenge_verified'
+ | '4_origin_setup_completed'
+ | '5_services_reconfigured'
+ }
+ UpdateFunctionBody: {
+ args?: string[]
+ /** @enum {string} */
+ behavior?: 'VOLATILE' | 'STABLE' | 'IMMUTABLE'
+ config_params?: Record
+ definition?: string
+ id?: number
+ language?: string
+ name?: string
+ return_type?: string
+ schema?: string
+ security_definer?: boolean
+ }
+ UpdateGitHubConnectionsBody: {
+ branch_limit?: number
+ supabase_changes_only?: boolean
+ workdir?: string
+ }
+ UpdateGoTrueConfigBody: {
+ API_MAX_REQUEST_DURATION?: number
+ DB_MAX_POOL_SIZE?: number
+ DISABLE_SIGNUP?: boolean
+ EXTERNAL_ANONYMOUS_USERS_ENABLED?: boolean
+ EXTERNAL_APPLE_ADDITIONAL_CLIENT_IDS?: string
+ EXTERNAL_APPLE_CLIENT_ID?: string
+ EXTERNAL_APPLE_ENABLED?: boolean
+ EXTERNAL_APPLE_SECRET?: string
+ EXTERNAL_AZURE_CLIENT_ID?: string
+ EXTERNAL_AZURE_ENABLED?: boolean
+ EXTERNAL_AZURE_SECRET?: string
+ EXTERNAL_AZURE_URL?: string
+ EXTERNAL_BITBUCKET_CLIENT_ID?: string
+ EXTERNAL_BITBUCKET_ENABLED?: boolean
+ EXTERNAL_BITBUCKET_SECRET?: string
+ EXTERNAL_DISCORD_CLIENT_ID?: string
+ EXTERNAL_DISCORD_ENABLED?: boolean
+ EXTERNAL_DISCORD_SECRET?: string
+ EXTERNAL_EMAIL_ENABLED?: boolean
+ EXTERNAL_FACEBOOK_CLIENT_ID?: string
+ EXTERNAL_FACEBOOK_ENABLED?: boolean
+ EXTERNAL_FACEBOOK_SECRET?: string
+ EXTERNAL_FIGMA_CLIENT_ID?: string
+ EXTERNAL_FIGMA_ENABLED?: boolean
+ EXTERNAL_FIGMA_SECRET?: string
+ EXTERNAL_GITHUB_CLIENT_ID?: string
+ EXTERNAL_GITHUB_ENABLED?: boolean
+ EXTERNAL_GITHUB_SECRET?: string
+ EXTERNAL_GITLAB_CLIENT_ID?: string
+ EXTERNAL_GITLAB_ENABLED?: boolean
+ EXTERNAL_GITLAB_SECRET?: string
+ EXTERNAL_GITLAB_URL?: string
+ EXTERNAL_GOOGLE_ADDITIONAL_CLIENT_IDS?: string
+ EXTERNAL_GOOGLE_CLIENT_ID?: string
+ EXTERNAL_GOOGLE_ENABLED?: boolean
+ EXTERNAL_GOOGLE_SECRET?: string
+ EXTERNAL_GOOGLE_SKIP_NONCE_CHECK?: boolean
+ EXTERNAL_KAKAO_CLIENT_ID?: string
+ EXTERNAL_KAKAO_ENABLED?: boolean
+ EXTERNAL_KAKAO_SECRET?: string
+ EXTERNAL_KEYCLOAK_CLIENT_ID?: string
+ EXTERNAL_KEYCLOAK_ENABLED?: boolean
+ EXTERNAL_KEYCLOAK_SECRET?: string
+ EXTERNAL_KEYCLOAK_URL?: string
+ EXTERNAL_LINKEDIN_OIDC_CLIENT_ID?: string
+ EXTERNAL_LINKEDIN_OIDC_ENABLED?: boolean
+ EXTERNAL_LINKEDIN_OIDC_SECRET?: string
+ EXTERNAL_NOTION_CLIENT_ID?: string
+ EXTERNAL_NOTION_ENABLED?: boolean
+ EXTERNAL_NOTION_SECRET?: string
+ EXTERNAL_PHONE_ENABLED?: boolean
+ EXTERNAL_SLACK_CLIENT_ID?: string
+ EXTERNAL_SLACK_ENABLED?: boolean
+ EXTERNAL_SLACK_SECRET?: string
+ EXTERNAL_SPOTIFY_CLIENT_ID?: string
+ EXTERNAL_SPOTIFY_ENABLED?: boolean
+ EXTERNAL_SPOTIFY_SECRET?: string
+ EXTERNAL_TWITCH_CLIENT_ID?: string
+ EXTERNAL_TWITCH_ENABLED?: boolean
+ EXTERNAL_TWITCH_SECRET?: string
+ EXTERNAL_TWITTER_CLIENT_ID?: string
+ EXTERNAL_TWITTER_ENABLED?: boolean
+ EXTERNAL_TWITTER_SECRET?: string
+ EXTERNAL_WORKOS_CLIENT_ID?: string
+ EXTERNAL_WORKOS_ENABLED?: boolean
+ EXTERNAL_WORKOS_SECRET?: string
+ EXTERNAL_WORKOS_URL?: string
+ EXTERNAL_ZOOM_CLIENT_ID?: string
+ EXTERNAL_ZOOM_ENABLED?: boolean
+ EXTERNAL_ZOOM_SECRET?: string
+ HOOK_CUSTOM_ACCESS_TOKEN_ENABLED?: boolean
+ HOOK_CUSTOM_ACCESS_TOKEN_SECRETS?: string
+ HOOK_CUSTOM_ACCESS_TOKEN_URI?: string
+ HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED?: boolean
+ HOOK_MFA_VERIFICATION_ATTEMPT_SECRETS?: string
+ HOOK_MFA_VERIFICATION_ATTEMPT_URI?: string
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED?: boolean
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_SECRETS?: string
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI?: string
+ HOOK_SEND_EMAIL_ENABLED?: boolean
+ HOOK_SEND_EMAIL_SECRETS?: string
+ HOOK_SEND_EMAIL_URI?: string
+ HOOK_SEND_SMS_ENABLED?: boolean
+ HOOK_SEND_SMS_SECRETS?: string
+ HOOK_SEND_SMS_URI?: string
+ JWT_EXP?: number
+ MAILER_ALLOW_UNVERIFIED_EMAIL_SIGN_INS?: boolean
+ MAILER_AUTOCONFIRM?: boolean
+ MAILER_OTP_EXP?: number
+ MAILER_OTP_LENGTH?: number
+ MAILER_SECURE_EMAIL_CHANGE_ENABLED?: boolean
+ MAILER_SUBJECTS_CONFIRMATION?: string
+ MAILER_SUBJECTS_EMAIL_CHANGE?: string
+ MAILER_SUBJECTS_INVITE?: string
+ MAILER_SUBJECTS_MAGIC_LINK?: string
+ MAILER_SUBJECTS_REAUTHENTICATION?: string
+ MAILER_SUBJECTS_RECOVERY?: string
+ MAILER_TEMPLATES_CONFIRMATION_CONTENT?: string
+ MAILER_TEMPLATES_EMAIL_CHANGE_CONTENT?: string
+ MAILER_TEMPLATES_INVITE_CONTENT?: string
+ MAILER_TEMPLATES_MAGIC_LINK_CONTENT?: string
+ MAILER_TEMPLATES_REAUTHENTICATION_CONTENT?: string
+ MAILER_TEMPLATES_RECOVERY_CONTENT?: string
+ MFA_MAX_ENROLLED_FACTORS?: number
+ PASSWORD_HIBP_ENABLED?: boolean
+ PASSWORD_MIN_LENGTH?: number
+ /** @enum {string} */
+ PASSWORD_REQUIRED_CHARACTERS?:
+ | 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
+ | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789'
+ | 'abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};\'\\:"|<>?,./`~'
+ | ''
+ RATE_LIMIT_ANONYMOUS_USERS?: number
+ RATE_LIMIT_EMAIL_SENT?: number
+ RATE_LIMIT_OTP?: number
+ RATE_LIMIT_SMS_SENT?: number
+ RATE_LIMIT_TOKEN_REFRESH?: number
+ RATE_LIMIT_VERIFY?: number
+ REFRESH_TOKEN_ROTATION_ENABLED?: boolean
+ SAML_ENABLED?: boolean
+ SECURITY_CAPTCHA_ENABLED?: boolean
+ SECURITY_CAPTCHA_PROVIDER?: string
+ SECURITY_CAPTCHA_SECRET?: string
+ SECURITY_MANUAL_LINKING_ENABLED?: boolean
+ SECURITY_REFRESH_TOKEN_REUSE_INTERVAL?: number
+ SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION?: boolean
+ SESSIONS_INACTIVITY_TIMEOUT?: number
+ SESSIONS_SINGLE_PER_USER?: boolean
+ SESSIONS_TAGS?: string
+ SESSIONS_TIMEBOX?: number
+ SITE_URL?: string
+ SMS_AUTOCONFIRM?: boolean
+ SMS_MAX_FREQUENCY?: number
+ SMS_MESSAGEBIRD_ACCESS_KEY?: string
+ SMS_MESSAGEBIRD_ORIGINATOR?: string
+ SMS_OTP_EXP?: number
+ SMS_OTP_LENGTH?: number
+ SMS_PROVIDER?: string
+ SMS_TEMPLATE?: string
+ SMS_TEST_OTP?: string
+ SMS_TEST_OTP_VALID_UNTIL?: string
+ SMS_TEXTLOCAL_API_KEY?: string
+ SMS_TEXTLOCAL_SENDER?: string
+ SMS_TWILIO_ACCOUNT_SID?: string
+ SMS_TWILIO_AUTH_TOKEN?: string
+ SMS_TWILIO_CONTENT_SID?: string
+ SMS_TWILIO_MESSAGE_SERVICE_SID?: string
+ SMS_TWILIO_VERIFY_ACCOUNT_SID?: string
+ SMS_TWILIO_VERIFY_AUTH_TOKEN?: string
+ SMS_TWILIO_VERIFY_MESSAGE_SERVICE_SID?: string
+ SMS_VONAGE_API_KEY?: string
+ SMS_VONAGE_API_SECRET?: string
+ SMS_VONAGE_FROM?: string
+ SMTP_ADMIN_EMAIL?: string
+ SMTP_HOST?: string
+ SMTP_MAX_FREQUENCY?: number
+ SMTP_PASS?: string
+ SMTP_PORT?: string
+ SMTP_SENDER_NAME?: string
+ SMTP_USER?: string
+ URI_ALLOW_LIST?: string
+ }
+ UpdateMemberBody: {
+ role_id: number
+ }
+ UpdateMemberRoleBodyV2: {
+ role_id: number
+ role_scoped_projects?: string[]
+ }
+ UpdateNotificationBodyV2: {
+ id: string
+ /** @enum {string} */
+ status: 'new' | 'seen' | 'archived'
+ }
+ UpdateNotificationsBodyV1: {
+ ids: string[]
+ }
+ UpdateOrganizationBody: {
+ billing_email: string
+ name: string
+ opt_in_tags: string[]
+ }
+ UpdatePasswordBody: {
+ password: string
+ }
+ UpdatePgbouncerConfigBody: {
+ default_pool_size?: number
+ ignore_startup_parameters: string
+ max_client_conn?: number | null
+ pgbouncer_enabled: boolean
+ /** @enum {string} */
+ pool_mode: 'transaction' | 'session' | 'statement'
+ }
+ UpdatePgsodiumConfigBody: {
+ root_key: string
+ }
+ UpdatePolicyBody: {
+ check?: string
+ definition?: string
+ id?: number
+ name?: string
+ roles?: string[]
+ }
+ UpdatePoolingConfigResponse: {
+ default_pool_size?: number
+ ignore_startup_parameters: string
+ max_client_conn?: number | null
+ pgbouncer_enabled: boolean
+ /** @enum {string} */
+ pgbouncer_status: 'COMING_DOWN' | 'COMING_UP' | 'DISABLED' | 'ENABLED' | 'RELOADING'
+ /** @enum {string} */
+ pool_mode: 'transaction' | 'session' | 'statement'
+ }
+ UpdatePostgresConfigBody: {
+ effective_cache_size?: string
+ maintenance_work_mem?: string
+ max_connections?: number
+ max_locks_per_transaction?: number
+ max_parallel_maintenance_workers?: number
+ max_parallel_workers?: number
+ max_parallel_workers_per_gather?: number
+ max_standby_archive_delay?: string
+ max_standby_streaming_delay?: string
+ max_worker_processes?: number
+ /** @enum {string} */
+ session_replication_role?: 'origin' | 'replica' | 'local'
+ shared_buffers?: string
+ statement_timeout?: string
+ work_mem?: string
+ }
+ UpdatePostgrestConfigBody: {
+ db_extra_search_path?: string
+ db_pool?: number
+ db_schema?: string
+ max_rows?: number
+ }
+ UpdateProfileBody: {
+ first_name: string
+ last_name: string
+ }
+ UpdateProjectBody: {
+ name: string
+ }
+ UpdateProviderBody: {
+ attribute_mapping?: components['schemas']['AttributeMapping']
+ domains?: string[]
+ metadata_url?: string
+ metadata_xml?: string
+ }
+ UpdateProviderResponse: {
+ created_at?: string
+ domains?: components['schemas']['Domain'][]
+ id: string
+ saml?: components['schemas']['SamlDescriptor']
+ updated_at?: string
+ }
+ UpdatePublicationBody: {
+ id?: number
+ name?: string
+ owner?: string
+ publish_delete?: boolean
+ publish_insert?: boolean
+ publish_truncate?: boolean
+ publish_update?: boolean
+ tables?: string[] | null
+ }
+ UpdateRestrictionsBody: {
+ no_notification?: boolean
+ restriction_data?: components['schemas']['RestrictionData']
+ /** @enum {string} */
+ restriction_status: 'grace_period' | 'grace_period_over' | 'null' | 'restricted'
+ }
+ UpdateRestrictionsResponse: {
+ message?: string
+ restriction_data?: components['schemas']['RestrictionData']
+ /** @enum {string} */
+ restriction_status?: 'grace_period' | 'grace_period_over' | 'null' | 'restricted'
+ slug: string
+ }
+ UpdateRoleBody: {
+ can_bypass_rls?: boolean
+ can_create_db?: boolean
+ can_create_role?: boolean
+ can_login?: boolean
+ config?: Record
+ connection_limit?: number
+ inherit_role?: boolean
+ is_replication_role?: boolean
+ is_superuser?: boolean
+ name?: string
+ password?: string
+ valid_until?: string
+ }
+ UpdateSchemaBody: {
+ name?: string
+ owner?: string
+ }
+ UpdateSecretsConfigBody: {
+ change_tracking_id: string
+ jwt_secret: string
+ }
+ UpdateSecretsResponse: {
+ message: string
+ }
+ UpdateStorageBucketBody: {
+ allowed_mime_types: string[]
+ file_size_limit: number
+ public: boolean
+ }
+ UpdateStorageConfigBody: {
+ fileSizeLimit: number
+ }
+ UpdateStorageConfigResponse: {
+ fileSizeLimit: number
+ }
+ UpdateSubscriptionBody: {
+ payment_method?: string
+ /** @enum {string} */
+ tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise'
+ }
+ UpdateSubscriptionV2AdminBody: {
+ payment_method?: string
+ price_id?: string
+ skip_free_plan_validations?: boolean
+ /** @enum {string} */
+ tier: 'tier_payg' | 'tier_pro' | 'tier_free' | 'tier_team' | 'tier_enterprise'
+ }
+ UpdateSupavisorConfigBody: {
+ default_pool_size?: number | null
+ /**
+ * @deprecated
+ * @description This field is deprecated and is ignored in this request
+ * @enum {string}
+ */
+ pool_mode?: 'transaction' | 'session'
+ }
+ UpdateSupavisorConfigResponse: {
+ default_pool_size: number | null
+ /** @enum {string} */
+ pool_mode: 'transaction' | 'session'
+ }
+ UpdateTableBody: {
+ comment?: string
+ id?: number
+ name?: string
+ /** @enum {string} */
+ replica_identity?: 'DEFAULT' | 'INDEX' | 'FULL' | 'NOTHING'
+ replica_identity_index?: string
+ rls_enabled?: boolean
+ rls_forced?: boolean
+ schema?: string
+ }
+ UpdateTriggerBody: {
+ /** @enum {string} */
+ activation?: 'AFTER' | 'BEFORE'
+ /** @enum {string} */
+ enabled_mode?: 'ORIGIN' | 'REPLICA' | 'ALWAYS' | 'DISABLED'
+ events?: ('INSERT' | 'UPDATE' | 'DELETE')[]
+ function_args?: string[]
+ function_name?: string
+ function_schema?: string
+ id?: number
+ name?: string
+ /** @enum {string} */
+ orientation?: 'ROW' | 'STATEMENT'
+ schema?: string
+ table?: string
+ table_id?: number
+ }
+ UpdateVercelConnectionsBody: {
+ env_sync_targets?: ('production' | 'preview' | 'development')[]
+ }
+ UpgradeDatabaseBody: {
+ target_version: number
+ }
+ UpsertContentBody: {
+ content?: Record
+ description?: string
+ id?: string
+ name: string
+ owner_id?: number
+ project_id: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ UpsertContentBodyV2: {
+ content?: Record
+ description?: string
+ folder_id?: string
+ id?: string
+ name: string
+ owner_id?: number
+ project_id: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ UserBody: {
+ aud?: string
+ banned_until?: string
+ confirmation_sent_at?: string
+ confirmation_token?: string
+ confirmed_at?: string
+ created_at?: string
+ deleted_at?: string
+ email?: string
+ email_change?: string
+ email_change_confirm_status?: number
+ email_change_sent_at?: string
+ email_change_token_current?: string
+ email_change_token_new?: string
+ email_confirmed_at?: string
+ encrypted_password?: string
+ id?: string
+ instance_id?: string
+ invited_at?: string
+ is_anonymous?: boolean
+ is_sso_user?: boolean
+ is_super_admin?: boolean
+ last_sign_in_at?: string
+ phone?: string
+ phone_change?: string
+ phone_change_sent_at?: string
+ phone_change_token?: string
+ phone_confirmed_at?: string
+ raw_app_meta_data?: Record
+ raw_user_meta_data?: Record
+ reauthentication_sent_at?: string
+ reauthentication_token?: string
+ recovery_sent_at?: string
+ recovery_token?: string
+ role?: string
+ updated_at?: string
+ }
+ UserContentFolder: {
+ id: string
+ name: string
+ owner_id: number
+ parent_id?: string | null
+ project_id: number
+ }
+ UserContentObject: {
+ content: Record
+ description?: string
+ id: string
+ inserted_at: string
+ last_updated_by?: number
+ name: string
+ owner_id: number
+ project_id: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ updated_at: string
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ UserContentObjectMeta: {
+ description?: string
+ folder_id?: string
+ id: string
+ inserted_at: string
+ last_updated_by?: number
+ name: string
+ owner_id: number
+ project_id: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ updated_at: string
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ UserContentObjectV2: {
+ content: Record
+ description?: string
+ folder_id?: string
+ id: string
+ inserted_at: string
+ last_updated_by?: number
+ name: string
+ owner_id: number
+ project_id: number
+ /** @enum {string} */
+ type: 'sql' | 'report' | 'log_sql'
+ updated_at: string
+ /** @enum {string} */
+ visibility: 'user' | 'project' | 'org' | 'public'
+ }
+ UsersResponse: {
+ total: number
+ users: components['schemas']['UserBody'][]
+ }
+ V1Backup: {
+ inserted_at: string
+ is_physical_backup: boolean
+ /** @enum {string} */
+ status: 'COMPLETED' | 'FAILED' | 'PENDING' | 'REMOVED' | 'ARCHIVED'
+ }
+ V1BackupsResponse: {
+ backups: components['schemas']['V1Backup'][]
+ physical_backup_data: components['schemas']['V1PhysicalBackup']
+ pitr_enabled: boolean
+ region: string
+ walg_enabled: boolean
+ }
+ V1CreateFunctionBody: {
+ body: string
+ name: string
+ slug: string
+ verify_jwt?: boolean
+ }
+ V1CreateProjectBody: {
+ /** @description Database password */
+ db_pass: string
+ desired_instance_size?: components['schemas']['DesiredInstanceSize']
+ /**
+ * @deprecated
+ * @description This field is deprecated and is ignored in this request
+ */
+ kps_enabled?: boolean
+ /** @description Name of your project, should not contain dots */
+ name: string
+ /** @description Slug of your organization */
+ organization_id: string
+ /**
+ * @deprecated
+ * @description Subscription plan is now set on organization level and is ignored in this request
+ * @example free
+ * @enum {string}
+ */
+ plan?: 'free' | 'pro'
+ /**
+ * @description Region you want your server to reside in
+ * @example us-east-1
+ * @enum {string}
+ */
+ region:
+ | 'us-east-1'
+ | 'us-west-1'
+ | 'us-west-2'
+ | 'ap-east-1'
+ | 'ap-southeast-1'
+ | 'ap-northeast-1'
+ | 'ap-northeast-2'
+ | 'ap-southeast-2'
+ | 'eu-west-1'
+ | 'eu-west-2'
+ | 'eu-west-3'
+ | 'eu-central-1'
+ | 'ca-central-1'
+ | 'ap-south-1'
+ | 'sa-east-1'
+ /**
+ * @description Template URL used to create the project from the CLI.
+ * @example https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone
+ */
+ template_url?: string
+ }
+ V1DatabaseResponse: {
+ /** @description Database host */
+ host: string
+ /** @description Database version */
+ version: string
+ }
+ V1OrganizationMemberResponse: {
+ email?: string
+ mfa_enabled: boolean
+ role_name: string
+ user_id: string
+ user_name: string
+ }
+ V1OrganizationSlugResponse: {
+ id: string
+ name: string
+ opt_in_tags: 'AI_SQL_GENERATOR_OPT_IN'[]
+ plan?: components['schemas']['BillingPlanId']
+ }
+ V1PgbouncerConfigResponse: {
+ connection_string?: string
+ default_pool_size?: number
+ ignore_startup_parameters?: string
+ max_client_conn?: number
+ /** @enum {string} */
+ pool_mode?: 'transaction' | 'session' | 'statement'
+ }
+ V1PhysicalBackup: {
+ earliest_physical_backup_date_unix?: number
+ latest_physical_backup_date_unix?: number
+ }
+ V1PostgrestConfigResponse: {
+ db_extra_search_path: string
+ /** @description If `null`, the value is automatically configured based on compute size. */
+ db_pool: number | null
+ db_schema: string
+ max_rows: number
+ }
+ V1ProjectRefResponse: {
+ id: number
+ name: string
+ ref: string
+ }
+ V1ProjectResponse: {
+ /**
+ * @description Creation timestamp
+ * @example 2023-03-29T16:32:59Z
+ */
+ created_at: string
+ database?: components['schemas']['V1DatabaseResponse']
+ /** @description Id of your project */
+ id: string
+ /** @description Name of your project */
+ name: string
+ /** @description Slug of your organization */
+ organization_id: string
+ /**
+ * @description Region of your project
+ * @example us-east-1
+ */
+ region: string
+ /** @enum {string} */
+ status:
+ | 'ACTIVE_HEALTHY'
+ | 'ACTIVE_UNHEALTHY'
+ | 'COMING_UP'
+ | 'GOING_DOWN'
+ | 'INACTIVE'
+ | 'INIT_FAILED'
+ | 'REMOVED'
+ | 'RESTARTING'
+ | 'UNKNOWN'
+ | 'UPGRADING'
+ | 'PAUSING'
+ | 'RESTORING'
+ | 'RESTORE_FAILED'
+ | 'PAUSE_FAILED'
+ }
+ V1RestorePitrBody: {
+ recovery_time_target_unix: number
+ }
+ V1RunQueryBody: {
+ query: string
+ }
+ V1ServiceHealthResponse: {
+ error?: string
+ healthy: boolean
+ info?:
+ | components['schemas']['AuthHealthResponse']
+ | components['schemas']['RealtimeHealthResponse']
+ /** @enum {string} */
+ name: 'auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage'
+ /** @enum {string} */
+ status: 'COMING_UP' | 'ACTIVE_HEALTHY' | 'UNHEALTHY'
+ }
+ V1StorageBucketResponse: {
+ created_at: string
+ id: string
+ name: string
+ owner: string
+ public: boolean
+ updated_at: string
+ }
+ V1UpdateFunctionBody: {
+ body?: string
+ name?: string
+ verify_jwt?: boolean
+ }
+ ValidateQueryBody: {
+ query: string
+ }
+ ValidateQueryResponse: {
+ valid: boolean
+ }
+ VanitySubdomainBody: {
+ vanity_subdomain: string
+ }
+ VanitySubdomainConfigResponse: {
+ custom_domain?: string
+ /** @enum {string} */
+ status: 'not-used' | 'custom-domain-used' | 'active'
+ }
+ VercelProjectDeployHooks: {
+ createdAt?: number
+ id: string
+ name: string
+ ref: string
+ url: string
+ }
+ VercelProjectLink: {
+ deployHooks: components['schemas']['VercelProjectDeployHooks'][]
+ gitCredentialId?: string
+ productionBranch?: string
+ type?: string
}
}
responses: never
@@ -5976,225 +5981,140 @@ export type $defs = Record
export type external = Record
export interface operations {
- /** Get notifications */
- NotificationsController_getNotificationsV2: {
+ /** Redirects to Supabase dashboard after completing Fly sso */
+ CallbackController_redirectToDashboardFlyioExtensionScreen: {
+ responses: {
+ 200: {
+ content: never
+ }
+ }
+ }
+ /** Creates a database */
+ FlyExtensionsController_provisionResource: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['FlyResourceProvisioningBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['ResourceProvisioningResponse']
+ }
+ }
+ }
+ }
+ /** Gets database status */
+ ExtensionController_getResourceStatus: {
parameters: {
- query: {
- status: 'new' | 'seen' | 'archived'
- priority: 'Critical' | 'Warning' | 'Info'
- org_slug?: string[]
- project_ref?: string[]
- offset: number
- limit: number
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['NotificationResponseV2'][]
- }
- }
- /** @description Failed to retrieve notifications */
- 500: {
- content: never
- }
- }
- }
- /** Delete notifications */
- NotificationsController_deleteNotifications: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateNotificationsBodyV1']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['NotificationResponseV1'][]
- }
- }
- /** @description Failed to delete notifications */
- 500: {
- content: never
- }
- }
- }
- /** Update notifications */
- NotificationsController_updateNotificationsV2: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateNotificationBodyV2'][]
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['NotificationResponseV2'][]
- }
- }
- /** @description Failed to update notifications */
- 500: {
- content: never
- }
- }
- }
- /** Get an aggregated data of interest across all notifications for the user */
- NotificationsController_getNotificationsSummary: {
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['NotificationsSummary']
- }
- }
- }
- }
- /** Archives all notifications */
- NotificationsController_archiveAllNotifications: {
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to archive all notifications */
- 500: {
- content: never
- }
- }
- }
- /** Reset password for email */
- ResetPasswordController_resetPassword: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['ResetPasswordBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- }
- }
- /** Send feedback */
- SendFeedbackController_sendFeedback: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['SendFeedbackBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SendFeedbackResponse']
- }
- }
- /** @description Failed to send feedback */
- 500: {
- content: never
- }
- }
- }
- /** Send exit survey to HubSpot */
- SendExitSurveyController_sendExitSurvey: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['SendExitSurveyBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SendFeedbackResponse']
- }
- }
- /** @description Failed to send exit survey */
- 500: {
- content: never
- }
- }
- }
- /** Send upgrade survey to survey_responses table */
- SendUpgradeSurveyController_sendUpgradeSurvey: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['SendUpgradeSurveyBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SendFeedbackResponse']
- }
- }
- /** @description Failed to send upgrade survey */
- 500: {
- content: never
- }
- }
- }
- /** Send feedback on docs */
- SendDocsFeedbackController_sendDocsFeedback: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['SendDocsFeedbackBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SendFeedbackResponse']
- }
- }
- /** @description Failed to send feedback for docs */
- 500: {
- content: never
- }
- }
- }
- /** Sign up with email and password */
- SignUpController_signUp: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['SignUpBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- }
- }
- /** Get infrastructure status */
- StatusController_getStatus: {
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to retrieve infrastructure status */
- 500: {
- content: never
- }
- }
- }
- /**
- * Gets resource warnings for all projects accessible by the user
- * @description Only returns the minimal project info
- */
- ProjectsResourceWarningsController_getProjectsResourceWarnings: {
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ProjectResourceWarningsResponse'][]
- }
- }
- }
- }
- /** Redirects to Fly sso flow */
- TermsOfServiceController_flyTosAccepted: {
- parameters: {
- query: {
+ path: {
extension_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ResourceWithServicesStatusResponse']
+ }
+ }
+ }
+ }
+ /** Deletes a database */
+ ExtensionController_deleteResource: {
+ parameters: {
+ path: {
+ extension_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ }
+ }
+ /** Starts Fly single sign on */
+ ExtensionController_startFlyioSSO: {
+ parameters: {
+ path: {
+ extension_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ }
+ }
+ /** Gets details of the organization linked to the provided Fly organization id */
+ FlyOrganizationsController_getOrganization: {
+ parameters: {
+ path: {
organization_id: string
}
}
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['FlyOrganization']
+ }
+ }
+ }
+ }
+ /** Gets the organizations current unbilled charges */
+ FlyBillingController_getResourceBilling: {
+ parameters: {
+ path: {
+ organization_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ResourceBillingResponse']
+ }
+ }
+ }
+ }
+ /** Gets all databases that belong to the given Fly organization id */
+ FlyOrganizationsController_getOrgExtensions: {
+ parameters: {
+ path: {
+ organization_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['OrganizationExtensionStatus'][]
+ }
+ }
+ }
+ }
+ /** Starts Fly single sign on */
+ FlyOrganizationsController_startFlyioSSO: {
+ parameters: {
+ path: {
+ organization_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ }
+ }
+ /** Updates organization subscription linked to the provided Fly organization id */
+ FlyOrganizationsController_updateOrganization: {
+ parameters: {
+ path: {
+ organization_id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['FlyUpdateOrganizationSubscriptionBody']
+ }
+ }
responses: {
200: {
content: never
@@ -6465,6 +6385,40 @@ export interface operations {
}
}
}
+ /** Create CLI login session */
+ CliLoginController_createCliLoginSession: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateCliLoginSessionBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to create CLI login session */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Retrieve CLI login session */
+ CliLoginController_getCliLoginSession: {
+ parameters: {
+ path: {
+ session_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to retrieve CLI login session */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Gets project backups */
BackupsController_getBackups: {
parameters: {
@@ -6485,24 +6439,6 @@ export interface operations {
}
}
}
- /** Enable usage of physical backups */
- BackupsController_enablePhysicalBackup: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to enable usage of physical backups */
- 500: {
- content: never
- }
- }
- }
/** Download project backup */
BackupsController_downloadBackup: {
parameters: {
@@ -6528,6 +6464,47 @@ export interface operations {
}
}
}
+ /** Enable usage of physical backups */
+ BackupsController_enablePhysicalBackup: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to enable usage of physical backups */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Restore project to a previous point in time */
+ BackupsController_restorePointInTimeBackup: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['PointInTimeRestoreBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to restore project to a previous point in time */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Restore project backup */
BackupsController_restoreBackup: {
parameters: {
@@ -6574,24 +6551,22 @@ export interface operations {
}
}
}
- /** Restore project to a previous point in time */
- BackupsController_restorePointInTimeBackup: {
+ /** Enables Database Webhooks on the project */
+ HooksController_enableHooks: {
parameters: {
path: {
/** @description Project ref */
ref: string
}
}
- requestBody: {
- content: {
- 'application/json': components['schemas']['PointInTimeRestoreBody']
- }
- }
responses: {
201: {
content: never
}
- /** @description Failed to restore project to a previous point in time */
+ 403: {
+ content: never
+ }
+ /** @description Failed to enable Database Webhooks on the project */
500: {
content: never
}
@@ -6628,27 +6603,523 @@ export interface operations {
}
}
}
- /** Enables Database Webhooks on the project */
- HooksController_enableHooks: {
+ /** Send feedback on docs */
+ SendDocsFeedbackController_sendDocsFeedback: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SendDocsFeedbackBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SendFeedbackResponse']
+ }
+ }
+ /** @description Failed to send feedback for docs */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Send exit survey to HubSpot */
+ SendExitSurveyController_sendExitSurvey: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SendExitSurveyBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SendFeedbackResponse']
+ }
+ }
+ /** @description Failed to send exit survey */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Send feedback */
+ SendFeedbackController_sendFeedback: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SendFeedbackBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SendFeedbackResponse']
+ }
+ }
+ /** @description Failed to send feedback */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Send upgrade survey to survey_responses table */
+ SendUpgradeSurveyController_sendUpgradeSurvey: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SendUpgradeSurveyBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SendFeedbackResponse']
+ }
+ }
+ /** @description Failed to send upgrade survey */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets user's integrations */
+ IntegrationsController_getUserInstallations: {
+ parameters: {
+ query: {
+ /** @description Filter results by integration name. Optional */
+ integration_name: unknown
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetUserOrganizationIntegrationResponse'][]
+ }
+ }
+ /** @description Failed to get user's integrations */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets integration with the given organization slug */
+ IntegrationsController_getUserInstallationForOrg: {
parameters: {
path: {
- /** @description Project ref */
- ref: string
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetOrganizationIntegrationResponse'][]
+ }
+ }
+ /** @description Failed to get integration with the given organization slug */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Get GitHub authorization */
+ GitHubAuthorizationsController_getGitHubAuthorization: {
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GitHubAuthorization']
+ }
+ }
+ /** @description Failed to get GitHub authorization */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Create GitHub authorization */
+ GitHubAuthorizationsController_createGitHubAuthorization: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateGitHubAuthorizationBody']
}
}
responses: {
201: {
content: never
}
- 403: {
- content: never
- }
- /** @description Failed to enable Database Webhooks on the project */
+ /** @description Failed to create GitHub authorization */
500: {
content: never
}
}
}
+ /** List GitHub connection branches */
+ GitHubBranchesController_listConnectionBranches: {
+ parameters: {
+ query?: {
+ per_page?: number
+ page?: number
+ }
+ path: {
+ connectionId: number
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': Record[]
+ }
+ }
+ /** @description Failed to list GitHub connection branches */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Get GitHub connection branch */
+ GitHubBranchesController_getConnectionBranch: {
+ parameters: {
+ path: {
+ connectionId: number
+ branchName: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': Record
+ }
+ }
+ /** @description Failed to get GitHub connection branch */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** List organization GitHub connections */
+ GitHubConnectionsController_listOrganizationGitHubConnections: {
+ parameters: {
+ query: {
+ organization_id: number
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ListGitHubConnectionsResponse']
+ }
+ }
+ /** @description Failed to list organization GitHub connections */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Connects a GitHub project to a supabase project */
+ GitHubConnectionsController_createGitHubConnection: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateGitHubConnectionsBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to create project connections */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Deletes github project connection */
+ GitHubConnectionsController_deleteGitHubConnection: {
+ parameters: {
+ path: {
+ connection_id: string
+ }
+ }
+ responses: {
+ 204: {
+ content: never
+ }
+ /** @description Failed to delete github integration project connection */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates a GitHub connection for a supabase project */
+ GitHubConnectionsController_updateGitHubConnection: {
+ parameters: {
+ path: {
+ connection_id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateGitHubConnectionsBody']
+ }
+ }
+ responses: {
+ 204: {
+ content: never
+ }
+ /** @description Failed to update GitHub connection */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets GitHub repositories for user */
+ GitHubRepositoriesController_listRepositories: {
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to get GitHub repositories for user */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Create vercel integration
+ * @description Exchanges a vercel code for an access token and saves the access token to the new integration record
+ */
+ VercelIntegrationController_createVercelIntegration: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateVercelIntegrationBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to create vercel integration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Removes Vercel organization integration with the given id */
+ VercelIntegrationController_removeVercelIntegration: {
+ parameters: {
+ path: {
+ organization_integration_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to remove Vercel organization integration with the given id */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Connects a Vercel project to a supabase project */
+ VercelConnectionsController_createVercelConnection: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateVercelConnectionsBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['CreateVercelConnectionResponse']
+ }
+ }
+ /** @description Failed to create project connection */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Deletes vercel project connection */
+ VercelConnectionsController_deleteVercelConnection: {
+ parameters: {
+ path: {
+ connection_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['DeleteVercelConnectionResponse']
+ }
+ }
+ /** @description Failed to delete vercel integration project connection */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates a Vercel connection for a supabase project */
+ VercelConnectionsController_updateVercelConnection: {
+ parameters: {
+ path: {
+ connection_id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateVercelConnectionsBody']
+ }
+ }
+ responses: {
+ 204: {
+ content: never
+ }
+ /** @description Failed to update Vercel connection */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Syncs supabase project envs with given connection id */
+ VercelConnectionsController_syncVercelConnectionEnvironments: {
+ parameters: {
+ path: {
+ connection_id: string
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to sync supabase project envs with given connection id */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets installed vercel project connections for the given organization integration */
+ VercelConnectionsController_getVercelConnections: {
+ parameters: {
+ path: {
+ organization_integration_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetVercelConnections'][]
+ }
+ }
+ /** @description Failed to get installed vercel connections for the given organization integration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets vercel projects with the given organization integration id */
+ VercelProjectController_getVercelProjects: {
+ parameters: {
+ query: {
+ search?: string
+ from?: string
+ limit: string
+ }
+ path: {
+ organization_integration_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetVercelProjectsResponse']
+ }
+ }
+ /** @description Failed to get vercel projects with the given organization integration id */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Get notifications */
+ NotificationsController_getNotificationsV2: {
+ parameters: {
+ query: {
+ status: 'new' | 'seen' | 'archived'
+ priority: 'Critical' | 'Warning' | 'Info'
+ org_slug?: string[]
+ project_ref?: string[]
+ offset: number
+ limit: number
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['NotificationResponseV2'][]
+ }
+ }
+ /** @description Failed to retrieve notifications */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Delete notifications */
+ NotificationsController_deleteNotifications: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateNotificationsBodyV1']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['NotificationResponseV1'][]
+ }
+ }
+ /** @description Failed to delete notifications */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Update notifications */
+ NotificationsController_updateNotificationsV2: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateNotificationBodyV2'][]
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['NotificationResponseV2'][]
+ }
+ }
+ /** @description Failed to update notifications */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Archives all notifications */
+ NotificationsController_archiveAllNotifications: {
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to archive all notifications */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Get an aggregated data of interest across all notifications for the user */
+ NotificationsController_getNotificationsSummary: {
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['NotificationsSummary']
+ }
+ }
+ }
+ }
/** Gets user's organizations */
OrganizationsController_getOrganizations: {
responses: {
@@ -6682,21 +7153,6 @@ export interface operations {
}
}
}
- /** Gets organization linked to fly organization id */
- OrganizationsController_getOrganizationByFlyOrganizationId: {
- parameters: {
- path: {
- fly_organization_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetOrganizationByFlyOrganizationIdResponse']
- }
- }
- }
- }
/** Deletes organization */
OrganizationSlugController_deleteOrganization: {
parameters: {
@@ -6743,6 +7199,250 @@ export interface operations {
}
}
}
+ /** Gets an organization's audit logs */
+ OrgAuditLogsController_getAuditLogs: {
+ parameters: {
+ query?: {
+ /** @description Start timestamp */
+ iso_timestamp_start?: string
+ /** @description End timestamp */
+ iso_timestamp_end?: string
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['AuditLogsResponse']
+ }
+ }
+ /** @description Failed to get an organization's audit logs */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets invoices for the given organization */
+ OrgInvoicesController_getInvoices: {
+ parameters: {
+ query: {
+ limit: string
+ offset: string
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['Invoice'][]
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve invoices */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets the total count of invoices for the given organization */
+ OrgInvoicesController_countInvoices: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ headers: {
+ /** @description total count value */
+ 'X-Total-Count'?: unknown
+ }
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve the total count of invoices */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets invoice with the given invoice ID */
+ OrgInvoicesController_getInvoice: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ invoiceId: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['Invoice']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve invoice */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets the upcoming invoice */
+ OrgInvoicesController_getUpcomingInvoice: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['UpcomingInvoice']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve upcoming invoice */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets subscription plans */
+ OrgPlansController_getAvailablePlans: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PlansResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to get subscription plans */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets the current subscription */
+ SubscriptionController_getSubscription: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetSubscriptionResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve subscription */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates subscription */
+ SubscriptionController_updateSubscription: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateSubscriptionBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update subscription change */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Preview subscription changes */
+ SubscriptionController_previewSubscriptionChange: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateSubscriptionBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to preview subscription changes */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Deletes any upcoming subscription schedule */
+ SubscriptionController_deleteSubscriptionSchedule: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update subscription change */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Gets the Stripe customer */
CustomerController_getCustomer: {
parameters: {
@@ -6789,6 +7489,549 @@ export interface operations {
}
}
}
+ /** Gets daily organization stats */
+ OrgDailyStatsController_getDailyStats: {
+ parameters: {
+ query: {
+ metric:
+ | 'EGRESS'
+ | 'DATABASE_SIZE'
+ | 'STORAGE_SIZE'
+ | 'MONTHLY_ACTIVE_USERS'
+ | 'MONTHLY_ACTIVE_SSO_USERS'
+ | 'FUNCTION_INVOCATIONS'
+ | 'FUNCTION_COUNT'
+ | 'STORAGE_IMAGES_TRANSFORMED'
+ | 'REALTIME_MESSAGE_COUNT'
+ | 'REALTIME_PEAK_CONNECTIONS'
+ | 'COMPUTE_HOURS_BRANCH'
+ | 'COMPUTE_HOURS_XS'
+ | 'COMPUTE_HOURS_SM'
+ | 'COMPUTE_HOURS_MD'
+ | 'COMPUTE_HOURS_L'
+ | 'COMPUTE_HOURS_XL'
+ | 'COMPUTE_HOURS_2XL'
+ | 'COMPUTE_HOURS_4XL'
+ | 'COMPUTE_HOURS_8XL'
+ | 'COMPUTE_HOURS_12XL'
+ | 'COMPUTE_HOURS_16XL'
+ | 'CUSTOM_DOMAIN'
+ | 'PITR_7'
+ | 'PITR_14'
+ | 'PITR_28'
+ | 'IPV4'
+ interval: string
+ endDate: string
+ startDate: string
+ projectRef?: string
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': Record
+ }
+ }
+ /** @description Failed to get daily organization stats */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets daily organization stats for compute */
+ OrgDailyStatsController_getDailyStatsCompute: {
+ parameters: {
+ query: {
+ endDate: string
+ startDate: string
+ projectRef?: string
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to get daily organization stats for compute */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Get SOC2 Type 2 report URL */
+ OrgDocumentsController_getSoc2Type2ReportUrl: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['OrgDocumentUrlResponse']
+ }
+ }
+ }
+ }
+ /** Get standard security questionnaire URL */
+ OrgDocumentsController_getStandardSecurityQuestionnaireUrl: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['OrgDocumentUrlResponse']
+ }
+ }
+ }
+ }
+ /** Gets organization's members */
+ MembersController_getMembers: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['Member'][]
+ }
+ }
+ /** @description Failed to retrieve organization's members */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Removes organization member */
+ MembersController_deleteMember: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ gotrue_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to remove organization member */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates organization member role */
+ MembersController_updateMemberRoleV2: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ gotrue_id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateMemberRoleBodyV2']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to update organization member role */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Removes organization member */
+ MembersController_deleteMemberRole: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ gotrue_id: string
+ role_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to remove organization member */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets organization invitations */
+ InvitationsController_getAllInvitations: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['InvitationResponse']
+ }
+ }
+ /** @description Failed to get organization invitations */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Creates organization invitation */
+ InvitationsController_createInvitation: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateInvitationBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to create organization invitation */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Deletes organization invitation with given id */
+ InvitationsController_deleteInvitation: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ id: number
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to delete organization invitation with given id */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets organization invitation by token */
+ InvitationsController_getInvitationByToken: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ token: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['InvitationByTokenResponse']
+ }
+ }
+ /** @description Failed to get organization invitation by token */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Accepts organization invitation by token */
+ InvitationsController_acceptInvitationByToken: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ token: string
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to accept organization invitation by token */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Gets invited users
+ * @deprecated
+ */
+ OrganizationInviteController_getInvitedUsers: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['Invite'][]
+ }
+ }
+ /** @description Failed to get invited users */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Invites user
+ * @deprecated
+ */
+ OrganizationInviteController_inviteUser: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['InviteUserBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SendInviteResponse']
+ }
+ }
+ /** @description Failed to invite user */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Delete invited user
+ * @deprecated
+ */
+ OrganizationInviteController_deleteInvitedUser: {
+ parameters: {
+ query: {
+ invited_id: number
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to delete invited user */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Gets invite
+ * @deprecated
+ */
+ JoinController_getInvite: {
+ parameters: {
+ query: {
+ token: string
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['InviteResponse']
+ }
+ }
+ /** @description Failed to get invite */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Joins organization
+ * @deprecated
+ */
+ JoinController_joinOrganization: {
+ parameters: {
+ query: {
+ token: string
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['JoinResponse']
+ }
+ }
+ /** @description Failed to join organization */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets organization members who have reached their free project limit */
+ ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['MemberWithFreeProjectLimit'][]
+ }
+ }
+ /** @description Failed to retrieve organization members who have reached their free project limit */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets Stripe payment methods for the given organization */
+ getPaymentMethodsV2: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PaymentsResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to get Stripe payment methods */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Detach payment method with the given card ID */
+ PaymentsController_detachPaymentMethod: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['DetachPaymentMethodBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to detach Stripe payment method */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Mark given payment method as default for organization */
+ PaymentsController_markPaymentMethodAsDefault: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['MarkDefaultPaymentMethodBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to mark payment method as default */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Sets up a payment method */
+ SetupIntentOrgController_setUpPaymentMethod: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['HCaptchaBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SetupIntentResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to set up a payment method */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Gets the given organization's roles */
OrganizationRolesController_getAllRolesV2: {
parameters: {
@@ -6931,82 +8174,6 @@ export interface operations {
}
}
}
- /** Gets daily organization stats */
- OrgDailyStatsController_getDailyStats: {
- parameters: {
- query: {
- metric:
- | 'EGRESS'
- | 'DATABASE_SIZE'
- | 'STORAGE_SIZE'
- | 'MONTHLY_ACTIVE_USERS'
- | 'MONTHLY_ACTIVE_SSO_USERS'
- | 'FUNCTION_INVOCATIONS'
- | 'FUNCTION_COUNT'
- | 'STORAGE_IMAGES_TRANSFORMED'
- | 'REALTIME_MESSAGE_COUNT'
- | 'REALTIME_PEAK_CONNECTIONS'
- | 'COMPUTE_HOURS_BRANCH'
- | 'COMPUTE_HOURS_XS'
- | 'COMPUTE_HOURS_SM'
- | 'COMPUTE_HOURS_MD'
- | 'COMPUTE_HOURS_L'
- | 'COMPUTE_HOURS_XL'
- | 'COMPUTE_HOURS_2XL'
- | 'COMPUTE_HOURS_4XL'
- | 'COMPUTE_HOURS_8XL'
- | 'COMPUTE_HOURS_12XL'
- | 'COMPUTE_HOURS_16XL'
- | 'CUSTOM_DOMAIN'
- | 'PITR_7'
- | 'PITR_14'
- | 'PITR_28'
- | 'IPV4'
- interval: string
- endDate: string
- startDate: string
- projectRef?: string
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': Record
- }
- }
- /** @description Failed to get daily organization stats */
- 500: {
- content: never
- }
- }
- }
- /** Gets daily organization stats for compute */
- OrgDailyStatsController_getDailyStatsCompute: {
- parameters: {
- query: {
- endDate: string
- startDate: string
- projectRef?: string
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to get daily organization stats for compute */
- 500: {
- content: never
- }
- }
- }
/** Gets usage stats */
OrgUsageController_getOrgUsage: {
parameters: {
@@ -7032,717 +8199,21 @@ export interface operations {
}
}
}
- /** Get standard security questionnaire URL */
- OrgDocumentsController_getStandardSecurityQuestionnaireUrl: {
+ /** Gets organization linked to fly organization id */
+ OrganizationsController_getOrganizationByFlyOrganizationId: {
parameters: {
path: {
- /** @description Organization slug */
- slug: string
+ fly_organization_id: string
}
}
responses: {
200: {
content: {
- 'application/json': components['schemas']['OrgDocumentUrlResponse']
+ 'application/json': components['schemas']['GetOrganizationByFlyOrganizationIdResponse']
}
}
}
}
- /** Get SOC2 Type 2 report URL */
- OrgDocumentsController_getSoc2Type2ReportUrl: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['OrgDocumentUrlResponse']
- }
- }
- }
- }
- /** Gets an organization's audit logs */
- OrgAuditLogsController_getAuditLogs: {
- parameters: {
- query?: {
- /** @description Start timestamp */
- iso_timestamp_start?: string
- /** @description End timestamp */
- iso_timestamp_end?: string
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['AuditLogsResponse']
- }
- }
- /** @description Failed to get an organization's audit logs */
- 500: {
- content: never
- }
- }
- }
- /**
- * Gets invited users
- * @deprecated
- */
- OrganizationInviteController_getInvitedUsers: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['Invite'][]
- }
- }
- /** @description Failed to get invited users */
- 500: {
- content: never
- }
- }
- }
- /**
- * Invites user
- * @deprecated
- */
- OrganizationInviteController_inviteUser: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['InviteUserBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SendInviteResponse']
- }
- }
- /** @description Failed to invite user */
- 500: {
- content: never
- }
- }
- }
- /**
- * Delete invited user
- * @deprecated
- */
- OrganizationInviteController_deleteInvitedUser: {
- parameters: {
- query: {
- invited_id: number
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to delete invited user */
- 500: {
- content: never
- }
- }
- }
- /**
- * Gets invite
- * @deprecated
- */
- JoinController_getInvite: {
- parameters: {
- query: {
- token: string
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['InviteResponse']
- }
- }
- /** @description Failed to get invite */
- 500: {
- content: never
- }
- }
- }
- /**
- * Joins organization
- * @deprecated
- */
- JoinController_joinOrganization: {
- parameters: {
- query: {
- token: string
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['JoinResponse']
- }
- }
- /** @description Failed to join organization */
- 500: {
- content: never
- }
- }
- }
- /** Gets organization's members */
- MembersController_getMembers: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['Member'][]
- }
- }
- /** @description Failed to retrieve organization's members */
- 500: {
- content: never
- }
- }
- }
- /** Removes organization member */
- MembersController_deleteMember: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- gotrue_id: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to remove organization member */
- 500: {
- content: never
- }
- }
- }
- /** Updates organization member role */
- MembersController_updateMemberRoleV2: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- gotrue_id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateMemberRoleBodyV2']
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to update organization member role */
- 500: {
- content: never
- }
- }
- }
- /** Removes organization member */
- MembersController_deleteMemberRole: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- gotrue_id: string
- role_id: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to remove organization member */
- 500: {
- content: never
- }
- }
- }
- /** Gets organization members who have reached their free project limit */
- ReachedFreeProjectLimitController_getMembersWhoReachedFreeProjectLimit: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['MemberWithFreeProjectLimit'][]
- }
- }
- /** @description Failed to retrieve organization members who have reached their free project limit */
- 500: {
- content: never
- }
- }
- }
- /** Gets organization invitations */
- InvitationsController_getAllInvitations: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['InvitationResponse']
- }
- }
- /** @description Failed to get organization invitations */
- 500: {
- content: never
- }
- }
- }
- /** Creates organization invitation */
- InvitationsController_createInvitation: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateInvitationBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to create organization invitation */
- 500: {
- content: never
- }
- }
- }
- /** Gets organization invitation by token */
- InvitationsController_getInvitationByToken: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- token: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['InvitationByTokenResponse']
- }
- }
- /** @description Failed to get organization invitation by token */
- 500: {
- content: never
- }
- }
- }
- /** Accepts organization invitation by token */
- InvitationsController_acceptInvitationByToken: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- token: string
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to accept organization invitation by token */
- 500: {
- content: never
- }
- }
- }
- /** Deletes organization invitation with given id */
- InvitationsController_deleteInvitation: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- id: number
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to delete organization invitation with given id */
- 500: {
- content: never
- }
- }
- }
- /** Gets Stripe payment methods for the given organization */
- getPaymentMethodsV2: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PaymentsResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to get Stripe payment methods */
- 500: {
- content: never
- }
- }
- }
- /** Detach payment method with the given card ID */
- PaymentsController_detachPaymentMethod: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['DetachPaymentMethodBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to detach Stripe payment method */
- 500: {
- content: never
- }
- }
- }
- /** Mark given payment method as default for organization */
- PaymentsController_markPaymentMethodAsDefault: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['MarkDefaultPaymentMethodBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to mark payment method as default */
- 500: {
- content: never
- }
- }
- }
- /** Sets up a payment method */
- SetupIntentOrgController_setUpPaymentMethod: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['HCaptchaBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SetupIntentResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to set up a payment method */
- 500: {
- content: never
- }
- }
- }
- /** Gets the current subscription */
- SubscriptionController_getSubscription: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetSubscriptionResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve subscription */
- 500: {
- content: never
- }
- }
- }
- /** Updates subscription */
- SubscriptionController_updateSubscription: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateSubscriptionBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to update subscription change */
- 500: {
- content: never
- }
- }
- }
- /** Preview subscription changes */
- SubscriptionController_previewSubscriptionChange: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateSubscriptionBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to preview subscription changes */
- 500: {
- content: never
- }
- }
- }
- /** Deletes any upcoming subscription schedule */
- SubscriptionController_deleteSubscriptionSchedule: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to update subscription change */
- 500: {
- content: never
- }
- }
- }
- /** Gets subscription plans */
- OrgPlansController_getAvailablePlans: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PlansResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to get subscription plans */
- 500: {
- content: never
- }
- }
- }
- /** Gets the upcoming invoice */
- OrgInvoicesController_getUpcomingInvoice: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['UpcomingInvoice']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve upcoming invoice */
- 500: {
- content: never
- }
- }
- }
- /** Gets invoices for the given organization */
- OrgInvoicesController_getInvoices: {
- parameters: {
- query: {
- limit: string
- offset: string
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['Invoice'][]
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve invoices */
- 500: {
- content: never
- }
- }
- }
- /** Gets the total count of invoices for the given organization */
- OrgInvoicesController_countInvoices: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- headers: {
- /** @description total count value */
- 'X-Total-Count'?: unknown
- }
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve the total count of invoices */
- 500: {
- content: never
- }
- }
- }
- /** Gets invoice with the given invoice ID */
- OrgInvoicesController_getInvoice: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- invoiceId: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['Invoice']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve invoice */
- 500: {
- content: never
- }
- }
- }
/** Retrieve column privileges */
ColumnPrivilegesController_getColumnPrivileges: {
parameters: {
@@ -8819,37 +9290,6 @@ export interface operations {
}
}
}
- /** Searches project pg.tables. Return maximum 50 results. */
- SearchController_searchTables: {
- parameters: {
- header: {
- 'x-connection-encrypted': string
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['SearchTableBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['Table'][]
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to search pg.tables */
- 500: {
- content: never
- }
- }
- }
/** Searches project pg.columns. Return maximum 50 results. */
SearchController_searchColumns: {
parameters: {
@@ -8881,6 +9321,37 @@ export interface operations {
}
}
}
+ /** Searches project pg.tables. Return maximum 50 results. */
+ SearchController_searchTables: {
+ parameters: {
+ header: {
+ 'x-connection-encrypted': string
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SearchTableBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['Table'][]
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to search pg.tables */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Retrieve table privileges */
TablePrivilegesController_getTablePrivileges: {
parameters: {
@@ -9293,6 +9764,69 @@ export interface operations {
}
}
}
+ /** Gets the user's profile */
+ ProfileController_getProfile: {
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ProfileResponse']
+ }
+ }
+ /** @description Failed to retrieve user's profile */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Creates user's profile */
+ ProfileController_createProfile: {
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['ProfileResponse']
+ }
+ }
+ /** @description Failed to create user's profile */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Deletes user's profile */
+ ProfileController_deleteProfile: {
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Forbidden action */
+ 403: {
+ content: never
+ }
+ /** @description Failed to delete user's profile */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates user's profile */
+ ProfileController_updateProfile: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateProfileBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ProfileResponse']
+ }
+ }
+ /** @description Failed to update user's profile */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Gets the user's access tokens */
AccessTokensController_getAccessTokens: {
responses: {
@@ -9388,39 +9922,6 @@ export interface operations {
}
}
}
- /** Search profiles by username, email with the given keywords */
- SearchProfileController_searchProfile: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['SearchProfileBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['Profile'][]
- }
- }
- /** @description Failed to search profiles with the given keywords */
- 500: {
- content: never
- }
- }
- }
- /** Gets the user's subscription statistics */
- SubscriptionsController_getSubscriptionsStatistics: {
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['SubscriptionStatisticsResponse']
- }
- }
- /** @description Failed to retrieve user's subscription statistics */
- 500: {
- content: never
- }
- }
- }
/** Check password strength */
PasswordCheckController_checkPassword: {
requestBody: {
@@ -9454,64 +9955,34 @@ export interface operations {
}
}
}
- /** Gets the user's profile */
- ProfileController_getProfile: {
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ProfileResponse']
- }
- }
- /** @description Failed to retrieve user's profile */
- 500: {
- content: never
+ /** Search profiles by username, email with the given keywords */
+ SearchProfileController_searchProfile: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SearchProfileBody']
}
}
- }
- /** Creates user's profile */
- ProfileController_createProfile: {
responses: {
201: {
content: {
- 'application/json': components['schemas']['ProfileResponse']
+ 'application/json': components['schemas']['Profile'][]
}
}
- /** @description Failed to create user's profile */
+ /** @description Failed to search profiles with the given keywords */
500: {
content: never
}
}
}
- /** Deletes user's profile */
- ProfileController_deleteProfile: {
- responses: {
- 200: {
- content: never
- }
- /** @description Forbidden action */
- 403: {
- content: never
- }
- /** @description Failed to delete user's profile */
- 500: {
- content: never
- }
- }
- }
- /** Updates user's profile */
- ProfileController_updateProfile: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateProfileBody']
- }
- }
+ /** Gets the user's subscription statistics */
+ SubscriptionsController_getSubscriptionsStatistics: {
responses: {
200: {
content: {
- 'application/json': components['schemas']['ProfileResponse']
+ 'application/json': components['schemas']['SubscriptionStatisticsResponse']
}
}
- /** @description Failed to update user's profile */
+ /** @description Failed to retrieve user's subscription statistics */
500: {
content: never
}
@@ -9545,584 +10016,17 @@ export interface operations {
}
}
}
- /** Gets project linked to fly extension id */
- ProjectsController_getProjectByFlyExtensionId: {
- parameters: {
- path: {
- fly_extension_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetProjectByFlyExtensionIdResponse']
- }
- }
- }
- }
/**
- * Gets project's content
- * @deprecated
+ * Gets resource warnings for all projects accessible by the user
+ * @description Only returns the minimal project info
*/
- ContentController_getContent: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
+ ProjectsResourceWarningsController_getProjectsResourceWarnings: {
responses: {
200: {
content: {
- 'application/json': components['schemas']['GetUserContentResponse']
+ 'application/json': components['schemas']['ProjectResourceWarningsResponse'][]
}
}
- /** @description Failed to retrieve project's content */
- 500: {
- content: never
- }
- }
- }
- /** Updates project's content */
- ContentController_updateWholeContentV2: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpsertContentBodyV2']
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to update project's content */
- 500: {
- content: never
- }
- }
- }
- /** Creates project's content */
- ContentController_createContentV2: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateContentBodyV2']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['UserContentObjectV2']
- }
- }
- /** @description Failed to create project's content */
- 500: {
- content: never
- }
- }
- }
- /** Deletes project's contents */
- ContentController_deleteContents: {
- parameters: {
- query: {
- ids: string[]
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['BulkDeleteUserContentResponse'][]
- }
- }
- /** @description Failed to delete project's contents */
- 500: {
- content: never
- }
- }
- }
- /**
- * Updates project's content
- * @deprecated
- */
- ContentController_updateContent: {
- parameters: {
- query: {
- id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateContentBody']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['UserContentObject'][]
- }
- }
- /** @description Failed to update project's content */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's content by the given id */
- ContentController_getContentById: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Content id */
- id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetUserContentByIdResponse']
- }
- }
- /** @description Failed to retrieve project's content by the given id */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's content root folder */
- ContentFoldersController_getRootFolder: {
- parameters: {
- query?: {
- type?: 'sql' | 'report' | 'log_sql'
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetUserContentFolderResponse']
- }
- }
- /** @description Failed to retrieve project's content root folder */
- 500: {
- content: never
- }
- }
- }
- /** Creates project's content folder */
- ContentFoldersController_createFolder: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateContentFolderBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['CreateUserContentFolderResponse']
- }
- }
- /** @description Failed to create project's content folder */
- 500: {
- content: never
- }
- }
- }
- /** Deletes project's content folders */
- ContentFoldersController_DeleteFolder: {
- parameters: {
- query: {
- ids: string[]
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to delete project's content folders */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's content folder */
- ContentFoldersController_getFolder: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Content folder id */
- id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetUserContentFolderResponse']
- }
- }
- /** @description Failed to retrieve project's content folder */
- 500: {
- content: never
- }
- }
- }
- /** Updates project's content folder */
- ContentFoldersController_updateFolder: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Content folder id */
- id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateContentFolderBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to update project's content folder */
- 500: {
- content: never
- }
- }
- }
- /** Gets daily project stats */
- DailyStatsController_getDailyStats: {
- parameters: {
- query: {
- attribute: string
- interval: string
- endDate: string
- startDate: string
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': Record
- }
- }
- /** @description Failed to get daily project stats */
- 500: {
- content: never
- }
- }
- }
- /** Gets non-removed databases of a specified project */
- DatabasesController_getDatabases: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['DatabaseDetailResponse'][]
- }
- }
- }
- }
- /** Gets statuses of databases within a project */
- DatabasesStatusesController_getStatus: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['DatabaseStatusResponse'][]
- }
- }
- /** @description Failed to get statuses of databases of a project */
- 500: {
- content: never
- }
- }
- }
- /** Updates the database password */
- DbPasswordController_updatePassword: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdatePasswordBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to update database password */
- 500: {
- content: never
- }
- }
- }
- /** Gets project health check */
- HealthCheckController_projectHealthCheck: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to get project health check */
- 500: {
- content: never
- }
- }
- }
- /** Gets non-removed databases of a specified project */
- LoadBalancersController_getLoadBalancers: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['LoadBalancerDetailResponse'][]
- }
- }
- }
- }
- /** Gets project OpenApi */
- ProjectsApiController_projectOpenApi: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': Record
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to get project OpenApi */
- 500: {
- content: never
- }
- }
- }
- /** Queries project Graphql */
- ProjectsApiController_projectGraphql: {
- parameters: {
- header: {
- 'x-graphql-authorization': string
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['Buffer']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': Record
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to query project Graphql */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's usage metrics */
- InfraMonitoringController_getUsageMetrics: {
- parameters: {
- query: {
- attribute:
- | 'cpu_usage'
- | 'max_cpu_usage'
- | 'avg_cpu_usage'
- | 'disk_io_budget'
- | 'disk_io_consumption'
- | 'ram_usage'
- | 'swap_usage'
- | 'physical_replication_lag_physical_replica_lag_seconds'
- startDate: string
- endDate: string
- interval?: '1m' | '5m' | '10m' | '30m' | '1h' | '1d'
- databaseIdentifier?: string
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': Record
- }
- }
- /** @description Failed to get project's usage metrics */
- 500: {
- content: never
- }
- }
- }
- /** Pauses the project */
- PauseController_pauseProject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to pause the project */
- 500: {
- content: never
- }
- }
- }
- /** Gets the latest pause event for a project if a project is paused */
- PauseController_getProject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PauseStatusResponse']
- }
- }
- }
- }
- /** Resize database disk */
- ResizeController_resizeDatabase: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['ResizeBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to resize database disk */
- 500: {
- content: never
- }
- }
- }
- /** Restarts project */
- RestartController_restartProject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['RestartProjectInfo']
- }
- }
- responses: {
- 201: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to restart project */
- 500: {
- content: never
- }
- }
- }
- /** Run project lints */
- ProjectRunLintsController_runProjectLints: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ProjectLintResponse'][]
- }
- }
- 403: {
- content: never
- }
}
}
/** Gets a specific project that belongs to the authenticated user */
@@ -10188,163 +10092,6 @@ export interface operations {
}
}
}
- /** Restores project */
- RestoreController_restoreProject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['RestoreProjectInfo']
- }
- }
- /** @description Failed to restore project */
- 500: {
- content: never
- }
- }
- }
- /** Restarts given services */
- RestartServicesController_restartServices: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['RestartServicesBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to restart given services */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's settings */
- SettingsController_getProjectApi: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ProjectSettingsResponse']
- }
- }
- /** @description Failed to retrieve project's settings */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's status */
- ProjectStatusController_getStatus: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to get project's status */
- 500: {
- content: never
- }
- }
- }
- /**
- * Updates the project
- * @deprecated
- * @description Replaced by PATCH /platform/projects/:ref
- */
- UpdateController_updateProject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateProjectBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to update project */
- 500: {
- content: never
- }
- }
- }
- /** Previews transfering a project to a different organizations, shows eligibility and impact. */
- ProjectTransferController_previewTransfer: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['TransferProjectBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['PreviewProjectTransferResponse']
- }
- }
- 403: {
- content: never
- }
- }
- }
- /** Transfers a project to a different organization. */
- ProjectTransferController_transferProject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['TransferProjectBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- 403: {
- content: never
- }
- }
- }
/** Gets a project's function invocation statistics */
FunctionInvocationLogsController_getStatus: {
parameters: {
@@ -10503,8 +10250,8 @@ export interface operations {
}
}
}
- /** Gets project's warehouse tenant from logflare */
- TenantController_getTenant: {
+ /** Lists project's warehouse access tokens from logflare */
+ AccessTokenController_listAccessTokens: {
parameters: {
path: {
/** @description Project ref */
@@ -10514,13 +10261,45 @@ export interface operations {
responses: {
200: {
content: {
- 'application/json': components['schemas']['LFUser']
+ 'application/json': components['schemas']['LFAccessToken'][]
}
}
403: {
content: never
}
- /** @description Failed to fetch or provision warehouse tenant */
+ /** @description Failed to fetch warehouse access tokens */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Create a warehouse access token */
+ AccessTokenController_createAccessToken: {
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['LFAccessToken']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to create warehouse access token */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Delete a warehouse access token */
+ AccessTokenController_deleteAccessToken: {
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to delete warehouse access token */
500: {
content: never
}
@@ -10617,61 +10396,6 @@ export interface operations {
}
}
}
- /** Lists project's warehouse access tokens from logflare */
- AccessTokenController_listAccessTokens: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['LFAccessToken'][]
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to fetch warehouse access tokens */
- 500: {
- content: never
- }
- }
- }
- /** Create a warehouse access token */
- AccessTokenController_createAccessToken: {
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['LFAccessToken']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to create warehouse access token */
- 500: {
- content: never
- }
- }
- }
- /** Delete a warehouse access token */
- AccessTokenController_deleteAccessToken: {
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to delete warehouse access token */
- 500: {
- content: never
- }
- }
- }
/** Lists project's warehouse endpoints from logflare */
EndpointController_listEndpoints: {
parameters: {
@@ -10765,6 +10489,83 @@ export interface operations {
}
}
}
+ /** Gets project's warehouse tenant from logflare */
+ TenantController_getTenant: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['LFUser']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to fetch or provision warehouse tenant */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Queries project Graphql */
+ ProjectsApiController_projectGraphql: {
+ parameters: {
+ header: {
+ 'x-graphql-authorization': string
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['Buffer']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': Record
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to query project Graphql */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project OpenApi */
+ ProjectsApiController_projectOpenApi: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': Record
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to get project OpenApi */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Gets project addons */
ProjectAddonController_getProjectAddons: {
parameters: {
@@ -10904,6 +10705,51 @@ export interface operations {
}
}
}
+ /** Gets project's Postgres config */
+ 'v1-get-postgres-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PostgresConfigResponse']
+ }
+ }
+ /** @description Failed to retrieve project's Postgres config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates project's Postgres config */
+ 'v1-update-postgres-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdatePostgresConfigBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PostgresConfigResponse']
+ }
+ }
+ /** @description Failed to update project's Postgres config */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Gets project's postgrest config */
PostgrestConfigController_getPostgRESTConfig: {
parameters: {
@@ -10955,51 +10801,6 @@ export interface operations {
}
}
}
- /** Gets project's Postgres config */
- 'v1-get-postgres-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PostgresConfigResponse']
- }
- }
- /** @description Failed to retrieve project's Postgres config */
- 500: {
- content: never
- }
- }
- }
- /** Updates project's Postgres config */
- 'v1-update-postgres-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdatePostgresConfigBody']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PostgresConfigResponse']
- }
- }
- /** @description Failed to update project's Postgres config */
- 500: {
- content: never
- }
- }
- }
/** Updates project's secrets config */
SecretsConfigController_updateConfig: {
parameters: {
@@ -11124,6 +10925,689 @@ export interface operations {
}
}
}
+ /**
+ * Gets project's content
+ * @deprecated
+ */
+ ContentController_getContent: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetUserContentResponse']
+ }
+ }
+ /** @description Failed to retrieve project's content */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates project's content */
+ ContentController_updateWholeContentV2: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpsertContentBodyV2']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to update project's content */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Creates project's content */
+ ContentController_createContentV2: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateContentBodyV2']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['UserContentObjectV2']
+ }
+ }
+ /** @description Failed to create project's content */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Deletes project's contents */
+ ContentController_deleteContents: {
+ parameters: {
+ query: {
+ ids: string[]
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['BulkDeleteUserContentResponse'][]
+ }
+ }
+ /** @description Failed to delete project's contents */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Updates project's content
+ * @deprecated
+ */
+ ContentController_updateContent: {
+ parameters: {
+ query: {
+ id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateContentBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['UserContentObject'][]
+ }
+ }
+ /** @description Failed to update project's content */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project's content root folder */
+ ContentFoldersController_getRootFolder: {
+ parameters: {
+ query?: {
+ type?: 'sql' | 'report' | 'log_sql'
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetUserContentFolderResponse']
+ }
+ }
+ /** @description Failed to retrieve project's content root folder */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Creates project's content folder */
+ ContentFoldersController_createFolder: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateContentFolderBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['CreateUserContentFolderResponse']
+ }
+ }
+ /** @description Failed to create project's content folder */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Deletes project's content folders */
+ ContentFoldersController_DeleteFolder: {
+ parameters: {
+ query: {
+ ids: string[]
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to delete project's content folders */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project's content folder */
+ ContentFoldersController_getFolder: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ /** @description Content folder id */
+ id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetUserContentFolderResponse']
+ }
+ }
+ /** @description Failed to retrieve project's content folder */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates project's content folder */
+ ContentFoldersController_updateFolder: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ /** @description Content folder id */
+ id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateContentFolderBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to update project's content folder */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project's content by the given id */
+ ContentController_getContentById: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ /** @description Content id */
+ id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetUserContentByIdResponse']
+ }
+ }
+ /** @description Failed to retrieve project's content by the given id */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets daily project stats */
+ DailyStatsController_getDailyStats: {
+ parameters: {
+ query: {
+ attribute: string
+ interval: string
+ endDate: string
+ startDate: string
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': Record
+ }
+ }
+ /** @description Failed to get daily project stats */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets non-removed databases of a specified project */
+ DatabasesController_getDatabases: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['DatabaseDetailResponse'][]
+ }
+ }
+ }
+ }
+ /** Gets statuses of databases within a project */
+ DatabasesStatusesController_getStatus: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['DatabaseStatusResponse'][]
+ }
+ }
+ /** @description Failed to get statuses of databases of a project */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates the database password */
+ DbPasswordController_updatePassword: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdatePasswordBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update database password */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project's usage metrics */
+ InfraMonitoringController_getUsageMetrics: {
+ parameters: {
+ query: {
+ attribute:
+ | 'cpu_usage'
+ | 'max_cpu_usage'
+ | 'avg_cpu_usage'
+ | 'disk_io_budget'
+ | 'disk_io_consumption'
+ | 'ram_usage'
+ | 'swap_usage'
+ | 'physical_replication_lag_physical_replica_lag_seconds'
+ startDate: string
+ endDate: string
+ interval?: '1m' | '5m' | '10m' | '30m' | '1h' | '1d'
+ databaseIdentifier?: string
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': Record
+ }
+ }
+ /** @description Failed to get project's usage metrics */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project health check */
+ HealthCheckController_projectHealthCheck: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to get project health check */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets non-removed databases of a specified project */
+ LoadBalancersController_getLoadBalancers: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['LoadBalancerDetailResponse'][]
+ }
+ }
+ }
+ }
+ /** Pauses the project */
+ PauseController_pauseProject: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to pause the project */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets the latest pause event for a project if a project is paused */
+ PauseController_getProject: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PauseStatusResponse']
+ }
+ }
+ }
+ }
+ /** Resize database disk */
+ ResizeController_resizeDatabase: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['ResizeBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to resize database disk */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Restarts project */
+ RestartController_restartProject: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['RestartProjectInfo']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to restart project */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Restarts given services */
+ RestartServicesController_restartServices: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['RestartServicesBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to restart given services */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Restores project */
+ RestoreController_restoreProject: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['RestoreProjectInfo']
+ }
+ }
+ /** @description Failed to restore project */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Run project lints */
+ ProjectRunLintsController_runProjectLints: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ProjectLintResponse'][]
+ }
+ }
+ 403: {
+ content: never
+ }
+ }
+ }
+ /** Gets project's settings */
+ SettingsController_getProjectApi: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ProjectSettingsResponse']
+ }
+ }
+ /** @description Failed to retrieve project's settings */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project's status */
+ ProjectStatusController_getStatus: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to get project's status */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Transfers a project to a different organization. */
+ ProjectTransferController_transferProject: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['TransferProjectBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ }
+ }
+ /** Previews transfering a project to a different organizations, shows eligibility and impact. */
+ ProjectTransferController_previewTransfer: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['TransferProjectBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['PreviewProjectTransferResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Updates the project
+ * @deprecated
+ * @description Replaced by PATCH /platform/projects/:ref
+ */
+ UpdateController_updateProject: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateProjectBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update project */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project linked to fly extension id */
+ ProjectsController_getProjectByFlyExtensionId: {
+ parameters: {
+ path: {
+ fly_extension_id: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['GetProjectByFlyExtensionIdResponse']
+ }
+ }
+ }
+ }
/**
* Gets project's api info
* @deprecated
@@ -11190,6 +11674,95 @@ export interface operations {
}
}
}
+ /** Reset password for email */
+ ResetPasswordController_resetPassword: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['ResetPasswordBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ }
+ }
+ /** Sign up with email and password */
+ SignUpController_signUp: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SignUpBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ }
+ }
+ /** Get infrastructure status */
+ StatusController_getStatus: {
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to retrieve infrastructure status */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets list of buckets */
+ StorageBucketsController_getBuckets: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['StorageBucket'][]
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to get list of buckets */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Create bucket */
+ StorageBucketsController_createBucket: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateStorageBucketBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': string
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to create bucket */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Gets bucket */
StorageBucketIdController_getBucket: {
parameters: {
@@ -11289,52 +11862,87 @@ export interface operations {
}
}
}
- /** Gets list of buckets */
- StorageBucketsController_getBuckets: {
+ /** Deletes objects */
+ StorageObjectsController_deleteObjects: {
parameters: {
path: {
/** @description Project ref */
ref: string
+ /** @description Storage bucket id */
+ id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['DeleteObjectsBody']
}
}
responses: {
200: {
- content: {
- 'application/json': components['schemas']['StorageBucket'][]
- }
+ content: never
}
403: {
content: never
}
- /** @description Failed to get list of buckets */
+ /** @description Failed to delete objects */
500: {
content: never
}
}
}
- /** Create bucket */
- StorageBucketsController_createBucket: {
+ /** Copys object */
+ StorageObjectsController_copyObject: {
parameters: {
path: {
/** @description Project ref */
ref: string
+ /** @description Storage bucket id */
+ id: string
}
}
requestBody: {
content: {
- 'application/json': components['schemas']['CreateStorageBucketBody']
+ 'application/json': components['schemas']['CopyObjectBody']
}
}
responses: {
201: {
content: {
- 'application/json': string
+ 'application/json': components['schemas']['CopyObjectResponse']
}
}
403: {
content: never
}
- /** @description Failed to create bucket */
+ /** @description Failed to copy object */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Downloads a file from a private bucket */
+ StorageObjectsController_download: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ /** @description Storage bucket id */
+ id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['DownloadObjectBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to download the file */
500: {
content: never
}
@@ -11370,6 +11978,34 @@ export interface operations {
}
}
}
+ /** Move object */
+ StorageObjectsController_moveObject: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ /** @description Storage bucket id */
+ id: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['MoveObjectBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to move object */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Creates URL for an asset in a public bucket */
StorageObjectsController_createPublicUrl: {
parameters: {
@@ -11400,34 +12036,6 @@ export interface operations {
}
}
}
- /** Downloads a file from a private bucket */
- StorageObjectsController_download: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Storage bucket id */
- id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['DownloadObjectBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to download the file */
- 500: {
- content: never
- }
- }
- }
/** Creates a signed URL */
StorageObjectsController_createSignedUrl: {
parameters: {
@@ -11488,92 +12096,6 @@ export interface operations {
}
}
}
- /** Copys object */
- StorageObjectsController_copyObject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Storage bucket id */
- id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['CopyObjectBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['CopyObjectResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to copy object */
- 500: {
- content: never
- }
- }
- }
- /** Move object */
- StorageObjectsController_moveObject: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Storage bucket id */
- id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['MoveObjectBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to move object */
- 500: {
- content: never
- }
- }
- }
- /** Deletes objects */
- StorageObjectsController_deleteObjects: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Storage bucket id */
- id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['DeleteObjectsBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to delete objects */
- 500: {
- content: never
- }
- }
- }
/** Gets project storage credentials */
StorageS3CredentialsController_getAllCredentials: {
parameters: {
@@ -11677,6 +12199,23 @@ export interface operations {
}
}
}
+ /** Sends server activity */
+ TelemetryActivityController_sendServerActivity: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['TelemetryActivityBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to send server activity */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Sends analytics server event */
TelemetryEventController_sendServerEvent: {
requestBody: {
@@ -11728,23 +12267,6 @@ export interface operations {
}
}
}
- /** Sends server activity */
- TelemetryActivityController_sendServerActivity: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['TelemetryActivityBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to send server activity */
- 500: {
- content: never
- }
- }
- }
/** Send pageview event */
TelemetryPageviewController_sendServerPageViewed: {
requestBody: {
@@ -11762,21 +12284,18 @@ export interface operations {
}
}
}
- /** Gets the Vercel access token for the given code */
- VercelAccessTokenController_getAccessToken: {
+ /** Redirects to Fly sso flow */
+ TermsOfServiceController_flyTosAccepted: {
parameters: {
query: {
- code: string
+ extension_id: string
+ organization_id: string
}
}
responses: {
200: {
content: never
}
- /** @description Failed to get Vercel access token */
- 500: {
- content: never
- }
}
}
/** Gets the list of Vercel projects */
@@ -11880,392 +12399,18 @@ export interface operations {
}
}
}
- /** Gets user's integrations */
- IntegrationsController_getUserInstallations: {
+ /** Gets the Vercel access token for the given code */
+ VercelAccessTokenController_getAccessToken: {
parameters: {
query: {
- /** @description Filter results by integration name. Optional */
- integration_name: unknown
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetUserOrganizationIntegrationResponse'][]
- }
- }
- /** @description Failed to get user's integrations */
- 500: {
- content: never
- }
- }
- }
- /** Gets integration with the given organization slug */
- IntegrationsController_getUserInstallationForOrg: {
- parameters: {
- path: {
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetOrganizationIntegrationResponse'][]
- }
- }
- /** @description Failed to get integration with the given organization slug */
- 500: {
- content: never
- }
- }
- }
- /**
- * Create vercel integration
- * @description Exchanges a vercel code for an access token and saves the access token to the new integration record
- */
- VercelIntegrationController_createVercelIntegration: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateVercelIntegrationBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to create vercel integration */
- 500: {
- content: never
- }
- }
- }
- /** Removes Vercel organization integration with the given id */
- VercelIntegrationController_removeVercelIntegration: {
- parameters: {
- path: {
- organization_integration_id: string
+ code: string
}
}
responses: {
200: {
content: never
}
- /** @description Failed to remove Vercel organization integration with the given id */
- 500: {
- content: never
- }
- }
- }
- /** Gets vercel projects with the given organization integration id */
- VercelProjectController_getVercelProjects: {
- parameters: {
- query: {
- search?: string
- from?: string
- limit: string
- }
- path: {
- organization_integration_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetVercelProjectsResponse']
- }
- }
- /** @description Failed to get vercel projects with the given organization integration id */
- 500: {
- content: never
- }
- }
- }
- /** Gets installed vercel project connections for the given organization integration */
- VercelConnectionsController_getVercelConnections: {
- parameters: {
- path: {
- organization_integration_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GetVercelConnections'][]
- }
- }
- /** @description Failed to get installed vercel connections for the given organization integration */
- 500: {
- content: never
- }
- }
- }
- /** Connects a Vercel project to a supabase project */
- VercelConnectionsController_createVercelConnection: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateVercelConnectionsBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['CreateVercelConnectionResponse']
- }
- }
- /** @description Failed to create project connection */
- 500: {
- content: never
- }
- }
- }
- /** Syncs supabase project envs with given connection id */
- VercelConnectionsController_syncVercelConnectionEnvironments: {
- parameters: {
- path: {
- connection_id: string
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to sync supabase project envs with given connection id */
- 500: {
- content: never
- }
- }
- }
- /** Deletes vercel project connection */
- VercelConnectionsController_deleteVercelConnection: {
- parameters: {
- path: {
- connection_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['DeleteVercelConnectionResponse']
- }
- }
- /** @description Failed to delete vercel integration project connection */
- 500: {
- content: never
- }
- }
- }
- /** Updates a Vercel connection for a supabase project */
- VercelConnectionsController_updateVercelConnection: {
- parameters: {
- path: {
- connection_id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateVercelConnectionsBody']
- }
- }
- responses: {
- 204: {
- content: never
- }
- /** @description Failed to update Vercel connection */
- 500: {
- content: never
- }
- }
- }
- /** Get GitHub authorization */
- GitHubAuthorizationsController_getGitHubAuthorization: {
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['GitHubAuthorization']
- }
- }
- /** @description Failed to get GitHub authorization */
- 500: {
- content: never
- }
- }
- }
- /** Create GitHub authorization */
- GitHubAuthorizationsController_createGitHubAuthorization: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateGitHubAuthorizationBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to create GitHub authorization */
- 500: {
- content: never
- }
- }
- }
- /** List organization GitHub connections */
- GitHubConnectionsController_listOrganizationGitHubConnections: {
- parameters: {
- query: {
- organization_id: number
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ListGitHubConnectionsResponse']
- }
- }
- /** @description Failed to list organization GitHub connections */
- 500: {
- content: never
- }
- }
- }
- /** Connects a GitHub project to a supabase project */
- GitHubConnectionsController_createGitHubConnection: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateGitHubConnectionsBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to create project connections */
- 500: {
- content: never
- }
- }
- }
- /** Deletes github project connection */
- GitHubConnectionsController_deleteGitHubConnection: {
- parameters: {
- path: {
- connection_id: string
- }
- }
- responses: {
- 204: {
- content: never
- }
- /** @description Failed to delete github integration project connection */
- 500: {
- content: never
- }
- }
- }
- /** Updates a GitHub connection for a supabase project */
- GitHubConnectionsController_updateGitHubConnection: {
- parameters: {
- path: {
- connection_id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateGitHubConnectionsBody']
- }
- }
- responses: {
- 204: {
- content: never
- }
- /** @description Failed to update GitHub connection */
- 500: {
- content: never
- }
- }
- }
- /** List GitHub connection branches */
- GitHubBranchesController_listConnectionBranches: {
- parameters: {
- query?: {
- per_page?: number
- page?: number
- }
- path: {
- connectionId: number
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': Record[]
- }
- }
- /** @description Failed to list GitHub connection branches */
- 500: {
- content: never
- }
- }
- }
- /** Get GitHub connection branch */
- GitHubBranchesController_getConnectionBranch: {
- parameters: {
- path: {
- connectionId: number
- branchName: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': Record
- }
- }
- /** @description Failed to get GitHub connection branch */
- 500: {
- content: never
- }
- }
- }
- /** Gets GitHub repositories for user */
- GitHubRepositoriesController_listRepositories: {
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to get GitHub repositories for user */
- 500: {
- content: never
- }
- }
- }
- /** Create CLI login session */
- CliLoginController_createCliLoginSession: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateCliLoginSessionBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to create CLI login session */
- 500: {
- content: never
- }
- }
- }
- /** Retrieve CLI login session */
- CliLoginController_getCliLoginSession: {
- parameters: {
- path: {
- session_id: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to retrieve CLI login session */
+ /** @description Failed to get Vercel access token */
500: {
content: never
}
@@ -12346,69 +12491,275 @@ export interface operations {
}
}
}
- /**
- * Delete a function
- * @description Deletes a function with the specified slug from the specified project.
- */
- 'v1-delete-a-function': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- /** @description Function slug */
- function_slug: string
- }
- }
+ /** Get API health status */
+ HealthController_getStatus: {
responses: {
200: {
- content: never
+ content: {
+ 'application/json': components['schemas']['HealthResponse']
+ }
}
- 403: {
- content: never
- }
- /** @description Failed to delete function with given slug */
+ /** @description Failed to retrieve API health status */
500: {
content: never
}
}
}
- /**
- * Update a function
- * @description Updates a function with the specified slug and project.
- */
- 'v1-update-a-function': {
+ /** Processes GitHub event */
+ GitHubWebhooksController_processEvent: {
parameters: {
- query?: {
- slug?: string
- name?: string
- verify_jwt?: boolean
- import_map?: boolean
- entrypoint_path?: string
- import_map_path?: string
+ header: {
+ 'x-github-delivery': string
+ 'x-github-event': string
+ 'x-hub-signature-256': string
}
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to process GitHub event */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Processes Vercel event */
+ VercelWebhooksController_processEvent: {
+ parameters: {
+ header: {
+ 'x-vercel-signature': string
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to process Vercel event */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets the partner usage and costs */
+ PartnerBillingSystemController_getPartnerUsageAndCosts: {
+ parameters: {
path: {
- /** @description Project ref */
- ref: string
- /** @description Function slug */
- function_slug: string
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to retrieve subscription */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets the current subscription */
+ OrgSubscriptionSystemController_getSubscription: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to retrieve subscription */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates subscription */
+ OrgSubscriptionSystemController_updateSubscription: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
}
}
requestBody: {
content: {
- 'application/json': components['schemas']['V1UpdateFunctionBody']
- 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody']
+ 'application/json': components['schemas']['UpdateSubscriptionV2AdminBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to update subscription */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates restriction status of an org */
+ OrgRestrictionsSystemController_updateRestriction: {
+ parameters: {
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateRestrictionsBody']
}
}
responses: {
200: {
content: {
- 'application/json': components['schemas']['FunctionResponse']
+ 'application/json': components['schemas']['UpdateRestrictionsResponse']
}
}
- 403: {
+ /** @description Failed to update restriction status */
+ 500: {
content: never
}
- /** @description Failed to update function with given slug */
+ }
+ }
+ /** Gets usage stats */
+ OrgUsageSystemController_getOrgUsage: {
+ parameters: {
+ query?: {
+ project_ref?: string
+ start?: string
+ end?: string
+ }
+ path: {
+ /** @description Organization slug */
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['OrgUsageResponse']
+ }
+ }
+ /** @description Failed to get usage stats */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Creates a partner organization */
+ AwsPartnerOrganizationsSystemController_createPartnerOrganization: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateAwsPartnerOrganizationBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['AwsPartnerOrganizationResponse']
+ }
+ }
+ /** @description Unexpected error creating a partner organization */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Create a project */
+ SystemProjectsController_createProject: {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SystemCreateProjectBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SystemProjectResponse']
+ }
+ }
+ }
+ }
+ /** Updates project addon */
+ AddonsController_updateAddon: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateAddonAdminBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to update project addon */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Removes project addon */
+ AddonsController_removeAddon: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ addon_variant: components['schemas']['AddonVariantId']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to remove project addon */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Handle update project jwt on completion */
+ ProjectUpdateJwtController_completeUpdateJwt: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ }
+ }
+ /** Allows a project to obtain temporary credentials. */
+ AwsCredentialsController_getTemporaryCredentials: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CredentialsRequestBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['CredentialsResponseBody']
+ }
+ }
+ /** @description Failed to obtain temporary credentials. */
500: {
content: never
}
@@ -12494,6 +12845,120 @@ export interface operations {
}
}
}
+ /**
+ * Delete a function
+ * @description Deletes a function with the specified slug from the specified project.
+ */
+ 'v1-delete-a-function': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ /** @description Function slug */
+ function_slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to delete function with given slug */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /**
+ * Update a function
+ * @description Updates a function with the specified slug and project.
+ */
+ 'v1-update-a-function': {
+ parameters: {
+ query?: {
+ slug?: string
+ name?: string
+ verify_jwt?: boolean
+ import_map?: boolean
+ entrypoint_path?: string
+ import_map_path?: string
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ /** @description Function slug */
+ function_slug: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['V1UpdateFunctionBody']
+ 'application/vnd.denoland.eszip': components['schemas']['V1UpdateFunctionBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['FunctionResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update function with given slug */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Records an HA event */
+ HaEventsController_updateStatus: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['EventBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to record HA event. */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates a project's health status. */
+ HealthReportingController_updateStatus: {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['ReportStatusBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ /** @description Failed to update health status. */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Run project lints */
SystemProjectRunLintsController_runProjectLints: {
parameters: {
@@ -12617,326 +13082,6 @@ export interface operations {
}
}
}
- /** Get API health status */
- HealthController_getStatus: {
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['HealthResponse']
- }
- }
- /** @description Failed to retrieve API health status */
- 500: {
- content: never
- }
- }
- }
- /** Updates a project's health status. */
- HealthReportingController_updateStatus: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['ReportStatusBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to update health status. */
- 500: {
- content: never
- }
- }
- }
- /** Records an HA event */
- HaEventsController_updateStatus: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['EventBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to record HA event. */
- 500: {
- content: never
- }
- }
- }
- /** Allows a project to obtain temporary credentials. */
- AwsCredentialsController_getTemporaryCredentials: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['CredentialsRequestBody']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['CredentialsResponseBody']
- }
- }
- /** @description Failed to obtain temporary credentials. */
- 500: {
- content: never
- }
- }
- }
- /** Updates project addon */
- AddonsController_updateAddon: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateAddonAdminBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to update project addon */
- 500: {
- content: never
- }
- }
- }
- /** Removes project addon */
- AddonsController_removeAddon: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- addon_variant: components['schemas']['AddonVariantId']
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to remove project addon */
- 500: {
- content: never
- }
- }
- }
- /** Handle update project jwt on completion */
- ProjectUpdateJwtController_completeUpdateJwt: {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: never
- }
- }
- }
- /** Create a project */
- SystemProjectsController_createProject: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['SystemCreateProjectBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SystemProjectResponse']
- }
- }
- }
- }
- /** Gets usage stats */
- OrgUsageSystemController_getOrgUsage: {
- parameters: {
- query?: {
- project_ref?: string
- start?: string
- end?: string
- }
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['OrgUsageResponse']
- }
- }
- /** @description Failed to get usage stats */
- 500: {
- content: never
- }
- }
- }
- /** Gets the partner usage and costs */
- PartnerBillingSystemController_getPartnerUsageAndCosts: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to retrieve subscription */
- 500: {
- content: never
- }
- }
- }
- /** Gets the current subscription */
- OrgSubscriptionSystemController_getSubscription: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to retrieve subscription */
- 500: {
- content: never
- }
- }
- }
- /** Updates subscription */
- OrgSubscriptionSystemController_updateSubscription: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateSubscriptionV2AdminBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- /** @description Failed to update subscription */
- 500: {
- content: never
- }
- }
- }
- /** Updates restriction status of an org */
- OrgRestrictionsSystemController_updateRestriction: {
- parameters: {
- path: {
- /** @description Organization slug */
- slug: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateRestrictionsBody']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['UpdateRestrictionsResponse']
- }
- }
- /** @description Failed to update restriction status */
- 500: {
- content: never
- }
- }
- }
- /** Creates a partner organization */
- AwsPartnerOrganizationsSystemController_createPartnerOrganization: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['CreateAwsPartnerOrganizationBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['AwsPartnerOrganizationResponse']
- }
- }
- /** @description Unexpected error creating a partner organization */
- 500: {
- content: never
- }
- }
- }
- /** Processes Vercel event */
- VercelWebhooksController_processEvent: {
- parameters: {
- header: {
- 'x-vercel-signature': string
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to process Vercel event */
- 500: {
- content: never
- }
- }
- }
- /** Processes GitHub event */
- GitHubWebhooksController_processEvent: {
- parameters: {
- header: {
- 'x-github-delivery': string
- 'x-github-event': string
- 'x-hub-signature-256': string
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to process GitHub event */
- 500: {
- content: never
- }
- }
- }
/** Processes Stripe event */
StripeWebhooksController_processEvent: {
parameters: {
@@ -13075,6 +13220,107 @@ export interface operations {
}
}
}
+ /** [Beta] Authorize user through oauth */
+ 'v1-authorize-user': {
+ parameters: {
+ query: {
+ client_id: string
+ response_type: 'code' | 'token' | 'id_token token'
+ redirect_uri: string
+ scope?: string
+ state?: string
+ response_mode?: string
+ code_challenge?: string
+ code_challenge_method?: 'plain' | 'sha256' | 'S256'
+ }
+ }
+ responses: {
+ 303: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Exchange auth code for user's access and refresh token */
+ 'v1-exchange-oauth-token': {
+ requestBody: {
+ content: {
+ 'application/x-www-form-urlencoded': components['schemas']['OAuthTokenBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['OAuthTokenResponse']
+ }
+ }
+ }
+ }
+ /**
+ * List all organizations
+ * @description Returns a list of organizations that you currently belong to.
+ */
+ 'v1-list-all-organizations': {
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['OrganizationResponseV1'][]
+ }
+ }
+ /** @description Unexpected error listing organizations */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Create an organization */
+ 'v1-create-an-organization': {
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateOrganizationBodyV1']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['OrganizationResponseV1']
+ }
+ }
+ /** @description Unexpected error creating an organization */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets information about the organization */
+ 'v1-get-an-organization': {
+ parameters: {
+ path: {
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['V1OrganizationSlugResponse']
+ }
+ }
+ }
+ }
+ /** List members of an organization */
+ 'v1-list-organization-members': {
+ parameters: {
+ path: {
+ slug: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['V1OrganizationMemberResponse'][]
+ }
+ }
+ }
+ }
/**
* List all projects
* @description Returns a list of all projects you've previously created.
@@ -13103,6 +13349,25 @@ export interface operations {
}
}
}
+ /** Deletes the given project */
+ 'v1-Delete a project': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['V1ProjectRefResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ }
+ }
/** Get project api keys */
'v1-get-project-api-keys': {
parameters: {
@@ -13194,727 +13459,6 @@ export interface operations {
}
}
}
- /** [Beta] Gets project's custom hostname config */
- 'v1-get-hostname-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['UpdateCustomHostnameResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve project's custom hostname config */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Deletes a project's custom hostname configuration */
- 'v1-Delete hostname config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to delete project custom hostname configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Updates project's custom hostname configuration */
- 'v1-update-hostname-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateCustomHostnameBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['UpdateCustomHostnameResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to update project custom hostname configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Attempts to verify the DNS configuration for project's custom hostname configuration */
- 'v1-verify-dns-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['UpdateCustomHostnameResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to verify project custom hostname configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Activates a custom hostname for a project. */
- 'v1-activate-custom-hostname': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['UpdateCustomHostnameResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to activate project custom hostname configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Gets project's network bans */
- 'v1-list-all-network-bans': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['NetworkBanResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve project's network bans */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Remove network bans. */
- 'v1-delete-network-bans': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['RemoveNetworkBanRequest']
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to remove network bans. */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Gets project's network restrictions */
- 'v1-get-network-restrictions': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['NetworkRestrictionsResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve project's network restrictions */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Updates project's network restrictions */
- 'v1-update-network-restrictions': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['NetworkRestrictionsRequest']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['NetworkRestrictionsResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to update project network restrictions */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Gets project's pgsodium config */
- 'v1-get-pgsodium-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PgsodiumConfigResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve project's pgsodium config */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */
- 'v1-update-pgsodium-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdatePgsodiumConfigBody']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PgsodiumConfigResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to update project's pgsodium config */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's postgrest config */
- 'v1-get-postgrest-service-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['PostgrestConfigWithJWTSecretResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve project's postgrest config */
- 500: {
- content: never
- }
- }
- }
- /** Updates project's postgrest config */
- 'v1-update-postgrest-service-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdatePostgrestConfigBody']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['V1PostgrestConfigResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to update project's postgrest config */
- 500: {
- content: never
- }
- }
- }
- /** Deletes the given project */
- 'v1-Delete a project': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['V1ProjectRefResponse']
- }
- }
- 403: {
- content: never
- }
- }
- }
- /** [Beta] Get project's SSL enforcement configuration. */
- 'v1-get-ssl-enforcement-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['SslEnforcementResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve project's SSL enforcement config */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Update project's SSL enforcement configuration. */
- 'v1-update-ssl-enforcement-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['SslEnforcementRequest']
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['SslEnforcementResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to update project's SSL enforcement configuration. */
- 500: {
- content: never
- }
- }
- }
- /**
- * Generate TypeScript types
- * @description Returns the TypeScript types of your schema for use with supabase-js.
- */
- 'v1-generate-typescript-types': {
- parameters: {
- query?: {
- included_schemas?: string
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['TypescriptResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to generate TypeScript types */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Gets current vanity subdomain config */
- 'v1-get-vanity-subdomain-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['VanitySubdomainConfigResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to get project vanity subdomain configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Deletes a project's vanity subdomain configuration */
- 'v1-deactivate-vanity-subdomain-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- 403: {
- content: never
- }
- /** @description Failed to delete project vanity subdomain configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Checks vanity subdomain availability */
- 'v1-check-vanity-subdomain-availability': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['VanitySubdomainBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['SubdomainAvailabilityResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to check project vanity subdomain configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Activates a vanity subdomain for a project. */
- 'v1-activate-vanity-subdomain-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['VanitySubdomainBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['ActivateVanitySubdomainResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to activate project vanity subdomain configuration */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Upgrades the project's Postgres version */
- 'v1-upgrade-postgres-version': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpgradeDatabaseBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['ProjectUpgradeInitiateResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to initiate project upgrade */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Returns the project's eligibility for upgrades */
- 'v1-get-postgrest-upgrade-eligibility': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ProjectUpgradeEligibilityResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to determine project upgrade eligibility */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Gets the latest status of the project's upgrade */
- 'v1-get-postgrest-upgrade-status': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['DatabaseUpgradeStatusResponse']
- }
- }
- 403: {
- content: never
- }
- /** @description Failed to retrieve project upgrade status */
- 500: {
- content: never
- }
- }
- }
- /** Returns project's readonly mode status */
- 'v1-get-readonly-mode-status': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ReadOnlyStatusResponse']
- }
- }
- /** @description Failed to get project readonly mode status */
- 500: {
- content: never
- }
- }
- }
- /** Disables project's readonly mode for the next 15 minutes */
- 'v1-disable-readonly-mode-temporarily': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to disable project's readonly mode */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Set up a read replica */
- 'v1-setup-a-read-replica': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['SetUpReadReplicaBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to set up read replica */
- 500: {
- content: never
- }
- }
- }
- /** [Beta] Remove a read replica */
- 'v1-remove-a-read-replica': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['RemoveReadReplicaBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- /** @description Failed to remove read replica */
- 500: {
- content: never
- }
- }
- }
- /** Gets project's service health status */
- 'v1-get-services-health': {
- parameters: {
- query: {
- timeout_ms?: number
- services: ('auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage')[]
- }
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['V1ServiceHealthResponse'][]
- }
- }
- /** @description Failed to retrieve project's service health status */
- 500: {
- content: never
- }
- }
- }
- /** Get project's pgbouncer config */
- 'v1-get-project-pgbouncer-config': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['V1PgbouncerConfigResponse']
- }
- }
- /** @description Failed to retrieve project's pgbouncer config */
- 500: {
- content: never
- }
- }
- }
/** Gets project's auth config */
'v1-get-auth-service-config': {
parameters: {
@@ -14094,6 +13638,183 @@ export interface operations {
}
}
}
+ /** Get project's pgbouncer config */
+ 'v1-get-project-pgbouncer-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['V1PgbouncerConfigResponse']
+ }
+ }
+ /** @description Failed to retrieve project's pgbouncer config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Gets project's custom hostname config */
+ 'v1-get-hostname-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['UpdateCustomHostnameResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve project's custom hostname config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Deletes a project's custom hostname configuration */
+ 'v1-Delete hostname config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to delete project custom hostname configuration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Activates a custom hostname for a project. */
+ 'v1-activate-custom-hostname': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['UpdateCustomHostnameResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to activate project custom hostname configuration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Updates project's custom hostname configuration */
+ 'v1-update-hostname-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdateCustomHostnameBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['UpdateCustomHostnameResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update project custom hostname configuration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Attempts to verify the DNS configuration for project's custom hostname configuration */
+ 'v1-verify-dns-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['UpdateCustomHostnameResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to verify project custom hostname configuration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Lists all backups */
+ 'v1-list-all-backups': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['V1BackupsResponse']
+ }
+ }
+ /** @description Failed to get backups */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Restores a PITR backup for a database */
+ 'v1-restore-pitr-backup': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['V1RestorePitrBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ }
+ }
/** [Beta] Run sql query */
'v1-run-a-query': {
parameters: {
@@ -14143,45 +13864,6 @@ export interface operations {
}
}
}
- /** Lists all backups */
- 'v1-list-all-backups': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['V1BackupsResponse']
- }
- }
- /** @description Failed to get backups */
- 500: {
- content: never
- }
- }
- }
- /** Restores a PITR backup for a database */
- 'v1-restore-pitr-backup': {
- parameters: {
- path: {
- /** @description Project ref */
- ref: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['V1RestorePitrBody']
- }
- }
- responses: {
- 201: {
- content: never
- }
- }
- }
/**
* Retrieve a function
* @description Retrieves a function with the specified slug and project.
@@ -14236,6 +13918,367 @@ export interface operations {
}
}
}
+ /** Gets project's service health status */
+ 'v1-get-services-health': {
+ parameters: {
+ query: {
+ timeout_ms?: number
+ services: ('auth' | 'db' | 'pooler' | 'realtime' | 'rest' | 'storage')[]
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['V1ServiceHealthResponse'][]
+ }
+ }
+ /** @description Failed to retrieve project's service health status */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Remove network bans. */
+ 'v1-delete-network-bans': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['RemoveNetworkBanRequest']
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to remove network bans. */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Gets project's network bans */
+ 'v1-list-all-network-bans': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['NetworkBanResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve project's network bans */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Gets project's network restrictions */
+ 'v1-get-network-restrictions': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['NetworkRestrictionsResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve project's network restrictions */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Updates project's network restrictions */
+ 'v1-update-network-restrictions': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['NetworkRestrictionsRequest']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['NetworkRestrictionsResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update project network restrictions */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Gets project's pgsodium config */
+ 'v1-get-pgsodium-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PgsodiumConfigResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve project's pgsodium config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible. */
+ 'v1-update-pgsodium-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdatePgsodiumConfigBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PgsodiumConfigResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update project's pgsodium config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Gets project's postgrest config */
+ 'v1-get-postgrest-service-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['PostgrestConfigWithJWTSecretResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve project's postgrest config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Updates project's postgrest config */
+ 'v1-update-postgrest-service-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['UpdatePostgrestConfigBody']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['V1PostgrestConfigResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update project's postgrest config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Remove a read replica */
+ 'v1-remove-a-read-replica': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['RemoveReadReplicaBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to remove read replica */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Set up a read replica */
+ 'v1-setup-a-read-replica': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SetUpReadReplicaBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to set up read replica */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Returns project's readonly mode status */
+ 'v1-get-readonly-mode-status': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['ReadOnlyStatusResponse']
+ }
+ }
+ /** @description Failed to get project readonly mode status */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** Disables project's readonly mode for the next 15 minutes */
+ 'v1-disable-readonly-mode-temporarily': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 201: {
+ content: never
+ }
+ /** @description Failed to disable project's readonly mode */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Get project's SSL enforcement configuration. */
+ 'v1-get-ssl-enforcement-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['SslEnforcementResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve project's SSL enforcement config */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Update project's SSL enforcement configuration. */
+ 'v1-update-ssl-enforcement-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['SslEnforcementRequest']
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['SslEnforcementResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to update project's SSL enforcement configuration. */
+ 500: {
+ content: never
+ }
+ }
+ }
/** Lists all buckets */
'v1-list-all-buckets': {
parameters: {
@@ -14260,104 +14303,206 @@ export interface operations {
}
}
/**
- * List all organizations
- * @description Returns a list of organizations that you currently belong to.
+ * Generate TypeScript types
+ * @description Returns the TypeScript types of your schema for use with supabase-js.
*/
- 'v1-list-all-organizations': {
+ 'v1-generate-typescript-types': {
+ parameters: {
+ query?: {
+ included_schemas?: string
+ }
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
responses: {
200: {
content: {
- 'application/json': components['schemas']['OrganizationResponseV1'][]
+ 'application/json': components['schemas']['TypescriptResponse']
}
}
- /** @description Unexpected error listing organizations */
+ 403: {
+ content: never
+ }
+ /** @description Failed to generate TypeScript types */
500: {
content: never
}
}
}
- /** Create an organization */
- 'v1-create-an-organization': {
+ /** [Beta] Upgrades the project's Postgres version */
+ 'v1-upgrade-postgres-version': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
requestBody: {
content: {
- 'application/json': components['schemas']['CreateOrganizationBodyV1']
+ 'application/json': components['schemas']['UpgradeDatabaseBody']
}
}
responses: {
201: {
content: {
- 'application/json': components['schemas']['OrganizationResponseV1']
+ 'application/json': components['schemas']['ProjectUpgradeInitiateResponse']
}
}
- /** @description Unexpected error creating an organization */
+ 403: {
+ content: never
+ }
+ /** @description Failed to initiate project upgrade */
500: {
content: never
}
}
}
- /** List members of an organization */
- 'v1-list-organization-members': {
+ /** [Beta] Returns the project's eligibility for upgrades */
+ 'v1-get-postgrest-upgrade-eligibility': {
parameters: {
path: {
- slug: string
+ /** @description Project ref */
+ ref: string
}
}
responses: {
200: {
content: {
- 'application/json': components['schemas']['V1OrganizationMemberResponse'][]
+ 'application/json': components['schemas']['ProjectUpgradeEligibilityResponse']
}
}
- }
- }
- /** Gets information about the organization */
- 'v1-get-an-organization': {
- parameters: {
- path: {
- slug: string
+ 403: {
+ content: never
}
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['V1OrganizationSlugResponse']
- }
- }
- }
- }
- /** [Beta] Authorize user through oauth */
- 'v1-authorize-user': {
- parameters: {
- query: {
- client_id: string
- response_type: 'code' | 'token' | 'id_token token'
- redirect_uri: string
- scope?: string
- state?: string
- response_mode?: string
- code_challenge?: string
- code_challenge_method?: 'plain' | 'sha256' | 'S256'
- }
- }
- responses: {
- 303: {
+ /** @description Failed to determine project upgrade eligibility */
+ 500: {
content: never
}
}
}
- /** [Beta] Exchange auth code for user's access and refresh token */
- 'v1-exchange-oauth-token': {
+ /** [Beta] Gets the latest status of the project's upgrade */
+ 'v1-get-postgrest-upgrade-status': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['DatabaseUpgradeStatusResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to retrieve project upgrade status */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Gets current vanity subdomain config */
+ 'v1-get-vanity-subdomain-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: {
+ 'application/json': components['schemas']['VanitySubdomainConfigResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to get project vanity subdomain configuration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Deletes a project's vanity subdomain configuration */
+ 'v1-deactivate-vanity-subdomain-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ responses: {
+ 200: {
+ content: never
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to delete project vanity subdomain configuration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Activates a vanity subdomain for a project. */
+ 'v1-activate-vanity-subdomain-config': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
requestBody: {
content: {
- 'application/x-www-form-urlencoded': components['schemas']['OAuthTokenBody']
+ 'application/json': components['schemas']['VanitySubdomainBody']
}
}
responses: {
201: {
content: {
- 'application/json': components['schemas']['OAuthTokenResponse']
+ 'application/json': components['schemas']['ActivateVanitySubdomainResponse']
}
}
+ 403: {
+ content: never
+ }
+ /** @description Failed to activate project vanity subdomain configuration */
+ 500: {
+ content: never
+ }
+ }
+ }
+ /** [Beta] Checks vanity subdomain availability */
+ 'v1-check-vanity-subdomain-availability': {
+ parameters: {
+ path: {
+ /** @description Project ref */
+ ref: string
+ }
+ }
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['VanitySubdomainBody']
+ }
+ }
+ responses: {
+ 201: {
+ content: {
+ 'application/json': components['schemas']['SubdomainAvailabilityResponse']
+ }
+ }
+ 403: {
+ content: never
+ }
+ /** @description Failed to check project vanity subdomain configuration */
+ 500: {
+ content: never
+ }
}
}
/** Lists SQL snippets for the logged in user */
@@ -14398,144 +14543,4 @@ export interface operations {
}
}
}
- /** Redirects to Supabase dashboard after completing Fly sso */
- CallbackController_redirectToDashboardFlyioExtensionScreen: {
- responses: {
- 200: {
- content: never
- }
- }
- }
- /** Gets database status */
- ExtensionController_getResourceStatus: {
- parameters: {
- path: {
- extension_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ResourceWithServicesStatusResponse']
- }
- }
- }
- }
- /** Deletes a database */
- ExtensionController_deleteResource: {
- parameters: {
- path: {
- extension_id: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- }
- }
- /** Starts Fly single sign on */
- ExtensionController_startFlyioSSO: {
- parameters: {
- path: {
- extension_id: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- }
- }
- /** Creates a database */
- FlyExtensionsController_provisionResource: {
- requestBody: {
- content: {
- 'application/json': components['schemas']['FlyResourceProvisioningBody']
- }
- }
- responses: {
- 201: {
- content: {
- 'application/json': components['schemas']['ResourceProvisioningResponse']
- }
- }
- }
- }
- /** Gets details of the organization linked to the provided Fly organization id */
- FlyOrganizationsController_getOrganization: {
- parameters: {
- path: {
- organization_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['FlyOrganization']
- }
- }
- }
- }
- /** Gets all databases that belong to the given Fly organization id */
- FlyOrganizationsController_getOrgExtensions: {
- parameters: {
- path: {
- organization_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['OrganizationExtensionStatus'][]
- }
- }
- }
- }
- /** Starts Fly single sign on */
- FlyOrganizationsController_startFlyioSSO: {
- parameters: {
- path: {
- organization_id: string
- }
- }
- responses: {
- 200: {
- content: never
- }
- }
- }
- /** Updates organization subscription linked to the provided Fly organization id */
- FlyOrganizationsController_updateOrganization: {
- parameters: {
- path: {
- organization_id: string
- }
- }
- requestBody: {
- content: {
- 'application/json': components['schemas']['FlyUpdateOrganizationSubscriptionBody']
- }
- }
- responses: {
- 200: {
- content: never
- }
- }
- }
- /** Gets the organizations current unbilled charges */
- FlyBillingController_getResourceBilling: {
- parameters: {
- path: {
- organization_id: string
- }
- }
- responses: {
- 200: {
- content: {
- 'application/json': components['schemas']['ResourceBillingResponse']
- }
- }
- }
- }
}
From ad6bd528d7ca8f819aaf6e8a198227e5c4c3b510 Mon Sep 17 00:00:00 2001
From: Peter
Date: Mon, 24 Jun 2024 11:34:26 -0500
Subject: [PATCH 018/316] docs: update Github OAuth step (#27293)
* Remove Valid OAuth Redirect URIs as it is no longer there
* Remove save changes step
---
apps/docs/content/guides/auth/social-login/auth-github.mdx | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/apps/docs/content/guides/auth/social-login/auth-github.mdx b/apps/docs/content/guides/auth/social-login/auth-github.mdx
index 2f2088e9b44..369c5cf56c2 100644
--- a/apps/docs/content/guides/auth/social-login/auth-github.mdx
+++ b/apps/docs/content/guides/auth/social-login/auth-github.mdx
@@ -41,8 +41,7 @@ Go to the [GitHub Developer Settings](https://github.com/settings/developers) pa
- In `Application name`, type the name of your app.
- In `Homepage URL`, type the full URL to your app's website.
- In `Authorization callback URL`, type the callback URL of your app.
-- Enter the URL in the `Valid OAuth Redirect URIs` box.
-- Click `Save Changes` at the bottom right.
+- Leave `Enable Device Flow` unchecked.
- Click `Register Application`.
Copy your new OAuth credentials
From efeb8239f9ef4ad21db660d2fa76307158f76356 Mon Sep 17 00:00:00 2001
From: Peter
Date: Mon, 24 Jun 2024 11:34:38 -0500
Subject: [PATCH 019/316] docs: fix image transformation url for nextjs loader
(#27285)
Fix URL for NextJS loader docs
---
.../content/guides/storage/serving/image-transformations.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/docs/content/guides/storage/serving/image-transformations.mdx b/apps/docs/content/guides/storage/serving/image-transformations.mdx
index aa1e1ebfb67..f8884b90fac 100644
--- a/apps/docs/content/guides/storage/serving/image-transformations.mdx
+++ b/apps/docs/content/guides/storage/serving/image-transformations.mdx
@@ -303,7 +303,7 @@ To get started, create a `supabase-image-loader.js` file in your Next.js project
const projectId = '' // your supabase project id
export default function supabaseLoader({ src, width, quality }) {
- return `https://${projectId}.supabase.co/storage/v1/object/public/${src}?width=${width}&quality=${quality || 75}`
+ return `https://${projectId}.supabase.co/storage/v1/render/image/public/${src}?width=${width}&quality=${quality || 75}`
}
```
From ca4867271143a1f35125a6e5ba922cd571b1adbf Mon Sep 17 00:00:00 2001
From: Stojan Dimitrovski
Date: Mon, 24 Jun 2024 18:58:17 +0200
Subject: [PATCH 020/316] docs: rewrite ssr examples to use `getAll`, `setAll`
(#27242)
---
.../auth/server-side/creating-a-client.mdx | 256 ++++++++----------
.../guides/auth/server-side/nextjs.mdx | 128 ++++-----
2 files changed, 160 insertions(+), 224 deletions(-)
diff --git a/apps/docs/content/guides/auth/server-side/creating-a-client.mdx b/apps/docs/content/guides/auth/server-side/creating-a-client.mdx
index b213d2cae37..256c31cb868 100644
--- a/apps/docs/content/guides/auth/server-side/creating-a-client.mdx
+++ b/apps/docs/content/guides/auth/server-side/creating-a-client.mdx
@@ -137,7 +137,7 @@ Server Components only have read access to cookies. Check the `Middleware` tab f
```ts page.tsx
-import { createServerClient, type CookieOptions } from '@supabase/ssr'
+import { createServerClient } from '@supabase/ssr'
import { cookies } from 'next/headers'
export default async function Page () {
@@ -148,8 +148,8 @@ export default async function Page () {
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return cookieStore.get(name)?.value
+ getAll() {
+ return cookieStore.getAll()
},
},
}
@@ -174,10 +174,8 @@ import { createServerClient, type CookieOptions } from '@supabase/ssr'
import { NextResponse, type NextRequest } from 'next/server'
export async function middleware(request: NextRequest) {
- let response = NextResponse.next({
- request: {
- headers: request.headers,
- },
+ let supabaseResponse = NextResponse.next({
+ request,
})
const supabase = createServerClient(
@@ -185,50 +183,47 @@ export async function middleware(request: NextRequest) {
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return request.cookies.get(name)?.value
+ getAll() {
+ return request.cookies.getAll()
},
- set(name: string, value: string, options: CookieOptions) {
- request.cookies.set({
- name,
- value,
- ...options,
- })
- response = NextResponse.next({
- request: {
- headers: request.headers,
- },
- })
- response.cookies.set({
- name,
- value,
- ...options,
- })
- },
- remove(name: string, options: CookieOptions) {
- request.cookies.set({
- name,
- value: '',
- ...options,
- })
- response = NextResponse.next({
- request: {
- headers: request.headers,
- },
- })
- response.cookies.set({
- name,
- value: '',
- ...options,
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value }) => request.cookies.set(name, value))
+ supabaseResponse = NextResponse.next({
+ request,
})
+ cookiesToSet.forEach(({ name, value, options }) =>
+ supabaseResponse.cookies.set(name, value, options)
+ )
},
},
}
)
- await supabase.auth.getUser()
+ // IMPORTANT: Avoid writing any logic between createServerClient and
+ // supabase.auth.getUser(). A simple mistake could make it very hard to debug
+ // issues with users being randomly logged out.
- return response
+ const { data: user, error } = await supabase.auth.getUser()
+
+ if (!user) {
+ // no user, potentially respond by redirecting the user to the login page
+ return NextResponse.redirect('/login')
+ }
+
+ // IMPORTANT: You *must* return the supabaseResponse object as it is. If you're
+ // creating a new response object with NextResponse.next() make sure to:
+ // 1. Pass the request in it, like so:
+ // const myNewResponse = NextResponse.next({ request })
+ // 2. Copy over the cookies, like so:
+ // myNewResponse.cookies.setAll(supabaseResponse.cookies.getAll())
+ // 3. Change the myNewResponse object to fit your needs, but avoid changing
+ // the cookies!
+ // 4. Finally:
+ // return myNewResponse
+ // If this is not done, you may be causing the browser and server to go out
+ // of sync and terminate the user's session prematurely!
+
+ return supabaseResponse
}
export const config = {
@@ -261,14 +256,12 @@ export async function POST(request: Request) {
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return cookieStore.get(name)?.value
+ getAll() {
+ return cookieStore.getAll()
},
- set(name: string, value: string, options: CookieOptions) {
- cookieStore.set({ name, value, ...options })
- },
- remove(name: string, options: CookieOptions) {
- cookieStore.set({ name, value: '', ...options })
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) =>
+ cookieStore.set(name, value, options))
},
},
}
@@ -297,14 +290,12 @@ export default async function Page () {
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return cookieStore.get(name)?.value
+ getAll() {
+ return cookieStore.getAll()
},
- set(name: string, value: string, options: CookieOptions) {
- cookieStore.set({ name, value, ...options })
- },
- remove(name: string, options: CookieOptions) {
- cookieStore.set({ name, value: '', ...options })
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) =>
+ cookieStore.set(name, value, options))
},
},
}
@@ -321,25 +312,22 @@ export default async function Page () {
```ts index.tsx
import { type GetServerSidePropsContext } from 'next'
-import { createServerClient, type CookieOptions, serialize } from '@supabase/ssr'
+import { createServerClient, serializeCookieHeader } from '@supabase/ssr'
-export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+export const getServerSideProps = async ({ req, res }: GetServerSidePropsContext) => {
const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return context.req.cookies[name];
+ getAll() {
+ return Object.keys(req.cookies)
+ .map((name) => ({ name, value: req.cookies[name] }))
},
- set(name: string, value: string, options: CookieOptions) {
- context.res.appendHeader(
- "Set-Cookie",
- serialize(name, value, options)
- );
- },
- remove(name: string, options: CookieOptions) {
- context.res.appendHeader("Set-Cookie", serialize(name, "", options));
+ setAll(cookiesToSet) {
+ res.setHeader('Set-Cookie',
+ cookiesToSet.map(({ name, value, options }) =>
+ serializeCookieHeader(name, value, options)))
},
},
}
@@ -375,7 +363,7 @@ export const getStaticProps = async () => {
```ts index.tsx
-import { createServerClient, type CookieOptions, serialize } from "@supabase/ssr"
+import { createServerClient, serializeCookieHeader } from "@supabase/ssr"
import { type NextApiRequest, type NextApiResponse } from "next"
export default async function handler(
@@ -387,14 +375,14 @@ export default async function handler(
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return req.cookies[name];
+ getAll() {
+ return Object.keys(req.cookies)
+ .map((name) => ({ name, value: req.cookies[name] }))
},
- set(name: string, value: string, options: CookieOptions) {
- res.setHeader("Set-Cookie", serialize(name, value, options));
- },
- remove(name: string, options: CookieOptions) {
- res.setHeader("Set-Cookie", serialize(name, "", options));
+ setAll(cookiesToSet) {
+ res.setHeader('Set-Cookie',
+ cookiesToSet.map(({ name, value, options }) =>
+ serializeCookieHeader(name, value, options)))
},
},
}
@@ -452,18 +440,19 @@ import type { Handle } from '@sveltejs/kit'
export const handle: Handle = async ({ event, resolve }) => {
event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
cookies: {
- get: (key) => event.cookies.get(key),
- /**
- * Note: You have to add the `path` variable to the
- * set and remove method due to sveltekit's cookie API
- * requiring this to be set, setting the path to an empty string
- * will replicate previous/standard behaviour (https://kit.svelte.dev/docs/types#public-types-cookies)
- */
- set: (key, value, options) => {
- event.cookies.set(key, value, { ...options, path: '/' })
+ getAll() {
+ return event.cookies.getAll()
},
- remove: (key, options) => {
- event.cookies.delete(key, { ...options, path: '/' })
+ setAll(cookiesToSet) {
+ /**
+ * Note: You have to add the `path` variable to the
+ * set and remove method due to sveltekit's cookie API
+ * requiring this to be set, setting the path to an empty string
+ * will replicate previous/standard behavior (https://kit.svelte.dev/docs/types#public-types-cookies)
+ */
+ cookiesToSet.forEach(({ name, value, options }) =>
+ event.cookies.set(name, value, { ...options, path: '/' })
+ )
},
},
})
@@ -514,7 +503,7 @@ Page components can get access to the supabase client from the `data` object due
```ts +layout.ts
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
import type { LayoutLoad } from './$types'
-import { createBrowserClient, createServerClient, isBrowser, parse } from '@supabase/ssr'
+import { createBrowserClient, createServerClient, isBrowser } from '@supabase/ssr'
export const load: LayoutLoad = async ({ fetch, data, depends }) => {
depends('supabase:auth')
@@ -524,12 +513,6 @@ export const load: LayoutLoad = async ({ fetch, data, depends }) => {
global: {
fetch,
},
- cookies: {
- get(key) {
- const cookie = parse(document.cookie)
- return cookie[key]
- },
- },
})
: createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, {
global: {
@@ -646,21 +629,19 @@ export default defineConfig({
```ts index.astro
---
-import { createServerClient, type CookieOptions } from "@supabase/ssr";
+import { createServerClient, parseCookieHeader } from "@supabase/ssr";
const supabase = createServerClient(
import.meta.env.PUBLIC_SUPABASE_URL,
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
{
cookies: {
- get(key: string) {
- return Astro.cookies.get(key)?.value;
+ getAll() {
+ return parseCookieHeader(Astro.request.headers.get('Cookie') ?? '')
},
- set(key: string, value: string, options: CookieOptions) {
- Astro.cookies.set(key, value, options);
- },
- remove(key: string, options) {
- Astro.cookies.delete(key, options);
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) =>
+ Astro.cookies.set(name, value, options))
},
},
}
@@ -686,7 +667,7 @@ const supabase = createServerClient(
```ts route.ts
-import { createServerClient, type CookieOptions } from "@supabase/ssr";
+import { createServerClient, parseCookieHeader } from "@supabase/ssr";
import type { APIContext } from "astro";
export async function GET(context: APIContext) {
@@ -695,14 +676,12 @@ export async function GET(context: APIContext) {
import.meta.env.PUBLIC_SUPABASE_ANON_KEY,
{
cookies: {
- get(key: string) {
- return context.cookies.get(key)?.value;
+ getAll() {
+ return parseCookieHeader(context.request.headers.get('Cookie') ?? '')
},
- set(key: string, value: string, options: CookieOptions) {
- context.cookies.set(key, value, options);
- },
- remove(key: string, options) {
- context.cookies.delete(key, options);
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) =>
+ context.cookies.set(name, value, options))
},
},
}
@@ -729,22 +708,20 @@ export async function GET(context: APIContext) {
```ts _index.tsx
import { type LoaderFunctionArgs } from '@remix-run/node'
-import { createServerClient, parse, serialize } from '@supabase/ssr'
+import { createServerClient, parseCookieHeader, serializeCookieHeader } from '@supabase/ssr'
export async function loader({ request }: LoaderFunctionArgs) {
- const cookies = parse(request.headers.get('Cookie') ?? '')
const headers = new Headers()
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
cookies: {
- get(key) {
- return cookies[key]
+ getAll() {
+ return parseCookieHeader(request.headers.get('Cookie') ?? '')
},
- set(key, value, options) {
- headers.append('Set-Cookie', serialize(key, value, options))
- },
- remove(key, options) {
- headers.append('Set-Cookie', serialize(key, '', options))
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) =>
+ headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
+ )
},
},
})
@@ -761,22 +738,20 @@ export async function loader({ request }: LoaderFunctionArgs) {
```ts _index.tsx
import { type ActionFunctionArgs } from '@remix-run/node'
-import { createServerClient, parse, serialize } from '@supabase/ssr'
+import { createServerClient, parseCookieHeader, serializeCookieHeader } from '@supabase/ssr'
export async function action({ request }: ActionFunctionArgs) {
- const cookies = parse(request.headers.get('Cookie') ?? '')
const headers = new Headers()
const supabase = createServerClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, {
cookies: {
- get(key) {
- return cookies[key]
+ getAll() {
+ return parseCookieHeader(request.headers.get('Cookie') ?? '')
},
- set(key, value, options) {
- headers.append('Set-Cookie', serialize(key, value, options))
- },
- remove(key, options) {
- headers.append('Set-Cookie', serialize(key, '', options))
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) =>
+ headers.append('Set-Cookie', serializeCookieHeader(name, value, options))
+ )
},
},
})
@@ -831,27 +806,18 @@ export default function Index() {
```ts lib/supabase.js
-const { createServerClient } = require('@supabase/ssr')
+const { createServerClient, parseCookieHeader, serializeCookieHeader } = require('@supabase/ssr')
exports.createClient = (context) => {
return createServerClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY, {
cookies: {
- get: (key) => {
- const cookies = context.req.cookies
- const cookie = cookies[key] ?? ''
- return decodeURIComponent(cookie)
+ getAll() {
+ return parseCookieHeader(context.req.headers.cookie ?? '')
},
- set: (key, value, options) => {
- if (!context.res) return
- context.res.cookie(key, encodeURIComponent(value), {
- ...options,
- sameSite: 'Lax',
- httpOnly: true,
- })
- },
- remove: (key, options) => {
- if (!context.res) return
- context.res.cookie(key, '', { ...options, httpOnly: true })
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) =>
+ context.res.appendHeader('Set-Cookie', serializeCookieHeader(name, value, options))
+ )
},
},
})
diff --git a/apps/docs/content/guides/auth/server-side/nextjs.mdx b/apps/docs/content/guides/auth/server-side/nextjs.mdx
index 8ddc10fafa5..d0a4c02a3a5 100644
--- a/apps/docs/content/guides/auth/server-side/nextjs.mdx
+++ b/apps/docs/content/guides/auth/server-side/nextjs.mdx
@@ -133,26 +133,11 @@ export function createClient() {
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return cookieStore.get(name)?.value
+ getAll() {
+ return cookieStore.getAll()
},
- set(name: string, value: string, options: CookieOptions) {
- try {
- cookieStore.set({ name, value, ...options })
- } catch (error) {
- // The `set` method was called from a Server Component.
- // This can be ignored if you have middleware refreshing
- // user sessions.
- }
- },
- remove(name: string, options: CookieOptions) {
- try {
- cookieStore.set({ name, value: '', ...options })
- } catch (error) {
- // The `delete` method was called from a Server Component.
- // This can be ignored if you have middleware refreshing
- // user sessions.
- }
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) => cookieStore.set(name, value, options))
},
},
}
@@ -225,14 +210,12 @@ export const config = {
```
```ts utils/supabase/middleware.ts
-import { createServerClient, type CookieOptions } from '@supabase/ssr'
+import { createServerClient } from '@supabase/ssr'
import { NextResponse, type NextRequest } from 'next/server'
export async function updateSession(request: NextRequest) {
- let response = NextResponse.next({
- request: {
- headers: request.headers,
- },
+ let supabaseResponse = NextResponse.next({
+ request,
})
const supabase = createServerClient(
@@ -240,50 +223,47 @@ export async function updateSession(request: NextRequest) {
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return request.cookies.get(name)?.value
+ getAll() {
+ return request.cookies.getAll()
},
- set(name: string, value: string, options: CookieOptions) {
- request.cookies.set({
- name,
- value,
- ...options,
- })
- response = NextResponse.next({
- request: {
- headers: request.headers,
- },
- })
- response.cookies.set({
- name,
- value,
- ...options,
- })
- },
- remove(name: string, options: CookieOptions) {
- request.cookies.set({
- name,
- value: '',
- ...options,
- })
- response = NextResponse.next({
- request: {
- headers: request.headers,
- },
- })
- response.cookies.set({
- name,
- value: '',
- ...options,
+ setAll(cookiesToSet) {
+ cookiesToSet.forEach(({ name, value, options }) => request.cookies.set(name, value))
+ supabaseResponse = NextResponse.next({
+ request,
})
+ cookiesToSet.forEach(({ name, value, options }) =>
+ supabaseResponse.cookies.set(name, value, options)
+ )
},
},
}
)
- await supabase.auth.getUser()
+ // IMPORTANT: Avoid writing any logic between createServerClient and
+ // supabase.auth.getUser(). A simple mistake could make it very hard to debug
+ // issues with users being randomly logged out.
- return response
+ const { data: user, error } = await supabase.auth.getUser()
+
+ if (!user) {
+ // no user, potentially respond by redirecting the user to the login page
+ return NextResponse.redirect('/login')
+ }
+
+ // IMPORTANT: You *must* return the supabaseResponse object as it is. If you're
+ // creating a new response object with NextResponse.next() make sure to:
+ // 1. Pass the request in it, like so:
+ // const myNewResponse = NextResponse.next({ request })
+ // 2. Copy over the cookies, like so:
+ // myNewResponse.cookies.setAll(supabaseResponse.cookies.getAll())
+ // 3. Change the myNewResponse object to fit your needs, but avoid changing
+ // the cookies!
+ // 4. Finally:
+ // return myNewResponse
+ // If this is not done, you may be causing the browser and server to go out
+ // of sync and terminate the user's session prematurely!
+
+ return supabaseResponse
}
```
@@ -626,7 +606,7 @@ Create a `utils/supabase` folder with a file for each type of client. Then copy
```ts utils/supabase/server-props.ts
-import { createServerClient, type CookieOptions, serialize } from '@supabase/ssr'
+import { createServerClient, serialize } from '@supabase/ssr'
import { type GetServerSidePropsContext } from 'next'
export function createClient(context: GetServerSidePropsContext) {
@@ -634,17 +614,7 @@ export function createClient(context: GetServerSidePropsContext) {
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
- cookies: {
- get(name: string) {
- return context.req.cookies[name]
- },
- set(name: string, value: string, options: CookieOptions) {
- context.res.appendHeader('Set-Cookie', serialize(name, value, options))
- },
- remove(name: string, options: CookieOptions) {
- context.res.appendHeader('Set-Cookie', serialize(name, '', options))
- },
- },
+ cookies: {},
}
)
@@ -688,14 +658,14 @@ export default function createClient(req: NextApiRequest, res: NextApiResponse)
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
- get(name: string) {
- return req.cookies[name]
+ getAll() {
+ return Object.keys(req.cookies).map((name) => ({ name, value: req.cookies[name] }))
},
- set(name: string, value: string, options: CookieOptions) {
- res.appendHeader('Set-Cookie', serialize(name, value, options))
- },
- remove(name: string, options: CookieOptions) {
- res.appendHeader('Set-Cookie', serialize(name, '', options))
+ setAll(cookiesToSet) {
+ res.setHeader(
+ 'Set-Cookie',
+ cookiesToSet.map(({ name, value, options }) => serialize(name, value, options))
+ )
},
},
}
From b8a96db9372a0498d5627ce2da43e6066aa17dd7 Mon Sep 17 00:00:00 2001
From: 0xflotus <0xflotus@gmail.com>
Date: Mon, 24 Jun 2024 19:23:21 +0200
Subject: [PATCH 021/316] fix: small typo error in heading (#27446)
---
apps/www/_blog/2024-06-19-self-host-maps-storage-protomaps.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/www/_blog/2024-06-19-self-host-maps-storage-protomaps.mdx b/apps/www/_blog/2024-06-19-self-host-maps-storage-protomaps.mdx
index 7ce67c18ffe..44919694a95 100644
--- a/apps/www/_blog/2024-06-19-self-host-maps-storage-protomaps.mdx
+++ b/apps/www/_blog/2024-06-19-self-host-maps-storage-protomaps.mdx
@@ -29,7 +29,7 @@ In this tutorial, you will learn to
- Use MapLibre to render the Map onto a Web Page.
- Use Supabase Edge Functions to restrict File Access.
-## Excract an area into a static PMTiles file
+## Extract an area into a static PMTiles file
Protomaps provides a [`pmtiles` CLI](https://docs.protomaps.com/guide/getting-started#_1-install-the-cli) that can be used to cut out certain areas from the world map and compress those into a single static file.
From ae06e6b7c5b89cc12e98f059488b0b2f84b97c16 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 24 Jun 2024 17:38:30 +0000
Subject: [PATCH 022/316] feat: update mgmt api docs (#27308)
Co-authored-by: phamhieu <689843+phamhieu@users.noreply.github.com>
---
apps/docs/spec/api_v1_openapi.json | 2 +-
.../transforms/api_v1_openapi_deparsed.json | 89 ++++++++++++++++---
2 files changed, 80 insertions(+), 11 deletions(-)
diff --git a/apps/docs/spec/api_v1_openapi.json b/apps/docs/spec/api_v1_openapi.json
index 05bfb70ef64..081fb9312af 100644
--- a/apps/docs/spec/api_v1_openapi.json
+++ b/apps/docs/spec/api_v1_openapi.json
@@ -1 +1 @@
-{"openapi":"3.0.0","paths":{"/v1/branches/{branch_id}":{"get":{"operationId":"v1-get-a-branch-config","summary":"Get database branch config","description":"Fetches configurations of the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchDetailResponse"}}}},"500":{"description":"Failed to retrieve database branch"}},"tags":["environments"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-a-branch-config","summary":"Update database branch config","description":"Updates the configuration of the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBranchBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}},"500":{"description":"Failed to update database branch"}},"tags":["environments"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-delete-a-branch","summary":"Delete a database branch","description":"Deletes the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchDeleteResponse"}}}},"500":{"description":"Failed to delete database branch"}},"tags":["environments"],"security":[{"bearer":[]}]}},"/v1/branches/{branch_id}/reset":{"post":{"operationId":"v1-reset-a-branch","summary":"Resets a database branch","description":"Resets the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchResetResponse"}}}},"500":{"description":"Failed to reset database branch"}},"tags":["environments"],"security":[{"bearer":[]}]}},"/v1/projects":{"get":{"operationId":"v1-list-all-projects","summary":"List all projects","description":"Returns a list of all projects you've previously created.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1ProjectResponse"}}}}}},"tags":["projects"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-create-a-project","summary":"Create a project","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateProjectBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1ProjectResponse"}}}}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/organizations":{"get":{"operationId":"v1-list-all-organizations","summary":"List all organizations","description":"Returns a list of organizations that you currently belong to.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationResponseV1"}}}}},"500":{"description":"Unexpected error listing organizations"}},"tags":["organizations"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-create-an-organization","summary":"Create an organization","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrganizationBodyV1"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponseV1"}}}},"500":{"description":"Unexpected error creating an organization"}},"tags":["organizations"],"security":[{"bearer":[]}]}},"/v1/oauth/authorize":{"get":{"operationId":"v1-authorize-user","summary":"[Beta] Authorize user through oauth","parameters":[{"name":"client_id","required":true,"in":"query","schema":{"type":"string"}},{"name":"response_type","required":true,"in":"query","schema":{"enum":["code","token","id_token token"],"type":"string"}},{"name":"redirect_uri","required":true,"in":"query","schema":{"type":"string"}},{"name":"scope","required":false,"in":"query","schema":{"type":"string"}},{"name":"state","required":false,"in":"query","schema":{"type":"string"}},{"name":"response_mode","required":false,"in":"query","schema":{"type":"string"}},{"name":"code_challenge","required":false,"in":"query","schema":{"type":"string"}},{"name":"code_challenge_method","required":false,"in":"query","schema":{"enum":["plain","sha256","S256"],"type":"string"}}],"responses":{"303":{"description":""}},"tags":["oauth"],"security":[{"oauth2":["read"]}]}},"/v1/oauth/token":{"post":{"operationId":"v1-exchange-oauth-token","summary":"[Beta] Exchange auth code for user's access and refresh token","parameters":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/OAuthTokenBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenResponse"}}}}},"tags":["oauth"],"security":[{"oauth2":["write"]}]}},"/v1/snippets":{"get":{"operationId":"v1-list-all-snippets","summary":"Lists SQL snippets for the logged in user","parameters":[{"name":"project_ref","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnippetList"}}}},"500":{"description":"Failed to list user's SQL snippets"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/snippets/{id}":{"get":{"operationId":"v1-get-a-snippet","summary":"Gets a specific SQL snippet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnippetResponse"}}}},"500":{"description":"Failed to retrieve SQL snippet"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/api-keys":{"get":{"operationId":"v1-get-project-api-keys","summary":"Get project api keys","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyResponse"}}}}},"403":{"description":""}},"tags":["secrets"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/branches":{"get":{"operationId":"v1-list-all-branches","summary":"List all database branches","description":"Returns all database branches of the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BranchResponse"}}}}},"500":{"description":"Failed to retrieve database branches"}},"tags":["environments"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-create-a-branch","summary":"Create a database branch","description":"Creates a database branch from the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBranchBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}},"500":{"description":"Failed to create database branch"}},"tags":["environments"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-disable-preview-branching","summary":"Disables preview branching","description":"Disables preview branching for the specified project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":""},"500":{"description":"Failed to disable preview branching"}},"tags":["environments"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname":{"get":{"operationId":"v1-get-hostname-config","summary":"[Beta] Gets project's custom hostname config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's custom hostname config"}},"tags":["domains"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-Delete hostname config","summary":"[Beta] Deletes a project's custom hostname configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to delete project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname/initialize":{"post":{"operationId":"v1-update-hostname-config","summary":"[Beta] Updates project's custom hostname configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname/reverify":{"post":{"operationId":"v1-verify-dns-config","summary":"[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to verify project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname/activate":{"post":{"operationId":"v1-activate-custom-hostname","summary":"[Beta] Activates a custom hostname for a project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to activate project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-bans/retrieve":{"post":{"operationId":"v1-list-all-network-bans","summary":"[Beta] Gets project's network bans","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkBanResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's network bans"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-bans":{"delete":{"operationId":"v1-delete-network-bans","summary":"[Beta] Remove network bans.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveNetworkBanRequest"}}}},"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to remove network bans."}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-restrictions":{"get":{"operationId":"v1-get-network-restrictions","summary":"[Beta] Gets project's network restrictions","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRestrictionsResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's network restrictions"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-restrictions/apply":{"post":{"operationId":"v1-update-network-restrictions","summary":"[Beta] Updates project's network restrictions","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRestrictionsRequest"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRestrictionsResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project network restrictions"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/pgsodium":{"get":{"operationId":"v1-get-pgsodium-config","summary":"[Beta] Gets project's pgsodium config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PgsodiumConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's pgsodium config"}},"tags":["secrets"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-pgsodium-config","summary":"[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePgsodiumConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PgsodiumConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's pgsodium config"}},"tags":["secrets"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/postgrest":{"get":{"operationId":"v1-get-postgrest-service-config","summary":"Gets project's postgrest config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostgrestConfigWithJWTSecretResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's postgrest config"}},"tags":["rest"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-postgrest-service-config","summary":"Updates project's postgrest config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostgrestConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1PostgrestConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's postgrest config"}},"tags":["rest"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}":{"delete":{"operationId":"v1-Delete a project","summary":"Deletes the given project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1ProjectRefResponse"}}}},"403":{"description":""}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/secrets":{"get":{"operationId":"v1-list-all-secrets","summary":"List all secrets","description":"Returns all secrets you've previously added to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SecretResponse"}}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's secrets"}},"tags":["secrets"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-bulk-create-secrets","summary":"Bulk create secrets","description":"Creates multiple secrets and adds them to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreateSecretBody"}}}}},"responses":{"201":{"description":""},"403":{"description":""},"500":{"description":"Failed to create project's secrets"}},"tags":["secrets"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-bulk-delete-secrets","summary":"Bulk delete secrets","description":"Deletes all secrets with the given names from the specified project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":""},"500":{"description":"Failed to delete secrets with given names"}},"tags":["secrets"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/ssl-enforcement":{"get":{"operationId":"v1-get-ssl-enforcement-config","summary":"[Beta] Get project's SSL enforcement configuration.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslEnforcementResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's SSL enforcement config"}},"tags":["database"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-ssl-enforcement-config","summary":"[Beta] Update project's SSL enforcement configuration.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslEnforcementRequest"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslEnforcementResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's SSL enforcement configuration."}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/types/typescript":{"get":{"operationId":"v1-generate-typescript-types","summary":"Generate TypeScript types","description":"Returns the TypeScript types of your schema for use with supabase-js.","parameters":[{"name":"included_schemas","required":false,"in":"query","schema":{"default":"public","type":"string"}},{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TypescriptResponse"}}}},"403":{"description":""},"500":{"description":"Failed to generate TypeScript types"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/vanity-subdomain":{"get":{"operationId":"v1-get-vanity-subdomain-config","summary":"[Beta] Gets current vanity subdomain config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to get project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-deactivate-vanity-subdomain-config","summary":"[Beta] Deletes a project's vanity subdomain configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to delete project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/vanity-subdomain/check-availability":{"post":{"operationId":"v1-check-vanity-subdomain-availability","summary":"[Beta] Checks vanity subdomain availability","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubdomainAvailabilityResponse"}}}},"403":{"description":""},"500":{"description":"Failed to check project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/vanity-subdomain/activate":{"post":{"operationId":"v1-activate-vanity-subdomain-config","summary":"[Beta] Activates a vanity subdomain for a project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateVanitySubdomainResponse"}}}},"403":{"description":""},"500":{"description":"Failed to activate project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/upgrade":{"post":{"operationId":"v1-upgrade-postgres-version","summary":"[Beta] Upgrades the project's Postgres version","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeDatabaseBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpgradeInitiateResponse"}}}},"403":{"description":""},"500":{"description":"Failed to initiate project upgrade"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/upgrade/eligibility":{"get":{"operationId":"v1-get-postgrest-upgrade-eligibility","summary":"[Beta] Returns the project's eligibility for upgrades","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpgradeEligibilityResponse"}}}},"403":{"description":""},"500":{"description":"Failed to determine project upgrade eligibility"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/upgrade/status":{"get":{"operationId":"v1-get-postgrest-upgrade-status","summary":"[Beta] Gets the latest status of the project's upgrade","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseUpgradeStatusResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project upgrade status"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/readonly":{"get":{"operationId":"v1-get-readonly-mode-status","summary":"Returns project's readonly mode status","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadOnlyStatusResponse"}}}},"500":{"description":"Failed to get project readonly mode status"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/readonly/temporary-disable":{"post":{"operationId":"v1-disable-readonly-mode-temporarily","summary":"Disables project's readonly mode for the next 15 minutes","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":""},"500":{"description":"Failed to disable project's readonly mode"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/read-replicas/setup":{"post":{"operationId":"v1-setup-a-read-replica","summary":"[Beta] Set up a read replica","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetUpReadReplicaBody"}}}},"responses":{"201":{"description":""},"500":{"description":"Failed to set up read replica"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/read-replicas/remove":{"post":{"operationId":"v1-remove-a-read-replica","summary":"[Beta] Remove a read replica","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveReadReplicaBody"}}}},"responses":{"201":{"description":""},"500":{"description":"Failed to remove read replica"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/health":{"get":{"operationId":"v1-get-services-health","summary":"Gets project's service health status","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"timeout_ms","required":false,"in":"query","schema":{"minimum":0,"maximum":10000,"type":"integer"}},{"name":"services","required":true,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["auth","db","pooler","realtime","rest","storage"]}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1ServiceHealthResponse"}}}}},"500":{"description":"Failed to retrieve project's service health status"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/database/postgres":{"get":{"operationId":"v1-get-postgres-config","summary":"Gets project's Postgres config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostgresConfigResponse"}}}},"500":{"description":"Failed to retrieve project's Postgres config"}},"tags":["database"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-postgres-config","summary":"Updates project's Postgres config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostgresConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostgresConfigResponse"}}}},"500":{"description":"Failed to update project's Postgres config"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/database/pgbouncer":{"get":{"operationId":"v1-get-project-pgbouncer-config","summary":"Get project's pgbouncer config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1PgbouncerConfigResponse"}}}},"500":{"description":"Failed to retrieve project's pgbouncer config"}},"tags":["database"]}},"/v1/projects/{ref}/config/database/pooler":{"get":{"operationId":"v1-get-supavisor-config","summary":"Gets project's supavisor config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SupavisorConfigResponse"}}}}},"500":{"description":"Failed to retrieve project's supavisor config"}},"tags":["database"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-supavisor-config","summary":"Updates project's supavisor config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSupavisorConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSupavisorConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's supavisor config"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/auth":{"get":{"operationId":"v1-get-auth-service-config","summary":"Gets project's auth config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's auth config"}},"tags":["auth"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-auth-service-config","summary":"Updates a project's auth config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAuthConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's auth config"}},"tags":["auth"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/query":{"post":{"operationId":"v1-run-a-query","summary":"[Beta] Run sql query","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1RunQueryBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":""},"500":{"description":"Failed to run sql query"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/webhooks/enable":{"post":{"operationId":"v1-enable-database-webhook","summary":"[Beta] Enables Database Webhooks on the project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":""},"403":{"description":""},"500":{"description":"Failed to enable Database Webhooks on the project"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/functions":{"post":{"operationId":"createFunction","summary":"Create a function","description":"Creates a function and adds it to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"slug","required":false,"in":"query","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"verify_jwt","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"import_map","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"entrypoint_path","required":false,"in":"query","schema":{"type":"string"}},{"name":"import_map_path","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateFunctionBody"}},"application/vnd.denoland.eszip":{"schema":{"$ref":"#/components/schemas/V1CreateFunctionBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionResponse"}}}},"403":{"description":""},"500":{"description":"Failed to create project's function"}},"tags":["edge functions"],"security":[{"bearer":[]}]},"get":{"operationId":"v1-list-all-functions","summary":"List all functions","description":"Returns all functions you've previously added to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FunctionResponse"}}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's functions"}},"tags":["edge functions"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/functions/{function_slug}":{"get":{"operationId":"v1-get-a-function","summary":"Retrieve a function","description":"Retrieves a function with the specified slug and project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionSlugResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve function with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-a-function","summary":"Update a function","description":"Updates a function with the specified slug and project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}},{"name":"slug","required":false,"in":"query","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"verify_jwt","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"import_map","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"entrypoint_path","required":false,"in":"query","schema":{"type":"string"}},{"name":"import_map_path","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateFunctionBody"}},"application/vnd.denoland.eszip":{"schema":{"$ref":"#/components/schemas/V1UpdateFunctionBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update function with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-delete-a-function","summary":"Delete a function","description":"Deletes a function with the specified slug from the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to delete function with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/functions/{function_slug}/body":{"get":{"operationId":"v1-get-a-function-body","summary":"Retrieve a function body","description":"Retrieves a function body for the specified slug and project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to retrieve function body with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/storage/buckets":{"get":{"operationId":"v1-list-all-buckets","summary":"Lists all buckets","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1StorageBucketResponse"}}}}},"403":{"description":""},"500":{"description":"Failed to get list of buckets"}},"tags":["storage"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/auth/sso/providers":{"post":{"operationId":"v1-create-a-sso-provider","summary":"Creates a new SSO provider","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProviderBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProviderResponse"}}}},"403":{"description":""},"404":{"description":"SAML 2.0 support is not enabled for this project"}},"tags":["auth"],"security":[{"bearer":[]}]},"get":{"operationId":"v1-list-all-sso-provider","summary":"Lists all SSO providers","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListProvidersResponse"}}}},"403":{"description":""},"404":{"description":"SAML 2.0 support is not enabled for this project"}},"tags":["auth"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/auth/sso/providers/{provider_id}":{"get":{"operationId":"v1-get-a-sso-provider","summary":"Gets a SSO provider by its UUID","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"provider_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProviderResponse"}}}},"403":{"description":""},"404":{"description":"Either SAML 2.0 was not enabled for this project, or the provider does not exist"}},"tags":["auth"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-a-sso-provider","summary":"Updates a SSO provider by its UUID","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"provider_id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProviderBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProviderResponse"}}}},"403":{"description":""},"404":{"description":"Either SAML 2.0 was not enabled for this project, or the provider does not exist"}},"tags":["auth"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-delete-a-sso-provider","summary":"Removes a SSO provider by its UUID","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"provider_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteProviderResponse"}}}},"403":{"description":""},"404":{"description":"Either SAML 2.0 was not enabled for this project, or the provider does not exist"}},"tags":["auth"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/backups":{"get":{"operationId":"v1-list-all-backups","summary":"Lists all backups","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1BackupsResponse"}}}},"500":{"description":"Failed to get backups"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/backups/restore-pitr":{"post":{"operationId":"v1-restore-pitr-backup","summary":"Restores a PITR backup for a database","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1RestorePitrBody"}}}},"responses":{"201":{"description":""}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/organizations/{slug}/members":{"get":{"operationId":"v1-list-organization-members","summary":"List members of an organization","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1OrganizationMemberResponse"}}}}}},"tags":["organizations"],"security":[{"bearer":[]}]}},"/v1/organizations/{slug}":{"get":{"operationId":"v1-get-an-organization","summary":"Gets information about the organization","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1OrganizationSlugResponse"}}}}},"tags":["organizations"],"security":[{"bearer":[]}]}}},"info":{"title":"Supabase API (v1)","description":"","version":"1.0.0","contact":{}},"tags":[{"name":"organizations","description":"Organization endpoints"},{"name":"projects","description":"Project endpoints"}],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"BranchDetailResponse":{"type":"object","properties":{"db_port":{"type":"integer"},"ref":{"type":"string"},"postgres_version":{"type":"string"},"status":{"enum":["ACTIVE_HEALTHY","ACTIVE_UNHEALTHY","COMING_UP","GOING_DOWN","INACTIVE","INIT_FAILED","REMOVED","RESTORING","UNKNOWN","UPGRADING","PAUSING"],"type":"string"},"db_host":{"type":"string"},"db_user":{"type":"string"},"db_pass":{"type":"string"},"jwt_secret":{"type":"string"}},"required":["db_port","ref","postgres_version","status","db_host"]},"UpdateBranchBody":{"type":"object","properties":{"branch_name":{"type":"string"},"git_branch":{"type":"string"},"reset_on_push":{"type":"boolean"},"persistent":{"type":"boolean"}}},"BranchResponse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"project_ref":{"type":"string"},"parent_project_ref":{"type":"string"},"is_default":{"type":"boolean"},"git_branch":{"type":"string"},"pr_number":{"type":"number"},"latest_check_run_id":{"type":"number"},"reset_on_push":{"type":"boolean"},"persistent":{"type":"boolean"},"status":{"enum":["CREATING_PROJECT","RUNNING_MIGRATIONS","MIGRATIONS_PASSED","MIGRATIONS_FAILED","FUNCTIONS_DEPLOYED","FUNCTIONS_FAILED"],"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","project_ref","parent_project_ref","is_default","reset_on_push","persistent","status","created_at","updated_at"]},"BranchDeleteResponse":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]},"BranchResetResponse":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]},"V1DatabaseResponse":{"type":"object","properties":{"host":{"type":"string","description":"Database host"},"version":{"type":"string","description":"Database version"}},"required":["host","version"]},"V1ProjectResponse":{"type":"object","properties":{"id":{"type":"string","description":"Id of your project"},"organization_id":{"type":"string","description":"Slug of your organization"},"name":{"type":"string","description":"Name of your project"},"region":{"type":"string","description":"Region of your project","example":"us-east-1"},"created_at":{"type":"string","description":"Creation timestamp","example":"2023-03-29T16:32:59Z"},"database":{"$ref":"#/components/schemas/V1DatabaseResponse"},"status":{"enum":["ACTIVE_HEALTHY","ACTIVE_UNHEALTHY","COMING_UP","GOING_DOWN","INACTIVE","INIT_FAILED","REMOVED","RESTORING","UNKNOWN","UPGRADING","PAUSING"],"type":"string"}},"required":["id","organization_id","name","region","created_at","status"]},"DesiredInstanceSize":{"type":"string","enum":["micro","small","medium","large","xlarge","2xlarge","4xlarge","8xlarge","12xlarge","16xlarge"]},"V1CreateProjectBody":{"type":"object","properties":{"db_pass":{"type":"string","description":"Database password"},"name":{"type":"string","description":"Name of your project, should not contain dots"},"organization_id":{"type":"string","description":"Slug of your organization"},"plan":{"type":"string","enum":["free","pro"],"description":"Subscription plan is now set on organization level and is ignored in this request","example":"free","deprecated":true},"region":{"type":"string","enum":["us-east-1","us-west-1","us-west-2","ap-east-1","ap-southeast-1","ap-northeast-1","ap-northeast-2","ap-southeast-2","eu-west-1","eu-west-2","eu-west-3","eu-central-1","ca-central-1","ap-south-1","sa-east-1"],"description":"Region you want your server to reside in","example":"us-east-1"},"kps_enabled":{"type":"boolean","deprecated":true,"description":"This field is deprecated and is ignored in this request"},"desired_instance_size":{"$ref":"#/components/schemas/DesiredInstanceSize"},"template_url":{"type":"string","description":"Template URL used to create the project from the CLI.","example":"https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone"}},"required":["db_pass","name","organization_id","region"]},"OrganizationResponseV1":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CreateOrganizationBodyV1":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"OAuthTokenBody":{"type":"object","properties":{"grant_type":{"enum":["authorization_code","refresh_token"],"type":"string"},"client_id":{"type":"string"},"client_secret":{"type":"string"},"code":{"type":"string"},"code_verifier":{"type":"string"},"redirect_uri":{"type":"string"},"refresh_token":{"type":"string"}},"required":["grant_type","client_id","client_secret"]},"OAuthTokenResponse":{"type":"object","properties":{"token_type":{"type":"string","enum":["Bearer"]},"access_token":{"type":"string"},"refresh_token":{"type":"string"},"expires_in":{"type":"number"}},"required":["token_type","access_token","refresh_token","expires_in"]},"SnippetProject":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"]},"SnippetUser":{"type":"object","properties":{"id":{"type":"number"},"username":{"type":"string"}},"required":["id","username"]},"SnippetMeta":{"type":"object","properties":{"id":{"type":"string"},"inserted_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","enum":["sql"]},"visibility":{"type":"string","enum":["user","project","org","public"]},"name":{"type":"string"},"description":{"type":"string"},"project":{"$ref":"#/components/schemas/SnippetProject"},"owner":{"$ref":"#/components/schemas/SnippetUser"},"updated_by":{"$ref":"#/components/schemas/SnippetUser"}},"required":["id","inserted_at","updated_at","type","visibility","name","project","owner","updated_by"]},"SnippetList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SnippetMeta"}}},"required":["data"]},"SnippetContent":{"type":"object","properties":{"favorite":{"type":"boolean"},"schema_version":{"type":"string"},"sql":{"type":"string"}},"required":["favorite","schema_version","sql"]},"SnippetResponse":{"type":"object","properties":{"id":{"type":"string"},"inserted_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","enum":["sql"]},"visibility":{"enum":["user","project","org","public"],"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"project":{"$ref":"#/components/schemas/SnippetProject"},"owner":{"$ref":"#/components/schemas/SnippetUser"},"updated_by":{"$ref":"#/components/schemas/SnippetUser"},"content":{"$ref":"#/components/schemas/SnippetContent"}},"required":["id","inserted_at","updated_at","type","visibility","name","project","owner","updated_by","content"]},"ApiKeyResponse":{"type":"object","properties":{"name":{"type":"string"},"api_key":{"type":"string"}},"required":["name","api_key"]},"CreateBranchBody":{"type":"object","properties":{"branch_name":{"type":"string"},"git_branch":{"type":"string"},"region":{"type":"string"}},"required":["branch_name"]},"UpdateCustomHostnameResponse":{"type":"object","properties":{"status":{"enum":["1_not_started","2_initiated","3_challenge_verified","4_origin_setup_completed","5_services_reconfigured"],"type":"string"},"custom_hostname":{"type":"string"},"data":{"type":"object"}},"required":["status","custom_hostname","data"]},"UpdateCustomHostnameBody":{"type":"object","properties":{"custom_hostname":{"type":"string"}},"required":["custom_hostname"]},"NetworkBanResponse":{"type":"object","properties":{"banned_ipv4_addresses":{"type":"array","items":{"type":"string"}}},"required":["banned_ipv4_addresses"]},"RemoveNetworkBanRequest":{"type":"object","properties":{"ipv4_addresses":{"type":"array","items":{"type":"string"}}},"required":["ipv4_addresses"]},"NetworkRestrictionsRequest":{"type":"object","properties":{"dbAllowedCidrs":{"type":"array","items":{"type":"string"}},"dbAllowedCidrsV6":{"type":"array","items":{"type":"string"}}}},"NetworkRestrictionsResponse":{"type":"object","properties":{"entitlement":{"enum":["disallowed","allowed"],"type":"string"},"config":{"$ref":"#/components/schemas/NetworkRestrictionsRequest"},"old_config":{"$ref":"#/components/schemas/NetworkRestrictionsRequest"},"status":{"enum":["stored","applied"],"type":"string"}},"required":["entitlement","config","status"]},"PgsodiumConfigResponse":{"type":"object","properties":{"root_key":{"type":"string"}},"required":["root_key"]},"UpdatePgsodiumConfigBody":{"type":"object","properties":{"root_key":{"type":"string"}},"required":["root_key"]},"PostgrestConfigWithJWTSecretResponse":{"type":"object","properties":{"max_rows":{"type":"integer"},"db_pool":{"type":"integer","nullable":true,"description":"If `null`, the value is automatically configured based on compute size."},"db_schema":{"type":"string"},"db_extra_search_path":{"type":"string"},"jwt_secret":{"type":"string"}},"required":["max_rows","db_pool","db_schema","db_extra_search_path"]},"UpdatePostgrestConfigBody":{"type":"object","properties":{"max_rows":{"type":"integer","minimum":0,"maximum":1000000},"db_pool":{"type":"integer","minimum":0,"maximum":1000},"db_extra_search_path":{"type":"string"},"db_schema":{"type":"string"}}},"V1PostgrestConfigResponse":{"type":"object","properties":{"max_rows":{"type":"integer"},"db_pool":{"type":"integer","nullable":true,"description":"If `null`, the value is automatically configured based on compute size."},"db_schema":{"type":"string"},"db_extra_search_path":{"type":"string"}},"required":["max_rows","db_pool","db_schema","db_extra_search_path"]},"V1ProjectRefResponse":{"type":"object","properties":{"id":{"type":"number"},"ref":{"type":"string"},"name":{"type":"string"}},"required":["id","ref","name"]},"SecretResponse":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]},"CreateSecretBody":{"type":"object","properties":{"name":{"type":"string","maxLength":256,"pattern":"/^(?!SUPABASE_).*/","description":"Secret name must not start with the SUPABASE_ prefix.","example":"string"},"value":{"type":"string","maxLength":24576}},"required":["name","value"]},"SslEnforcements":{"type":"object","properties":{"database":{"type":"boolean"}},"required":["database"]},"SslEnforcementResponse":{"type":"object","properties":{"currentConfig":{"$ref":"#/components/schemas/SslEnforcements"},"appliedSuccessfully":{"type":"boolean"}},"required":["currentConfig","appliedSuccessfully"]},"SslEnforcementRequest":{"type":"object","properties":{"requestedConfig":{"$ref":"#/components/schemas/SslEnforcements"}},"required":["requestedConfig"]},"TypescriptResponse":{"type":"object","properties":{"types":{"type":"string"}},"required":["types"]},"VanitySubdomainConfigResponse":{"type":"object","properties":{"status":{"enum":["not-used","custom-domain-used","active"],"type":"string"},"custom_domain":{"type":"string"}},"required":["status"]},"VanitySubdomainBody":{"type":"object","properties":{"vanity_subdomain":{"type":"string"}},"required":["vanity_subdomain"]},"SubdomainAvailabilityResponse":{"type":"object","properties":{"available":{"type":"boolean"}},"required":["available"]},"ActivateVanitySubdomainResponse":{"type":"object","properties":{"custom_domain":{"type":"string"}},"required":["custom_domain"]},"UpgradeDatabaseBody":{"type":"object","properties":{"target_version":{"type":"number"}},"required":["target_version"]},"ProjectUpgradeInitiateResponse":{"type":"object","properties":{"tracking_id":{"type":"string"}},"required":["tracking_id"]},"ProjectVersion":{"type":"object","properties":{"postgres_version":{"type":"number"},"app_version":{"type":"string"}},"required":["postgres_version","app_version"]},"ProjectUpgradeEligibilityResponse":{"type":"object","properties":{"eligible":{"type":"boolean"},"current_app_version":{"type":"string"},"latest_app_version":{"type":"string"},"target_upgrade_versions":{"type":"array","items":{"$ref":"#/components/schemas/ProjectVersion"}},"potential_breaking_changes":{"type":"array","items":{"type":"string"}},"duration_estimate_hours":{"type":"number"},"legacy_auth_custom_roles":{"type":"array","items":{"type":"string"}},"extension_dependent_objects":{"type":"array","items":{"type":"string"}}},"required":["eligible","current_app_version","latest_app_version","target_upgrade_versions","potential_breaking_changes","duration_estimate_hours","legacy_auth_custom_roles","extension_dependent_objects"]},"DatabaseUpgradeStatus":{"type":"object","properties":{"initiated_at":{"type":"string"},"target_version":{"type":"number"},"error":{"type":"string","enum":["1_upgraded_instance_launch_failed","2_volume_detachchment_from_upgraded_instance_failed","3_volume_attachment_to_original_instance_failed","4_data_upgrade_initiation_failed","5_data_upgrade_completion_failed","6_volume_detachchment_from_original_instance_failed","7_volume_attachment_to_upgraded_instance_failed","8_upgrade_completion_failed"]},"progress":{"type":"string","enum":["0_requested","1_started","2_launched_upgraded_instance","3_detached_volume_from_upgraded_instance","4_attached_volume_to_original_instance","5_initiated_data_upgrade","6_completed_data_upgrade","7_detached_volume_from_original_instance","8_attached_volume_to_upgraded_instance","9_completed_upgrade"]},"status":{"type":"number","enum":[0,1,2]}},"required":["initiated_at","target_version","status"]},"DatabaseUpgradeStatusResponse":{"type":"object","properties":{"databaseUpgradeStatus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DatabaseUpgradeStatus"}]}},"required":["databaseUpgradeStatus"]},"ReadOnlyStatusResponse":{"type":"object","properties":{"enabled":{"type":"boolean"},"override_enabled":{"type":"boolean"},"override_active_until":{"type":"string"}},"required":["enabled","override_enabled","override_active_until"]},"SetUpReadReplicaBody":{"type":"object","properties":{"read_replica_region":{"type":"string","enum":["us-east-1","us-west-1","us-west-2","ap-east-1","ap-southeast-1","ap-northeast-1","ap-northeast-2","ap-southeast-2","eu-west-1","eu-west-2","eu-west-3","eu-central-1","ca-central-1","ap-south-1","sa-east-1"],"description":"Region you want your read replica to reside in","example":"us-east-1"}},"required":["read_replica_region"]},"RemoveReadReplicaBody":{"type":"object","properties":{"database_identifier":{"type":"string"}},"required":["database_identifier"]},"AuthHealthResponse":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"description":{"type":"string"}},"required":["name","version","description"]},"RealtimeHealthResponse":{"type":"object","properties":{"healthy":{"type":"boolean"},"db_connected":{"type":"boolean"},"connected_cluster":{"type":"number"}},"required":["healthy","db_connected","connected_cluster"]},"V1ServiceHealthResponse":{"type":"object","properties":{"info":{"oneOf":[{"$ref":"#/components/schemas/AuthHealthResponse"},{"$ref":"#/components/schemas/RealtimeHealthResponse"}]},"name":{"enum":["auth","db","pooler","realtime","rest","storage"],"type":"string"},"healthy":{"type":"boolean"},"status":{"enum":["COMING_UP","ACTIVE_HEALTHY","UNHEALTHY"],"type":"string"},"error":{"type":"string"}},"required":["name","healthy","status"]},"PostgresConfigResponse":{"type":"object","properties":{"statement_timeout":{"type":"string"},"effective_cache_size":{"type":"string"},"maintenance_work_mem":{"type":"string"},"max_connections":{"type":"integer","minimum":1,"maximum":262143},"max_locks_per_transaction":{"type":"integer","minimum":10,"maximum":2147483640},"max_parallel_maintenance_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers_per_gather":{"type":"integer","minimum":0,"maximum":1024},"max_standby_archive_delay":{"type":"string"},"max_standby_streaming_delay":{"type":"string"},"max_worker_processes":{"type":"integer","minimum":0,"maximum":262143},"shared_buffers":{"type":"string"},"work_mem":{"type":"string"},"session_replication_role":{"enum":["origin","replica","local"],"type":"string"}}},"UpdatePostgresConfigBody":{"type":"object","properties":{"statement_timeout":{"type":"string"},"effective_cache_size":{"type":"string"},"maintenance_work_mem":{"type":"string"},"max_connections":{"type":"integer","minimum":1,"maximum":262143},"max_locks_per_transaction":{"type":"integer","minimum":10,"maximum":2147483640},"max_parallel_maintenance_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers_per_gather":{"type":"integer","minimum":0,"maximum":1024},"max_standby_archive_delay":{"type":"string"},"max_standby_streaming_delay":{"type":"string"},"max_worker_processes":{"type":"integer","minimum":0,"maximum":262143},"shared_buffers":{"type":"string"},"work_mem":{"type":"string"},"session_replication_role":{"enum":["origin","replica","local"],"type":"string"}}},"V1PgbouncerConfigResponse":{"type":"object","properties":{"pool_mode":{"type":"string","enum":["transaction","session","statement"]},"default_pool_size":{"type":"number"},"ignore_startup_parameters":{"type":"string"},"max_client_conn":{"type":"number"},"connection_string":{"type":"string"}}},"SupavisorConfigResponse":{"type":"object","properties":{"identifier":{"type":"string"},"database_type":{"enum":["PRIMARY","READ_REPLICA"],"type":"string"},"is_using_scram_auth":{"type":"boolean"},"db_user":{"type":"string"},"db_host":{"type":"string"},"db_port":{"type":"number"},"db_name":{"type":"string"},"connectionString":{"type":"string"},"default_pool_size":{"type":"number","nullable":true},"max_client_conn":{"type":"number","nullable":true},"pool_mode":{"enum":["transaction","session"],"type":"string"}},"required":["identifier","database_type","is_using_scram_auth","db_user","db_host","db_port","db_name","connectionString","default_pool_size","max_client_conn","pool_mode"]},"UpdateSupavisorConfigBody":{"type":"object","properties":{"default_pool_size":{"type":"integer","nullable":true,"minimum":0,"maximum":1000},"pool_mode":{"enum":["transaction","session"],"type":"string","deprecated":true,"description":"This field is deprecated and is ignored in this request"}}},"UpdateSupavisorConfigResponse":{"type":"object","properties":{"default_pool_size":{"type":"number","nullable":true},"pool_mode":{"enum":["transaction","session"],"type":"string"}},"required":["default_pool_size","pool_mode"]},"AuthConfigResponse":{"type":"object","properties":{"api_max_request_duration":{"type":"number","nullable":true},"db_max_pool_size":{"type":"number","nullable":true},"disable_signup":{"type":"boolean","nullable":true},"external_anonymous_users_enabled":{"type":"boolean","nullable":true},"external_apple_additional_client_ids":{"type":"string","nullable":true},"external_apple_client_id":{"type":"string","nullable":true},"external_apple_enabled":{"type":"boolean","nullable":true},"external_apple_secret":{"type":"string","nullable":true},"external_azure_client_id":{"type":"string","nullable":true},"external_azure_enabled":{"type":"boolean","nullable":true},"external_azure_secret":{"type":"string","nullable":true},"external_azure_url":{"type":"string","nullable":true},"external_bitbucket_client_id":{"type":"string","nullable":true},"external_bitbucket_enabled":{"type":"boolean","nullable":true},"external_bitbucket_secret":{"type":"string","nullable":true},"external_discord_client_id":{"type":"string","nullable":true},"external_discord_enabled":{"type":"boolean","nullable":true},"external_discord_secret":{"type":"string","nullable":true},"external_email_enabled":{"type":"boolean","nullable":true},"external_facebook_client_id":{"type":"string","nullable":true},"external_facebook_enabled":{"type":"boolean","nullable":true},"external_facebook_secret":{"type":"string","nullable":true},"external_figma_client_id":{"type":"string","nullable":true},"external_figma_enabled":{"type":"boolean","nullable":true},"external_figma_secret":{"type":"string","nullable":true},"external_github_client_id":{"type":"string","nullable":true},"external_github_enabled":{"type":"boolean","nullable":true},"external_github_secret":{"type":"string","nullable":true},"external_gitlab_client_id":{"type":"string","nullable":true},"external_gitlab_enabled":{"type":"boolean","nullable":true},"external_gitlab_secret":{"type":"string","nullable":true},"external_gitlab_url":{"type":"string","nullable":true},"external_google_additional_client_ids":{"type":"string","nullable":true},"external_google_client_id":{"type":"string","nullable":true},"external_google_enabled":{"type":"boolean","nullable":true},"external_google_secret":{"type":"string","nullable":true},"external_google_skip_nonce_check":{"type":"boolean","nullable":true},"external_kakao_client_id":{"type":"string","nullable":true},"external_kakao_enabled":{"type":"boolean","nullable":true},"external_kakao_secret":{"type":"string","nullable":true},"external_keycloak_client_id":{"type":"string","nullable":true},"external_keycloak_enabled":{"type":"boolean","nullable":true},"external_keycloak_secret":{"type":"string","nullable":true},"external_keycloak_url":{"type":"string","nullable":true},"external_linkedin_oidc_client_id":{"type":"string","nullable":true},"external_linkedin_oidc_enabled":{"type":"boolean","nullable":true},"external_linkedin_oidc_secret":{"type":"string","nullable":true},"external_notion_client_id":{"type":"string","nullable":true},"external_notion_enabled":{"type":"boolean","nullable":true},"external_notion_secret":{"type":"string","nullable":true},"external_phone_enabled":{"type":"boolean","nullable":true},"external_slack_client_id":{"type":"string","nullable":true},"external_slack_enabled":{"type":"boolean","nullable":true},"external_slack_secret":{"type":"string","nullable":true},"external_spotify_client_id":{"type":"string","nullable":true},"external_spotify_enabled":{"type":"boolean","nullable":true},"external_spotify_secret":{"type":"string","nullable":true},"external_twitch_client_id":{"type":"string","nullable":true},"external_twitch_enabled":{"type":"boolean","nullable":true},"external_twitch_secret":{"type":"string","nullable":true},"external_twitter_client_id":{"type":"string","nullable":true},"external_twitter_enabled":{"type":"boolean","nullable":true},"external_twitter_secret":{"type":"string","nullable":true},"external_workos_client_id":{"type":"string","nullable":true},"external_workos_enabled":{"type":"boolean","nullable":true},"external_workos_secret":{"type":"string","nullable":true},"external_workos_url":{"type":"string","nullable":true},"external_zoom_client_id":{"type":"string","nullable":true},"external_zoom_enabled":{"type":"boolean","nullable":true},"external_zoom_secret":{"type":"string","nullable":true},"hook_custom_access_token_enabled":{"type":"boolean","nullable":true},"hook_custom_access_token_uri":{"type":"string","nullable":true},"hook_custom_access_token_secrets":{"type":"string","nullable":true},"hook_mfa_verification_attempt_enabled":{"type":"boolean","nullable":true},"hook_mfa_verification_attempt_uri":{"type":"string","nullable":true},"hook_mfa_verification_attempt_secrets":{"type":"string","nullable":true},"hook_password_verification_attempt_enabled":{"type":"boolean","nullable":true},"hook_password_verification_attempt_uri":{"type":"string","nullable":true},"hook_password_verification_attempt_secrets":{"type":"string","nullable":true},"hook_send_sms_enabled":{"type":"boolean","nullable":true},"hook_send_sms_uri":{"type":"string","nullable":true},"hook_send_sms_secrets":{"type":"string","nullable":true},"hook_send_email_enabled":{"type":"boolean","nullable":true},"hook_send_email_uri":{"type":"string","nullable":true},"hook_send_email_secrets":{"type":"string","nullable":true},"jwt_exp":{"type":"number","nullable":true},"mailer_allow_unverified_email_sign_ins":{"type":"boolean","nullable":true},"mailer_autoconfirm":{"type":"boolean","nullable":true},"mailer_otp_exp":{"type":"number"},"mailer_otp_length":{"type":"number","nullable":true},"mailer_secure_email_change_enabled":{"type":"boolean","nullable":true},"mailer_subjects_confirmation":{"type":"string","nullable":true},"mailer_subjects_email_change":{"type":"string","nullable":true},"mailer_subjects_invite":{"type":"string","nullable":true},"mailer_subjects_magic_link":{"type":"string","nullable":true},"mailer_subjects_reauthentication":{"type":"string","nullable":true},"mailer_subjects_recovery":{"type":"string","nullable":true},"mailer_templates_confirmation_content":{"type":"string","nullable":true},"mailer_templates_email_change_content":{"type":"string","nullable":true},"mailer_templates_invite_content":{"type":"string","nullable":true},"mailer_templates_magic_link_content":{"type":"string","nullable":true},"mailer_templates_reauthentication_content":{"type":"string","nullable":true},"mailer_templates_recovery_content":{"type":"string","nullable":true},"mfa_max_enrolled_factors":{"type":"number","nullable":true},"password_hibp_enabled":{"type":"boolean","nullable":true},"password_min_length":{"type":"number","nullable":true},"password_required_characters":{"type":"string","nullable":true},"rate_limit_anonymous_users":{"type":"number","nullable":true},"rate_limit_email_sent":{"type":"number","nullable":true},"rate_limit_sms_sent":{"type":"number","nullable":true},"rate_limit_token_refresh":{"type":"number","nullable":true},"rate_limit_verify":{"type":"number","nullable":true},"refresh_token_rotation_enabled":{"type":"boolean","nullable":true},"saml_enabled":{"type":"boolean","nullable":true},"security_captcha_enabled":{"type":"boolean","nullable":true},"security_captcha_provider":{"type":"string","nullable":true},"security_captcha_secret":{"type":"string","nullable":true},"security_manual_linking_enabled":{"type":"boolean","nullable":true},"security_refresh_token_reuse_interval":{"type":"number","nullable":true},"security_update_password_require_reauthentication":{"type":"boolean","nullable":true},"sessions_inactivity_timeout":{"type":"number","nullable":true},"sessions_single_per_user":{"type":"boolean","nullable":true},"sessions_tags":{"type":"string","nullable":true},"sessions_timebox":{"type":"number","nullable":true},"site_url":{"type":"string","nullable":true},"sms_autoconfirm":{"type":"boolean","nullable":true},"sms_max_frequency":{"type":"number","nullable":true},"sms_messagebird_access_key":{"type":"string","nullable":true},"sms_messagebird_originator":{"type":"string","nullable":true},"sms_otp_exp":{"type":"number","nullable":true},"sms_otp_length":{"type":"number"},"sms_provider":{"type":"string","nullable":true},"sms_template":{"type":"string","nullable":true},"sms_test_otp":{"type":"string","nullable":true},"sms_test_otp_valid_until":{"type":"string","nullable":true},"sms_textlocal_api_key":{"type":"string","nullable":true},"sms_textlocal_sender":{"type":"string","nullable":true},"sms_twilio_account_sid":{"type":"string","nullable":true},"sms_twilio_auth_token":{"type":"string","nullable":true},"sms_twilio_content_sid":{"type":"string","nullable":true},"sms_twilio_message_service_sid":{"type":"string","nullable":true},"sms_twilio_verify_account_sid":{"type":"string","nullable":true},"sms_twilio_verify_auth_token":{"type":"string","nullable":true},"sms_twilio_verify_message_service_sid":{"type":"string","nullable":true},"sms_vonage_api_key":{"type":"string","nullable":true},"sms_vonage_api_secret":{"type":"string","nullable":true},"sms_vonage_from":{"type":"string","nullable":true},"smtp_admin_email":{"type":"string","nullable":true},"smtp_host":{"type":"string","nullable":true},"smtp_max_frequency":{"type":"number","nullable":true},"smtp_pass":{"type":"string","nullable":true},"smtp_port":{"type":"string","nullable":true},"smtp_sender_name":{"type":"string","nullable":true},"smtp_user":{"type":"string","nullable":true},"uri_allow_list":{"type":"string","nullable":true}},"required":["api_max_request_duration","db_max_pool_size","disable_signup","external_anonymous_users_enabled","external_apple_additional_client_ids","external_apple_client_id","external_apple_enabled","external_apple_secret","external_azure_client_id","external_azure_enabled","external_azure_secret","external_azure_url","external_bitbucket_client_id","external_bitbucket_enabled","external_bitbucket_secret","external_discord_client_id","external_discord_enabled","external_discord_secret","external_email_enabled","external_facebook_client_id","external_facebook_enabled","external_facebook_secret","external_figma_client_id","external_figma_enabled","external_figma_secret","external_github_client_id","external_github_enabled","external_github_secret","external_gitlab_client_id","external_gitlab_enabled","external_gitlab_secret","external_gitlab_url","external_google_additional_client_ids","external_google_client_id","external_google_enabled","external_google_secret","external_google_skip_nonce_check","external_kakao_client_id","external_kakao_enabled","external_kakao_secret","external_keycloak_client_id","external_keycloak_enabled","external_keycloak_secret","external_keycloak_url","external_linkedin_oidc_client_id","external_linkedin_oidc_enabled","external_linkedin_oidc_secret","external_notion_client_id","external_notion_enabled","external_notion_secret","external_phone_enabled","external_slack_client_id","external_slack_enabled","external_slack_secret","external_spotify_client_id","external_spotify_enabled","external_spotify_secret","external_twitch_client_id","external_twitch_enabled","external_twitch_secret","external_twitter_client_id","external_twitter_enabled","external_twitter_secret","external_workos_client_id","external_workos_enabled","external_workos_secret","external_workos_url","external_zoom_client_id","external_zoom_enabled","external_zoom_secret","hook_custom_access_token_enabled","hook_custom_access_token_uri","hook_custom_access_token_secrets","hook_mfa_verification_attempt_enabled","hook_mfa_verification_attempt_uri","hook_mfa_verification_attempt_secrets","hook_password_verification_attempt_enabled","hook_password_verification_attempt_uri","hook_password_verification_attempt_secrets","hook_send_sms_enabled","hook_send_sms_uri","hook_send_sms_secrets","hook_send_email_enabled","hook_send_email_uri","hook_send_email_secrets","jwt_exp","mailer_allow_unverified_email_sign_ins","mailer_autoconfirm","mailer_otp_exp","mailer_otp_length","mailer_secure_email_change_enabled","mailer_subjects_confirmation","mailer_subjects_email_change","mailer_subjects_invite","mailer_subjects_magic_link","mailer_subjects_reauthentication","mailer_subjects_recovery","mailer_templates_confirmation_content","mailer_templates_email_change_content","mailer_templates_invite_content","mailer_templates_magic_link_content","mailer_templates_reauthentication_content","mailer_templates_recovery_content","mfa_max_enrolled_factors","password_hibp_enabled","password_min_length","password_required_characters","rate_limit_anonymous_users","rate_limit_email_sent","rate_limit_sms_sent","rate_limit_token_refresh","rate_limit_verify","refresh_token_rotation_enabled","saml_enabled","security_captcha_enabled","security_captcha_provider","security_captcha_secret","security_manual_linking_enabled","security_refresh_token_reuse_interval","security_update_password_require_reauthentication","sessions_inactivity_timeout","sessions_single_per_user","sessions_tags","sessions_timebox","site_url","sms_autoconfirm","sms_max_frequency","sms_messagebird_access_key","sms_messagebird_originator","sms_otp_exp","sms_otp_length","sms_provider","sms_template","sms_test_otp","sms_test_otp_valid_until","sms_textlocal_api_key","sms_textlocal_sender","sms_twilio_account_sid","sms_twilio_auth_token","sms_twilio_content_sid","sms_twilio_message_service_sid","sms_twilio_verify_account_sid","sms_twilio_verify_auth_token","sms_twilio_verify_message_service_sid","sms_vonage_api_key","sms_vonage_api_secret","sms_vonage_from","smtp_admin_email","smtp_host","smtp_max_frequency","smtp_pass","smtp_port","smtp_sender_name","smtp_user","uri_allow_list"]},"UpdateAuthConfigBody":{"type":"object","properties":{"site_url":{"type":"string","pattern":"/^[^,]+$/"},"disable_signup":{"type":"boolean"},"jwt_exp":{"type":"number","minimum":0,"maximum":604800},"smtp_admin_email":{"type":"string"},"smtp_host":{"type":"string"},"smtp_port":{"type":"string"},"smtp_user":{"type":"string"},"smtp_pass":{"type":"string"},"smtp_max_frequency":{"type":"number","minimum":0,"maximum":32767},"smtp_sender_name":{"type":"string"},"mailer_allow_unverified_email_sign_ins":{"type":"boolean"},"mailer_autoconfirm":{"type":"boolean"},"mailer_subjects_invite":{"type":"string"},"mailer_subjects_confirmation":{"type":"string"},"mailer_subjects_recovery":{"type":"string"},"mailer_subjects_email_change":{"type":"string"},"mailer_subjects_magic_link":{"type":"string"},"mailer_subjects_reauthentication":{"type":"string"},"mailer_templates_invite_content":{"type":"string"},"mailer_templates_confirmation_content":{"type":"string"},"mailer_templates_recovery_content":{"type":"string"},"mailer_templates_email_change_content":{"type":"string"},"mailer_templates_magic_link_content":{"type":"string"},"mailer_templates_reauthentication_content":{"type":"string"},"mfa_max_enrolled_factors":{"type":"number","minimum":0,"maximum":2147483647},"uri_allow_list":{"type":"string"},"external_anonymous_users_enabled":{"type":"boolean"},"external_email_enabled":{"type":"boolean"},"external_phone_enabled":{"type":"boolean"},"saml_enabled":{"type":"boolean"},"security_captcha_enabled":{"type":"boolean"},"security_captcha_provider":{"type":"string"},"security_captcha_secret":{"type":"string"},"sessions_timebox":{"type":"number","minimum":0},"sessions_inactivity_timeout":{"type":"number","minimum":0},"sessions_single_per_user":{"type":"boolean"},"sessions_tags":{"type":"string","pattern":"/^\\s*([a-z0-9_-]+(\\s*,+\\s*)?)*\\s*$/i"},"rate_limit_anonymous_users":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_email_sent":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_sms_sent":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_verify":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_token_refresh":{"type":"number","minimum":1,"maximum":2147483647},"mailer_secure_email_change_enabled":{"type":"boolean"},"refresh_token_rotation_enabled":{"type":"boolean"},"password_hibp_enabled":{"type":"boolean"},"password_min_length":{"type":"number","minimum":6,"maximum":32767},"password_required_characters":{"type":"string","enum":["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789","abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789","abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~",""]},"security_manual_linking_enabled":{"type":"boolean"},"security_update_password_require_reauthentication":{"type":"boolean"},"security_refresh_token_reuse_interval":{"type":"number","minimum":0,"maximum":2147483647},"mailer_otp_exp":{"type":"number","minimum":0,"maximum":2147483647},"mailer_otp_length":{"type":"number","minimum":6,"maximum":10},"sms_autoconfirm":{"type":"boolean"},"sms_max_frequency":{"type":"number","minimum":0,"maximum":32767},"sms_otp_exp":{"type":"number","minimum":0,"maximum":2147483647},"sms_otp_length":{"type":"number","minimum":0,"maximum":32767},"sms_provider":{"type":"string"},"sms_messagebird_access_key":{"type":"string"},"sms_messagebird_originator":{"type":"string"},"sms_test_otp":{"type":"string","pattern":"/^([0-9]{1,15}=[0-9]+,?)*$/"},"sms_test_otp_valid_until":{"type":"string"},"sms_textlocal_api_key":{"type":"string"},"sms_textlocal_sender":{"type":"string"},"sms_twilio_account_sid":{"type":"string"},"sms_twilio_auth_token":{"type":"string"},"sms_twilio_content_sid":{"type":"string"},"sms_twilio_message_service_sid":{"type":"string"},"sms_twilio_verify_account_sid":{"type":"string"},"sms_twilio_verify_auth_token":{"type":"string"},"sms_twilio_verify_message_service_sid":{"type":"string"},"sms_vonage_api_key":{"type":"string"},"sms_vonage_api_secret":{"type":"string"},"sms_vonage_from":{"type":"string"},"sms_template":{"type":"string"},"hook_mfa_verification_attempt_enabled":{"type":"boolean"},"hook_mfa_verification_attempt_uri":{"type":"string"},"hook_mfa_verification_attempt_secrets":{"type":"string"},"hook_password_verification_attempt_enabled":{"type":"boolean"},"hook_password_verification_attempt_uri":{"type":"string"},"hook_password_verification_attempt_secrets":{"type":"string"},"hook_custom_access_token_enabled":{"type":"boolean"},"hook_custom_access_token_uri":{"type":"string"},"hook_custom_access_token_secrets":{"type":"string"},"hook_send_sms_enabled":{"type":"boolean"},"hook_send_sms_uri":{"type":"string"},"hook_send_sms_secrets":{"type":"string"},"hook_send_email_enabled":{"type":"boolean"},"hook_send_email_uri":{"type":"string"},"hook_send_email_secrets":{"type":"string"},"external_apple_enabled":{"type":"boolean"},"external_apple_client_id":{"type":"string"},"external_apple_secret":{"type":"string"},"external_apple_additional_client_ids":{"type":"string"},"external_azure_enabled":{"type":"boolean"},"external_azure_client_id":{"type":"string"},"external_azure_secret":{"type":"string"},"external_azure_url":{"type":"string"},"external_bitbucket_enabled":{"type":"boolean"},"external_bitbucket_client_id":{"type":"string"},"external_bitbucket_secret":{"type":"string"},"external_discord_enabled":{"type":"boolean"},"external_discord_client_id":{"type":"string"},"external_discord_secret":{"type":"string"},"external_facebook_enabled":{"type":"boolean"},"external_facebook_client_id":{"type":"string"},"external_facebook_secret":{"type":"string"},"external_figma_enabled":{"type":"boolean"},"external_figma_client_id":{"type":"string"},"external_figma_secret":{"type":"string"},"external_github_enabled":{"type":"boolean"},"external_github_client_id":{"type":"string"},"external_github_secret":{"type":"string"},"external_gitlab_enabled":{"type":"boolean"},"external_gitlab_client_id":{"type":"string"},"external_gitlab_secret":{"type":"string"},"external_gitlab_url":{"type":"string"},"external_google_enabled":{"type":"boolean"},"external_google_client_id":{"type":"string"},"external_google_secret":{"type":"string"},"external_google_additional_client_ids":{"type":"string"},"external_google_skip_nonce_check":{"type":"boolean"},"external_kakao_enabled":{"type":"boolean"},"external_kakao_client_id":{"type":"string"},"external_kakao_secret":{"type":"string"},"external_keycloak_enabled":{"type":"boolean"},"external_keycloak_client_id":{"type":"string"},"external_keycloak_secret":{"type":"string"},"external_keycloak_url":{"type":"string"},"external_linkedin_oidc_enabled":{"type":"boolean"},"external_linkedin_oidc_client_id":{"type":"string"},"external_linkedin_oidc_secret":{"type":"string"},"external_notion_enabled":{"type":"boolean"},"external_notion_client_id":{"type":"string"},"external_notion_secret":{"type":"string"},"external_slack_enabled":{"type":"boolean"},"external_slack_client_id":{"type":"string"},"external_slack_secret":{"type":"string"},"external_spotify_enabled":{"type":"boolean"},"external_spotify_client_id":{"type":"string"},"external_spotify_secret":{"type":"string"},"external_twitch_enabled":{"type":"boolean"},"external_twitch_client_id":{"type":"string"},"external_twitch_secret":{"type":"string"},"external_twitter_enabled":{"type":"boolean"},"external_twitter_client_id":{"type":"string"},"external_twitter_secret":{"type":"string"},"external_workos_enabled":{"type":"boolean"},"external_workos_client_id":{"type":"string"},"external_workos_secret":{"type":"string"},"external_workos_url":{"type":"string"},"external_zoom_enabled":{"type":"boolean"},"external_zoom_client_id":{"type":"string"},"external_zoom_secret":{"type":"string"},"db_max_pool_size":{"type":"number"},"api_max_request_duration":{"type":"number"}}},"V1RunQueryBody":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]},"V1CreateFunctionBody":{"type":"object","properties":{"slug":{"type":"string","pattern":"/^[A-Za-z0-9_-]+$/"},"name":{"type":"string"},"body":{"type":"string"},"verify_jwt":{"type":"boolean"}},"required":["slug","name","body"]},"FunctionResponse":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"status":{"enum":["ACTIVE","REMOVED","THROTTLED"],"type":"string"},"version":{"type":"number"},"created_at":{"type":"number"},"updated_at":{"type":"number"},"verify_jwt":{"type":"boolean"},"import_map":{"type":"boolean"},"entrypoint_path":{"type":"string"},"import_map_path":{"type":"string"}},"required":["id","slug","name","status","version","created_at","updated_at"]},"FunctionSlugResponse":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"status":{"enum":["ACTIVE","REMOVED","THROTTLED"],"type":"string"},"version":{"type":"number"},"created_at":{"type":"number"},"updated_at":{"type":"number"},"verify_jwt":{"type":"boolean"},"import_map":{"type":"boolean"},"entrypoint_path":{"type":"string"},"import_map_path":{"type":"string"}},"required":["id","slug","name","status","version","created_at","updated_at"]},"V1UpdateFunctionBody":{"type":"object","properties":{"name":{"type":"string"},"body":{"type":"string"},"verify_jwt":{"type":"boolean"}}},"V1StorageBucketResponse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"public":{"type":"boolean"}},"required":["id","name","owner","created_at","updated_at","public"]},"AttributeValue":{"type":"object","properties":{"default":{"oneOf":[{"type":"object"},{"type":"number"},{"type":"string"},{"type":"boolean"}]},"name":{"type":"string"},"names":{"type":"array","items":{"type":"string"}}}},"AttributeMapping":{"type":"object","properties":{"keys":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AttributeValue"}}},"required":["keys"]},"CreateProviderBody":{"type":"object","properties":{"type":{"type":"string","enum":["saml"],"description":"What type of provider will be created"},"metadata_xml":{"type":"string"},"metadata_url":{"type":"string"},"domains":{"type":"array","items":{"type":"string"}},"attribute_mapping":{"$ref":"#/components/schemas/AttributeMapping"}},"required":["type"]},"SamlDescriptor":{"type":"object","properties":{"id":{"type":"string"},"entity_id":{"type":"string"},"metadata_url":{"type":"string"},"metadata_xml":{"type":"string"},"attribute_mapping":{"$ref":"#/components/schemas/AttributeMapping"}},"required":["id","entity_id"]},"Domain":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"CreateProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"Provider":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"ListProvidersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Provider"}}},"required":["items"]},"GetProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"UpdateProviderBody":{"type":"object","properties":{"metadata_xml":{"type":"string"},"metadata_url":{"type":"string"},"domains":{"type":"array","items":{"type":"string"}},"attribute_mapping":{"$ref":"#/components/schemas/AttributeMapping"}}},"UpdateProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"DeleteProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"V1Backup":{"type":"object","properties":{"status":{"type":"string","enum":["COMPLETED","FAILED","PENDING","REMOVED","ARCHIVED"]},"is_physical_backup":{"type":"boolean"},"inserted_at":{"type":"string"}},"required":["status","is_physical_backup","inserted_at"]},"V1PhysicalBackup":{"type":"object","properties":{"earliest_physical_backup_date_unix":{"type":"number"},"latest_physical_backup_date_unix":{"type":"number"}}},"V1BackupsResponse":{"type":"object","properties":{"region":{"type":"string"},"walg_enabled":{"type":"boolean"},"pitr_enabled":{"type":"boolean"},"backups":{"type":"array","items":{"$ref":"#/components/schemas/V1Backup"}},"physical_backup_data":{"$ref":"#/components/schemas/V1PhysicalBackup"}},"required":["region","walg_enabled","pitr_enabled","backups","physical_backup_data"]},"V1RestorePitrBody":{"type":"object","properties":{"recovery_time_target_unix":{"type":"number"}},"required":["recovery_time_target_unix"]},"V1OrganizationMemberResponse":{"type":"object","properties":{"user_id":{"type":"string"},"user_name":{"type":"string"},"email":{"type":"string"},"role_name":{"type":"string"},"mfa_enabled":{"type":"boolean"}},"required":["user_id","user_name","role_name","mfa_enabled"]},"BillingPlanId":{"type":"string","enum":["free","pro","team","enterprise"]},"V1OrganizationSlugResponse":{"type":"object","properties":{"plan":{"$ref":"#/components/schemas/BillingPlanId"},"opt_in_tags":{"type":"array","items":{"type":"string","enum":["AI_SQL_GENERATOR_OPT_IN"]}},"id":{"type":"string"},"name":{"type":"string"}},"required":["opt_in_tags","id","name"]}}}}
\ No newline at end of file
+{"openapi":"3.0.0","paths":{"/v1/branches/{branch_id}":{"get":{"operationId":"v1-get-a-branch-config","summary":"Get database branch config","description":"Fetches configurations of the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchDetailResponse"}}}},"500":{"description":"Failed to retrieve database branch"}},"tags":["environments"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-a-branch-config","summary":"Update database branch config","description":"Updates the configuration of the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBranchBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}},"500":{"description":"Failed to update database branch"}},"tags":["environments"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-delete-a-branch","summary":"Delete a database branch","description":"Deletes the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchDeleteResponse"}}}},"500":{"description":"Failed to delete database branch"}},"tags":["environments"],"security":[{"bearer":[]}]}},"/v1/branches/{branch_id}/reset":{"post":{"operationId":"v1-reset-a-branch","summary":"Resets a database branch","description":"Resets the specified database branch","parameters":[{"name":"branch_id","required":true,"in":"path","description":"Branch ID","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchResetResponse"}}}},"500":{"description":"Failed to reset database branch"}},"tags":["environments"],"security":[{"bearer":[]}]}},"/v1/projects":{"get":{"operationId":"v1-list-all-projects","summary":"List all projects","description":"Returns a list of all projects you've previously created.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1ProjectResponse"}}}}}},"tags":["projects"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-create-a-project","summary":"Create a project","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateProjectBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1ProjectResponse"}}}}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/organizations":{"get":{"operationId":"v1-list-all-organizations","summary":"List all organizations","description":"Returns a list of organizations that you currently belong to.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationResponseV1"}}}}},"500":{"description":"Unexpected error listing organizations"}},"tags":["organizations"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-create-an-organization","summary":"Create an organization","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrganizationBodyV1"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponseV1"}}}},"500":{"description":"Unexpected error creating an organization"}},"tags":["organizations"],"security":[{"bearer":[]}]}},"/v1/oauth/authorize":{"get":{"operationId":"v1-authorize-user","summary":"[Beta] Authorize user through oauth","parameters":[{"name":"client_id","required":true,"in":"query","schema":{"type":"string"}},{"name":"response_type","required":true,"in":"query","schema":{"enum":["code","token","id_token token"],"type":"string"}},{"name":"redirect_uri","required":true,"in":"query","schema":{"type":"string"}},{"name":"scope","required":false,"in":"query","schema":{"type":"string"}},{"name":"state","required":false,"in":"query","schema":{"type":"string"}},{"name":"response_mode","required":false,"in":"query","schema":{"type":"string"}},{"name":"code_challenge","required":false,"in":"query","schema":{"type":"string"}},{"name":"code_challenge_method","required":false,"in":"query","schema":{"enum":["plain","sha256","S256"],"type":"string"}}],"responses":{"303":{"description":""}},"tags":["oauth"],"security":[{"oauth2":["read"]}]}},"/v1/oauth/token":{"post":{"operationId":"v1-exchange-oauth-token","summary":"[Beta] Exchange auth code for user's access and refresh token","parameters":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/OAuthTokenBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenResponse"}}}}},"tags":["oauth"],"security":[{"oauth2":["write"]}]}},"/v1/snippets":{"get":{"operationId":"v1-list-all-snippets","summary":"Lists SQL snippets for the logged in user","parameters":[{"name":"project_ref","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnippetList"}}}},"500":{"description":"Failed to list user's SQL snippets"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/snippets/{id}":{"get":{"operationId":"v1-get-a-snippet","summary":"Gets a specific SQL snippet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnippetResponse"}}}},"500":{"description":"Failed to retrieve SQL snippet"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/api-keys":{"get":{"operationId":"v1-get-project-api-keys","summary":"Get project api keys","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyResponse"}}}}},"403":{"description":""}},"tags":["secrets"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/branches":{"get":{"operationId":"v1-list-all-branches","summary":"List all database branches","description":"Returns all database branches of the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BranchResponse"}}}}},"500":{"description":"Failed to retrieve database branches"}},"tags":["environments"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-create-a-branch","summary":"Create a database branch","description":"Creates a database branch from the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBranchBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}},"500":{"description":"Failed to create database branch"}},"tags":["environments"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-disable-preview-branching","summary":"Disables preview branching","description":"Disables preview branching for the specified project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":""},"500":{"description":"Failed to disable preview branching"}},"tags":["environments"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname":{"get":{"operationId":"v1-get-hostname-config","summary":"[Beta] Gets project's custom hostname config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's custom hostname config"}},"tags":["domains"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-Delete hostname config","summary":"[Beta] Deletes a project's custom hostname configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to delete project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname/initialize":{"post":{"operationId":"v1-update-hostname-config","summary":"[Beta] Updates project's custom hostname configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname/reverify":{"post":{"operationId":"v1-verify-dns-config","summary":"[Beta] Attempts to verify the DNS configuration for project's custom hostname configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to verify project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/custom-hostname/activate":{"post":{"operationId":"v1-activate-custom-hostname","summary":"[Beta] Activates a custom hostname for a project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomHostnameResponse"}}}},"403":{"description":""},"500":{"description":"Failed to activate project custom hostname configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-bans/retrieve":{"post":{"operationId":"v1-list-all-network-bans","summary":"[Beta] Gets project's network bans","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkBanResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's network bans"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-bans":{"delete":{"operationId":"v1-delete-network-bans","summary":"[Beta] Remove network bans.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveNetworkBanRequest"}}}},"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to remove network bans."}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-restrictions":{"get":{"operationId":"v1-get-network-restrictions","summary":"[Beta] Gets project's network restrictions","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRestrictionsResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's network restrictions"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/network-restrictions/apply":{"post":{"operationId":"v1-update-network-restrictions","summary":"[Beta] Updates project's network restrictions","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRestrictionsRequest"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkRestrictionsResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project network restrictions"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/pgsodium":{"get":{"operationId":"v1-get-pgsodium-config","summary":"[Beta] Gets project's pgsodium config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PgsodiumConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's pgsodium config"}},"tags":["secrets"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-pgsodium-config","summary":"[Beta] Updates project's pgsodium config. Updating the root_key can cause all data encrypted with the older key to become inaccessible.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePgsodiumConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PgsodiumConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's pgsodium config"}},"tags":["secrets"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/postgrest":{"get":{"operationId":"v1-get-postgrest-service-config","summary":"Gets project's postgrest config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostgrestConfigWithJWTSecretResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's postgrest config"}},"tags":["rest"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-postgrest-service-config","summary":"Updates project's postgrest config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostgrestConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1PostgrestConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's postgrest config"}},"tags":["rest"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}":{"delete":{"operationId":"v1-Delete a project","summary":"Deletes the given project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1ProjectRefResponse"}}}},"403":{"description":""}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/secrets":{"get":{"operationId":"v1-list-all-secrets","summary":"List all secrets","description":"Returns all secrets you've previously added to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SecretResponse"}}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's secrets"}},"tags":["secrets"],"security":[{"bearer":[]}]},"post":{"operationId":"v1-bulk-create-secrets","summary":"Bulk create secrets","description":"Creates multiple secrets and adds them to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CreateSecretBody"}}}}},"responses":{"201":{"description":""},"403":{"description":""},"500":{"description":"Failed to create project's secrets"}},"tags":["secrets"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-bulk-delete-secrets","summary":"Bulk delete secrets","description":"Deletes all secrets with the given names from the specified project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":""},"500":{"description":"Failed to delete secrets with given names"}},"tags":["secrets"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/ssl-enforcement":{"get":{"operationId":"v1-get-ssl-enforcement-config","summary":"[Beta] Get project's SSL enforcement configuration.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslEnforcementResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's SSL enforcement config"}},"tags":["database"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-ssl-enforcement-config","summary":"[Beta] Update project's SSL enforcement configuration.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslEnforcementRequest"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SslEnforcementResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's SSL enforcement configuration."}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/types/typescript":{"get":{"operationId":"v1-generate-typescript-types","summary":"Generate TypeScript types","description":"Returns the TypeScript types of your schema for use with supabase-js.","parameters":[{"name":"included_schemas","required":false,"in":"query","schema":{"default":"public","type":"string"}},{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TypescriptResponse"}}}},"403":{"description":""},"500":{"description":"Failed to generate TypeScript types"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/vanity-subdomain":{"get":{"operationId":"v1-get-vanity-subdomain-config","summary":"[Beta] Gets current vanity subdomain config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to get project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-deactivate-vanity-subdomain-config","summary":"[Beta] Deletes a project's vanity subdomain configuration","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to delete project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/vanity-subdomain/check-availability":{"post":{"operationId":"v1-check-vanity-subdomain-availability","summary":"[Beta] Checks vanity subdomain availability","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubdomainAvailabilityResponse"}}}},"403":{"description":""},"500":{"description":"Failed to check project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/vanity-subdomain/activate":{"post":{"operationId":"v1-activate-vanity-subdomain-config","summary":"[Beta] Activates a vanity subdomain for a project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateVanitySubdomainResponse"}}}},"403":{"description":""},"500":{"description":"Failed to activate project vanity subdomain configuration"}},"tags":["domains"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/upgrade":{"post":{"operationId":"v1-upgrade-postgres-version","summary":"[Beta] Upgrades the project's Postgres version","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeDatabaseBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpgradeInitiateResponse"}}}},"403":{"description":""},"500":{"description":"Failed to initiate project upgrade"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/upgrade/eligibility":{"get":{"operationId":"v1-get-postgrest-upgrade-eligibility","summary":"[Beta] Returns the project's eligibility for upgrades","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpgradeEligibilityResponse"}}}},"403":{"description":""},"500":{"description":"Failed to determine project upgrade eligibility"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/upgrade/status":{"get":{"operationId":"v1-get-postgrest-upgrade-status","summary":"[Beta] Gets the latest status of the project's upgrade","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseUpgradeStatusResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project upgrade status"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/readonly":{"get":{"operationId":"v1-get-readonly-mode-status","summary":"Returns project's readonly mode status","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadOnlyStatusResponse"}}}},"500":{"description":"Failed to get project readonly mode status"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/readonly/temporary-disable":{"post":{"operationId":"v1-disable-readonly-mode-temporarily","summary":"Disables project's readonly mode for the next 15 minutes","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":""},"500":{"description":"Failed to disable project's readonly mode"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/read-replicas/setup":{"post":{"operationId":"v1-setup-a-read-replica","summary":"[Beta] Set up a read replica","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetUpReadReplicaBody"}}}},"responses":{"201":{"description":""},"500":{"description":"Failed to set up read replica"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/read-replicas/remove":{"post":{"operationId":"v1-remove-a-read-replica","summary":"[Beta] Remove a read replica","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveReadReplicaBody"}}}},"responses":{"201":{"description":""},"500":{"description":"Failed to remove read replica"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/health":{"get":{"operationId":"v1-get-services-health","summary":"Gets project's service health status","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"timeout_ms","required":false,"in":"query","schema":{"minimum":0,"maximum":10000,"type":"integer"}},{"name":"services","required":true,"in":"query","schema":{"type":"array","items":{"type":"string","enum":["auth","db","pooler","realtime","rest","storage"]}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1ServiceHealthResponse"}}}}},"500":{"description":"Failed to retrieve project's service health status"}},"tags":["projects"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/database/postgres":{"get":{"operationId":"v1-get-postgres-config","summary":"Gets project's Postgres config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostgresConfigResponse"}}}},"500":{"description":"Failed to retrieve project's Postgres config"}},"tags":["database"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-postgres-config","summary":"Updates project's Postgres config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostgresConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostgresConfigResponse"}}}},"500":{"description":"Failed to update project's Postgres config"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/database/pgbouncer":{"get":{"operationId":"v1-get-project-pgbouncer-config","summary":"Get project's pgbouncer config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1PgbouncerConfigResponse"}}}},"500":{"description":"Failed to retrieve project's pgbouncer config"}},"tags":["database"]}},"/v1/projects/{ref}/config/database/pooler":{"get":{"operationId":"v1-get-supavisor-config","summary":"Gets project's supavisor config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SupavisorConfigResponse"}}}}},"500":{"description":"Failed to retrieve project's supavisor config"}},"tags":["database"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-supavisor-config","summary":"Updates project's supavisor config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSupavisorConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSupavisorConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's supavisor config"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/auth":{"get":{"operationId":"v1-get-auth-service-config","summary":"Gets project's auth config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's auth config"}},"tags":["auth"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-auth-service-config","summary":"Updates a project's auth config","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAuthConfigBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthConfigResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update project's auth config"}},"tags":["auth"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/query":{"post":{"operationId":"v1-run-a-query","summary":"[Beta] Run sql query","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1RunQueryBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":""},"500":{"description":"Failed to run sql query"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/webhooks/enable":{"post":{"operationId":"v1-enable-database-webhook","summary":"[Beta] Enables Database Webhooks on the project","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"201":{"description":""},"403":{"description":""},"500":{"description":"Failed to enable Database Webhooks on the project"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/functions":{"post":{"operationId":"createFunction","summary":"Create a function","description":"Creates a function and adds it to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"slug","required":false,"in":"query","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"verify_jwt","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"import_map","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"entrypoint_path","required":false,"in":"query","schema":{"type":"string"}},{"name":"import_map_path","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateFunctionBody"}},"application/vnd.denoland.eszip":{"schema":{"$ref":"#/components/schemas/V1CreateFunctionBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionResponse"}}}},"403":{"description":""},"500":{"description":"Failed to create project's function"}},"tags":["edge functions"],"security":[{"bearer":[]}]},"get":{"operationId":"v1-list-all-functions","summary":"List all functions","description":"Returns all functions you've previously added to the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FunctionResponse"}}}}},"403":{"description":""},"500":{"description":"Failed to retrieve project's functions"}},"tags":["edge functions"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/functions/{function_slug}":{"get":{"operationId":"v1-get-a-function","summary":"Retrieve a function","description":"Retrieves a function with the specified slug and project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionSlugResponse"}}}},"403":{"description":""},"500":{"description":"Failed to retrieve function with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]},"patch":{"operationId":"v1-update-a-function","summary":"Update a function","description":"Updates a function with the specified slug and project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}},{"name":"slug","required":false,"in":"query","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"verify_jwt","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"import_map","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"entrypoint_path","required":false,"in":"query","schema":{"type":"string"}},{"name":"import_map_path","required":false,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1UpdateFunctionBody"}},"application/vnd.denoland.eszip":{"schema":{"$ref":"#/components/schemas/V1UpdateFunctionBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionResponse"}}}},"403":{"description":""},"500":{"description":"Failed to update function with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-delete-a-function","summary":"Delete a function","description":"Deletes a function with the specified slug from the specified project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to delete function with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/functions/{function_slug}/body":{"get":{"operationId":"v1-get-a-function-body","summary":"Retrieve a function body","description":"Retrieves a function body for the specified slug and project.","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"function_slug","required":true,"in":"path","description":"Function slug","schema":{"pattern":"/^[A-Za-z0-9_-]+$/","type":"string"}}],"responses":{"200":{"description":""},"403":{"description":""},"500":{"description":"Failed to retrieve function body with given slug"}},"tags":["edge functions"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/storage/buckets":{"get":{"operationId":"v1-list-all-buckets","summary":"Lists all buckets","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1StorageBucketResponse"}}}}},"403":{"description":""},"500":{"description":"Failed to get list of buckets"}},"tags":["storage"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/auth/sso/providers":{"post":{"operationId":"v1-create-a-sso-provider","summary":"Creates a new SSO provider","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProviderBody"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProviderResponse"}}}},"403":{"description":""},"404":{"description":"SAML 2.0 support is not enabled for this project"}},"tags":["auth"],"security":[{"bearer":[]}]},"get":{"operationId":"v1-list-all-sso-provider","summary":"Lists all SSO providers","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListProvidersResponse"}}}},"403":{"description":""},"404":{"description":"SAML 2.0 support is not enabled for this project"}},"tags":["auth"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/config/auth/sso/providers/{provider_id}":{"get":{"operationId":"v1-get-a-sso-provider","summary":"Gets a SSO provider by its UUID","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"provider_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProviderResponse"}}}},"403":{"description":""},"404":{"description":"Either SAML 2.0 was not enabled for this project, or the provider does not exist"}},"tags":["auth"],"security":[{"bearer":[]}]},"put":{"operationId":"v1-update-a-sso-provider","summary":"Updates a SSO provider by its UUID","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"provider_id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProviderBody"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProviderResponse"}}}},"403":{"description":""},"404":{"description":"Either SAML 2.0 was not enabled for this project, or the provider does not exist"}},"tags":["auth"],"security":[{"bearer":[]}]},"delete":{"operationId":"v1-delete-a-sso-provider","summary":"Removes a SSO provider by its UUID","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}},{"name":"provider_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteProviderResponse"}}}},"403":{"description":""},"404":{"description":"Either SAML 2.0 was not enabled for this project, or the provider does not exist"}},"tags":["auth"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/backups":{"get":{"operationId":"v1-list-all-backups","summary":"Lists all backups","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1BackupsResponse"}}}},"500":{"description":"Failed to get backups"}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/projects/{ref}/database/backups/restore-pitr":{"post":{"operationId":"v1-restore-pitr-backup","summary":"Restores a PITR backup for a database","parameters":[{"name":"ref","required":true,"in":"path","description":"Project ref","schema":{"minLength":20,"maxLength":20,"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1RestorePitrBody"}}}},"responses":{"201":{"description":""}},"tags":["database"],"security":[{"bearer":[]}]}},"/v1/organizations/{slug}/members":{"get":{"operationId":"v1-list-organization-members","summary":"List members of an organization","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1OrganizationMemberResponse"}}}}}},"tags":["organizations"],"security":[{"bearer":[]}]}},"/v1/organizations/{slug}":{"get":{"operationId":"v1-get-an-organization","summary":"Gets information about the organization","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1OrganizationSlugResponse"}}}}},"tags":["organizations"],"security":[{"bearer":[]}]}}},"info":{"title":"Supabase API (v1)","description":"","version":"1.0.0","contact":{}},"tags":[{"name":"organizations","description":"Organization endpoints"},{"name":"projects","description":"Project endpoints"}],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"BranchDetailResponse":{"type":"object","properties":{"db_port":{"type":"integer"},"ref":{"type":"string"},"postgres_version":{"type":"string"},"status":{"enum":["ACTIVE_HEALTHY","ACTIVE_UNHEALTHY","COMING_UP","GOING_DOWN","INACTIVE","INIT_FAILED","REMOVED","RESTARTING","UNKNOWN","UPGRADING","PAUSING","RESTORING","RESTORE_FAILED","PAUSE_FAILED"],"type":"string"},"db_host":{"type":"string"},"db_user":{"type":"string"},"db_pass":{"type":"string"},"jwt_secret":{"type":"string"}},"required":["db_port","ref","postgres_version","status","db_host"]},"UpdateBranchBody":{"type":"object","properties":{"branch_name":{"type":"string"},"git_branch":{"type":"string"},"reset_on_push":{"type":"boolean"},"persistent":{"type":"boolean"}}},"BranchResponse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"project_ref":{"type":"string"},"parent_project_ref":{"type":"string"},"is_default":{"type":"boolean"},"git_branch":{"type":"string"},"pr_number":{"type":"number"},"latest_check_run_id":{"type":"number"},"reset_on_push":{"type":"boolean"},"persistent":{"type":"boolean"},"status":{"enum":["CREATING_PROJECT","RUNNING_MIGRATIONS","MIGRATIONS_PASSED","MIGRATIONS_FAILED","FUNCTIONS_DEPLOYED","FUNCTIONS_FAILED"],"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","project_ref","parent_project_ref","is_default","reset_on_push","persistent","status","created_at","updated_at"]},"BranchDeleteResponse":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]},"BranchResetResponse":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]},"V1DatabaseResponse":{"type":"object","properties":{"host":{"type":"string","description":"Database host"},"version":{"type":"string","description":"Database version"}},"required":["host","version"]},"V1ProjectResponse":{"type":"object","properties":{"id":{"type":"string","description":"Id of your project"},"organization_id":{"type":"string","description":"Slug of your organization"},"name":{"type":"string","description":"Name of your project"},"region":{"type":"string","description":"Region of your project","example":"us-east-1"},"created_at":{"type":"string","description":"Creation timestamp","example":"2023-03-29T16:32:59Z"},"database":{"$ref":"#/components/schemas/V1DatabaseResponse"},"status":{"enum":["ACTIVE_HEALTHY","ACTIVE_UNHEALTHY","COMING_UP","GOING_DOWN","INACTIVE","INIT_FAILED","REMOVED","RESTARTING","UNKNOWN","UPGRADING","PAUSING","RESTORING","RESTORE_FAILED","PAUSE_FAILED"],"type":"string"}},"required":["id","organization_id","name","region","created_at","status"]},"DesiredInstanceSize":{"type":"string","enum":["micro","small","medium","large","xlarge","2xlarge","4xlarge","8xlarge","12xlarge","16xlarge"]},"V1CreateProjectBody":{"type":"object","properties":{"db_pass":{"type":"string","description":"Database password"},"name":{"type":"string","description":"Name of your project, should not contain dots"},"organization_id":{"type":"string","description":"Slug of your organization"},"plan":{"type":"string","enum":["free","pro"],"description":"Subscription plan is now set on organization level and is ignored in this request","example":"free","deprecated":true},"region":{"type":"string","enum":["us-east-1","us-west-1","us-west-2","ap-east-1","ap-southeast-1","ap-northeast-1","ap-northeast-2","ap-southeast-2","eu-west-1","eu-west-2","eu-west-3","eu-central-1","ca-central-1","ap-south-1","sa-east-1"],"description":"Region you want your server to reside in","example":"us-east-1"},"kps_enabled":{"type":"boolean","deprecated":true,"description":"This field is deprecated and is ignored in this request"},"desired_instance_size":{"$ref":"#/components/schemas/DesiredInstanceSize"},"template_url":{"type":"string","description":"Template URL used to create the project from the CLI.","example":"https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone"}},"required":["db_pass","name","organization_id","region"]},"OrganizationResponseV1":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"CreateOrganizationBodyV1":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"OAuthTokenBody":{"type":"object","properties":{"grant_type":{"enum":["authorization_code","refresh_token"],"type":"string"},"client_id":{"type":"string"},"client_secret":{"type":"string"},"code":{"type":"string"},"code_verifier":{"type":"string"},"redirect_uri":{"type":"string"},"refresh_token":{"type":"string"}},"required":["grant_type","client_id","client_secret"]},"OAuthTokenResponse":{"type":"object","properties":{"token_type":{"type":"string","enum":["Bearer"]},"access_token":{"type":"string"},"refresh_token":{"type":"string"},"expires_in":{"type":"number"}},"required":["token_type","access_token","refresh_token","expires_in"]},"SnippetProject":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"]},"SnippetUser":{"type":"object","properties":{"id":{"type":"number"},"username":{"type":"string"}},"required":["id","username"]},"SnippetMeta":{"type":"object","properties":{"id":{"type":"string"},"inserted_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","enum":["sql"]},"visibility":{"type":"string","enum":["user","project","org","public"]},"name":{"type":"string"},"description":{"type":"string"},"project":{"$ref":"#/components/schemas/SnippetProject"},"owner":{"$ref":"#/components/schemas/SnippetUser"},"updated_by":{"$ref":"#/components/schemas/SnippetUser"}},"required":["id","inserted_at","updated_at","type","visibility","name","project","owner","updated_by"]},"SnippetList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SnippetMeta"}}},"required":["data"]},"SnippetContent":{"type":"object","properties":{"favorite":{"type":"boolean"},"schema_version":{"type":"string"},"sql":{"type":"string"}},"required":["favorite","schema_version","sql"]},"SnippetResponse":{"type":"object","properties":{"id":{"type":"string"},"inserted_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","enum":["sql"]},"visibility":{"enum":["user","project","org","public"],"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"project":{"$ref":"#/components/schemas/SnippetProject"},"owner":{"$ref":"#/components/schemas/SnippetUser"},"updated_by":{"$ref":"#/components/schemas/SnippetUser"},"content":{"$ref":"#/components/schemas/SnippetContent"}},"required":["id","inserted_at","updated_at","type","visibility","name","project","owner","updated_by","content"]},"ApiKeyResponse":{"type":"object","properties":{"name":{"type":"string"},"api_key":{"type":"string"}},"required":["name","api_key"]},"CreateBranchBody":{"type":"object","properties":{"branch_name":{"type":"string"},"git_branch":{"type":"string"},"region":{"type":"string"}},"required":["branch_name"]},"UpdateCustomHostnameResponse":{"type":"object","properties":{"status":{"enum":["1_not_started","2_initiated","3_challenge_verified","4_origin_setup_completed","5_services_reconfigured"],"type":"string"},"custom_hostname":{"type":"string"},"data":{"type":"object"}},"required":["status","custom_hostname","data"]},"UpdateCustomHostnameBody":{"type":"object","properties":{"custom_hostname":{"type":"string"}},"required":["custom_hostname"]},"NetworkBanResponse":{"type":"object","properties":{"banned_ipv4_addresses":{"type":"array","items":{"type":"string"}}},"required":["banned_ipv4_addresses"]},"RemoveNetworkBanRequest":{"type":"object","properties":{"ipv4_addresses":{"type":"array","items":{"type":"string"}}},"required":["ipv4_addresses"]},"NetworkRestrictionsRequest":{"type":"object","properties":{"dbAllowedCidrs":{"type":"array","items":{"type":"string"}},"dbAllowedCidrsV6":{"type":"array","items":{"type":"string"}}}},"NetworkRestrictionsResponse":{"type":"object","properties":{"entitlement":{"enum":["disallowed","allowed"],"type":"string"},"config":{"$ref":"#/components/schemas/NetworkRestrictionsRequest"},"old_config":{"$ref":"#/components/schemas/NetworkRestrictionsRequest"},"status":{"enum":["stored","applied"],"type":"string"}},"required":["entitlement","config","status"]},"PgsodiumConfigResponse":{"type":"object","properties":{"root_key":{"type":"string"}},"required":["root_key"]},"UpdatePgsodiumConfigBody":{"type":"object","properties":{"root_key":{"type":"string"}},"required":["root_key"]},"PostgrestConfigWithJWTSecretResponse":{"type":"object","properties":{"max_rows":{"type":"integer"},"db_pool":{"type":"integer","nullable":true,"description":"If `null`, the value is automatically configured based on compute size."},"db_schema":{"type":"string"},"db_extra_search_path":{"type":"string"},"jwt_secret":{"type":"string"}},"required":["max_rows","db_pool","db_schema","db_extra_search_path"]},"UpdatePostgrestConfigBody":{"type":"object","properties":{"max_rows":{"type":"integer","minimum":0,"maximum":1000000},"db_pool":{"type":"integer","minimum":0,"maximum":1000},"db_extra_search_path":{"type":"string"},"db_schema":{"type":"string"}}},"V1PostgrestConfigResponse":{"type":"object","properties":{"max_rows":{"type":"integer"},"db_pool":{"type":"integer","nullable":true,"description":"If `null`, the value is automatically configured based on compute size."},"db_schema":{"type":"string"},"db_extra_search_path":{"type":"string"}},"required":["max_rows","db_pool","db_schema","db_extra_search_path"]},"V1ProjectRefResponse":{"type":"object","properties":{"id":{"type":"number"},"ref":{"type":"string"},"name":{"type":"string"}},"required":["id","ref","name"]},"SecretResponse":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]},"CreateSecretBody":{"type":"object","properties":{"name":{"type":"string","maxLength":256,"pattern":"/^(?!SUPABASE_).*/","description":"Secret name must not start with the SUPABASE_ prefix.","example":"string"},"value":{"type":"string","maxLength":24576}},"required":["name","value"]},"SslEnforcements":{"type":"object","properties":{"database":{"type":"boolean"}},"required":["database"]},"SslEnforcementResponse":{"type":"object","properties":{"currentConfig":{"$ref":"#/components/schemas/SslEnforcements"},"appliedSuccessfully":{"type":"boolean"}},"required":["currentConfig","appliedSuccessfully"]},"SslEnforcementRequest":{"type":"object","properties":{"requestedConfig":{"$ref":"#/components/schemas/SslEnforcements"}},"required":["requestedConfig"]},"TypescriptResponse":{"type":"object","properties":{"types":{"type":"string"}},"required":["types"]},"VanitySubdomainConfigResponse":{"type":"object","properties":{"status":{"enum":["not-used","custom-domain-used","active"],"type":"string"},"custom_domain":{"type":"string"}},"required":["status"]},"VanitySubdomainBody":{"type":"object","properties":{"vanity_subdomain":{"type":"string"}},"required":["vanity_subdomain"]},"SubdomainAvailabilityResponse":{"type":"object","properties":{"available":{"type":"boolean"}},"required":["available"]},"ActivateVanitySubdomainResponse":{"type":"object","properties":{"custom_domain":{"type":"string"}},"required":["custom_domain"]},"UpgradeDatabaseBody":{"type":"object","properties":{"target_version":{"type":"number"}},"required":["target_version"]},"ProjectUpgradeInitiateResponse":{"type":"object","properties":{"tracking_id":{"type":"string"}},"required":["tracking_id"]},"ProjectVersion":{"type":"object","properties":{"postgres_version":{"type":"number"},"app_version":{"type":"string"}},"required":["postgres_version","app_version"]},"ProjectUpgradeEligibilityResponse":{"type":"object","properties":{"eligible":{"type":"boolean"},"current_app_version":{"type":"string"},"latest_app_version":{"type":"string"},"target_upgrade_versions":{"type":"array","items":{"$ref":"#/components/schemas/ProjectVersion"}},"potential_breaking_changes":{"type":"array","items":{"type":"string"}},"duration_estimate_hours":{"type":"number"},"legacy_auth_custom_roles":{"type":"array","items":{"type":"string"}},"extension_dependent_objects":{"type":"array","items":{"type":"string"}}},"required":["eligible","current_app_version","latest_app_version","target_upgrade_versions","potential_breaking_changes","duration_estimate_hours","legacy_auth_custom_roles","extension_dependent_objects"]},"DatabaseUpgradeStatus":{"type":"object","properties":{"initiated_at":{"type":"string"},"target_version":{"type":"number"},"error":{"type":"string","enum":["1_upgraded_instance_launch_failed","2_volume_detachchment_from_upgraded_instance_failed","3_volume_attachment_to_original_instance_failed","4_data_upgrade_initiation_failed","5_data_upgrade_completion_failed","6_volume_detachchment_from_original_instance_failed","7_volume_attachment_to_upgraded_instance_failed","8_upgrade_completion_failed"]},"progress":{"type":"string","enum":["0_requested","1_started","2_launched_upgraded_instance","3_detached_volume_from_upgraded_instance","4_attached_volume_to_original_instance","5_initiated_data_upgrade","6_completed_data_upgrade","7_detached_volume_from_original_instance","8_attached_volume_to_upgraded_instance","9_completed_upgrade"]},"status":{"type":"number","enum":[0,1,2]}},"required":["initiated_at","target_version","status"]},"DatabaseUpgradeStatusResponse":{"type":"object","properties":{"databaseUpgradeStatus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DatabaseUpgradeStatus"}]}},"required":["databaseUpgradeStatus"]},"ReadOnlyStatusResponse":{"type":"object","properties":{"enabled":{"type":"boolean"},"override_enabled":{"type":"boolean"},"override_active_until":{"type":"string"}},"required":["enabled","override_enabled","override_active_until"]},"SetUpReadReplicaBody":{"type":"object","properties":{"read_replica_region":{"type":"string","enum":["us-east-1","us-west-1","us-west-2","ap-east-1","ap-southeast-1","ap-northeast-1","ap-northeast-2","ap-southeast-2","eu-west-1","eu-west-2","eu-west-3","eu-central-1","ca-central-1","ap-south-1","sa-east-1"],"description":"Region you want your read replica to reside in","example":"us-east-1"}},"required":["read_replica_region"]},"RemoveReadReplicaBody":{"type":"object","properties":{"database_identifier":{"type":"string"}},"required":["database_identifier"]},"AuthHealthResponse":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"description":{"type":"string"}},"required":["name","version","description"]},"RealtimeHealthResponse":{"type":"object","properties":{"healthy":{"type":"boolean"},"db_connected":{"type":"boolean"},"connected_cluster":{"type":"number"}},"required":["healthy","db_connected","connected_cluster"]},"V1ServiceHealthResponse":{"type":"object","properties":{"info":{"oneOf":[{"$ref":"#/components/schemas/AuthHealthResponse"},{"$ref":"#/components/schemas/RealtimeHealthResponse"}]},"name":{"enum":["auth","db","pooler","realtime","rest","storage"],"type":"string"},"healthy":{"type":"boolean"},"status":{"enum":["COMING_UP","ACTIVE_HEALTHY","UNHEALTHY"],"type":"string"},"error":{"type":"string"}},"required":["name","healthy","status"]},"PostgresConfigResponse":{"type":"object","properties":{"statement_timeout":{"type":"string"},"effective_cache_size":{"type":"string"},"maintenance_work_mem":{"type":"string"},"max_connections":{"type":"integer","minimum":1,"maximum":262143},"max_locks_per_transaction":{"type":"integer","minimum":10,"maximum":2147483640},"max_parallel_maintenance_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers_per_gather":{"type":"integer","minimum":0,"maximum":1024},"max_standby_archive_delay":{"type":"string"},"max_standby_streaming_delay":{"type":"string"},"max_worker_processes":{"type":"integer","minimum":0,"maximum":262143},"shared_buffers":{"type":"string"},"work_mem":{"type":"string"},"session_replication_role":{"enum":["origin","replica","local"],"type":"string"}}},"UpdatePostgresConfigBody":{"type":"object","properties":{"statement_timeout":{"type":"string"},"effective_cache_size":{"type":"string"},"maintenance_work_mem":{"type":"string"},"max_connections":{"type":"integer","minimum":1,"maximum":262143},"max_locks_per_transaction":{"type":"integer","minimum":10,"maximum":2147483640},"max_parallel_maintenance_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers":{"type":"integer","minimum":0,"maximum":1024},"max_parallel_workers_per_gather":{"type":"integer","minimum":0,"maximum":1024},"max_standby_archive_delay":{"type":"string"},"max_standby_streaming_delay":{"type":"string"},"max_worker_processes":{"type":"integer","minimum":0,"maximum":262143},"shared_buffers":{"type":"string"},"work_mem":{"type":"string"},"session_replication_role":{"enum":["origin","replica","local"],"type":"string"}}},"V1PgbouncerConfigResponse":{"type":"object","properties":{"pool_mode":{"type":"string","enum":["transaction","session","statement"]},"default_pool_size":{"type":"number"},"ignore_startup_parameters":{"type":"string"},"max_client_conn":{"type":"number"},"connection_string":{"type":"string"}}},"SupavisorConfigResponse":{"type":"object","properties":{"identifier":{"type":"string"},"database_type":{"enum":["PRIMARY","READ_REPLICA"],"type":"string"},"is_using_scram_auth":{"type":"boolean"},"db_user":{"type":"string"},"db_host":{"type":"string"},"db_port":{"type":"number"},"db_name":{"type":"string"},"connectionString":{"type":"string"},"default_pool_size":{"type":"number","nullable":true},"max_client_conn":{"type":"number","nullable":true},"pool_mode":{"enum":["transaction","session"],"type":"string"}},"required":["identifier","database_type","is_using_scram_auth","db_user","db_host","db_port","db_name","connectionString","default_pool_size","max_client_conn","pool_mode"]},"UpdateSupavisorConfigBody":{"type":"object","properties":{"default_pool_size":{"type":"integer","nullable":true,"minimum":0,"maximum":1000},"pool_mode":{"enum":["transaction","session"],"type":"string","deprecated":true,"description":"This field is deprecated and is ignored in this request"}}},"UpdateSupavisorConfigResponse":{"type":"object","properties":{"default_pool_size":{"type":"number","nullable":true},"pool_mode":{"enum":["transaction","session"],"type":"string"}},"required":["default_pool_size","pool_mode"]},"AuthConfigResponse":{"type":"object","properties":{"api_max_request_duration":{"type":"number","nullable":true},"db_max_pool_size":{"type":"number","nullable":true},"disable_signup":{"type":"boolean","nullable":true},"external_anonymous_users_enabled":{"type":"boolean","nullable":true},"external_apple_additional_client_ids":{"type":"string","nullable":true},"external_apple_client_id":{"type":"string","nullable":true},"external_apple_enabled":{"type":"boolean","nullable":true},"external_apple_secret":{"type":"string","nullable":true},"external_azure_client_id":{"type":"string","nullable":true},"external_azure_enabled":{"type":"boolean","nullable":true},"external_azure_secret":{"type":"string","nullable":true},"external_azure_url":{"type":"string","nullable":true},"external_bitbucket_client_id":{"type":"string","nullable":true},"external_bitbucket_enabled":{"type":"boolean","nullable":true},"external_bitbucket_secret":{"type":"string","nullable":true},"external_discord_client_id":{"type":"string","nullable":true},"external_discord_enabled":{"type":"boolean","nullable":true},"external_discord_secret":{"type":"string","nullable":true},"external_email_enabled":{"type":"boolean","nullable":true},"external_facebook_client_id":{"type":"string","nullable":true},"external_facebook_enabled":{"type":"boolean","nullable":true},"external_facebook_secret":{"type":"string","nullable":true},"external_figma_client_id":{"type":"string","nullable":true},"external_figma_enabled":{"type":"boolean","nullable":true},"external_figma_secret":{"type":"string","nullable":true},"external_github_client_id":{"type":"string","nullable":true},"external_github_enabled":{"type":"boolean","nullable":true},"external_github_secret":{"type":"string","nullable":true},"external_gitlab_client_id":{"type":"string","nullable":true},"external_gitlab_enabled":{"type":"boolean","nullable":true},"external_gitlab_secret":{"type":"string","nullable":true},"external_gitlab_url":{"type":"string","nullable":true},"external_google_additional_client_ids":{"type":"string","nullable":true},"external_google_client_id":{"type":"string","nullable":true},"external_google_enabled":{"type":"boolean","nullable":true},"external_google_secret":{"type":"string","nullable":true},"external_google_skip_nonce_check":{"type":"boolean","nullable":true},"external_kakao_client_id":{"type":"string","nullable":true},"external_kakao_enabled":{"type":"boolean","nullable":true},"external_kakao_secret":{"type":"string","nullable":true},"external_keycloak_client_id":{"type":"string","nullable":true},"external_keycloak_enabled":{"type":"boolean","nullable":true},"external_keycloak_secret":{"type":"string","nullable":true},"external_keycloak_url":{"type":"string","nullable":true},"external_linkedin_oidc_client_id":{"type":"string","nullable":true},"external_linkedin_oidc_enabled":{"type":"boolean","nullable":true},"external_linkedin_oidc_secret":{"type":"string","nullable":true},"external_notion_client_id":{"type":"string","nullable":true},"external_notion_enabled":{"type":"boolean","nullable":true},"external_notion_secret":{"type":"string","nullable":true},"external_phone_enabled":{"type":"boolean","nullable":true},"external_slack_client_id":{"type":"string","nullable":true},"external_slack_enabled":{"type":"boolean","nullable":true},"external_slack_secret":{"type":"string","nullable":true},"external_spotify_client_id":{"type":"string","nullable":true},"external_spotify_enabled":{"type":"boolean","nullable":true},"external_spotify_secret":{"type":"string","nullable":true},"external_twitch_client_id":{"type":"string","nullable":true},"external_twitch_enabled":{"type":"boolean","nullable":true},"external_twitch_secret":{"type":"string","nullable":true},"external_twitter_client_id":{"type":"string","nullable":true},"external_twitter_enabled":{"type":"boolean","nullable":true},"external_twitter_secret":{"type":"string","nullable":true},"external_workos_client_id":{"type":"string","nullable":true},"external_workos_enabled":{"type":"boolean","nullable":true},"external_workos_secret":{"type":"string","nullable":true},"external_workos_url":{"type":"string","nullable":true},"external_zoom_client_id":{"type":"string","nullable":true},"external_zoom_enabled":{"type":"boolean","nullable":true},"external_zoom_secret":{"type":"string","nullable":true},"hook_custom_access_token_enabled":{"type":"boolean","nullable":true},"hook_custom_access_token_uri":{"type":"string","nullable":true},"hook_custom_access_token_secrets":{"type":"string","nullable":true},"hook_mfa_verification_attempt_enabled":{"type":"boolean","nullable":true},"hook_mfa_verification_attempt_uri":{"type":"string","nullable":true},"hook_mfa_verification_attempt_secrets":{"type":"string","nullable":true},"hook_password_verification_attempt_enabled":{"type":"boolean","nullable":true},"hook_password_verification_attempt_uri":{"type":"string","nullable":true},"hook_password_verification_attempt_secrets":{"type":"string","nullable":true},"hook_send_sms_enabled":{"type":"boolean","nullable":true},"hook_send_sms_uri":{"type":"string","nullable":true},"hook_send_sms_secrets":{"type":"string","nullable":true},"hook_send_email_enabled":{"type":"boolean","nullable":true},"hook_send_email_uri":{"type":"string","nullable":true},"hook_send_email_secrets":{"type":"string","nullable":true},"jwt_exp":{"type":"number","nullable":true},"mailer_allow_unverified_email_sign_ins":{"type":"boolean","nullable":true},"mailer_autoconfirm":{"type":"boolean","nullable":true},"mailer_otp_exp":{"type":"number"},"mailer_otp_length":{"type":"number","nullable":true},"mailer_secure_email_change_enabled":{"type":"boolean","nullable":true},"mailer_subjects_confirmation":{"type":"string","nullable":true},"mailer_subjects_email_change":{"type":"string","nullable":true},"mailer_subjects_invite":{"type":"string","nullable":true},"mailer_subjects_magic_link":{"type":"string","nullable":true},"mailer_subjects_reauthentication":{"type":"string","nullable":true},"mailer_subjects_recovery":{"type":"string","nullable":true},"mailer_templates_confirmation_content":{"type":"string","nullable":true},"mailer_templates_email_change_content":{"type":"string","nullable":true},"mailer_templates_invite_content":{"type":"string","nullable":true},"mailer_templates_magic_link_content":{"type":"string","nullable":true},"mailer_templates_reauthentication_content":{"type":"string","nullable":true},"mailer_templates_recovery_content":{"type":"string","nullable":true},"mfa_max_enrolled_factors":{"type":"number","nullable":true},"password_hibp_enabled":{"type":"boolean","nullable":true},"password_min_length":{"type":"number","nullable":true},"password_required_characters":{"type":"string","nullable":true},"rate_limit_anonymous_users":{"type":"number","nullable":true},"rate_limit_email_sent":{"type":"number","nullable":true},"rate_limit_sms_sent":{"type":"number","nullable":true},"rate_limit_token_refresh":{"type":"number","nullable":true},"rate_limit_verify":{"type":"number","nullable":true},"refresh_token_rotation_enabled":{"type":"boolean","nullable":true},"saml_enabled":{"type":"boolean","nullable":true},"security_captcha_enabled":{"type":"boolean","nullable":true},"security_captcha_provider":{"type":"string","nullable":true},"security_captcha_secret":{"type":"string","nullable":true},"security_manual_linking_enabled":{"type":"boolean","nullable":true},"security_refresh_token_reuse_interval":{"type":"number","nullable":true},"security_update_password_require_reauthentication":{"type":"boolean","nullable":true},"sessions_inactivity_timeout":{"type":"number","nullable":true},"sessions_single_per_user":{"type":"boolean","nullable":true},"sessions_tags":{"type":"string","nullable":true},"sessions_timebox":{"type":"number","nullable":true},"site_url":{"type":"string","nullable":true},"sms_autoconfirm":{"type":"boolean","nullable":true},"sms_max_frequency":{"type":"number","nullable":true},"sms_messagebird_access_key":{"type":"string","nullable":true},"sms_messagebird_originator":{"type":"string","nullable":true},"sms_otp_exp":{"type":"number","nullable":true},"sms_otp_length":{"type":"number"},"sms_provider":{"type":"string","nullable":true},"sms_template":{"type":"string","nullable":true},"sms_test_otp":{"type":"string","nullable":true},"sms_test_otp_valid_until":{"type":"string","nullable":true},"sms_textlocal_api_key":{"type":"string","nullable":true},"sms_textlocal_sender":{"type":"string","nullable":true},"sms_twilio_account_sid":{"type":"string","nullable":true},"sms_twilio_auth_token":{"type":"string","nullable":true},"sms_twilio_content_sid":{"type":"string","nullable":true},"sms_twilio_message_service_sid":{"type":"string","nullable":true},"sms_twilio_verify_account_sid":{"type":"string","nullable":true},"sms_twilio_verify_auth_token":{"type":"string","nullable":true},"sms_twilio_verify_message_service_sid":{"type":"string","nullable":true},"sms_vonage_api_key":{"type":"string","nullable":true},"sms_vonage_api_secret":{"type":"string","nullable":true},"sms_vonage_from":{"type":"string","nullable":true},"smtp_admin_email":{"type":"string","nullable":true},"smtp_host":{"type":"string","nullable":true},"smtp_max_frequency":{"type":"number","nullable":true},"smtp_pass":{"type":"string","nullable":true},"smtp_port":{"type":"string","nullable":true},"smtp_sender_name":{"type":"string","nullable":true},"smtp_user":{"type":"string","nullable":true},"uri_allow_list":{"type":"string","nullable":true}},"required":["api_max_request_duration","db_max_pool_size","disable_signup","external_anonymous_users_enabled","external_apple_additional_client_ids","external_apple_client_id","external_apple_enabled","external_apple_secret","external_azure_client_id","external_azure_enabled","external_azure_secret","external_azure_url","external_bitbucket_client_id","external_bitbucket_enabled","external_bitbucket_secret","external_discord_client_id","external_discord_enabled","external_discord_secret","external_email_enabled","external_facebook_client_id","external_facebook_enabled","external_facebook_secret","external_figma_client_id","external_figma_enabled","external_figma_secret","external_github_client_id","external_github_enabled","external_github_secret","external_gitlab_client_id","external_gitlab_enabled","external_gitlab_secret","external_gitlab_url","external_google_additional_client_ids","external_google_client_id","external_google_enabled","external_google_secret","external_google_skip_nonce_check","external_kakao_client_id","external_kakao_enabled","external_kakao_secret","external_keycloak_client_id","external_keycloak_enabled","external_keycloak_secret","external_keycloak_url","external_linkedin_oidc_client_id","external_linkedin_oidc_enabled","external_linkedin_oidc_secret","external_notion_client_id","external_notion_enabled","external_notion_secret","external_phone_enabled","external_slack_client_id","external_slack_enabled","external_slack_secret","external_spotify_client_id","external_spotify_enabled","external_spotify_secret","external_twitch_client_id","external_twitch_enabled","external_twitch_secret","external_twitter_client_id","external_twitter_enabled","external_twitter_secret","external_workos_client_id","external_workos_enabled","external_workos_secret","external_workos_url","external_zoom_client_id","external_zoom_enabled","external_zoom_secret","hook_custom_access_token_enabled","hook_custom_access_token_uri","hook_custom_access_token_secrets","hook_mfa_verification_attempt_enabled","hook_mfa_verification_attempt_uri","hook_mfa_verification_attempt_secrets","hook_password_verification_attempt_enabled","hook_password_verification_attempt_uri","hook_password_verification_attempt_secrets","hook_send_sms_enabled","hook_send_sms_uri","hook_send_sms_secrets","hook_send_email_enabled","hook_send_email_uri","hook_send_email_secrets","jwt_exp","mailer_allow_unverified_email_sign_ins","mailer_autoconfirm","mailer_otp_exp","mailer_otp_length","mailer_secure_email_change_enabled","mailer_subjects_confirmation","mailer_subjects_email_change","mailer_subjects_invite","mailer_subjects_magic_link","mailer_subjects_reauthentication","mailer_subjects_recovery","mailer_templates_confirmation_content","mailer_templates_email_change_content","mailer_templates_invite_content","mailer_templates_magic_link_content","mailer_templates_reauthentication_content","mailer_templates_recovery_content","mfa_max_enrolled_factors","password_hibp_enabled","password_min_length","password_required_characters","rate_limit_anonymous_users","rate_limit_email_sent","rate_limit_sms_sent","rate_limit_token_refresh","rate_limit_verify","refresh_token_rotation_enabled","saml_enabled","security_captcha_enabled","security_captcha_provider","security_captcha_secret","security_manual_linking_enabled","security_refresh_token_reuse_interval","security_update_password_require_reauthentication","sessions_inactivity_timeout","sessions_single_per_user","sessions_tags","sessions_timebox","site_url","sms_autoconfirm","sms_max_frequency","sms_messagebird_access_key","sms_messagebird_originator","sms_otp_exp","sms_otp_length","sms_provider","sms_template","sms_test_otp","sms_test_otp_valid_until","sms_textlocal_api_key","sms_textlocal_sender","sms_twilio_account_sid","sms_twilio_auth_token","sms_twilio_content_sid","sms_twilio_message_service_sid","sms_twilio_verify_account_sid","sms_twilio_verify_auth_token","sms_twilio_verify_message_service_sid","sms_vonage_api_key","sms_vonage_api_secret","sms_vonage_from","smtp_admin_email","smtp_host","smtp_max_frequency","smtp_pass","smtp_port","smtp_sender_name","smtp_user","uri_allow_list"]},"UpdateAuthConfigBody":{"type":"object","properties":{"site_url":{"type":"string","pattern":"/^[^,]+$/"},"disable_signup":{"type":"boolean"},"jwt_exp":{"type":"number","minimum":0,"maximum":604800},"smtp_admin_email":{"type":"string"},"smtp_host":{"type":"string"},"smtp_port":{"type":"string"},"smtp_user":{"type":"string"},"smtp_pass":{"type":"string"},"smtp_max_frequency":{"type":"number","minimum":0,"maximum":32767},"smtp_sender_name":{"type":"string"},"mailer_allow_unverified_email_sign_ins":{"type":"boolean"},"mailer_autoconfirm":{"type":"boolean"},"mailer_subjects_invite":{"type":"string"},"mailer_subjects_confirmation":{"type":"string"},"mailer_subjects_recovery":{"type":"string"},"mailer_subjects_email_change":{"type":"string"},"mailer_subjects_magic_link":{"type":"string"},"mailer_subjects_reauthentication":{"type":"string"},"mailer_templates_invite_content":{"type":"string"},"mailer_templates_confirmation_content":{"type":"string"},"mailer_templates_recovery_content":{"type":"string"},"mailer_templates_email_change_content":{"type":"string"},"mailer_templates_magic_link_content":{"type":"string"},"mailer_templates_reauthentication_content":{"type":"string"},"mfa_max_enrolled_factors":{"type":"number","minimum":0,"maximum":2147483647},"uri_allow_list":{"type":"string"},"external_anonymous_users_enabled":{"type":"boolean"},"external_email_enabled":{"type":"boolean"},"external_phone_enabled":{"type":"boolean"},"saml_enabled":{"type":"boolean"},"security_captcha_enabled":{"type":"boolean"},"security_captcha_provider":{"type":"string"},"security_captcha_secret":{"type":"string"},"sessions_timebox":{"type":"number","minimum":0},"sessions_inactivity_timeout":{"type":"number","minimum":0},"sessions_single_per_user":{"type":"boolean"},"sessions_tags":{"type":"string","pattern":"/^\\s*([a-z0-9_-]+(\\s*,+\\s*)?)*\\s*$/i"},"rate_limit_anonymous_users":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_email_sent":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_sms_sent":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_verify":{"type":"number","minimum":1,"maximum":2147483647},"rate_limit_token_refresh":{"type":"number","minimum":1,"maximum":2147483647},"mailer_secure_email_change_enabled":{"type":"boolean"},"refresh_token_rotation_enabled":{"type":"boolean"},"password_hibp_enabled":{"type":"boolean"},"password_min_length":{"type":"number","minimum":6,"maximum":32767},"password_required_characters":{"type":"string","enum":["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789","abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789","abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789:!@#$%^&*()_+-=[]{};'\\\\:\"|<>?,./`~",""]},"security_manual_linking_enabled":{"type":"boolean"},"security_update_password_require_reauthentication":{"type":"boolean"},"security_refresh_token_reuse_interval":{"type":"number","minimum":0,"maximum":2147483647},"mailer_otp_exp":{"type":"number","minimum":0,"maximum":2147483647},"mailer_otp_length":{"type":"number","minimum":6,"maximum":10},"sms_autoconfirm":{"type":"boolean"},"sms_max_frequency":{"type":"number","minimum":0,"maximum":32767},"sms_otp_exp":{"type":"number","minimum":0,"maximum":2147483647},"sms_otp_length":{"type":"number","minimum":0,"maximum":32767},"sms_provider":{"type":"string"},"sms_messagebird_access_key":{"type":"string"},"sms_messagebird_originator":{"type":"string"},"sms_test_otp":{"type":"string","pattern":"/^([0-9]{1,15}=[0-9]+,?)*$/"},"sms_test_otp_valid_until":{"type":"string"},"sms_textlocal_api_key":{"type":"string"},"sms_textlocal_sender":{"type":"string"},"sms_twilio_account_sid":{"type":"string"},"sms_twilio_auth_token":{"type":"string"},"sms_twilio_content_sid":{"type":"string"},"sms_twilio_message_service_sid":{"type":"string"},"sms_twilio_verify_account_sid":{"type":"string"},"sms_twilio_verify_auth_token":{"type":"string"},"sms_twilio_verify_message_service_sid":{"type":"string"},"sms_vonage_api_key":{"type":"string"},"sms_vonage_api_secret":{"type":"string"},"sms_vonage_from":{"type":"string"},"sms_template":{"type":"string"},"hook_mfa_verification_attempt_enabled":{"type":"boolean"},"hook_mfa_verification_attempt_uri":{"type":"string"},"hook_mfa_verification_attempt_secrets":{"type":"string"},"hook_password_verification_attempt_enabled":{"type":"boolean"},"hook_password_verification_attempt_uri":{"type":"string"},"hook_password_verification_attempt_secrets":{"type":"string"},"hook_custom_access_token_enabled":{"type":"boolean"},"hook_custom_access_token_uri":{"type":"string"},"hook_custom_access_token_secrets":{"type":"string"},"hook_send_sms_enabled":{"type":"boolean"},"hook_send_sms_uri":{"type":"string"},"hook_send_sms_secrets":{"type":"string"},"hook_send_email_enabled":{"type":"boolean"},"hook_send_email_uri":{"type":"string"},"hook_send_email_secrets":{"type":"string"},"external_apple_enabled":{"type":"boolean"},"external_apple_client_id":{"type":"string"},"external_apple_secret":{"type":"string"},"external_apple_additional_client_ids":{"type":"string"},"external_azure_enabled":{"type":"boolean"},"external_azure_client_id":{"type":"string"},"external_azure_secret":{"type":"string"},"external_azure_url":{"type":"string"},"external_bitbucket_enabled":{"type":"boolean"},"external_bitbucket_client_id":{"type":"string"},"external_bitbucket_secret":{"type":"string"},"external_discord_enabled":{"type":"boolean"},"external_discord_client_id":{"type":"string"},"external_discord_secret":{"type":"string"},"external_facebook_enabled":{"type":"boolean"},"external_facebook_client_id":{"type":"string"},"external_facebook_secret":{"type":"string"},"external_figma_enabled":{"type":"boolean"},"external_figma_client_id":{"type":"string"},"external_figma_secret":{"type":"string"},"external_github_enabled":{"type":"boolean"},"external_github_client_id":{"type":"string"},"external_github_secret":{"type":"string"},"external_gitlab_enabled":{"type":"boolean"},"external_gitlab_client_id":{"type":"string"},"external_gitlab_secret":{"type":"string"},"external_gitlab_url":{"type":"string"},"external_google_enabled":{"type":"boolean"},"external_google_client_id":{"type":"string"},"external_google_secret":{"type":"string"},"external_google_additional_client_ids":{"type":"string"},"external_google_skip_nonce_check":{"type":"boolean"},"external_kakao_enabled":{"type":"boolean"},"external_kakao_client_id":{"type":"string"},"external_kakao_secret":{"type":"string"},"external_keycloak_enabled":{"type":"boolean"},"external_keycloak_client_id":{"type":"string"},"external_keycloak_secret":{"type":"string"},"external_keycloak_url":{"type":"string"},"external_linkedin_oidc_enabled":{"type":"boolean"},"external_linkedin_oidc_client_id":{"type":"string"},"external_linkedin_oidc_secret":{"type":"string"},"external_notion_enabled":{"type":"boolean"},"external_notion_client_id":{"type":"string"},"external_notion_secret":{"type":"string"},"external_slack_enabled":{"type":"boolean"},"external_slack_client_id":{"type":"string"},"external_slack_secret":{"type":"string"},"external_spotify_enabled":{"type":"boolean"},"external_spotify_client_id":{"type":"string"},"external_spotify_secret":{"type":"string"},"external_twitch_enabled":{"type":"boolean"},"external_twitch_client_id":{"type":"string"},"external_twitch_secret":{"type":"string"},"external_twitter_enabled":{"type":"boolean"},"external_twitter_client_id":{"type":"string"},"external_twitter_secret":{"type":"string"},"external_workos_enabled":{"type":"boolean"},"external_workos_client_id":{"type":"string"},"external_workos_secret":{"type":"string"},"external_workos_url":{"type":"string"},"external_zoom_enabled":{"type":"boolean"},"external_zoom_client_id":{"type":"string"},"external_zoom_secret":{"type":"string"},"db_max_pool_size":{"type":"number"},"api_max_request_duration":{"type":"number"}}},"V1RunQueryBody":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]},"V1CreateFunctionBody":{"type":"object","properties":{"slug":{"type":"string","pattern":"/^[A-Za-z0-9_-]+$/"},"name":{"type":"string"},"body":{"type":"string"},"verify_jwt":{"type":"boolean"}},"required":["slug","name","body"]},"FunctionResponse":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"status":{"enum":["ACTIVE","REMOVED","THROTTLED"],"type":"string"},"version":{"type":"number"},"created_at":{"type":"number"},"updated_at":{"type":"number"},"verify_jwt":{"type":"boolean"},"import_map":{"type":"boolean"},"entrypoint_path":{"type":"string"},"import_map_path":{"type":"string"}},"required":["id","slug","name","status","version","created_at","updated_at"]},"FunctionSlugResponse":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"status":{"enum":["ACTIVE","REMOVED","THROTTLED"],"type":"string"},"version":{"type":"number"},"created_at":{"type":"number"},"updated_at":{"type":"number"},"verify_jwt":{"type":"boolean"},"import_map":{"type":"boolean"},"entrypoint_path":{"type":"string"},"import_map_path":{"type":"string"}},"required":["id","slug","name","status","version","created_at","updated_at"]},"V1UpdateFunctionBody":{"type":"object","properties":{"name":{"type":"string"},"body":{"type":"string"},"verify_jwt":{"type":"boolean"}}},"V1StorageBucketResponse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"public":{"type":"boolean"}},"required":["id","name","owner","created_at","updated_at","public"]},"AttributeValue":{"type":"object","properties":{"default":{"oneOf":[{"type":"object"},{"type":"number"},{"type":"string"},{"type":"boolean"}]},"name":{"type":"string"},"names":{"type":"array","items":{"type":"string"}},"array":{"type":"boolean"}}},"AttributeMapping":{"type":"object","properties":{"keys":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AttributeValue"}}},"required":["keys"]},"CreateProviderBody":{"type":"object","properties":{"type":{"type":"string","enum":["saml"],"description":"What type of provider will be created"},"metadata_xml":{"type":"string"},"metadata_url":{"type":"string"},"domains":{"type":"array","items":{"type":"string"}},"attribute_mapping":{"$ref":"#/components/schemas/AttributeMapping"}},"required":["type"]},"SamlDescriptor":{"type":"object","properties":{"id":{"type":"string"},"entity_id":{"type":"string"},"metadata_url":{"type":"string"},"metadata_xml":{"type":"string"},"attribute_mapping":{"$ref":"#/components/schemas/AttributeMapping"}},"required":["id","entity_id"]},"Domain":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"CreateProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"Provider":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"ListProvidersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Provider"}}},"required":["items"]},"GetProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"UpdateProviderBody":{"type":"object","properties":{"metadata_xml":{"type":"string"},"metadata_url":{"type":"string"},"domains":{"type":"array","items":{"type":"string"}},"attribute_mapping":{"$ref":"#/components/schemas/AttributeMapping"}}},"UpdateProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"DeleteProviderResponse":{"type":"object","properties":{"id":{"type":"string"},"saml":{"$ref":"#/components/schemas/SamlDescriptor"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id"]},"V1Backup":{"type":"object","properties":{"status":{"type":"string","enum":["COMPLETED","FAILED","PENDING","REMOVED","ARCHIVED"]},"is_physical_backup":{"type":"boolean"},"inserted_at":{"type":"string"}},"required":["status","is_physical_backup","inserted_at"]},"V1PhysicalBackup":{"type":"object","properties":{"earliest_physical_backup_date_unix":{"type":"number"},"latest_physical_backup_date_unix":{"type":"number"}}},"V1BackupsResponse":{"type":"object","properties":{"region":{"type":"string"},"walg_enabled":{"type":"boolean"},"pitr_enabled":{"type":"boolean"},"backups":{"type":"array","items":{"$ref":"#/components/schemas/V1Backup"}},"physical_backup_data":{"$ref":"#/components/schemas/V1PhysicalBackup"}},"required":["region","walg_enabled","pitr_enabled","backups","physical_backup_data"]},"V1RestorePitrBody":{"type":"object","properties":{"recovery_time_target_unix":{"type":"number"}},"required":["recovery_time_target_unix"]},"V1OrganizationMemberResponse":{"type":"object","properties":{"user_id":{"type":"string"},"user_name":{"type":"string"},"email":{"type":"string"},"role_name":{"type":"string"},"mfa_enabled":{"type":"boolean"}},"required":["user_id","user_name","role_name","mfa_enabled"]},"BillingPlanId":{"type":"string","enum":["free","pro","team","enterprise"]},"V1OrganizationSlugResponse":{"type":"object","properties":{"plan":{"$ref":"#/components/schemas/BillingPlanId"},"opt_in_tags":{"type":"array","items":{"type":"string","enum":["AI_SQL_GENERATOR_OPT_IN"]}},"id":{"type":"string"},"name":{"type":"string"}},"required":["opt_in_tags","id","name"]}}}}
\ No newline at end of file
diff --git a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json
index d7520b69076..44453689bad 100644
--- a/apps/docs/spec/transforms/api_v1_openapi_deparsed.json
+++ b/apps/docs/spec/transforms/api_v1_openapi_deparsed.json
@@ -60,10 +60,13 @@
"INACTIVE",
"INIT_FAILED",
"REMOVED",
- "RESTORING",
+ "RESTARTING",
"UNKNOWN",
"UPGRADING",
- "PAUSING"
+ "PAUSING",
+ "RESTORING",
+ "RESTORE_FAILED",
+ "PAUSE_FAILED"
],
"type": "string"
},
@@ -389,10 +392,13 @@
"INACTIVE",
"INIT_FAILED",
"REMOVED",
- "RESTORING",
+ "RESTARTING",
"UNKNOWN",
"UPGRADING",
- "PAUSING"
+ "PAUSING",
+ "RESTORING",
+ "RESTORE_FAILED",
+ "PAUSE_FAILED"
],
"type": "string"
}
@@ -567,10 +573,13 @@
"INACTIVE",
"INIT_FAILED",
"REMOVED",
- "RESTORING",
+ "RESTARTING",
"UNKNOWN",
"UPGRADING",
- "PAUSING"
+ "PAUSING",
+ "RESTORING",
+ "RESTORE_FAILED",
+ "PAUSE_FAILED"
],
"type": "string"
}
@@ -7421,6 +7430,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -7496,6 +7508,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -7643,6 +7658,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -7801,6 +7819,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -7944,6 +7965,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -8016,6 +8040,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -8166,6 +8193,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -8545,10 +8575,13 @@
"INACTIVE",
"INIT_FAILED",
"REMOVED",
- "RESTORING",
+ "RESTARTING",
"UNKNOWN",
"UPGRADING",
- "PAUSING"
+ "PAUSING",
+ "RESTORING",
+ "RESTORE_FAILED",
+ "PAUSE_FAILED"
],
"type": "string"
},
@@ -8744,10 +8777,13 @@
"INACTIVE",
"INIT_FAILED",
"REMOVED",
- "RESTORING",
+ "RESTARTING",
"UNKNOWN",
"UPGRADING",
- "PAUSING"
+ "PAUSING",
+ "RESTORING",
+ "RESTORE_FAILED",
+ "PAUSE_FAILED"
],
"type": "string"
}
@@ -11881,6 +11917,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
},
@@ -11916,6 +11955,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -11979,6 +12021,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12040,6 +12085,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12128,6 +12176,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12230,6 +12281,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12337,6 +12391,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12445,6 +12502,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12541,6 +12601,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12605,6 +12668,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
@@ -12707,6 +12773,9 @@
"items": {
"type": "string"
}
+ },
+ "array": {
+ "type": "boolean"
}
}
}
From 3a0a092295f1790da7e266b96012aa461634de1c Mon Sep 17 00:00:00 2001
From: Stojan Dimitrovski
Date: Mon, 24 Jun 2024 19:47:29 +0200
Subject: [PATCH 023/316] docs: fix `getServerSideProps` ssr guide (#27502)
---
.../content/guides/auth/server-side/nextjs.mdx | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/apps/docs/content/guides/auth/server-side/nextjs.mdx b/apps/docs/content/guides/auth/server-side/nextjs.mdx
index d0a4c02a3a5..8663a5f0eab 100644
--- a/apps/docs/content/guides/auth/server-side/nextjs.mdx
+++ b/apps/docs/content/guides/auth/server-side/nextjs.mdx
@@ -606,15 +606,27 @@ Create a `utils/supabase` folder with a file for each type of client. Then copy
```ts utils/supabase/server-props.ts
-import { createServerClient, serialize } from '@supabase/ssr'
import { type GetServerSidePropsContext } from 'next'
+import { createServerClient, serializeCookieHeader } from '@supabase/ssr'
-export function createClient(context: GetServerSidePropsContext) {
+export function createClient({ req, res }: GetServerSidePropsContext) {
const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
- cookies: {},
+ cookies: {
+ getAll() {
+ return Object.keys(req.cookies).map((name) => ({ name, value: req.cookies[name] }))
+ },
+ setAll(cookiesToSet) {
+ res.setHeader(
+ 'Set-Cookie',
+ cookiesToSet.map(({ name, value, options }) =>
+ serializeCookieHeader(name, value, options)
+ )
+ )
+ },
+ },
}
)
From 94d76c5b1e7d0368397cf9dbdf721db40f00cca0 Mon Sep 17 00:00:00 2001
From: Andrew Smith
Date: Mon, 24 Jun 2024 18:41:38 +0000
Subject: [PATCH 024/316] Update supabase python reference docs with params
(#23648)
* Update supabase python reference docs with params
* Update the examples in upsert, delete and add rpc
* add missing text_search, or_ and not filters
* Add params and examples for order, limit, range, explain
* add auth signup params and examples
* add sign_in_anonymously to the python docs
* remove all awaits from examples
---
apps/docs/spec/supabase_py_v2.yml | 3346 +++++++++++++++++++++++++----
1 file changed, 2880 insertions(+), 466 deletions(-)
diff --git a/apps/docs/spec/supabase_py_v2.yml b/apps/docs/spec/supabase_py_v2.yml
index 09af232cddd..f5af2a51d78 100644
--- a/apps/docs/spec/supabase_py_v2.yml
+++ b/apps/docs/spec/supabase_py_v2.yml
@@ -23,6 +23,57 @@ functions:
The Supabase client is your entrypoint to the rest of the Supabase functionality
and is the easiest way to interact with everything we offer within the Supabase ecosystem.
+ params:
+ - name: supabase_url
+ isOptional: false
+ type: string
+ description: The unique Supabase URL which is supplied when you create a new project in your project dashboard.
+ - name: supabase_key
+ isOptional: false
+ type: string
+ description: The unique Supabase Key which is supplied when you create a new project in your project dashboard.
+ - name: options
+ isOptional: true
+ type: ClientOptions
+ description: Options to change the Auth behaviors.
+ subContent:
+ - name: schema
+ isOptional: true
+ type: string
+ description: The Postgres schema which your tables belong to. Must be on the list of exposed schemas in Supabase. Defaults to 'public'.
+ - name: headers
+ isOptional: true
+ type: dictionary
+ description: Optional headers for initializing the client.
+ - name: auto_refresh_token
+ isOptional: true
+ type: bool
+ description: Whether to automatically refresh the token when it expires. Defaults to `true`.
+ - name: persist_session
+ isOptional: true
+ type: bool
+ description: Whether to persist a logged in session to storage.
+ - name: storage
+ isOptional: true
+ type: SyncSupportedStorage
+ description: A storage provider. Used to store the logged in session.
+ - name: realtime
+ isOptional: true
+ type: string
+ description: Options passed to the realtime-py instance.
+ - name: postgrest_client_timeout
+ isOptional: true
+ type: int, float, Timeout
+ description: Timeout passed to the SyncPostgrestClient instance.
+ - name: storage_client_timeout
+ isOptional: true
+ type: int, float, Timeout
+ description: Timeout passed to the SyncStorageClient instance.
+ - name: flow_type
+ isOptional: true
+ type: AuthFlowType
+ description: flow type to use for authentication.
+
examples:
- id: create-client
name: create_client()
@@ -55,6 +106,46 @@ functions:
- id: sign-up
title: 'sign_up()'
+ params:
+ - name: credentials
+ isOptional: false
+ type: SignUpWithPasswordCredentials
+ subContent:
+ - name: email
+ isOptional: true
+ type: string
+ description: One of `email` or `phone` must be provided.
+ - name: phone
+ isOptional: true
+ type: string
+ description: One of `email` or `phone` must be provided.
+ - name: password
+ type: string
+ - name: options
+ isOptional: true
+ type: object
+ subContent:
+ - name: email_redirect_to
+ isOptional: true
+ type: string
+ description: >
+ Only for email signups.
+ The redirect URL embedded in the email link.
+ Must be a configured redirect URL for your Supabase instance.
+ - name: data
+ isOptional: true
+ type: object
+ description: >
+ A custom data object to store additional user metadata.
+ - name: captcha_token
+ isOptional: true
+ type: string
+ - name: channel
+ isOptional: true
+ type: sms | whatsapp
+ description: >
+ The channel to use for sending messages.
+ Only for phone signups.
notes: |
- By default, the user needs to verify their email address before logging in. To turn this off, disable **Confirm email** in [your project](https://supabase.com/dashboard/project/_/auth/providers).
- **Confirm email** determines if users need to confirm their email address after signing up.
@@ -64,79 +155,149 @@ functions:
- If sign_up() is called for an existing confirmed user:
- When both **Confirm email** and **Confirm phone** (even when phone provider is disabled) are enabled in [your project](/dashboard/project/_/auth/providers), an obfuscated/fake user object is returned.
- When either **Confirm email** or **Confirm phone** (even when phone provider is disabled) is disabled, the error message, `User already registered` is returned.
- - To fetch the currently logged-in user, refer to [`getUser()`](/docs/reference/python/auth-getuser).
+ - To fetch the currently logged-in user, refer to [`get_user()`](/docs/reference/python/auth-getuser).
examples:
- id: signup
- name: Sign up
+ name: Sign up with an email and password
code: |
- ```
- credentials = {
- "email": "users_email@email.com",
- "password": "users_password"
- }
- user = supabase.auth.sign_up(credentials)
+ ```python
+ response = supabase.auth.sign_up(
+ credentials={"email": "hello@example.com", "password": "password"}
+ )
```
response: |
- ```
- User(
- id='11111111-1111-1111-1111-111111111111',
- app_metadata={
- 'provider': 'email',
- 'providers': ['email']
- },
- user_metadata={
- 'email': 'users_email@email.com',
- 'email_verified': False,
- 'phone_verified': False,
- 'sub': '11111111-1111-1111-1111-111111111111'
+ ```json
+ {
+ "user": {
+ "id": "11111111-1111-1111-1111-111111111111",
+ "app_metadata": {
+ "provider": "email",
+ "providers": [
+ "email"
+ ]
+ },
+ "user_metadata": {},
+ "aud": "authenticated",
+ "confirmation_sent_at": null,
+ "recovery_sent_at": null,
+ "email_change_sent_at": null,
+ "new_email": null,
+ "invited_at": null,
+ "action_link": null,
+ "email": "hello@example.com",
+ "phone": "",
+ "created_at": "2024-06-17T00:19:25.760110Z",
+ "confirmed_at": null,
+ "email_confirmed_at": "2024-06-17T00:19:25.779181Z",
+ "phone_confirmed_at": null,
+ "last_sign_in_at": "2024-06-17T00:19:25.785489Z",
+ "role": "authenticated",
+ "updated_at": "2024-06-17T00:19:25.794650Z",
+ "identities": [
+ {
+ "id": "11111111-1111-1111-1111-111111111111",
+ "user_id": "11111111-1111-1111-1111-111111111111",
+ "identity_data": {
+ "email": "hello@example.com",
+ "sub": "11111111-1111-1111-1111-111111111111"
+ },
+ "provider": "email",
+ "created_at": "2024-06-17T00:19:25.774522Z",
+ "last_sign_in_at": "2024-06-17T00:19:25.774498Z",
+ "updated_at": "2024-06-17T00:19:25.774522Z"
+ }
+ ],
+ "factors": null
},
- aud='authenticated',
- confirmation_sent_at=datetime.datetime(2024, 1, 1, 1, 0, 0, 0, tzinfo=TzInfo(UTC)),
- recovery_sent_at=None,
- email_change_sent_at=None,
- new_email=None,
- invited_at=None,
- action_link=None,
- email='users_email@email.com',
- phone='',
- created_at=datetime.datetime(2024, 1, 1, 1, 0, 0, 0, tzinfo=TzInfo(UTC)),
- confirmed_at=None,
- email_confirmed_at=None,
- phone_confirmed_at=None,
- last_sign_in_at=None,
- role='authenticated',
- updated_at=datetime.datetime(2024, 1, 1, 1, 0, 0, 0, tzinfo=TzInfo(UTC)),
- identities=[
- UserIdentity(
- id='22222222-2222-2222-2222-222222222222',
- user_id='11111111-1111-1111-1111-111111111111',
- identity_data={
- 'email': 'users_email@email.com',
- 'email_verified': False,
- 'phone_verified': False,
- 'sub': '11111111-1111-1111-1111-111111111111'
+ "session": {
+ "provider_token": null,
+ "provider_refresh_token": null,
+ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzE4NTg3MTY1LCJpYXQiOjE3MTg1ODM1NjUsImlzcyI6Imh0dHA6Ly8xMjcuMC4wLjE6NTQzMjEvYXV0aC92MSIsInN1YiI6ImU0MTBkMTBmLTZlNTktNDBlNS1hMmRlLTY5NGE5MzVlNzJlZCIsImVtYWlsIjoiaGVsbG9AZXhhbXBsZS5jb20iLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7fSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTcxODU4MzU2NX1dLCJzZXNzaW9uX2lkIjoiMjRmOGFlMmMtYWM4Mi00NzdhLWIxMTMtZTkwNmRlNzFiMDIxIn0.5KrE1AL4koBJs5dvNQfThMV1HxV8nPP-GPU24aRL9xI",
+ "refresh_token": "mNUp4-LDuYq-kNG61t-2Xw",
+ "expires_in": 3600,
+ "expires_at": 1718587165,
+ "token_type": "bearer",
+ "user": {
+ "id": "11111111-1111-1111-1111-111111111111",
+ "app_metadata": {
+ "provider": "email",
+ "providers": [
+ "email"
+ ]
},
- provider='email',
- created_at=datetime.datetime(2024, 1, 1, 1, 0, 0, 0, tzinfo=TzInfo(UTC)),
- last_sign_in_at=datetime.datetime(2024, 1, 1, 1, 0, 0, 0, tzinfo=TzInfo(UTC)),
- updated_at=datetime.datetime(2024, 1, 1, 1, 0, 0, 0, tzinfo=TzInfo(UTC))
- )
- ],
- factors=None
- )
- session=None
+ "user_metadata": {},
+ "aud": "authenticated",
+ "confirmation_sent_at": null,
+ "recovery_sent_at": null,
+ "email_change_sent_at": null,
+ "new_email": null,
+ "invited_at": null,
+ "action_link": null,
+ "email": "hello@example.com",
+ "phone": "",
+ "created_at": "2024-06-17T00:19:25.760110Z",
+ "confirmed_at": null,
+ "email_confirmed_at": "2024-06-17T00:19:25.779181Z",
+ "phone_confirmed_at": null,
+ "last_sign_in_at": "2024-06-17T00:19:25.785489Z",
+ "role": "authenticated",
+ "updated_at": "2024-06-17T00:19:25.794650Z",
+ "identities": [
+ {
+ "id": "11111111-1111-1111-1111-111111111111",
+ "user_id": "11111111-1111-1111-1111-111111111111",
+ "identity_data": {
+ "email": "hello@example.com",
+ "sub": "11111111-1111-1111-1111-111111111111"
+ },
+ "provider": "email",
+ "created_at": "2024-06-17T00:19:25.774522Z",
+ "last_sign_in_at": "2024-06-17T00:19:25.774498Z",
+ "updated_at": "2024-06-17T00:19:25.774522Z"
+ }
+ ],
+ "factors": null
+ }
+ }
+ }
+ ```
+ - id: sign-up-phone
+ name: Sign up with a phone number and password (SMS)
+ isSpotlight: true
+ code: |
+ ```python
+ response = supabase.auth.sign_up(
+ credentials={
+ "phone": "123456789",
+ "password": "password",
+ }
+ )
+ ```
+ - id: sign-up-phone-whatsapp
+ name: Sign up with a phone number and password (whatsapp)
+ isSpotlight: true
+ description: |
+ The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature.
+ code: |
+ ```python
+ response = supabase.auth.sign_up(
+ credentials={
+ "phone": "123456789",
+ "password": "password",
+ "options": {"channel": "whatsapp"},
+ }
+ )
```
- id: sign-up-with-additional-user-metadata
name: Sign up with additional user metadata
code: |
- ```
- res = supabase.auth.sign_up(
- email= 'example@email.com',
- password= 'example-password',
- data= {
- first_name= 'John',
- age= 27,
- }
+ ```python
+ response = supabase.auth.sign_up(
+ credentials={
+ "email": "hello@example.com",
+ "password": "password",
+ "options": {"data": {"first_name": "John", "age": 27}},
+ }
)
```
- id: sign-up-with-redirect
@@ -144,11 +305,117 @@ functions:
description: |
- See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls) to add additional redirect URLs to your project.
code: |
+ ```python
+ response = supabase.auth.sign_up(
+ credentials={
+ "email": "hello1@example.com",
+ "password": "password",
+ "options": {
+ "email_redirect_to": "https://example.com/welcome",
+ },
+ }
+ )
```
- res = supabase.auth.sign_up(
- email= 'example@email.com',
- password= 'example-password',
- redirect_to= 'https://example.com/welcome'
+ - id: sign-in-anonymously
+ title: 'sign_in_anonymously()'
+ params:
+ - name: credentials
+ isOptional: false
+ type: SignInAnonymouslyCredentials
+ subContent:
+ - name: options
+ isOptional: true
+ type: object
+ subContent:
+ - name: data
+ isOptional: true
+ type: object
+ description: A custom data object to store the user's metadata. This maps to the `auth.users.raw_user_meta_data` column. The `data` should be a JSON object that includes user-specific info, such as their first and last name.
+ - name: captcha_token
+ isOptional: true
+ type: string
+ description: Verification token received when the user completes the captcha on the site.
+
+ notes: |
+ - Returns an anonymous user
+ - It is recommended to set up captcha for anonymous sign-ins to prevent abuse. You can pass in the captcha token in the `options` param.
+ examples:
+ - id: sign-in-anonymously
+ name: Create an anonymous user
+ isSpotlight: true
+ code: |
+ ```python
+ response = supabase.auth.sign_in_anonymously(
+ credentials={"options": {"captcha_token": ""}}
+ )
+ ```
+ response: |
+ ```json
+ {
+ "user": {
+ "id": "11111111-1111-1111-1111-111111111111",
+ "app_metadata": {},
+ "user_metadata": {},
+ "aud": "authenticated",
+ "confirmation_sent_at": null,
+ "recovery_sent_at": null,
+ "email_change_sent_at": null,
+ "new_email": null,
+ "invited_at": null,
+ "action_link": null,
+ "email": "",
+ "phone": "",
+ "created_at": "2024-06-23T22:35:47.518626Z",
+ "confirmed_at": null,
+ "email_confirmed_at": null,
+ "phone_confirmed_at": null,
+ "last_sign_in_at": "2024-06-23T22:35:47.520855Z",
+ "role": "authenticated",
+ "updated_at": "2024-06-23T22:35:47.522241Z",
+ "identities": [],
+ "factors": null
+ },
+ "session": {
+ "provider_token": null,
+ "provider_refresh_token": null,
+ "access_token": "",
+ "refresh_token": "",
+ "expires_in": 3600,
+ "expires_at": 1719185747,
+ "token_type": "bearer",
+ "user": {
+ "id": "11111111-1111-1111-1111-111111111111",
+ "app_metadata": {},
+ "user_metadata": {},
+ "aud": "authenticated",
+ "confirmation_sent_at": null,
+ "recovery_sent_at": null,
+ "email_change_sent_at": null,
+ "new_email": null,
+ "invited_at": null,
+ "action_link": null,
+ "email": "",
+ "phone": "",
+ "created_at": "2024-06-23T22:35:47.518626Z",
+ "confirmed_at": null,
+ "email_confirmed_at": null,
+ "phone_confirmed_at": null,
+ "last_sign_in_at": "2024-06-23T22:35:47.520855Z",
+ "role": "authenticated",
+ "updated_at": "2024-06-23T22:35:47.522241Z",
+ "identities": [],
+ "factors": null
+ }
+ }
+ }
+ ```
+ - id: sign-in-anonymously-with-user-metadata
+ name: Create an anonymous user with custom user metadata
+ isSpotlight: false
+ code: |
+ ```python
+ response = supabase.auth.sign_in_anonymously(
+ credentials={"options": {"data": {}}}
)
```
- id: sign-in-with-password
@@ -300,7 +567,7 @@ functions:
isSpotlight: true
code: |
```
- res = await supabase.auth.mfa.enroll({
+ res = supabase.auth.mfa.enroll({
"factor_type": "totp",
"friendly_name": "your_friendly_name"
})
@@ -316,7 +583,7 @@ functions:
isSpotlight: true
code: |
```
- res = await supabase.auth.mfa.challenge({
+ res = supabase.auth.mfa.challenge({
"factor_id": '34e770dd-9ff9-416c-87fa-43b31d7ef225'
})
```
@@ -330,7 +597,7 @@ functions:
isSpotlight: true
code: |
```
- res = await supabase.auth.mfa.verify({
+ res = supabase.auth.mfa.verify({
"factor_id": '34e770dd-9ff9-416c-87fa-43b31d7ef225',
"challenge_id": '4034ae6f-a8ce-4fb5-8ee5-69a5863a7c15',
"code": '123456'
@@ -347,7 +614,7 @@ functions:
isSpotlight: true
code: |
```
- res = await supabase.auth.mfa.challenge_and_verify({
+ res = supabase.auth.mfa.challenge_and_verify({
"factor_id": '34e770dd-9ff9-416c-87fa-43b31d7ef225',
"code": '123456'
})
@@ -360,7 +627,7 @@ functions:
isSpotlight: true
code: |
```
- res = await supabase.auth.mfa.unenroll({
+ res = supabase.auth.mfa.unenroll({
"factor_id": '34e770dd-9ff9-416c-87fa-43b31d7ef225',
})
```
@@ -376,7 +643,7 @@ functions:
isSpotlight: true
code: |
```
- res = await supabase.auth.mfa.get_authenticator_assurance_level()
+ res = supabase.auth.mfa.get_authenticator_assurance_level()
```
- id: get-user
title: 'get_user'
@@ -415,8 +682,7 @@ functions:
- `setSession()` takes in a refresh token and uses it to get a new session.
- The refresh token can only be used once to obtain a new session.
- [Refresh token rotation](/docs/reference/auth/config#refresh_token_rotation_enabled) is enabled by default on all projects to guard against replay attacks.
- - You can configure the [`REFRESH_TOKEN_REUSE_INTERVAL`](https://supabase.com/docs/reference/auth/config#refresh_token_reuse_interval) which provides a short window in which the same refresh token can be used multiple times in the event of concurrency or offline issues.
- - If you are using React Native, you will need to install a Buffer polyfill via a library such as [rn-nodeify](https://github.com/tradle/rn-nodeify) to properly use the library.
+ - You can configure the [`REFRESH_TOKEN_REUSE_INTERVAL`](/docs/reference/auth/config#refresh_token_reuse_interval) which provides a short window in which the same refresh token can be used multiple times in the event of concurrency or offline issues.
examples:
- id: set-session
name: Refresh the session
@@ -429,7 +695,6 @@ functions:
title: 'refresh_session()'
notes: |
- This method will refresh the session whether the current one is expired or not.
- - Both examples destructure `user` and `session` from `data`. This is not required; so `const { data, error } =` is also valid.
examples:
- id: refresh-session
name: Refresh session using the current session
@@ -440,14 +705,25 @@ functions:
- id: select
title: 'Fetch data: select()'
notes: |
- - By default, Supabase projects return a maximum of 1,000 rows. This setting can be changed in your project's [API settings](https://supabase.com/dashboard/project/_/settings/api). It's recommended that you keep it low to limit the payload size of accidental or malicious requests.
+ - By default, Supabase projects return a maximum of 1,000 rows. This setting can be changed in your project's [API settings](/dashboard/project/_/settings/api). It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data.
+ - `select()` can be combined with [Filters](/docs/reference/python/using-filters)
+ - `select()` can be combined with [Modifiers](/docs/reference/python/using-modifiers)
- `apikey` is a reserved keyword if you're using the [Supabase Platform](/docs/guides/platform) and [should be avoided as a column name](https://github.com/supabase/supabase/issues/5465).
+ params:
+ - name: columns
+ isOptional: true
+ type: string
+ description: The columns to retrieve, defaults to `*`.
+ - name: count
+ isOptional: true
+ type: CountMethod
+ description: The property to use to get the count of rows returned.
examples:
- id: getting-your-data
name: Getting your data
code: |
```python
- response = supabase.table('countries').select("*").execute()
+ response = supabase.table("countries").select("*").execute()
```
data:
sql: |
@@ -463,17 +739,30 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Afghanistan'},
- {'id': 2, 'name': 'Albania'},
- {'id': 3, 'name': 'Algeria'}],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Afghanistan"
+ },
+ {
+ "id": 2,
+ "name": "Albania"
+ },
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
- id: selecting-specific-columns
name: Selecting specific columns
code: |
```
- response = supabase.table('countries').select('name').execute()
+ response = supabase.table("countries").select("name").execute()
```
data:
sql: |
@@ -489,21 +778,29 @@ functions:
(3, 'Algeria');
```
response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Afghanistan"
+ },
+ {
+ "name": "Albania"
+ },
+ {
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
- APIResponse(data=[{'name': 'Afghanistan'},
- {'name': 'Albania'},
- {'name': 'Algeria'}],
- count=None)
- ```
- - id: query-foreign-tables
- name: Query foreign tables
+ - id: query-referenced-tables
+ name: Query referenced tables
description: |
If your database has foreign key relationships, you can query related tables too.
code: |
- ```
- response = supabase.table('countries')
- .select('name, cities(name)')
- .execute()
+ ```python
+ response = supabase.table("countries").select("name, cities(name)").execute()
```
data:
sql: |
@@ -529,18 +826,34 @@ functions:
(2, 1, 'Munich');
```
response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Germany",
+ "cities": [
+ {
+ "name": "Munich"
+ }
+ ]
+ },
+ {
+ "name": "Indonesia",
+ "cities": [
+ {
+ "name": "Bali"
+ }
+ ]
+ }
+ ],
+ "count": null
+ }
```
- APIResponse(data=[{'name': 'Germany', 'cities': [{'name': 'Munich'}]},
- {'name': 'Indonesia', 'cities': [{'name': 'Bali'}]}],
- count=None)
- ```
- - id: query-foreign-tables-through-a-join-table
- name: Query foreign tables through a join table
+ - id: query-referenced-tables-through-a-join-table
+ name: Query referenced tables through a join table
code: |
- ```
- response = supabase.table('users')
- .select('name, teams(name)')
- .execute()
+ ```python
+ response = supabase.table("users").select("name, teams(name)").execute()
```
data:
sql: |
@@ -582,12 +895,31 @@ functions:
(2, 2);
```
response: |
- ```
- APIResponse(data=[
- {'name': 'Kiran', 'teams': [{'name': 'Green'}, {'name': 'Blue'}]},
- {'name': 'Evan', 'teams': [{'name': 'Blue'}]}
- ],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Kiran",
+ "teams": [
+ {
+ "name": "Green"
+ },
+ {
+ "name": "Blue"
+ }
+ ]
+ },
+ {
+ "name": "Evan",
+ "teams": [
+ {
+ "name": "Blue"
+ }
+ ]
+ }
+ ],
+ "count": null
+ }
```
description: |
If you're in a situation where your tables are **NOT** directly
@@ -595,13 +927,15 @@ functions:
the `select()` method to query the related data. The join table needs
to have the foreign keys as part of its composite primary key.
hideCodeBlock: true
- - id: query-the-same-foreign-table-multiple-times
- name: Query the same foreign table multiple times
+ - id: query-the-same-referenced-table-multiple-times
+ name: Query the same referenced table multiple times
code: |
- ```
- response = supabase.table('messages')
- .select('content,from:sender_id(name),to:receiver_id(name)')
- .execute()
+ ```python
+ response = (
+ supabase.table("messages")
+ .select("content,from:sender_id(name),to:receiver_id(name)")
+ .execute()
+ )
```
data:
sql: |
@@ -628,26 +962,37 @@ functions:
(1, 2, '👋');
```
response: |
- ```
- APIResponse(data=[{'content': '👋',
- 'from': {'name': 'Kiran'},
- 'to': {'name': 'Evan'}}
- ],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "content": "👋",
+ "from": {
+ "name": "Kiran"
+ },
+ "to": {
+ "name": "Evan"
+ }
+ }
+ ],
+ "count": null
+ }
```
description: |
- If you need to query the same foreign table twice, use the name of the
+ If you need to query the same referenced table twice, use the name of the
joined column to identify which join to use. You can also give each
column an alias.
hideCodeBlock: true
- - id: filtering-through-foreign-tables
- name: Filtering through foreign tables
+ - id: filtering-through-referenced-tables
+ name: Filtering through referenced tables
code: |
- ```
- response = supabase.table('cities')
- .select('name, countries(*)')
- .eq('countries.name', 'Estonia')
- .execute()
+ ```python
+ response = (
+ supabase.table("cities")
+ .select("name, countries(*)")
+ .eq("countries.name", "Estonia")
+ .execute()
+ )
```
data:
sql: |
@@ -673,24 +1018,31 @@ functions:
(2, 1, 'Munich');
```
response: |
- ```
- APIResponse(data=[{'name': 'Bali', 'countries': None},
- {'name': 'Munich', 'countries': None}],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Bali",
+ "countries": null
+ },
+ {
+ "name": "Munich",
+ "countries": null
+ }
+ ],
+ "count": null
+ }
```
description: |
- NOT WORKING CURRENTLY
- If the filter on a foreign table's column is not satisfied, the foreign
+ If the filter on a referenced table's column is not satisfied, the referenced
table returns `[]` or `null` but the parent table is not filtered out.
If you want to filter out the parent table rows, use the `!inner` hint
hideCodeBlock: true
- - id: querying-foreign-table-with-count
- name: Querying foreign table with count
+ - id: querying-referenced-table-with-count
+ name: Querying referenced table with count
code: |
- ```
- response = supabase.table('countries')
- .select('*, cities(count)')
- .execute()
+ ```python
+ response = supabase.table("countries").select("*, cities(count)").execute()
```
data:
sql: |
@@ -717,10 +1069,21 @@ functions:
('Bristol', (select id from country));
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Germany', 'cities': [{'count': 1}]},
- {'id': 2, 'name': 'Indonesia', 'cities': [{'count': 1}]}],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": "c31e7151-5a6f-453c-915b-caf31ec9a0a0",
+ "name": "united kingdom",
+ "cities": [
+ {
+ "count": 4
+ }
+ ]
+ }
+ ],
+ "count": null
+ }
```
description: |
You can get the number of rows in a related table by using the
@@ -729,10 +1092,8 @@ functions:
- id: querying-with-count-option
name: Querying with count option
code: |
- ```
- response = supabase.table('countries')
- .select('*', count='exact')
- .execute()
+ ```python
+ response = supabase.table("countries").select("*", count="exact").execute()
```
data:
sql: |
@@ -748,10 +1109,24 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Germany'},
- {'id': 2, 'name': 'Indonesia'}],
- count=2)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Afghanistan"
+ },
+ {
+ "id": 2,
+ "name": "Albania"
+ },
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": 3
+ }
```
description: |
You can get the number of rows by using the
@@ -760,10 +1135,8 @@ functions:
- id: querying-json-data
name: Querying JSON data
code: |
- ```
- response = supabase.table('users')
- .select('id, name, address->city')
- .execute()
+ ```python
+ response = supabase.table("users").select("id, name, address->city").execute()
```
data:
sql: |
@@ -781,8 +1154,17 @@ functions:
(1, 'Avdotya', '{"city":"Saint Petersburg"}');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Avdotya', 'city': 'Saint Petersburg'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Avdotya",
+ "city": "Saint Petersburg"
+ }
+ ],
+ "count": null
+ }
```
description: |
You can select and filter data inside of
@@ -790,17 +1172,122 @@ functions:
[operators](/docs/guides/database/json#query-the-jsonb-data) for
querying JSON data.
hideCodeBlock: true
+ - id: querying-referenced-table-with-inner-join
+ name: Querying referenced table with inner join
+ code: |
+ ```python
+ response = (
+ supabase.table("cities")
+ .select("name, countries!inner(name)")
+ .eq("countries.name", "Indonesia")
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+ create table
+ cities (
+ id int8 primary key,
+ country_id int8 not null references countries,
+ name text
+ );
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Germany'),
+ (2, 'Indonesia');
+ insert into
+ cities (id, country_id, name)
+ values
+ (1, 2, 'Bali'),
+ (2, 1, 'Munich');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Bali",
+ "countries": {
+ "name": "Indonesia"
+ }
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ If you don't want to return the referenced table contents, you can leave the parenthesis empty.
+ Like `.select('name, countries!inner()')`.
+ hideCodeBlock: true
+ - id: switching-schemas-per-query
+ name: Switching schemas per query
+ code: |
+ ```python
+ response = supabase.schema("myschema").table("mytable").select("*").execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create schema myschema;
+
+ create table myschema.mytable (
+ id uuid primary key default gen_random_uuid(),
+ data text
+ );
+
+ insert into myschema.mytable (data) values ('mydata');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": "b1a8c0b5-bdf0-46f1-95a5-f0fb9cb2f410",
+ "data": "mydata"
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ In addition to setting the schema during initialization, you can also switch schemas on a per-query basis.
+ Make sure you've set up your [database privileges and API settings](/docs/guides/api/using-custom-schemas).
+ hideCodeBlock: true
- id: insert
title: 'Create data: insert()'
+ params:
+ - name: json
+ isOptional: false
+ type: dict, list
+ description: The values to insert. Pass an dict to insert a single row or an list to insert multiple rows.
+ - name: count
+ isOptional: true
+ type: CountMethod
+ description: The property to use to get the count of rows returned.
+ - name: returning
+ isOptional: true
+ type: ReturnMethod
+ description: Either 'minimal' or 'representation'. Defaults to 'representation'.
+ - name: default_to_null
+ isOptional: true
+ type: bool
+ description: Make missing fields default to `null`. Otherwise, use the default value for the column. Only applies for bulk inserts.
examples:
- id: create-a-record
name: Create a record
code: |
```python
- data, count = supabase.table('countries')
- .insert({"id": 1, "name": "Denmark"})
- .execute()
+ response = (
+ supabase.table("countries")
+ .insert({"id": 1, "name": "Denmark"})
+ .execute()
+ )
```
data:
sql: |
@@ -809,24 +1296,100 @@ functions:
countries (id int8 primary key, name text);
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Denmark'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Denmark"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
+ - id: bulk-create
+ name: Bulk create
+ code: |
+ ```python
+ try:
+ response = supabase.table("countries")
+ .insert([
+ { "id": 1, "name": "Nepal" },
+ { "id": 1, "name": "Vietnam" },
+ ])
+ .execute()
+ return response
+ except Exception as exception:
+ return exception
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+ ```
+ response: |
+ ```json
+ {
+ "_raw_error": {
+ "code": "23505",
+ "details": "Key (id)=(1) already exists.",
+ "hint": null,
+ "message": "duplicate key value violates unique constraint \"countries_pkey\""
+ },
+ "message": "duplicate key value violates unique constraint \"countries_pkey\"",
+ "code": "23505",
+ "hint": null,
+ "details": "Key (id)=(1) already exists."
+ }
+ ```
+ description: |
+ A bulk create operation is handled in a single transaction.
+ If any of the inserts fail, none of the rows are inserted.
+ hideCodeBlock: true
- id: update
title: 'Modify data: update()'
notes: |
- `update()` should always be combined with [Filters](/docs/reference/python/using-filters) to target the item(s) you wish to update.
+ params:
+ - name: json
+ isOptional: false
+ type: dict, list
+ description: The values to insert. Pass an dict to insert a single row or an list to insert multiple rows.
+ - name: count
+ isOptional: true
+ type: CountMethod
+ description: The property to use to get the count of rows returned.
+ - name: returning
+ isOptional: true
+ type: ReturnMethod
+ description: Either 'minimal' or 'representation'. Defaults to 'representation'.
+ - name: ignore_duplicates
+ isOptional: true
+ type: bool
+ description: Whether duplicate rows should be ignored.
+ - name: on_conflict
+ isOptional: true
+ type: bool
+ description: Specified columns to be made to work with UNIQUE constraint.
+ - name: default_to_null
+ isOptional: true
+ type: bool
+ description: |
+ Make missing fields default to `null`. Otherwise, use the default value for the column. This only applies when inserting new rows, not when merging with existing rows under `ignore_duplicates: false`. This also only applies when doing bulk upserts.
examples:
- id: updating-your-data
name: Updating your data
code: |
```python
- data, count = supabase.table('countries')
- .update({'name': 'Australia'})
- .eq('id', 1)
- .execute()
+ response = (
+ supabase.table("countries")
+ .update({"name": "Australia"})
+ .eq("id", 1)
+ .execute()
+ )
```
data:
sql: |
@@ -840,23 +1403,103 @@ functions:
(1, 'Denmark');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Australia'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Australia"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
+ - id: updating-json-data
+ name: Updating JSON data
+ code: |
+ ```python
+ response = (
+ supabase.table("users")
+ .update({"address": {"street": "Melrose Place", "postcode": 90210}})
+ .eq("address->postcode", 90210)
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ users (
+ id int8 primary key,
+ name text,
+ address jsonb
+ );
+
+ insert into
+ users (id, name, address)
+ values
+ (1, 'Michael', '{ "postcode": 90210 }');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Michael",
+ "address": {
+ "street": "Melrose Place",
+ "postcode": 90210
+ }
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ Postgres offers some [operators](/docs/guides/database/json#query-the-jsonb-data) for working with JSON data. Currently, it is only possible to update the entire JSON document.
+ hideCodeBlock: true
- id: upsert
title: 'Upsert data: upsert()'
notes: |
- Primary keys must be included in the `values` dict to use upsert.
+ params:
+ - name: json
+ isOptional: false
+ type: dict, list
+ description: The values to insert. Pass an dict to insert a single row or an list to insert multiple rows.
+ - name: count
+ isOptional: true
+ type: CountMethod
+ description: The property to use to get the count of rows returned.
+ - name: returning
+ isOptional: true
+ type: ReturnMethod
+ description: Either 'minimal' or 'representation'. Defaults to 'representation'.
+ - name: ignore_duplicates
+ isOptional: true
+ type: bool
+ description: Whether duplicate rows should be ignored.
+ - name: on_conflict
+ isOptional: true
+ type: bool
+ description: Specified columns to be made to work with UNIQUE constraint.
+ - name: default_to_null
+ isOptional: true
+ type: bool
+ description: Make missing fields default to `null`. Otherwise, use the default value for the column. Only applies for bulk inserts.
examples:
- id: upsert-your-data
name: Upsert your data
code: |
```python
- data, count = supabase.table('countries')
- .upsert({'id': 1, 'name': 'Australia'})
- .execute()
+ response = (
+ supabase.table("countries")
+ .upsert({"id": 1, "name": "Australia"})
+ .execute()
+ )
```
data:
sql: |
@@ -870,8 +1513,16 @@ functions:
(1, 'Afghanistan');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Australia'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Australia"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
@@ -879,9 +1530,11 @@ functions:
name: Bulk Upsert your data
code: |
```python
- data, count = supabase.table('countries')
- .upsert([{'id': 1, 'name': 'Albania'}, {'id': 2, 'name': 'Algeria'}])
- .execute()
+ response = (
+ supabase.table("countries")
+ .upsert([{"id": 1, "name": "Albania"}, {"id": 2, "name": "Algeria"}])
+ .execute()
+ )
```
data:
sql: |
@@ -895,9 +1548,68 @@ functions:
(1, 'Afghanistan');
```
response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Albania"
+ },
+ {
+ "id": 2,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
- APIResponse(data=[{'id': 1, 'name': 'Albania'}, {'id': 2, 'name': 'Algeria'}], count=None)
+ hideCodeBlock: true
+ - id: upserting-into-tables-with-constraints
+ name: Upserting into tables with constraints
+ code: |
+ ```python
+ response = (
+ supabase.table("users")
+ .upsert(
+ {"id": 42, "handle": "saoirse", "display_name": "Saoirse"},
+ on_conflict="handle",
+ )
+ .execute()
+ )
```
+ data:
+ sql: |
+ ```sql
+ create table
+ users (
+ id int8 generated by default as identity primary key,
+ handle text not null unique,
+ display_name text
+ );
+
+ insert into
+ users (id, handle, display_name)
+ values
+ (1, 'saoirse', null);
+ ```
+ response: |
+ ```json
+ {
+ "_raw_error": {
+ "code": "23505",
+ "details": "Key (handle)=(saoirse) already exists.",
+ "hint": null,
+ "message": "duplicate key value violates unique constraint \"users_handle_key\""
+ },
+ "message": "duplicate key value violates unique constraint \"users_handle_key\"",
+ "code": "23505",
+ "hint": null,
+ "details": "Key (handle)=(saoirse) already exists."
+ }
+ ```
+ description: |
+ In the following query, `upsert()` implicitly uses the `id`(primary key) column to determine conflicts. If there is no existing row with the same `id`, `upsert()` inserts a new row, which will fail in this case as there is already a row with `handle` `"saoirse"`.
+ Using the `on_conflict` option, you can instruct `upsert()` to use another column with a unique constraint to determine conflicts.
hideCodeBlock: true
- id: delete
@@ -909,15 +1621,22 @@ functions:
rows visible through `SELECT` policies are deleted. Note that by default
no rows are visible, so you need at least one `SELECT`/`ALL` policy that
makes the rows visible.
+ - When using `delete().in_()`, specify an array of values to target multiple rows with a single query. This is particularly useful for batch deleting entries that share common criteria, such as deleting users by their IDs. Ensure that the array you provide accurately represents all records you intend to delete to avoid unintended data removal.
+ params:
+ - name: count
+ isOptional: true
+ type: CountMethod
+ description: The property to use to get the count of rows returned.
+ - name: returning
+ isOptional: true
+ type: ReturnMethod
+ description: Either 'minimal' or 'representation'. Defaults to 'representation'.
examples:
- id: delete-records
name: Delete records
code: |
```python
- data, count = supabase.table('countries')
- .delete()
- .eq('id', 1)
- .execute()
+ response = supabase.table('countries').delete().eq('id', 1).execute()
```
data:
sql: |
@@ -930,12 +1649,221 @@ functions:
values
(1, 'Spain');
```
- response: |
+ response: |
+ ```
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Spain"
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: delete-multiple-records
+ name: Delete multiple records
+ code: |
+ ```python
+ response = supabase.table("countries").delete().in_("id", [1, 2, 3]).execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Spain'), (2, 'France'), (3, 'Germany');
```
- APIResponse(data=[{'id': 1, 'name': 'United States'], count=None)
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Spain"
+ },
+ {
+ "id": 2,
+ "name": "France"
+ },
+ {
+ "id": 3,
+ "name": "Germany"
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: false
+ isSpotlight: false
+
+ - id: rpc
+ title: 'Postgres functions: rpc()'
+ description: |
+ You can call Postgres functions as _Remote Procedure Calls_, logic in your database that you can execute from anywhere.
+ Functions are useful when the logic rarely changes—like for password resets and updates.
+
+ ```sql
+ create or replace function hello_world() returns text as $$
+ select 'Hello world';
+ $$ language sql;
+ ```
+ params:
+ - name: fn
+ isOptional: false
+ type: callable
+ description: The stored procedure call to be executed.
+ - name: params
+ isOptional: true
+ type: dict of any
+ description: Parameters passed into the stored procedure call.
+ - name: get
+ isOptional: true
+ type: dict of any
+ description: When set to `true`, `data` will not be returned. Useful if you only need the count.
+ - name: head
+ isOptional: true
+ type: dict of any
+ description: When set to `true`, the function will be called with read-only access mode.
+ - name: count
+ isOptional: true
+ type: CountMethod
+ description: |
+ Count algorithm to use to count rows returned by the function. Only applicable for [set-returning functions](https://www.postgresql.org/docs/current/functions-srf.html). `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the hood. `"planned"`: Approximated but fast count algorithm. Uses the Postgres statistics under the hood. `"estimated"`: Uses exact count for low numbers and planned count for high numbers.
+ examples:
+ - id: call-a-postgres-function-without-arguments
+ name: Call a Postgres function without arguments
+ code: |
+ ```python
+ response = supabase.rpc("hello_world").execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create function hello_world() returns text as $$
+ select 'Hello world';
+ $$ language sql;
```
- hideCodeBlock: true
- isSpotlight: true
+ response: |
+ ```json
+ {
+ "data": "Hello world",
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: call-a-postgres-function-with-arguments
+ name: Call a Postgres function with arguments
+ code: |
+ ```python
+ response = supabase.rpc("echo", { "say": "👋" }).execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create function echo(say text) returns text as $$
+ select say;
+ $$ language sql;
+ ```
+ response: |
+ ```json
+ {
+ "data": "👋",
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ - id: bulk-processing
+ name: Bulk processing
+ code: |
+ ```python
+ response = supabase.rpc("add_one_each", {"arr": [1, 2, 3]}).execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create function add_one_each(arr int[]) returns int[] as $$
+ select array_agg(n + 1) from unnest(arr) as n;
+ $$ language sql;
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ 2,
+ 3,
+ 4
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ You can process large payloads by passing in an array as an argument.
+ hideCodeBlock: true
+ - id: call-a-postgres-function-with-filters
+ name: Call a Postgres function with filters
+ code: |
+ ```python
+ response = supabase.rpc("list_stored_countries").eq("id", 1).single().execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'France'),
+ (2, 'United Kingdom');
+
+ create function list_stored_countries() returns setof countries as $$
+ select * from countries;
+ $$ language sql;
+ ```
+ response: |
+ ```json
+ {
+ "data": {
+ "id": 1,
+ "name": "France"
+ },
+ "count": null
+ }
+ ```
+ description: |
+ Postgres functions that return tables can also be combined with [Filters](/docs/reference/javascript/using-filters) and [Modifiers](/docs/reference/javascript/using-modifiers).
+ hideCodeBlock: true
+ - id: call-a-read-only-postgres-function
+ name: Call a read-only Postgres function
+ code: |
+ ```python
+ response = supabase.rpc('hello_world', get=True).execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create function hello_world() returns text as $$
+ select 'Hello world';
+ $$ language sql;
+ ```
+ response: |
+ ```json
+ {
+ "data": "Hello world",
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+
- id: using-filters
title: Using Filters
@@ -955,17 +1883,44 @@ functions:
code: |
```python
# Correct
- data, count = supabase.from('cities')
- .select('name, country_id')
- .eq('name', 'The Shire')
- .execute()
+ response = (
+ supabase.table("cities")
+ .select("name, country_id")
+ .eq("name", "Bali")
+ .execute()
+ )
# Incorrect
- data, count = supabase.table('cities')
- .eq('name', 'The Shire')
- .select('name, country_id')
- .execute()
+ response = (
+ supabase.table("cities")
+ .eq("name", "Bali")
+ .select("name, country_id")
+ .execute()
+ )
```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+ create table
+ cities (
+ id int8 primary key,
+ country_id int8 not null references countries,
+ name text
+ );
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Germany'),
+ (2, 'Indonesia');
+ insert into
+ cities (id, country_id, name)
+ values
+ (1, 2, 'Bali'),
+ (2, 1, 'Munich');
+ ```
- id: chaining-filters
name: Chaining
description: |
@@ -973,11 +1928,49 @@ functions:
to query cities with population between 1,000 and 10,000.
code: |
```python
- data, count = supabase.table('cities')
- .select('name, country_id')
- .gte('population', 1000)
- .lt('population', 10000)
- .execute()
+ response = (
+ supabase.table("cities")
+ .select("name, country_id")
+ .gte("population", 1000)
+ .lt("population", 10000)
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+ create table
+ cities (
+ id int8 primary key,
+ country_id int8 not null references countries,
+ name text,
+ population int8
+ );
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Germany'),
+ (2, 'Indonesia');
+ insert into
+ cities (id, country_id, name, population)
+ values
+ (1, 2, 'Bali', 9980),
+ (2, 1, 'Munich', 250000);
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Bali",
+ "country_id": 2
+ }
+ ],
+ "count": null
+ }
```
- id: conditional-chaining
name: Conditional chaining
@@ -989,27 +1982,65 @@ functions:
filterPopLow = 1000
filterPopHigh = 10000
- query = supabase.from('cities').select('name, country_id')
+ query = supabase.table("cities").select("name, country_id")
if filterByName:
- query = query.eq('name', filterByName)
+ query = query.eq("name", filterByName)
if filterPopLow:
- query = query.gte('population', filterPopLow)
+ query = query.gte("population", filterPopLow)
if filterPopHigh:
- query = query.lt('population', filterPopHigh)
+ query = query.lt("population", filterPopHigh)
response = query.execute()
```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+ create table
+ cities (
+ id int8 primary key,
+ country_id int8 not null references countries,
+ name text,
+ population int8
+ );
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Germany'),
+ (2, 'Indonesia');
+ insert into
+ cities (id, country_id, name, population)
+ values
+ (1, 2, 'Bali', 9980),
+ (2, 1, 'Munich', 250000);
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Bali",
+ "country_id": 2
+ }
+ ],
+ "count": null
+ }
+ ```
- id: filter-by-value-within-json-column
name: Filter by values within JSON column
code: |
```python
- data, count = supabase.table('users')
- .select('*')
- .eq('address->postcode', 90210)
- .execute()
+ response = (
+ supabase.table("users")
+ .select("*")
+ .eq("address->postcode", 90210)
+ .execute()
+ )
```
data:
sql: |
@@ -1028,17 +2059,30 @@ functions:
(2, 'Jane', null);
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Michael', 'address': {'postcode': 90210}}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Michael",
+ "address": {
+ "postcode": 90210
+ }
+ }
+ ],
+ "count": null
+ }
```
- id: filter-foreign-tables
name: Filter Foreign Tables
code: |
```python
- data, count = supabase.table('countries')
- .select('name, cities!inner(name)')
- .eq('cities.name', 'Bali')
- .execute()
+ response = (
+ supabase.table("countries")
+ .select("name, cities!inner(name)")
+ .eq("cities.name", "Bali")
+ .execute()
+ )
```
data:
sql: |
@@ -1064,8 +2108,20 @@ functions:
(2, 1, 'Munich');
```
response: |
- ```
- APIResponse(data=[{'name': 'Indonesia', 'cities': [{'name': 'Bali'}]}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Indonesia",
+ "cities": [
+ {
+ "name": "Bali"
+ }
+ ]
+ }
+ ],
+ "count": null
+ }
```
description: |
You can filter on foreign tables in your `select()` query using dot
@@ -1073,46 +2129,23 @@ functions:
- id: eq
title: eq()
+ description: |
+ Match only rows where `column` is equal to `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: value
+ isOptional: false
+ type: any
+ description: The value to filter by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .eq('name', 'Albania')
- .execute()
- ```
- data:
- sql: |
- ```sql
- create table
- countries (id int8 primary key, name text);
-
- insert into
- countries (id, name)
- values
- (1, 'Afghanistan'),
- (2, 'Albania'),
- (3, 'Algeria');
- ```
- response: |
- ```
- APIResponse(data=[{'id': 2, 'name': 'Albania'}], count=None)
- ```
- hideCodeBlock: true
- isSpotlight: true
- - id: neq
- title: neq()
- examples:
- - id: with-select
- name: With `select()`
- code: |
- ```python
- data, count = supabase.table('countries')
- .select('*')
- .neq('name', 'Albania')
- .execute()
+ response = supabase.table("countries").select("*").eq("name", "Albania").execute()
```
data:
sql: |
@@ -1128,24 +2161,89 @@ functions:
(3, 'Algeria');
```
response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "name": "Albania"
+ }
+ ],
+ "count": null
+ }
```
- APIResponse(data=[{'id': 1, 'name': 'Afghanistan'},
- {'id': 3, 'name': 'Algeria'}],
- count=None)
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: neq
+ title: neq()
+ description: |
+ Match only rows where `column` is not equal to `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: value
+ isOptional: false
+ type: any
+ description: The value to filter by
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = supabase.table("countries").select("*").neq("name", "Albania").execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Afghanistan"
+ },
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: gt
title: gt()
+ description: |
+ Match only rows where `column` is greather than `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: value
+ isOptional: false
+ type: any
+ description: The value to filter by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .gt('id', 2)
- .execute()
+ response = supabase.table("countries").select("*").gt("id", 2).execute()
```
data:
sql: |
@@ -1161,8 +2259,16 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 3, 'name': 'Algeria'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
@@ -1171,15 +2277,23 @@ functions:
to add double quotes e.g. `.gt('"order"', 2)`
- id: gte
title: gte()
+ description: |
+ Match only rows where `column` is greater than or equal to `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: value
+ isOptional: false
+ type: any
+ description: The value to filter by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .gte('id', 2)
- .execute()
+ response = supabase.table("countries").select("*").gte("id", 2).execute()
```
data:
sql: |
@@ -1195,24 +2309,42 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 2, 'name': 'Albania'},
- {'id': 3, 'name': 'Algeria'}],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "name": "Albania"
+ },
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: lt
title: lt()
+ description: |
+ Match only rows where `column` is less than `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: value
+ isOptional: false
+ type: any
+ description: The value to filter by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .lt('id', 2)
- .execute()
+ response = supabase.table("countries").select("*").lt("id", 2).execute()
```
data:
sql: |
@@ -1228,22 +2360,38 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Afghanistan'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Afghanistan"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: lte
title: lte()
+ description: |
+ Match only rows where `column` is less than or equal to `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: value
+ isOptional: false
+ type: any
+ description: The value to filter by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .lte('id', 2)
- .execute()
+ response = supabase.table("countries").select("*").lte("id", 2).execute()
```
data:
sql: |
@@ -1259,24 +2407,42 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Afghanistan'},
- {'id': 2, 'name': 'Albania'}],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Afghanistan"
+ },
+ {
+ "id": 2,
+ "name": "Albania"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: like
title: like()
+ description: |
+ Match only rows where `column` matches `pattern` case-sensitively.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The name of the column to apply a filter on
+ - name: pattern
+ isOptional: false
+ type: string
+ description: The pattern to match by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .like('name', '%Alba%')
- .execute()
+ response = supabase.table("countries").select("*").like("name", "%Alba%").execute()
```
data:
sql: |
@@ -1292,22 +2458,38 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 2, 'name': 'Albania'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "name": "Albania"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: ilike
title: ilike()
+ description: |
+ Match only rows where `column` matches `pattern` case-insensitively.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The name of the column to apply a filter on
+ - name: pattern
+ isOptional: false
+ type: string
+ description: The pattern to match by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .ilike('name', '%alba%')
- .execute()
+ response = supabase.table("countries").select("*").ilike("name", "%alba%").execute()
```
data:
sql: |
@@ -1323,22 +2505,38 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 2, 'name': 'Albania'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "name": "Albania"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: is
title: is_()
+ description: |
+ Match only rows where `column` IS `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The name of the column to apply a filter on
+ - name: value
+ isOptional: false
+ type: null | boolean
+ description: The value to match by
examples:
- id: checking-nullness
name: Checking for nullness, True or False
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .is_('name', 'null')
- .execute()
+ response = supabase.table("countries").select("*").is_("name", "null").execute()
```
data:
sql: |
@@ -1353,8 +2551,16 @@ functions:
(2, null);
```
response: |
- ```
- APIResponse(data=[{'id': 2, 'name': None}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "name": null
+ }
+ ],
+ "count": null
+ }
```
description: |
Using the `eq()` filter doesn't work when filtering for `null`. Instead, you need to use `is_()`.
@@ -1366,15 +2572,28 @@ functions:
isSpotlight: true
- id: in
title: in_()
+ description: |
+ Match only rows where `column` is included in the `values` array.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: values
+ isOptional: false
+ type: array
+ description: The values to filter by
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .in_('name', ['Albania', 'Algeria'])
+ response = (
+ supabase.table("countries")
+ .select("*")
+ .in_("name", ["Albania", "Algeria"])
.execute()
+ )
```
data:
sql: |
@@ -1390,24 +2609,47 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 2, 'name': 'Albania'},
- {'id': 3, 'name': 'Algeria'}],
- count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "name": "Albania"
+ },
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: contains
title: contains()
+ description: |
+ Only relevant for jsonb, array, and range columns. Match only rows where `column` contains every element appearing in `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: values
+ isOptional: false
+ type: object
+ description: The jsonb, array, or range value to filter with
examples:
- id: on-array-columns
name: On array columns
code: |
```python
- data, count = supabase.table('issues')
- .select('*')
- .contains('tags', ['is:open', 'priority:low'])
+ response = (
+ supabase.table("issues")
+ .select("*")
+ .contains("tags", ["is:open", "priority:low"])
.execute()
+ )
```
data:
sql: |
@@ -1425,8 +2667,21 @@ functions:
(2, 'Use better names', array['is:open', 'severity:low', 'priority:medium']);
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'title': 'Cache invalidation is not working', 'tags': ['is:open', 'severity:high', 'priority:low']}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "title": "Cache invalidation is not working",
+ "tags": [
+ "is:open",
+ "severity:high",
+ "priority:low"
+ ]
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
@@ -1434,10 +2689,12 @@ functions:
name: On range columns
code: |
```python
- data, count = supabase.table('reservations')
- .select('*')
- .contains('during', '[2000-01-01 13:00, 2000-01-01 13:30)')
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .contains("during", "[2000-01-01 13:00, 2000-01-01 13:30)")
.execute()
+ )
```
data:
sql: |
@@ -1456,8 +2713,17 @@ functions:
(2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'room_name': 'Emerald', 'during': '["2000-01-01 13:00:00","2000-01-01 15:00:00")'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "room_name": "Emerald",
+ "during": "[\"2000-01-01 13:00:00\",\"2000-01-01 15:00:00\")"
+ }
+ ],
+ "count": null
+ }
```
description: |
Postgres supports a number of [range
@@ -1469,10 +2735,12 @@ functions:
name: On `jsonb` columns
code: |
```python
- data, count = supabase.table('users')
- .select('*')
- .contains('address', {'postcode': 90210})
+ response = (
+ supabase.table("users")
+ .select("*")
+ .contains("address", {"postcode": 90210})
.execute()
+ )
```
data:
sql: |
@@ -1491,21 +2759,46 @@ functions:
(2, 'Jane', '{}');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Michael', 'address': {'postcode': 90210}}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Michael",
+ "address": {
+ "street": "Melrose Place",
+ "postcode": 90210
+ }
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
- id: contained-by
title: contained_by()
+ description: |
+ Only relevant for jsonb, array, and range columns. Match only rows where every element appearing in `column` is contained by `value`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The jsonb, array, or range column to filter on
+ - name: value
+ isOptional: false
+ type: object
+ description: The jsonb, array, or range value to filter with
examples:
- id: on-array-columns
name: On array columns
code: |
```python
- data, count = supabase.table('classes')
- .select('name')
- .contained_by('days', ['monday', 'tuesday', 'wednesday', 'friday'])
- .execute()
+ response = (
+ supabase.table("classes")
+ .select("name")
+ .contained_by("days", ["monday", "tuesday", "wednesday", "friday"])
+ .execute()
+ )
```
data:
sql: |
@@ -1524,8 +2817,15 @@ functions:
(2, 'History', array['monday', 'wednesday', 'thursday']);
```
response: |
- ```
- APIResponse(data=[{'name': 'Chemistry'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Chemistry"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
@@ -1533,10 +2833,12 @@ functions:
name: On range columns
code: |
```python
- data, count = supabase.table('reservations')
- .select('*')
- .contained_by('during', '[2000-01-01 00:00, 2000-01-01 23:59)')
- .execute()
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .contained_by("during", "[2000-01-01 00:00, 2000-01-01 23:59)")
+ .execute()
+ )
```
data:
sql: |
@@ -1555,8 +2857,17 @@ functions:
(2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'room_name': 'Emerald', 'during': '["2000-01-01 13:00:00","2000-01-01 15:00:00")'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "room_name": "Emerald",
+ "during": "[\"2000-01-01 13:00:00\",\"2000-01-01 15:00:00\")"
+ }
+ ],
+ "count": null
+ }
```
description: |
Postgres supports a number of [range
@@ -1568,10 +2879,12 @@ functions:
name: On `jsonb` columns
code: |
```python
- data, count = supabase.table('users')
- .select('name')
- .contained_by('address', {})
+ response = (
+ supabase.table("users")
+ .select("name")
+ .contained_by("address", {})
.execute()
+ )
```
data:
sql: |
@@ -1590,21 +2903,554 @@ functions:
(2, 'Jane', '{}');
```
response: |
- ```
- APIResponse(data=[{'name': 'Jane'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Jane"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
- - id: match
- title: match()
+ - id: range-gt
+ title: range_gt()
+ description: |
+ Only relevant for range columns. Match only rows where every element in `column` is greater than any element in `range`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The range column to filter on
+ - name: range
+ isOptional: false
+ type: array
+ description: The range to filter with
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .match({'id': 2, 'name': 'Albania'})
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .range_gt("during", ["2000-01-02 08:00", "2000-01-02 09:00"])
.execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ reservations (
+ id int8 primary key,
+ room_name text,
+ during tsrange
+ );
+
+ insert into
+ reservations (id, room_name, during)
+ values
+ (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),
+ (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "room_name": "Topaz",
+ "during": "[\"2000-01-02 09:00:00\",\"2000-01-02 10:00:00\")"
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ Postgres supports a number of [range types](https://www.postgresql.org/docs/current/rangetypes.html). You can filter on range columns using the string representation of range values.
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: range-gte
+ title: range_gte()
+ description: |
+ Only relevant for range columns. Match only rows where every element in `column` is either contained in `range` or greater than any element in `range`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The range column to filter on
+ - name: range
+ isOptional: false
+ type: string
+ description: The range to filter with
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .range_gte("during", ["2000-01-02 08:30", "2000-01-02 09:30"])
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ reservations (
+ id int8 primary key,
+ room_name text,
+ during tsrange
+ );
+
+ insert into
+ reservations (id, room_name, during)
+ values
+ (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),
+ (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "room_name": "Topaz",
+ "during": "[\"2000-01-02 09:00:00\",\"2000-01-02 10:00:00\")"
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ Postgres supports a number of [range types](https://www.postgresql.org/docs/current/rangetypes.html). You can filter on range columns using the string representation of range values.
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: range-lt
+ title: range_lt()
+ description: |
+ Only relevant for range columns. Match only rows where every element in `column` is less than any element in `range`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The range column to filter on
+ - name: range
+ isOptional: false
+ type: array
+ description: The range to filter with
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .range_lt("during", ["2000-01-01 15:00", "2000-01-01 16:00"])
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ reservations (
+ id int8 primary key,
+ room_name text,
+ during tsrange
+ );
+
+ insert into
+ reservations (id, room_name, during)
+ values
+ (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),
+ (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "room_name": "Emerald",
+ "during": "[\"2000-01-01 13:00:00\",\"2000-01-01 15:00:00\")"
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ Postgres supports a number of [range types](https://www.postgresql.org/docs/current/rangetypes.html). You can filter on range columns using the string representation of range values.
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: range-lte
+ title: range_lte()
+ description: |
+ Only relevant for range columns. Match only rows where every element in `column` is less than any element in `range`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The range column to filter on
+ - name: range
+ isOptional: false
+ type: array
+ description: The range to filter with
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .range_lte("during", ["2000-01-01 14:00", "2000-01-01 16:00"])
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ reservations (
+ id int8 primary key,
+ room_name text,
+ during tsrange
+ );
+
+ insert into
+ reservations (id, room_name, during)
+ values
+ (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),
+ (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "room_name": "Emerald",
+ "during": "[\"2000-01-01 13:00:00\",\"2000-01-01 15:00:00\")"
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ Postgres supports a number of [range types](https://www.postgresql.org/docs/current/rangetypes.html). You can filter on range columns using the string representation of range values.
+ hideCodeBlock: true
+ isSpotlight: true
+
+ - id: range-adjacent
+ title: range_adjacent()
+ description: |
+ Only relevant for range columns. Match only rows where `column` is mutually exclusive to `range` and there can be no element between the two ranges.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The range column to filter on
+ - name: range
+ isOptional: false
+ type: array
+ description: The range to filter with
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .range_adjacent("during", ["2000-01-01 12:00", "2000-01-01 13:00"])
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ reservations (
+ id int8 primary key,
+ room_name text,
+ during tsrange
+ );
+
+ insert into
+ reservations (id, room_name, during)
+ values
+ (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),
+ (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "room_name": "Emerald",
+ "during": "[\"2000-01-01 13:00:00\",\"2000-01-01 15:00:00\")"
+ }
+ ],
+ "count": null
+ }
+ ```
+ description: |
+ Postgres supports a number of [range types](https://www.postgresql.org/docs/current/rangetypes.html). You can filter on range columns using the string representation of range values.
+ hideCodeBlock: true
+ isSpotlight: true
+
+ - id: overlaps
+ title: overlaps()
+ description: |
+ Only relevant for array and range columns. Match only rows where `column` and `value` have an element in common.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The array or range column to filter on
+ - name: value
+ isOptional: false
+ type: Iterable[Any]
+ description: The array or range value to filter with
+ examples:
+ - id: on-array-columns
+ name: On array columns
+ code: |
+ ```python
+ response = (
+ supabase.table("issues")
+ .select("title")
+ .overlaps("tags", ["is:closed", "severity:high"])
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ issues (
+ id int8 primary key,
+ title text,
+ tags text[]
+ );
+
+ insert into
+ issues (id, title, tags)
+ values
+ (1, 'Cache invalidation is not working', array['is:open', 'severity:high', 'priority:low']),
+ (2, 'Use better names', array['is:open', 'severity:low', 'priority:medium']);
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "title": "Cache invalidation is not working"
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: on-range-columns
+ name: On range columns
+ code: |
+ ```python
+ response = (
+ supabase.table("reservations")
+ .select("*")
+ .overlaps("during", "[2000-01-01 12:45, 2000-01-01 13:15)")
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ reservations (
+ id int8 primary key,
+ room_name text,
+ during tsrange
+ );
+
+ insert into
+ reservations (id, room_name, during)
+ values
+ (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),
+ (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "room_name": "Emerald",
+ "during": "[\"2000-01-01 13:00:00\",\"2000-01-01 15:00:00\")"
+ }
+ ],
+ "status": 200,
+ "statusText": "OK"
+ }
+ ```
+ description: |
+ Postgres supports a number of [range types](https://www.postgresql.org/docs/current/rangetypes.html). You can filter on range columns using the string representation of range values.
+ hideCodeBlock: true
+
+ - id: text-search
+ title: text_search()
+ description: |
+ Only relevant for text and tsvector columns. Match only rows where `column` matches the query string in `query`.
+
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The text or tsvector column to filter on
+ - name: query
+ isOptional: false
+ type: string
+ description: The query text to match with
+ - name: options
+ isOptional: true
+ type: object
+ description: Named parameters
+ subContent:
+ - name: type
+ isOptional: true
+ type: '"plain" | "phrase" | "websearch"'
+ description: Change how the `query` text is interpreted
+ - name: config
+ isOptional: true
+ type: string
+ description: The text search configuration to use
+ notes: |
+ - For more information, see [Postgres full text search](/docs/guides/database/full-text-search).
+ examples:
+ - id: text-search
+ name: Text search
+ code: |
+ ```python
+ response = (
+ supabase.table("texts")
+ .select("content")
+ .text_search("content", "'eggs' & 'ham'", options={"config": "english"})
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table texts (
+ id bigint
+ primary key
+ generated always as identity,
+ content text
+ );
+
+ insert into texts (content) values
+ ('Four score and seven years ago'),
+ ('The road goes ever on and on'),
+ ('Green eggs and ham')
+ ;
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "content": "Green eggs and ham"
+ }
+ ],
+ "count": null
+ }
+ ```
+ - id: basic-normalization
+ name: Basic normalization
+ description: Uses PostgreSQL's `plainto_tsquery` function.
+ code: |
+ ```python
+ response = (
+ supabase.table("quotes")
+ .select("catchphrase")
+ .text_search(
+ "catchphrase",
+ "'fat' & 'cat'",
+ options={"type": "plain", "config": "english"},
+ )
+ .execute()
+ )
+ ```
+ - id: full-normalization
+ name: Full normalization
+ description: Uses PostgreSQL's `phraseto_tsquery` function.
+ code: |
+ ```python
+ response = (
+ supabase.table("quotes")
+ .select("catchphrase")
+ .text_search(
+ "catchphrase",
+ "'fat' & 'cat'",
+ options={"type": "phrase", "config": "english"},
+ )
+ .execute()
+ )
+ ```
+ - id: web-search
+ name: Websearch
+ description: |
+ Uses PostgreSQL's `websearch_to_tsquery` function.
+ This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used
+ with advanced operators.
+
+ - `unquoted text`: text not inside quote marks will be converted to terms separated by & operators, as if processed by plainto_tsquery.
+ - `"quoted text"`: text inside quote marks will be converted to terms separated by <-> operators, as if processed by phraseto_tsquery.
+ - `OR`: the word “or” will be converted to the | operator.
+ - `-`: a dash will be converted to the ! operator.
+
+ code: |
+ ```python
+ response = (
+ supabase.table("quotes")
+ .select("catchphrase")
+ .text_search(
+ "catchphrase",
+ "'fat or cat'",
+ options={"type": "websearch", "config": "english"},
+ )
+ .execute()
+ )
+ ```
+
+ - id: match
+ title: match()
+ description: |
+ Match only rows where each column in `query` keys is equal to its associated value. Shorthand for multiple `.eq()`s.
+ params:
+ - name: query
+ isOptional: false
+ type: dict
+ description: The object to filter with, with column names as keys mapped to their filter values
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = (
+ supabase.table("countries")
+ .select("*")
+ .match({"id": 2, "name": "Albania"})
+ .execute()
+ )
```
data:
sql: |
@@ -1620,54 +3466,95 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 2, 'name': 'Albania'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 2,
+ "name": "Albania"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- id: not
title: not_()
+ description: |
+ Match only rows which doesn't satisfy the filter. `not_` expects you to use the raw PostgREST syntax for the filter values.
+ notes: |
+ ```python
+ .not_.in_('id', '(5,6,7)') # Use `()` for `in` filter
+ .not_.contains('arraycol', '{"a","b"}') # Use `{}` for array values
+ ```
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .not_.is_('name', 'null')
+ response = (
+ supabase.table("countries")
+ .select("*")
+ .not_.is_("name", "null")
.execute()
+ )
```
data:
- sql: |
- ```sql
- create table
- countries (id int8 primary key, name text);
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
- insert into
- countries (id, name)
- values
- (1, 'Albania'),
- (2, null);
- ```
+ insert into
+ countries (id, name)
+ values
+ (1, 'Albania'),
+ (2, null);
+ ```
response: |
- ```
- APIResponse(data=[{'id': 2, 'name': 'Albania'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Albania"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- - id: filter
- title: filter()
+ - id: or
+ title: or_()
+ params:
+ - name: filters
+ isOptional: false
+ type: string
+ description: The filters to use, following PostgREST syntax
+ - name: reference_table
+ isOptional: true
+ type: string
+ description: Set this to filter on referenced tables instead of the parent table
notes: |
- filter() expects you to use the raw PostgREST syntax for the filter values.
+ or_() expects you to use the raw PostgREST syntax for the filter names and values.
+
+ ```python
+ .or_('id.in.(5,6,7), arraycol.cs.{"a","b"}') # Use `()` for `in` filter, `{}` for array values and `cs` for `contains()`.
+ .or_('id.in.(5,6,7), arraycol.cd.{"a","b"}') # Use `cd` for `containedBy()`
+ ```
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .filter('name', 'in', '("Algeria","Japan")')
+ response = (
+ supabase.table("countries")
+ .select("name")
+ .or_("id.eq.2,name.eq.Algeria")
.execute()
+ )
```
data:
sql: |
@@ -1683,19 +3570,67 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 3, 'name': 'Algeria'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Albania"
+ },
+ {
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
- - id: on-a-foreign-table
- name: On a foreign table
+ - id: use-or-with-and
+ name: Use `or` with `and`
code: |
```python
- data, count = supabase.table('countries')
- .select('name, cities!inner (name)')
- .filter('cities.name', 'eq', 'Bali')
+ response = (
+ supabase.table("countries")
+ .select("name")
+ .or_("id.gt.3,and(id.eq.1,name.eq.Afghanistan)")
.execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ reponse: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Afghanistan"
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ - id: use-or-on-referenced-tables
+ name: Use `or` on referenced tables
+ code: |
+ ```python
+ response = (
+ supabase.table("countries")
+ .select("name, cities!inner(name)")
+ .or_("country_id.eq.1,name.eq.Beijing", reference_table="cities")
+ .execute()
+ )
```
data:
sql: |
@@ -1721,34 +3656,56 @@ functions:
(2, 1, 'Munich');
```
response: |
- ```
- APIResponse(data=[{'name': 'Indonesia', 'cities': [{'name': 'Bali'}]}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Germany",
+ "cities": [
+ {
+ "name": "Munich"
+ }
+ ]
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
+
+ - id: filter
+ title: filter()
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to filter on
+ - name: operator
+ isOptional: true
+ type: string
+ description: The operator to filter with, following PostgREST syntax
+ - name: value
+ isOptional: true
+ type: any
+ description: The value to filter with, following PostgREST syntax
+ notes: |
+ filter() expects you to use the raw PostgREST syntax for the filter values.
- - id: using-modifiers
- title: Using Modifiers
- description: |
- Filters work on the row level—they allow you to return rows that
- only match certain conditions without changing the shape of the rows.
- Modifiers are everything that don't fit that definition—allowing you to
- change the format of the response (e.g., returning a CSV string).
-
- Modifiers must be specified after filters. Some modifiers only apply for
- queries that return rows (e.g., `select()` or `rpc()` on a function that
- returns a table response).
-
- - id: order
- title: order()
+ ```python
+ .filter('id', 'in', '(5,6,7)') # Use `()` for `in` filter
+ .filter('arraycol', 'cs', '{"a","b"}') # Use `cs` for `contains()`, `{}` for array values
+ ```
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .order('name', desc=True)
- .execute()
+ response = (
+ supabase.table("countries")
+ .select("*")
+ .filter("name", "in", '("Algeria","Japan")')
+ .execute()
+ )
```
data:
sql: |
@@ -1764,14 +3721,16 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(
- data=[
- {'id': 1, 'name': None},
- {'id': 3, 'name': 'Algeria'},
- {'id': 2, 'name': 'Albania'}],
- count=None
- )
+ ```json
+ {
+ "data": [
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
@@ -1779,10 +3738,142 @@ functions:
name: On a foreign table
code: |
```python
- data, count = supabase.table('countries')
- .select('name, cities(name)')
- .order('name', desc=True, foreign_table='cities')
+ response = (
+ supabase.table("countries")
+ .select("name, cities!inner(name)")
+ .filter("cities.name", "eq", "Bali")
.execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+ create table
+ cities (
+ id int8 primary key,
+ country_id int8 not null references countries,
+ name text
+ );
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Germany'),
+ (2, 'Indonesia');
+ insert into
+ cities (id, country_id, name)
+ values
+ (1, 2, 'Bali'),
+ (2, 1, 'Munich');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Indonesia",
+ "cities": [
+ {
+ "name": "Bali"
+ }
+ ]
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ - id: using-modifiers
+ title: Using Modifiers
+ description: |
+ Filters work on the row level—they allow you to return rows that
+ only match certain conditions without changing the shape of the rows.
+ Modifiers are everything that don't fit that definition—allowing you to
+ change the format of the response (e.g., returning a CSV string).
+
+ Modifiers must be specified after filters. Some modifiers only apply for
+ queries that return rows (e.g., `select()` or `rpc()` on a function that
+ returns a table response).
+
+ - id: order
+ title: order()
+ description: Order the query result by `column`.
+ params:
+ - name: column
+ isOptional: false
+ type: string
+ description: The column to order by
+ - name: desc
+ isOptional: true
+ type: bool
+ description: Whether the rows should be ordered in descending order or not.
+ - name: foreign_table
+ isOptional: true
+ type: string
+ description: Foreign table name whose results are to be ordered.
+ - name: nullsfirst
+ isOptional: true
+ type: bool
+ description: Order by showing nulls first
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = (
+ supabase.table("countries")
+ .select("*")
+ .order("name", desc=True)
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "id": 1,
+ "name": "Afghanistan"
+ },
+ {
+ "id": 2,
+ "name": "Albania"
+ },
+ {
+ "id": 3,
+ "name": "Algeria"
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: on-a-foreign-table
+ name: On a foreign table
+ code: |
+ ```python
+ response = (
+ supabase.table("countries")
+ .select("name, cities(name)")
+ .order("name", desc=True, foreign_table="cities")
+ .execute()
+ )
```
data:
sql: |
@@ -1806,8 +3897,27 @@ functions:
(1, 1, 'Atlanta'),
(2, 1, 'New York City');
response: |
- ```
- APIResponse(data=[{'name': 'United States', 'cities': [{'name': 'New York City'}, {'name': 'Atlanta'}]}, {'name': 'Vanuatu', 'cities': []}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "United States",
+ "cities": [
+ {
+ "name": "New York City"
+ },
+ {
+ "name": "Atlanta"
+ }
+ ]
+ },
+ {
+ "name": "Vanuatu",
+ "cities": []
+ }
+ ],
+ "count": null
+ }
```
description: |
Ordering on foreign tables doesn't affect the ordering of
@@ -1815,15 +3925,21 @@ functions:
hideCodeBlock: true
- id: limit
title: limit()
+ params:
+ - name: size
+ isOptional: false
+ type: number
+ description: The maximum number of rows to return
+ - name: foreign_table
+ isOptional: true
+ type: string
+ description: Set this to limit rows of foreign tables instead of the parent table.
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .limit(1)
- .execute()
+ response = supabase.table("countries").select("name").limit(1).execute()
```
data:
sql: |
@@ -1839,8 +3955,15 @@ functions:
(3, 'Algeria');
```
response: |
- ```
- APIResponse(data=[{'id': 1, 'name': 'Afghanistan'}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "Afghanistan"
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
isSpotlight: true
@@ -1848,10 +3971,12 @@ functions:
name: On a foreign table
code: |
```python
- data, count = supabase.table('countries')
- .select('name, cities(name)')
- .limit(1, foreign_table='cities')
+ response = (
+ supabase.table("countries")
+ .select("name, cities(name)")
+ .limit(1, foreign_table="cities")
.execute()
+ )
```
data:
sql: |
@@ -1876,54 +4001,301 @@ functions:
(2, 1, 'New York City');
```
response: |
- ```
- APIResponse(data=[{'name': 'United States', 'cities': [{'name': 'Atlanta'}]}], count=None)
+ ```json
+ {
+ "data": [
+ {
+ "name": "United States",
+ "cities": [
+ {
+ "name": "Atlanta"
+ }
+ ]
+ }
+ ],
+ "count": null
+ }
```
hideCodeBlock: true
- - id: single
- title: single()
- examples:
- - id: with-select()
- name: With `select()`
- code: |
- ```python
- data, count = supabase.table('countries')
- .select('name')
- .limit(1)
- .single()
- .execute()
- ```
- data:
- sql: |
- ```sql
- create table
- countries (id int8 primary key, name text);
-
- insert into
- countries (id, name)
- values
- (1, 'Afghanistan'),
- (2, 'Albania'),
- (3, 'Algeria');
- ```
- response: |
- ```
- SingleAPIResponse(data={'name': 'Afghanistan'}, count=None)
- ```
- hideCodeBlock: true
- isSpotlight: true
- - id: maybe-single
- title: maybe_single()
+ - id: range
+ title: range()
+ params:
+ - name: start
+ isOptional: false
+ type: number
+ description: The starting index from which to limit the result.
+ - name: end
+ isOptional: false
+ type: number
+ description: The last index to which to limit the result.
+ - name: foreign_table
+ isOptional: true
+ type: string
+ description: Set this to limit rows of foreign tables instead of the parent table.
+ notes: |
+ Limit the query result by starting at an offset (`from`) and ending at the offset (`from + to`). Only records within this range are returned. This respects the query order and if there is no order clause the range could behave unexpectedly.
+
+ The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third and fourth rows of the query.
examples:
- id: with-select
name: With `select()`
code: |
```python
- data, count = supabase.table('countries')
- .select('*')
- .eq('name', 'Albania')
- .maybe_single()
- .execute()
+ response = supabase.table("countries").select("name").range(0, 1).execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Afghanistan"
+ },
+ {
+ "name": "Albania"
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: on-a-foreign-table
+ name: On a foreign table
+ code: |
+ ```python
+ response = (
+ supabase.table("countries")
+ .select("name, cities(name)")
+ .range(0, 1, foreign_table="cities")
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+ create table
+ cities (
+ id int8 primary key,
+ country_id int8 not null references countries,
+ name text
+ );
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ insert into
+ cities (id, country_id, name)
+ values
+ (1, 1, 'Kabul'),
+ (2, 1, 'Herat'),
+ (3, 2, 'Berat');
+ ```
+ response: |
+ ```json
+ {
+ "data": [
+ {
+ "name": "Afghanistan",
+ "cities": [
+ {
+ "name": "Kabul"
+ },
+ {
+ "name": "Herat"
+ }
+ ]
+ },
+ {
+ "name": "Albania",
+ "cities": [
+ {
+ "name": "Berat"
+ }
+ ]
+ },
+ {
+ "name": "Algeria",
+ "cities": []
+ }
+ ],
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ - id: single
+ title: single()
+ notes: Return `data` as a single object instead of an array of objects.
+ examples:
+ - id: with-select()
+ name: With `select()`
+ code: |
+ ```python
+ response = supabase.table("countries").select("name").limit(1).single().execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ response: |
+ ```json
+ {
+ "data": {
+ "name": "Afghanistan"
+ },
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ isSpotlight: true
+ - id: maybe-single
+ title: maybe_single()
+ notes: Return `data` as a single object instead of an array of objects.
+ examples:
+ - id: with-select
+ name: With `select()`
+ code: |
+ ```python
+ response = (
+ supabase.table("countries")
+ .select("*")
+ .eq("name", "Albania")
+ .maybe_single()
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ response: |
+ ```json
+ {
+ "data": {
+ "id": 2,
+ "name": "Albania"
+ },
+ "count": null
+ }
+ ```
+ hideCodeBlock: true
+ isSpotlight: true
+
+ - id: csv
+ title: csv()
+ notes: Return `data` as a string in CSV format.
+ examples:
+ - id: return-data-as-csv
+ name: Return data as CSV
+ code: |
+ ```python
+ response = supabase.table("countries").select("*").csv().execute()
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ response: |
+ ```json
+ {
+ "data": "id,name\n1,Afghanistan\n2,Albania\n3,Algeria",
+ "count": null
+ }
+ ```
+ description: |
+ By default, the data is returned in JSON format, but can also be returned as Comma Separated Values.
+ hideCodeBlock: true
+ isSpotlight: true
+
+ - id: explain
+ title: Using Explain
+ params:
+ - name: wal
+ isOptional: true
+ type: boolean
+ description: If `true`, include information on WAL record generation.
+ - name: verbose
+ isOptional: true
+ type: boolean
+ description: If `true`, the query identifier will be returned and `data` will include the output columns of the query.
+ - name: settings
+ isOptional: true
+ type: boolean
+ description: If `true`, include information on configuration parameters that affect query planning.
+ - name: format
+ isOptional: true
+ type: boolean
+ description: The format of the output, can be `"text"` (default) or `"json"`.
+ - name: format
+ isOptional: true
+ type: '"text" | "json"'
+ description: The format of the output, can be `"text"` (default) or `"json"`.
+ - name: buffers
+ isOptional: true
+ type: boolean
+ description: If `true`, include information on buffer usage.
+ - name: analyze
+ isOptional: true
+ type: boolean
+ description: If `true`, the query will be executed and the actual run time will be returned.
+ description: |
+ For debugging slow queries, you can get the [Postgres `EXPLAIN` execution plan](https://www.postgresql.org/docs/current/sql-explain.html) of a query
+ using the `explain()` method. This works on any query, even for `rpc()` or writes.
+
+ Explain is not enabled by default as it can reveal sensitive information about your database.
+ It's best to only enable this for testing environments but if you wish to enable it for production you can provide additional protection by using a `pre-request` function.
+
+ Follow the [Performance Debugging Guide](/docs/guides/database/debugging-performance) to enable the functionality on your project.
+ examples:
+ - id: get-execution-plan
+ name: Get the execution plan
+ code: |
+ ```python
+ response = supabase.table("countries").select("*").explain().execute()
```
data:
sql: |
@@ -1940,11 +4312,56 @@ functions:
```
response: |
```
- SingleAPIResponse(data={'id': 2, 'name': 'Albania'}, count=None)
+ Aggregate (cost=33.34..33.36 rows=1 width=112)
+ -> Limit (cost=0.00..18.33 rows=1000 width=40)
+ -> Seq Scan on countries (cost=0.00..22.00 rows=1200 width=40)
```
+ description: |
+ By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.
hideCodeBlock: true
isSpotlight: true
+ - id: get-execution-plan-with-analyze-and-verbose
+ name: Get the execution plan with analyze and verbose
+ code: |
+ ```python
+ response = (
+ supabase.table("countries")
+ .select("*")
+ .explain(analyze=True, verbose=True)
+ .execute()
+ )
+ ```
+ data:
+ sql: |
+ ```sql
+ create table
+ countries (id int8 primary key, name text);
+
+ insert into
+ countries (id, name)
+ values
+ (1, 'Afghanistan'),
+ (2, 'Albania'),
+ (3, 'Algeria');
+ ```
+ response: |
+ ```
+ Aggregate (cost=33.34..33.36 rows=1 width=112) (actual time=0.041..0.041 rows=1 loops=1)
+ Output: NULL::bigint, count(ROW(countries.id, countries.name)), COALESCE(json_agg(ROW(countries.id, countries.name)), '[]'::json), NULLIF(current_setting('response.headers'::text, true), ''::text), NULLIF(current_setting('response.status'::text, true), ''::text)
+ -> Limit (cost=0.00..18.33 rows=1000 width=40) (actual time=0.005..0.006 rows=3 loops=1)
+ Output: countries.id, countries.name
+ -> Seq Scan on public.countries (cost=0.00..22.00 rows=1200 width=40) (actual time=0.004..0.005 rows=3 loops=1)
+ Output: countries.id, countries.name
+ Query Identifier: -4730654291623321173
+ Planning Time: 0.407 ms
+ Execution Time: 0.119 ms
+ ```
+ description: |
+ By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.
+ hideCodeBlock: true
+ isSpotlight: false
+
- id: invoke
title: 'invoke()'
description: |
@@ -1958,11 +4375,8 @@ functions:
description:
code: |
```python
- resp = supabase.functions.invoke(
- "hello-world",
- invoke_options={
- "body": { "foo": "bar" }
- },
+ response = supabase.functions.invoke(
+ "hello-world", invoke_options={"body": {"name": "Functions"}}
)
```
- id: error-handling
@@ -1978,7 +4392,7 @@ functions:
from supafunc.errors import FunctionsRelayError, FunctionsHttpError
try:
- resp = supabase.functions.invoke(
+ response = supabase.functions.invoke(
"hello-world",
invoke_options={
"body": {"foo": "bar"},
@@ -2001,7 +4415,7 @@ functions:
isSpotlight: true
code: |
```python
- resp = supabase.functions.invoke(
+ response = supabase.functions.invoke(
"hello-world",
invoke_options={
"headers": {
From ac192a50244888800c6016d08e18c9c21cd8244d Mon Sep 17 00:00:00 2001
From: Charis <26616127+charislam@users.noreply.github.com>
Date: Mon, 24 Jun 2024 18:47:53 -0400
Subject: [PATCH 025/316] refactor(docs): migrate home page to app router
(#27221)
---
apps/docs/app/layout.tsx | 55 +++
apps/docs/app/page.tsx | 342 +++++++++++++++++
apps/docs/components/DocsCoverLogo.tsx | 2 +
apps/docs/components/HomePageCover.tsx | 4 +-
.../NavigationMenu/HomeMenuIconPicker.tsx | 2 +
.../NavigationMenu/NavigationMenu.utils.ts | 2 +
.../NavigationMenu/NavigationMenuCliList.tsx | 12 +-
.../NavigationMenuGuideList.tsx | 9 +-
.../NavigationMenuGuideListItems.tsx | 27 +-
.../NavigationMenuRefListItems.tsx | 35 +-
apps/docs/features/app.providers.tsx | 43 +++
.../features/ui/GlassPanelWithIconPicker.tsx | 18 +
.../features/ui/IconPanelWithIconPicker.tsx | 14 +
apps/docs/hooks/useCopy.ts | 2 +
apps/docs/layouts/HomeLayout.tsx | 77 +---
apps/docs/layouts/MainSkeleton.tsx | 21 +-
apps/docs/layouts/SiteLayout.tsx | 10 +-
apps/docs/next-env.d.ts | 1 +
apps/docs/next.config.mjs | 25 ++
apps/docs/pages/_app.tsx | 39 +-
apps/docs/pages/index.mdx | 363 ------------------
apps/docs/tailwind.config.js | 2 +
apps/docs/tsconfig.json | 9 +-
package-lock.json | 7 +-
packages/common/MetaFavicons/pages-router.tsx | 2 +
packages/common/auth.tsx | 2 +
packages/common/hooks/useBreakpoint.tsx | 2 +
packages/common/hooks/useConstant.ts | 2 +
packages/common/hooks/useCopy.ts | 2 +
packages/common/hooks/useDebounce.tsx | 2 +
packages/common/hooks/useDocsSearch.ts | 2 +
packages/common/hooks/useParams.ts | 16 +-
.../common/hooks/useSearchParamsShallow.ts | 2 +
packages/common/hooks/useTelemetryProps.ts | 7 +-
packages/common/hooks/useThemeSandbox.tsx | 2 +
.../AssistantChat/AssistantChatForm.tsx | 2 +
packages/ui-patterns/Cmdk/AiCommand.tsx | 2 +
packages/ui-patterns/Cmdk/CommandMenu.tsx | 4 +-
.../ui-patterns/Cmdk/CommandMenuProvider.tsx | 2 +
packages/ui-patterns/Cmdk/DocsSearch.tsx | 4 +-
packages/ui-patterns/Cmdk/SearchButton.tsx | 2 +
packages/ui-patterns/ConsentToast/index.tsx | 2 +
.../CountdownWidget/CountdownStep.tsx | 2 +
.../ui-patterns/Dialogs/ConfirmDialog.tsx | 2 +
packages/ui-patterns/GlassPanel/index.tsx | 2 +
packages/ui-patterns/IconPanel/index.tsx | 2 +
.../ui-patterns/PrivacySettings/index.tsx | 2 +
packages/ui-patterns/SqlToRest/index.tsx | 2 +
packages/ui-patterns/ThemeImage/index.tsx | 2 +
packages/ui-patterns/ThemeToggle.tsx | 2 +
packages/ui-patterns/package.json | 1 +
.../ui/src/components/TextLink/TextLink.tsx | 2 +
52 files changed, 668 insertions(+), 531 deletions(-)
create mode 100644 apps/docs/app/layout.tsx
create mode 100644 apps/docs/app/page.tsx
create mode 100644 apps/docs/features/app.providers.tsx
create mode 100644 apps/docs/features/ui/GlassPanelWithIconPicker.tsx
create mode 100644 apps/docs/features/ui/IconPanelWithIconPicker.tsx
delete mode 100644 apps/docs/pages/index.mdx
diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx
new file mode 100644
index 00000000000..37c3b7203db
--- /dev/null
+++ b/apps/docs/app/layout.tsx
@@ -0,0 +1,55 @@
+import '@code-hike/mdx/styles'
+import 'config/code-hike.scss'
+import '../styles/main.scss'
+import '../styles/new-docs.scss'
+import '../styles/prism-okaidia.scss'
+
+import { genFaviconData } from 'common/MetaFavicons/app-router'
+import { type Metadata, type Viewport } from 'next'
+
+import { BASE_PATH } from '~/lib/constants'
+import { GlobalProviders } from '~/features/app.providers'
+
+const metadata: Metadata = {
+ applicationName: 'Supabase Docs',
+ title: 'Supabase Docs',
+ description:
+ 'Supabase is an open source Firebase alternative providing all the backend features you need to build a product.',
+ metadataBase: new URL('https://supabase.com'),
+ icons: genFaviconData(BASE_PATH),
+ robots: {
+ index: true,
+ follow: true,
+ },
+ openGraph: {
+ type: 'article',
+ authors: 'Supabase',
+ url: `${BASE_PATH}`,
+ images: `${BASE_PATH}/img/supabase-og-image.png`,
+ publishedTime: new Date().toISOString(),
+ modifiedTime: new Date().toISOString(),
+ },
+ twitter: {
+ card: 'summary_large_image',
+ site: '@supabase',
+ creator: '@supabase',
+ images: `${BASE_PATH}/img/supabase-og-image.png`,
+ },
+}
+
+const viewport: Viewport = {
+ themeColor: '#1E1E1E',
+}
+
+const RootLayout = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+
+ {children}
+
+
+ )
+}
+
+export { metadata, viewport }
+export default RootLayout
diff --git a/apps/docs/app/page.tsx b/apps/docs/app/page.tsx
new file mode 100644
index 00000000000..cbfde7d0394
--- /dev/null
+++ b/apps/docs/app/page.tsx
@@ -0,0 +1,342 @@
+import { type Metadata, type ResolvingMetadata } from 'next'
+import Link from 'next/link'
+import { IconBackground, TextLink } from 'ui'
+import { IconPanel } from 'ui-patterns/IconPanel'
+
+import HomeMenuIconPicker from '~/components/Navigation/NavigationMenu/HomeMenuIconPicker'
+import { GlassPanelWithIconPicker } from '~/features/ui/GlassPanelWithIconPicker'
+import { IconPanelWithIconPicker } from '~/features/ui/IconPanelWithIconPicker'
+import HomeLayout from '~/layouts/HomeLayout'
+import { BASE_PATH } from '~/lib/constants'
+
+const generateMetadata = async (_, parent: ResolvingMetadata): Promise => {
+ const parentAlternates = (await parent).alternates
+
+ return {
+ alternates: {
+ ...parentAlternates,
+ canonical: `${BASE_PATH}`,
+ },
+ }
+}
+
+const products = [
+ {
+ title: 'Database',
+ icon: 'database',
+ hasLightIcon: true,
+ href: '/guides/database/overview',
+ description:
+ 'Supabase provides a full Postgres database for every project with Realtime functionality, database backups, extensions, and more.',
+ },
+ {
+ title: 'Auth',
+ icon: 'auth',
+ hasLightIcon: true,
+ href: '/guides/auth',
+ description:
+ 'Add and manage email and password, passwordless, OAuth, and mobile logins to your project through a suite of identity providers and APIs.',
+ },
+ {
+ title: 'Storage',
+ icon: 'storage',
+ hasLightIcon: true,
+ href: '/guides/storage',
+ description:
+ 'Store, organize, transform, and serve large files—fully integrated with your Postgres database with Row Level Security access policies.',
+ },
+ {
+ title: 'AI & Vectors',
+ icon: 'ai',
+ hasLightIcon: true,
+ href: '/guides/ai',
+ description: 'Use Supabase to store and search embedding vectors.',
+ },
+ {
+ title: 'Realtime',
+ icon: 'realtime',
+ hasLightIcon: true,
+ href: '/guides/realtime',
+ description:
+ 'Listen to database changes, store and sync user states across clients, broadcast data to clients subscribed to a channel, and more.',
+ },
+ {
+ title: 'Edge Functions',
+ icon: 'edge-functions',
+ hasLightIcon: true,
+ href: '/guides/functions',
+ description:
+ 'Globally distributed, server-side functions to execute your code closest to your users for the lowest latency.',
+ },
+]
+
+const migrationGuides = [
+ {
+ title: 'Firebase Auth',
+ icon: '/docs/img/icons/firebase-icon',
+ href: '/guides/resources/migrating-to-supabase/firebase-auth',
+ },
+ {
+ title: 'Firestore Data',
+ icon: '/docs/img/icons/firebase-icon',
+ href: '/guides/resources/migrating-to-supabase/firestore-data',
+ },
+ {
+ title: 'Firebase Storage',
+ icon: '/docs/img/icons/firebase-icon',
+ href: '/guides/resources/migrating-to-supabase/firebase-storage',
+ },
+ {
+ title: 'Heroku',
+ icon: '/docs/img/icons/heroku-icon',
+ href: '/guides/resources/migrating-to-supabase/heroku',
+ },
+ {
+ title: 'Render',
+ icon: '/docs/img/icons/render-icon',
+ href: '/guides/resources/migrating-to-supabase/render',
+ },
+ {
+ title: 'Amazon RDS',
+ icon: '/docs/img/icons/aws-rds-icon',
+ href: '/guides/resources/migrating-to-supabase/amazon-rds',
+ },
+ {
+ title: 'Postgres',
+ icon: '/docs/img/icons/postgres-icon',
+ href: '/guides/resources/migrating-to-supabase/postgres',
+ },
+ {
+ title: 'MySQL',
+ icon: '/docs/img/icons/mysql-icon',
+ href: '/guides/resources/migrating-to-supabase/mysql',
+ },
+ {
+ title: 'MSSQL',
+ icon: '/docs/img/icons/mssql-icon',
+ href: '/guides/resources/migrating-to-supabase/mssql',
+ },
+]
+
+const selfHostingOptions = [
+ {
+ title: 'Auth',
+ icon: 'auth',
+ href: 'reference/self-hosting-auth/introduction',
+ },
+ {
+ title: 'Realtime',
+ icon: 'realtime',
+ href: 'reference/self-hosting-realtime/introduction',
+ },
+ {
+ title: 'Storage',
+ icon: 'storage',
+ href: 'reference/self-hosting-storage/introduction',
+ },
+ {
+ title: 'Analytics',
+ icon: 'analytics',
+ href: 'reference/self-hosting-analytics/introduction',
+ },
+]
+
+const clientLibraries = [
+ {
+ title: 'Javascript',
+ icon: 'reference-javascript',
+ href: 'reference/javascript/introduction',
+ },
+ {
+ title: 'Flutter',
+ icon: 'reference-dart',
+ href: 'reference/dart/introduction',
+ },
+ {
+ title: 'Python',
+ icon: 'reference-python',
+ href: 'reference/python/introduction',
+ },
+ {
+ title: 'C#',
+ icon: 'reference-csharp',
+ href: 'reference/csharp/introduction',
+ },
+ {
+ title: 'Swift',
+ icon: 'reference-swift',
+ href: 'reference/swift/introduction',
+ },
+ {
+ title: 'Kotlin',
+ icon: 'reference-kotlin',
+ href: 'reference/kotlin/introduction',
+ },
+]
+
+const additionalResources = [
+ {
+ title: 'Management API',
+ description: 'Manage your Supabase projects and organizations.',
+ icon: 'reference-api',
+ href: 'reference/api/introduction',
+ },
+ {
+ title: 'Supabase CLI',
+ description: 'Use the CLI to develop, manage and deploy your projects.',
+ icon: 'reference-cli',
+ href: 'reference/cli/introduction',
+ },
+ {
+ title: 'Platform Guides',
+ description: 'Learn more about the tools and services powering Supabase.',
+ icon: 'platform',
+ href: 'guides/platform',
+ },
+ {
+ title: 'Integrations',
+ description: 'Explore a variety of integrations from Supabase partners.',
+ icon: 'integrations',
+ href: 'guides/integrations',
+ },
+]
+
+const HomePage = () => (
+
+
+
Products
+
+ {products.map((product) => {
+ return (
+
+
+
+ {product.description}
+
+
+
+ )
+ })}
+
+
+
+
+
+
+
+ Client Libraries
+
+
+
+
+
+
+ {clientLibraries.map((library) => {
+ return (
+
+
+
+ )
+ })}
+
+
+
+
+
+
+ Migrate to Supabase
+
+
+ Bring your existing data, auth and storage to Supabase following our migration guides.
+
+
+
+
+
+ {migrationGuides.map((guide) => {
+ return (
+
+
+
+
+
+ )
+ })}
+
+
+
+
+
+
+ Additional resources
+
+
+
+
+ {additionalResources.map((resource) => {
+ return (
+
+
+
+ {resource.description}
+
+
+
+ )
+ })}
+
+
+
+
+
+
+
+
+
+
+
+ Self-Hosting
+
+
+
Get started with self-hosting Supabase.
+
+
+
+
+
+
+ {selfHostingOptions.map((option) => {
+ return (
+
+
+
+
+
+ )
+ })}
+
+
+
+
+
+)
+
+export default HomePage
+export { generateMetadata }
diff --git a/apps/docs/components/DocsCoverLogo.tsx b/apps/docs/components/DocsCoverLogo.tsx
index 0e8965c50b6..8a66b35ea13 100644
--- a/apps/docs/components/DocsCoverLogo.tsx
+++ b/apps/docs/components/DocsCoverLogo.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import React, { type PropsWithChildren } from 'react'
import { LazyMotion, domAnimation, m } from 'framer-motion'
diff --git a/apps/docs/components/HomePageCover.tsx b/apps/docs/components/HomePageCover.tsx
index d9ee30ad170..f111d0d5480 100644
--- a/apps/docs/components/HomePageCover.tsx
+++ b/apps/docs/components/HomePageCover.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import Link from 'next/link'
import { IconBackground, IconPlay } from 'ui'
import { useBreakpoint } from 'common'
@@ -105,7 +107,7 @@ const HomePageCover = (props) => {
-
{props.meta?.title}
+
{props.title}
Learn how to get up and running with Supabase through tutorials, APIs and platform
resources.
diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx
index b4f2e7ae2a2..138e0d30f36 100644
--- a/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx
+++ b/apps/docs/components/Navigation/NavigationMenu/HomeMenuIconPicker.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import React from 'react'
import {
IconMenuApi,
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.utils.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.utils.ts
index 6d7ce92302d..04dc1545765 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.utils.ts
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.utils.ts
@@ -1,3 +1,5 @@
+'use client'
+
import { useEffect, useState } from 'react'
import { ICommonItem } from '~/components/reference/Reference.types'
import { Json } from '~/types'
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx
index 7cba84fcba4..b5f44986898 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx
@@ -1,13 +1,11 @@
import Link from 'next/link'
-import { useRouter } from 'next/router'
import { IconChevronLeft } from 'ui'
+
+import { BASE_PATH } from '~/lib/constants'
+import clientLibsCommon from '~/spec/common-cli.yml' assert { type: 'yml' }
import * as NavItems from './NavigationMenu.constants'
-import clientLibsCommon from '~/spec/common-cli.yml' assert { type: 'yml' }
-
const NavigationMenuCliList = ({ currentLevel, setLevel, id }) => {
- const router = useRouter()
-
const menu = NavItems[id]
const FunctionLink = ({
@@ -26,7 +24,7 @@ const NavigationMenuCliList = ({ currentLevel, setLevel, id }) => {
href={`#${id}`}
className="cursor-pointer transition text-foreground-lighter text-sm hover:text-brand flex gap-3"
>
- {icon && }
+ {icon && }
{title}
@@ -113,7 +111,7 @@ const NavigationMenuCliList = ({ currentLevel, setLevel, id }) => {
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx
index 97e96e4f842..3d9b5d6872d 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx
@@ -1,14 +1,15 @@
+'use client'
+
import * as Accordion from '@radix-ui/react-accordion'
-import { useRouter } from 'next/router'
import * as NavItems from './NavigationMenu.constants'
import { getPathWithoutHash } from './NavigationMenu.utils'
import NavigationMenuGuideListItems from './NavigationMenuGuideListItems'
+import { usePathname } from 'next/navigation'
const NavigationMenuGuideList = ({ id }: { id: string }) => {
- const path = useRouter().asPath
- const url = getPathWithoutHash(path)
- const firstLevelRoute = url?.split('/')?.slice(0, 4)?.join('/')
+ const pathname = usePathname()
+ const firstLevelRoute = pathname?.split('/')?.slice(0, 4)?.join('/')
const menu = NavItems[id]
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx
index 0a2a7d6f9fc..595bb88558f 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx
@@ -1,9 +1,9 @@
import * as Accordion from '@radix-ui/react-accordion'
import { ChevronLeft } from 'lucide-react'
+import { usePathname } from 'next/navigation'
import { useTheme } from 'next-themes'
import Image from 'next/legacy/image'
import Link from 'next/link'
-import { useRouter } from 'next/router'
import React, { useEffect, useRef } from 'react'
import HomeMenuIconPicker from './HomeMenuIconPicker'
@@ -14,14 +14,14 @@ const HeaderLink = React.memo(function HeaderLink(props: {
id: string
url: string
}) {
- const router = useRouter()
+ const pathname = usePathname()
return (
{props.title ?? props.id}
@@ -30,10 +30,10 @@ const HeaderLink = React.memo(function HeaderLink(props: {
})
const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any) {
- const router = useRouter()
+ const pathname = usePathname()
const { resolvedTheme } = useTheme()
- const activeItem = props.subItem.url === getPathWithoutHash(router.asPath)
- const activeItemRef = useRef(null)
+ const activeItem = props.subItem.url === pathname
+ const activeItemRef = useRef(null)
const LinkContainer = (props) => {
return (
@@ -77,11 +77,8 @@ const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any
>
{props.subItem.icon && (
@@ -99,7 +96,7 @@ const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any
href={`${subSubItem.url}`}
className={[
'cursor-pointer transition text-sm',
- subSubItem.url === getPathWithoutHash(router.asPath)
+ subSubItem.url === pathname
? 'text-brand'
: 'hover:text-brand text-foreground-lighter',
].join(' ')}
@@ -117,7 +114,7 @@ const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any
})
const ContentLink = React.memo(function ContentLink(props: any) {
- const router = useRouter()
+ const pathname = usePathname()
return (
@@ -125,13 +122,13 @@ const ContentLink = React.memo(function ContentLink(props: any) {
href={props.url}
className={[
'cursor-pointer transition text-sm',
- props.url === router.asPath
+ props.url === pathname
? 'text-brand-link'
: 'hover:text-foreground text-foreground-lighter',
].join(' ')}
>
{props.icon && (
-
+
)}
{props.name}
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx
index 20b6ca58861..12a50f78e19 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx
@@ -1,20 +1,20 @@
+'use client'
+
import * as Accordion from '@radix-ui/react-accordion'
-import Link from 'next/link'
-import { useRouter } from 'next/router'
-import { IconChevronLeft, IconChevronUp, cn } from 'ui'
-import * as NavItems from './NavigationMenu.constants'
-
+import { ChevronLeft, ChevronUp } from 'lucide-react'
import Image from 'next/legacy/image'
-
+import Link from 'next/link'
+import { Fragment, memo } from 'react'
+import { cn } from 'ui'
import RevVersionDropdown from '~/components/RefVersionDropdown'
-import { menuState, useMenuActiveRefId } from '~/hooks/useMenuState'
-
-import React, { Fragment } from 'react'
import { ICommonItem, ICommonSection } from '~/components/reference/Reference.types'
+import { menuState, useMenuActiveRefId } from '~/hooks/useMenuState'
+import { BASE_PATH } from '~/lib/constants'
import HomeMenuIconPicker from './HomeMenuIconPicker'
+import * as NavItems from './NavigationMenu.constants'
import { deepFilterSections } from './NavigationMenu.utils'
-const HeaderLink = React.memo(function HeaderLink(props: any) {
+const HeaderLink = memo(function HeaderLink(props: any) {
return (
{props.title ?? props.id}
@@ -34,7 +34,7 @@ interface FunctionLinkProps {
onClick?: () => void
}
-const FunctionLink = React.memo(function FunctionLink({
+const FunctionLink = memo(function FunctionLink({
title,
id,
icon,
@@ -44,10 +44,9 @@ const FunctionLink = React.memo(function FunctionLink({
isSubItem = false,
onClick = () => {},
}: FunctionLinkProps) {
- const router = useRouter()
const activeAccordionItem = useMenuActiveRefId()
- const url = `${router.basePath}${basePath}/${slug}`
+ const url = `${BASE_PATH}${basePath}/${slug}`
const active = activeAccordionItem === id
return (
@@ -70,7 +69,7 @@ const FunctionLink = React.memo(function FunctionLink({
active ? 'text-brand' : 'text-foreground-lighter'
)}
>
- {icon && }
+ {icon && }
{title}
{active && !isSubItem && (
)}
{isParent && (
-
@@ -94,7 +93,7 @@ export interface RenderLinkProps {
basePath: string
}
-const RenderLink = React.memo(function RenderLink({ section, basePath }: RenderLinkProps) {
+const RenderLink = memo(function RenderLink({ section, basePath }: RenderLinkProps) {
const activeAccordionItem = useMenuActiveRefId()
if (!('items' in section)) {
@@ -190,7 +189,7 @@ const NavigationMenuRefListItems = ({
>
Back to Main Menu
@@ -223,4 +222,4 @@ const NavigationMenuRefListItems = ({
)
}
-export default React.memo(NavigationMenuRefListItems)
+export default memo(NavigationMenuRefListItems)
diff --git a/apps/docs/features/app.providers.tsx b/apps/docs/features/app.providers.tsx
new file mode 100644
index 00000000000..dc43baf5127
--- /dev/null
+++ b/apps/docs/features/app.providers.tsx
@@ -0,0 +1,43 @@
+import { CommandMenuProvider } from '@ui-patterns/Cmdk'
+import PromoToast from '@ui-patterns/PromoToast'
+import { ThemeProvider } from 'common'
+import { PortalToast } from 'ui'
+import { type PropsWithChildren } from 'react'
+
+import SiteLayout from '~/layouts/SiteLayout'
+import { AuthContainer } from './auth/auth.client'
+import { QueryClientProvider } from './data/queryClient.client'
+import { ShortcutPreviewBuild } from './envs/staging.client'
+import { PageTelemetry } from './telemetry/telemetry.client'
+import { ScrollRestoration } from './ui/helpers.scroll.client'
+import { ThemeSandbox } from './ui/theme.client'
+
+/**
+ * Global providers that wrap the entire app
+ */
+function GlobalProviders({ children }: PropsWithChildren) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export { GlobalProviders }
diff --git a/apps/docs/features/ui/GlassPanelWithIconPicker.tsx b/apps/docs/features/ui/GlassPanelWithIconPicker.tsx
new file mode 100644
index 00000000000..dc00d27faef
--- /dev/null
+++ b/apps/docs/features/ui/GlassPanelWithIconPicker.tsx
@@ -0,0 +1,18 @@
+import { type ComponentProps, type PropsWithChildren } from 'react'
+import { GlassPanel } from 'ui-patterns/GlassPanel'
+
+import HomeMenuIconPicker from '~/components/Navigation/NavigationMenu/HomeMenuIconPicker'
+
+type GlassPanelWithIconPickerProps = PropsWithChildren<
+ Omit, 'icon'> & { icon: string }
+>
+
+function GlassPanelWithIconPicker({ children, icon, ...props }: GlassPanelWithIconPickerProps) {
+ return (
+ } {...props}>
+ {children}
+
+ )
+}
+
+export { GlassPanelWithIconPicker }
diff --git a/apps/docs/features/ui/IconPanelWithIconPicker.tsx b/apps/docs/features/ui/IconPanelWithIconPicker.tsx
new file mode 100644
index 00000000000..9b7e4f30099
--- /dev/null
+++ b/apps/docs/features/ui/IconPanelWithIconPicker.tsx
@@ -0,0 +1,14 @@
+import { type ComponentProps } from 'react'
+import { IconPanel } from 'ui-patterns'
+
+import HomeMenuIconPicker from '~/components/Navigation/NavigationMenu/HomeMenuIconPicker'
+
+type IconPanelWithIconPickerProps = Omit, 'icon'> & {
+ icon: string
+}
+
+function IconPanelWithIconPicker({ icon, ...props }: IconPanelWithIconPickerProps) {
+ return } {...props} />
+}
+
+export { IconPanelWithIconPicker }
diff --git a/apps/docs/hooks/useCopy.ts b/apps/docs/hooks/useCopy.ts
index 460df34f30a..9b052e4adee 100644
--- a/apps/docs/hooks/useCopy.ts
+++ b/apps/docs/hooks/useCopy.ts
@@ -1,3 +1,5 @@
+'use client'
+
import { useState } from 'react'
export function useCopy() {
diff --git a/apps/docs/layouts/HomeLayout.tsx b/apps/docs/layouts/HomeLayout.tsx
index 7f2ff3de39a..cf9a4efac56 100644
--- a/apps/docs/layouts/HomeLayout.tsx
+++ b/apps/docs/layouts/HomeLayout.tsx
@@ -1,73 +1,22 @@
-import { MDXProvider } from '@mdx-js/react'
-import { NextSeo } from 'next-seo'
-import Head from 'next/head'
-import { useRouter } from 'next/router'
-import { FC } from 'react'
-import components from '~/components'
+import { type PropsWithChildren } from 'react'
+
import HomePageCover from '~/components/HomePageCover'
import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu'
import { LayoutMainContent } from './DefaultLayout'
import { MainSkeleton } from './MainSkeleton'
-interface Props {
- meta: {
- title: string
- canonical?: string
- description?: string
- video?: string
- }
- children: any
-}
-
-const HomeLayout: FC = (props: Props) => {
- const { asPath } = useRouter()
-
+const HomeLayout = ({ children }: PropsWithChildren) => {
return (
- <>
-
- {asPath === '/' ? 'Supabase Docs' : `${props.meta?.title} | Supabase Docs`}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
+
+
+
+
+
+
+
+
)
}
diff --git a/apps/docs/layouts/MainSkeleton.tsx b/apps/docs/layouts/MainSkeleton.tsx
index 18206d69af1..ff34e0db290 100644
--- a/apps/docs/layouts/MainSkeleton.tsx
+++ b/apps/docs/layouts/MainSkeleton.tsx
@@ -1,7 +1,9 @@
+'use client'
+
import { useTheme } from 'next-themes'
import Image from 'next/legacy/image'
import Link from 'next/link'
-import { type CSSProperties, type PropsWithChildren, memo, useEffect } from 'react'
+import { type PropsWithChildren, memo, useEffect } from 'react'
import { cn } from 'ui'
import Footer from '~/components/Navigation/Footer'
import HomeMenuIconPicker from '~/components/Navigation/NavigationMenu/HomeMenuIconPicker'
@@ -277,16 +279,19 @@ const Container = memo(function Container({
// used by layout to scroll to top
id={DOCS_CONTENT_CONTAINER_ID}
className={cn(
- // 'overflow-x-auto',
+ /**
+ * This controls scroll restoration on page navigation, so the overflow
+ * must be on the element with DOCS_CONTENT_CONTAINER_ID
+ */
+ 'overflow-auto',
'w-full transition-all ease-out',
- // 'absolute lg:relative',
mobileMenuOpen ? 'ml-[75%] sm:ml-[50%] md:ml-[33%] overflow-hidden' : 'overflow-auto',
// desktop override any margin styles
'lg:ml-0',
className
)}
>
- {children}
+ {children}
)
})
@@ -300,7 +305,7 @@ const NavContainer = memo(function NavContainer({ menuId }: { menuId: MenuId })
className={[
// 'hidden',
'absolute lg:relative',
- mobileMenuOpen ? 'w-[75%] sm:w-[50%] md:w-[33%] left-0' : 'w-0 -left-[280px]',
+ mobileMenuOpen ? 'w-[75%] sm:w-[50%] md:w-[33%] left-0 z-20' : 'w-0 -left-[280px]',
'lg:w-[420px] !lg:left-0',
// desktop override any left styles
'lg:left-0',
@@ -376,10 +381,8 @@ function MainSkeleton({ children, menuId }: PropsWithChildren<{ menuId: MenuId }
-
- {children}
-
-
+ {children}
+
diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx
index 5754ddff924..c784de3dd73 100644
--- a/apps/docs/layouts/SiteLayout.tsx
+++ b/apps/docs/layouts/SiteLayout.tsx
@@ -1,15 +1,7 @@
-import Head from 'next/head'
import { PropsWithChildren } from 'react'
const SiteLayout = ({ children }: PropsWithChildren<{}>) => {
- return (
- <>
-
-
Supabase Docs
-
-
{children}
- >
- )
+ return
{children}
}
export default SiteLayout
diff --git a/apps/docs/next-env.d.ts b/apps/docs/next-env.d.ts
index 4f11a03dc6c..fd36f9494e2 100644
--- a/apps/docs/next-env.d.ts
+++ b/apps/docs/next-env.d.ts
@@ -1,5 +1,6 @@
///
///
+///
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs
index 762c631aaec..8a950d488d0 100644
--- a/apps/docs/next.config.mjs
+++ b/apps/docs/next.config.mjs
@@ -1,6 +1,7 @@
// @ts-check
import { remarkCodeHike } from '@code-hike/mdx'
import nextMdx from '@next/mdx'
+import os from 'node:os'
import rehypeSlug from 'rehype-slug'
import remarkGfm from 'remark-gfm'
@@ -71,6 +72,30 @@ const nextConfig = {
'api-types',
'icons',
],
+ /**
+ * The SQL to REST API translator relies on libpg-query, which packages a
+ * native Node.js module that wraps the Postgres query parser.
+ *
+ * The default webpack config can't load native modules, so we need a custom
+ * loader for it, which calls process.dlopen to load C++ Addons.
+ *
+ * See https://github.com/eisberg-labs/nextjs-node-loader
+ */
+ webpack: (config) => {
+ config.module.rules.push({
+ test: /\.node$/,
+ use: [
+ {
+ loader: 'nextjs-node-loader',
+ options: {
+ flags: os.constants.dlopen.RTLD_NOW,
+ outputPath: config.output.path,
+ },
+ },
+ ],
+ })
+ return config
+ },
async headers() {
return [
{
diff --git a/apps/docs/pages/_app.tsx b/apps/docs/pages/_app.tsx
index 3ab997f2673..38b19b776fe 100644
--- a/apps/docs/pages/_app.tsx
+++ b/apps/docs/pages/_app.tsx
@@ -4,47 +4,24 @@ import '../styles/main.scss'
import '../styles/new-docs.scss'
import '../styles/prism-okaidia.scss'
-import { ThemeProvider } from 'common'
import MetaFaviconsPagesRouter from 'common/MetaFavicons/pages-router'
import Head from 'next/head'
-import { PortalToast } from 'ui'
-import { PromoToast } from 'ui-patterns/PromoToast'
-import { CommandMenuProvider } from 'ui-patterns/Cmdk'
-import { AuthContainer } from '~/features/auth/auth.client'
-import { QueryClientProvider } from '~/features/data/queryClient.client'
-import { ShortcutPreviewBuild } from '~/features/envs/staging.client'
-import { PageTelemetry } from '~/features/telemetry/telemetry.client'
-import { ThemeSandbox } from '~/features/ui/theme.client'
-import { ScrollRestoration } from '~/features/ui/helpers.scroll.client'
-import SiteLayout from '~/layouts/SiteLayout'
+
import type { AppPropsWithLayout } from '~/types'
+import { GlobalProviders } from '~/features/app.providers'
function MyApp({ Component, pageProps }: AppPropsWithLayout) {
return (
-
+ <>
+ Supabase Docs
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ >
)
}
diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx
deleted file mode 100644
index 5b912d11238..00000000000
--- a/apps/docs/pages/index.mdx
+++ /dev/null
@@ -1,363 +0,0 @@
-import HomeLayout from '~/layouts/HomeLayout'
-import Link from 'next/link'
-import { Button, IconBackground, IconChevronRight, IconPlay, TextLink } from 'ui'
-import { GlassPanel } from 'ui-patterns/GlassPanel'
-import { IconPanel } from 'ui-patterns/IconPanel'
-
-import HomeMenuIconPicker from '~/components/Navigation/NavigationMenu/HomeMenuIconPicker'
-
-export const meta = {
- title: 'Supabase Documentation',
- description:
- 'Supabase is an open source Firebase alternative providing all the backend features you need to build a product.',
- subtitle: 'Supabase Developer Documentation and API Reference',
-}
-
-
-
-
- ## Products
-
-
-
- {products.map((product) => {
- return (
-
-
- } background={true} showIconBg={true} showLink={false}>
- {product.description}
-
-
-
- )
- })}
-
-
-
-
-
-
-
-
- {/*
-
- */}
- ## Client Libraries
-
-
-
-
-
-
- {clientLibraries.map((product) => {
- return (
-
- }
- background={true}
- showIconBg={true}
- showLink={false}
- >
- {product.description}
-
-
- )
- })}
-
-
-
-
-
-
-
-
- ## Migrate to Supabase
-
-
Bring your existing data, auth and storage to Supabase following our migration guides.
-
-
-
-
-
- {migrationGuides.map((product) => {
- return (
-
-
-
- {product.description}
-
-
-
- )
- })}
-
-
-
-
-
-
-
-
-
-
- ### Additional resources
-
-
-
-
- {additionalResources.map((product) => {
- return (
-
-
- } background={false}>
- {product.description}
-
-
-
-
- )
- })}
-
-
-
-
-
-
-
-
-
-
-
-
-
- ### Self-Hosting
-
-
Get started with self-hosting Supabase.
-
-
-
-
-
-
-
- {selfHostingOptions.map((product) => {
- return (
-
-
- } background={true} showIconBg={true} showLink={false}>
- {product.description}
-
-
-
- )
- })}
-
-
-
-
-
-
-
-export const products = [
- {
- title: 'Database',
- icon: 'database',
- hasLightIcon: true,
- href: '/guides/database/overview',
- description:
- 'Supabase provides a full Postgres database for every project with Realtime functionality, database backups, extensions, and more.',
- },
- {
- title: 'Auth',
- icon: 'auth',
- hasLightIcon: true,
- href: '/guides/auth',
- description:
- 'Add and manage email and password, passwordless, OAuth, and mobile logins to your project through a suite of identity providers and APIs.',
- },
- {
- title: 'Storage',
- icon: 'storage',
- hasLightIcon: true,
- href: '/guides/storage',
- description:
- 'Store, organize, transform, and serve large files—fully integrated with your Postgres database with Row Level Security access policies.',
- },
- {
- title: 'AI & Vectors',
- icon: 'ai',
- hasLightIcon: true,
- href: '/guides/ai',
- description: 'Use Supabase to store and search embedding vectors.',
- },
- {
- title: 'Realtime',
- icon: 'realtime',
- hasLightIcon: true,
- href: '/guides/realtime',
- description:
- 'Listen to database changes, store and sync user states across clients, broadcast data to clients subscribed to a channel, and more.',
- },
- {
- title: 'Edge Functions',
- icon: 'edge-functions',
- hasLightIcon: true,
- href: '/guides/functions',
- description:
- 'Globally distributed, server-side functions to execute your code closest to your users for the lowest latency.',
- },
-]
-
-export const migrationGuides = [
- {
- title: 'Firebase Auth',
- icon: '/docs/img/icons/firebase-icon',
- href: '/guides/resources/migrating-to-supabase/firebase-auth',
- },
- {
- title: 'Firestore Data',
- icon: '/docs/img/icons/firebase-icon',
- href: '/guides/resources/migrating-to-supabase/firestore-data',
- },
- {
- title: 'Firebase Storage',
- icon: '/docs/img/icons/firebase-icon',
- href: '/guides/resources/migrating-to-supabase/firebase-storage',
- },
- {
- title: 'Heroku',
- icon: '/docs/img/icons/heroku-icon',
- href: '/guides/resources/migrating-to-supabase/heroku',
- },
- {
- title: 'Render',
- icon: '/docs/img/icons/render-icon',
- href: '/guides/resources/migrating-to-supabase/render',
- },
- {
- title: 'Amazon RDS',
- icon: '/docs/img/icons/aws-rds-icon',
- href: '/guides/resources/migrating-to-supabase/amazon-rds',
- },
- {
- title: 'Postgres',
- icon: '/docs/img/icons/postgres-icon',
- href: '/guides/resources/migrating-to-supabase/postgres',
- },
- {
- title: 'MySQL',
- icon: '/docs/img/icons/mysql-icon',
- href: '/guides/resources/migrating-to-supabase/mysql',
- },
- {
- title: 'MSSQL',
- icon: '/docs/img/icons/mssql-icon',
- href: '/guides/resources/migrating-to-supabase/mssql',
- },
-]
-
-export const selfHostingOptions = [
- {
- title: 'Auth',
- icon: 'auth',
- href: 'reference/self-hosting-auth/introduction',
- },
- {
- title: 'Realtime',
- icon: 'realtime',
- href: 'reference/self-hosting-realtime/introduction',
- },
- {
- title: 'Storage',
- icon: 'storage',
- href: 'reference/self-hosting-storage/introduction',
- },
- {
- title: 'Analytics',
- icon: 'analytics',
- href: 'reference/self-hosting-analytics/introduction',
- },
-]
-
-export const clientLibraries = [
- {
- title: 'Javascript',
- icon: 'reference-javascript',
- href: 'reference/javascript/introduction',
- },
- {
- title: 'Flutter',
- icon: 'reference-dart',
- href: 'reference/dart/introduction',
- },
- {
- title: 'Python',
- icon: 'reference-python',
- href: 'reference/python/introduction',
- },
- {
- title: 'C#',
- icon: 'reference-csharp',
- href: 'reference/csharp/introduction',
- },
- {
- title: 'Swift',
- icon: 'reference-swift',
- href: 'reference/swift/introduction',
- },
- {
- title: 'Kotlin',
- icon: 'reference-kotlin',
- href: 'reference/kotlin/introduction',
- },
-]
-
-export const additionalResources = [
- {
- title: 'Management API',
- description: 'Manage your Supabase projects and organizations.',
- icon: 'reference-api',
- href: 'reference/api/introduction',
- },
- {
- title: 'Supabase CLI',
- description: 'Use the CLI to develop, manage and deploy your projects.',
- icon: 'reference-cli',
- href: 'reference/cli/introduction',
- },
- {
- title: 'Platform Guides',
- description: 'Learn more about the tools and services powering Supabase.',
- icon: 'platform',
- href: 'guides/platform',
- },
- {
- title: 'Integrations',
- description: 'Explore a variety of integrations from Supabase partners.',
- icon: 'integrations',
- href: 'guides/integrations',
- },
-]
-
-export const Page = ({ children }) =>
-
-export default Page
diff --git a/apps/docs/tailwind.config.js b/apps/docs/tailwind.config.js
index b4b91c5d972..47217b6c131 100644
--- a/apps/docs/tailwind.config.js
+++ b/apps/docs/tailwind.config.js
@@ -2,9 +2,11 @@ const config = require('config/tailwind.config')
module.exports = config({
content: [
+ './app/**/*.{ts,tsx,mdx}',
'./components/**/*.tsx',
'./content/**/*.{ts,tsx,mdx}',
'./docs/**/*.{tsx,mdx}',
+ './features/**/*.{ts,tsx,mdx}',
'./layouts/**/*.tsx',
'./pages/**/*.{tsx,mdx}',
'./../../packages/ui/src/**/*.{tsx,ts,js}',
diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json
index ae8e217aa85..0e8f0b99046 100644
--- a/apps/docs/tsconfig.json
+++ b/apps/docs/tsconfig.json
@@ -20,7 +20,13 @@
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
- "module": "esnext"
+ "module": "esnext",
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "strictNullChecks": false
},
"include": [
"next-env.d.ts",
@@ -28,6 +34,7 @@
"**/*.tsx",
"pages/guides/append-test.js",
"jest.config.mjs",
+ ".next/types/**/*.ts",
"./../../packages/ui/src/**/*.d.ts"
],
"exclude": ["node_modules"]
diff --git a/package-lock.json b/package-lock.json
index b60df10462b..e17df090917 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14733,9 +14733,9 @@
"integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ=="
},
"node_modules/@types/lodash": {
- "version": "4.14.202",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
- "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==",
"dev": true
},
"node_modules/@types/lodash.template": {
@@ -42967,6 +42967,7 @@
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^13.5.0",
"@types/common-tags": "^1.8.4",
+ "@types/lodash": "^4.17.5",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"api-types": "*",
diff --git a/packages/common/MetaFavicons/pages-router.tsx b/packages/common/MetaFavicons/pages-router.tsx
index a2e5f157fa5..67bc040afa4 100644
--- a/packages/common/MetaFavicons/pages-router.tsx
+++ b/packages/common/MetaFavicons/pages-router.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import Head from 'next/head'
import { useRouter } from 'next/router'
diff --git a/packages/common/auth.tsx b/packages/common/auth.tsx
index 86cfffdaabc..2a8bc0d8c29 100644
--- a/packages/common/auth.tsx
+++ b/packages/common/auth.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import type { Session } from '@supabase/supabase-js'
import {
createContext,
diff --git a/packages/common/hooks/useBreakpoint.tsx b/packages/common/hooks/useBreakpoint.tsx
index ca6221326e1..8bdcb890449 100644
--- a/packages/common/hooks/useBreakpoint.tsx
+++ b/packages/common/hooks/useBreakpoint.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useState } from 'react'
import { useIsomorphicLayoutEffect, useWindowSize } from 'react-use'
diff --git a/packages/common/hooks/useConstant.ts b/packages/common/hooks/useConstant.ts
index 5255d3dabdb..9dd5723165d 100644
--- a/packages/common/hooks/useConstant.ts
+++ b/packages/common/hooks/useConstant.ts
@@ -1,3 +1,5 @@
+'use client'
+
// based on https://github.com/Andarist/use-constant
import { useRef } from 'react'
diff --git a/packages/common/hooks/useCopy.ts b/packages/common/hooks/useCopy.ts
index 460df34f30a..9b052e4adee 100644
--- a/packages/common/hooks/useCopy.ts
+++ b/packages/common/hooks/useCopy.ts
@@ -1,3 +1,5 @@
+'use client'
+
import { useState } from 'react'
export function useCopy() {
diff --git a/packages/common/hooks/useDebounce.tsx b/packages/common/hooks/useDebounce.tsx
index 9f70e50df7f..09203da0d1b 100644
--- a/packages/common/hooks/useDebounce.tsx
+++ b/packages/common/hooks/useDebounce.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useEffect, useMemo, useRef } from 'react'
import { debounce } from 'lodash'
diff --git a/packages/common/hooks/useDocsSearch.ts b/packages/common/hooks/useDocsSearch.ts
index 7d90c25a1f4..5252467cdef 100644
--- a/packages/common/hooks/useDocsSearch.ts
+++ b/packages/common/hooks/useDocsSearch.ts
@@ -1,3 +1,5 @@
+'use client'
+
import type { SupabaseClient } from '@supabase/supabase-js'
import { compact, debounce, uniqBy } from 'lodash'
import { useCallback, useMemo, useReducer, useRef } from 'react'
diff --git a/packages/common/hooks/useParams.ts b/packages/common/hooks/useParams.ts
index 879d3f4e50e..eb8043a9139 100644
--- a/packages/common/hooks/useParams.ts
+++ b/packages/common/hooks/useParams.ts
@@ -1,4 +1,15 @@
-import { useRouter } from 'next/router'
+/*
+ * next/compat/router is used so that this doesn't cause an error on App
+ * Router builds. However, no replacement for the functionality is provided if
+ * the router is missing (it just silently fails).
+ *
+ * This is fine because docs (the only site moving to App Router right now)
+ * doesn't use this hook. Skipping it silently is less troublesome than trying
+ * to make it work across both routers -- making search params work seamlessly
+ * is a giant pain, and too much critical studio functionality depends on this
+ * to mess with it lightly.
+ */
+import { useRouter } from 'next/compat/router'
import { useMemo } from 'react'
/**
@@ -22,7 +33,8 @@ function convertToCamelCase(key: string): string {
export function useParams(): {
[k: string]: string | undefined
} {
- const { query } = useRouter()
+ const router = useRouter()
+ const query = router?.query
const modifiedQuery = {
...query,
diff --git a/packages/common/hooks/useSearchParamsShallow.ts b/packages/common/hooks/useSearchParamsShallow.ts
index a5245404144..c2ccfcf454b 100644
--- a/packages/common/hooks/useSearchParamsShallow.ts
+++ b/packages/common/hooks/useSearchParamsShallow.ts
@@ -1,3 +1,5 @@
+'use client'
+
import { useCallback, useEffect, useId, useMemo, useReducer, useRef } from 'react'
/**
diff --git a/packages/common/hooks/useTelemetryProps.ts b/packages/common/hooks/useTelemetryProps.ts
index 5a0b1f9c399..e780615654c 100644
--- a/packages/common/hooks/useTelemetryProps.ts
+++ b/packages/common/hooks/useTelemetryProps.ts
@@ -1,8 +1,11 @@
-import { useRouter } from 'next/router'
+'use client'
+
+import { useRouter } from 'next/compat/router'
import { isBrowser } from '../helpers'
export function useTelemetryProps() {
- const { locale } = useRouter()
+ const router = useRouter()
+ const locale = router ? router.locale : undefined
return {
screenResolution: isBrowser ? `${window.innerWidth}x${window.innerHeight}` : undefined,
diff --git a/packages/common/hooks/useThemeSandbox.tsx b/packages/common/hooks/useThemeSandbox.tsx
index 06b49c08b6c..103cce7fd87 100644
--- a/packages/common/hooks/useThemeSandbox.tsx
+++ b/packages/common/hooks/useThemeSandbox.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useEffect, useState } from 'react'
import { IS_PROD } from '../constants'
diff --git a/packages/ui-patterns/AssistantChat/AssistantChatForm.tsx b/packages/ui-patterns/AssistantChat/AssistantChatForm.tsx
index 6e620a1dd2e..dedae876eb7 100644
--- a/packages/ui-patterns/AssistantChat/AssistantChatForm.tsx
+++ b/packages/ui-patterns/AssistantChat/AssistantChatForm.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { Loader2 } from 'lucide-react'
import React, { ChangeEvent, createRef, useEffect } from 'react'
import { TextArea } from 'ui/src/components/shadcn/ui/text-area'
diff --git a/packages/ui-patterns/Cmdk/AiCommand.tsx b/packages/ui-patterns/Cmdk/AiCommand.tsx
index c98472451e6..7b4fde7e53b 100644
--- a/packages/ui-patterns/Cmdk/AiCommand.tsx
+++ b/packages/ui-patterns/Cmdk/AiCommand.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import type OpenAI from 'openai'
import {
Dispatch,
diff --git a/packages/ui-patterns/Cmdk/CommandMenu.tsx b/packages/ui-patterns/Cmdk/CommandMenu.tsx
index 0bc5193a29d..6084daa1671 100644
--- a/packages/ui-patterns/Cmdk/CommandMenu.tsx
+++ b/packages/ui-patterns/Cmdk/CommandMenu.tsx
@@ -1,5 +1,7 @@
+'use client'
+
import { useParams } from 'common'
-import { useRouter } from 'next/router'
+import { useRouter } from 'next/navigation'
import * as React from 'react'
import { AiIconAnimation } from 'ui/src/layout/ai-icon-animation/ai-icon-animation'
diff --git a/packages/ui-patterns/Cmdk/CommandMenuProvider.tsx b/packages/ui-patterns/Cmdk/CommandMenuProvider.tsx
index b15361aedae..72f921f67c7 100644
--- a/packages/ui-patterns/Cmdk/CommandMenuProvider.tsx
+++ b/packages/ui-patterns/Cmdk/CommandMenuProvider.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import dynamic from 'next/dynamic'
import {
createContext,
diff --git a/packages/ui-patterns/Cmdk/DocsSearch.tsx b/packages/ui-patterns/Cmdk/DocsSearch.tsx
index df393436b8c..32f554068e7 100644
--- a/packages/ui-patterns/Cmdk/DocsSearch.tsx
+++ b/packages/ui-patterns/Cmdk/DocsSearch.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useSupabaseClient } from '@supabase/auth-helpers-react'
import {
type DocsSearchResult as Page,
@@ -6,7 +8,7 @@ import {
useDocsSearch,
} from 'common'
import { Book, ChevronRight, Github, Hash, Loader2, MessageSquare, Search } from 'lucide-react'
-import { useRouter } from 'next/router'
+import { useRouter } from 'next/navigation'
import { useEffect, useRef } from 'react'
import { Button } from 'ui'
import { CommandGroup, CommandItem, CommandLabel, TextHighlighter } from './Command.utils'
diff --git a/packages/ui-patterns/Cmdk/SearchButton.tsx b/packages/ui-patterns/Cmdk/SearchButton.tsx
index d5f1bcef345..eb0a4d4db55 100644
--- a/packages/ui-patterns/Cmdk/SearchButton.tsx
+++ b/packages/ui-patterns/Cmdk/SearchButton.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { ButtonHTMLAttributes, DetailedHTMLProps, PropsWithChildren, useRef } from 'react'
import { useCommandMenu } from './CommandMenuProvider'
diff --git a/packages/ui-patterns/ConsentToast/index.tsx b/packages/ui-patterns/ConsentToast/index.tsx
index 33506cba7ee..3a46bf60797 100644
--- a/packages/ui-patterns/ConsentToast/index.tsx
+++ b/packages/ui-patterns/ConsentToast/index.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import {
LOCAL_STORAGE_KEYS,
handlePageTelemetry,
diff --git a/packages/ui-patterns/CountdownWidget/CountdownStep.tsx b/packages/ui-patterns/CountdownWidget/CountdownStep.tsx
index 85927e3d805..7d183909585 100644
--- a/packages/ui-patterns/CountdownWidget/CountdownStep.tsx
+++ b/packages/ui-patterns/CountdownWidget/CountdownStep.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useEffect, useState } from 'react'
import { cn } from 'ui'
diff --git a/packages/ui-patterns/Dialogs/ConfirmDialog.tsx b/packages/ui-patterns/Dialogs/ConfirmDialog.tsx
index 11ff5a24457..80aba0f849b 100644
--- a/packages/ui-patterns/Dialogs/ConfirmDialog.tsx
+++ b/packages/ui-patterns/Dialogs/ConfirmDialog.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useEffect, useState } from 'react'
import { Button, Form, Modal } from 'ui'
diff --git a/packages/ui-patterns/GlassPanel/index.tsx b/packages/ui-patterns/GlassPanel/index.tsx
index e2b0fd526ad..1f91067762a 100644
--- a/packages/ui-patterns/GlassPanel/index.tsx
+++ b/packages/ui-patterns/GlassPanel/index.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useTheme } from 'next-themes'
import Image from 'next/image'
import * as React from 'react'
diff --git a/packages/ui-patterns/IconPanel/index.tsx b/packages/ui-patterns/IconPanel/index.tsx
index 90e01d8ba7e..5e8e71f2890 100644
--- a/packages/ui-patterns/IconPanel/index.tsx
+++ b/packages/ui-patterns/IconPanel/index.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useTheme } from 'next-themes'
import * as React from 'react'
import { ChevronRight } from 'react-feather'
diff --git a/packages/ui-patterns/PrivacySettings/index.tsx b/packages/ui-patterns/PrivacySettings/index.tsx
index 53f48224a93..61789b53d3c 100644
--- a/packages/ui-patterns/PrivacySettings/index.tsx
+++ b/packages/ui-patterns/PrivacySettings/index.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { LOCAL_STORAGE_KEYS } from 'common'
import Link from 'next/link'
import { PropsWithChildren, useEffect, useState } from 'react'
diff --git a/packages/ui-patterns/SqlToRest/index.tsx b/packages/ui-patterns/SqlToRest/index.tsx
index b180065a980..5a1187c8e39 100644
--- a/packages/ui-patterns/SqlToRest/index.tsx
+++ b/packages/ui-patterns/SqlToRest/index.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import Editor, { useMonaco } from '@monaco-editor/react'
import { ChevronUp, GitPullRequest } from 'lucide-react'
import type { editor } from 'monaco-editor'
diff --git a/packages/ui-patterns/ThemeImage/index.tsx b/packages/ui-patterns/ThemeImage/index.tsx
index bce80dff03e..be2950698d0 100644
--- a/packages/ui-patterns/ThemeImage/index.tsx
+++ b/packages/ui-patterns/ThemeImage/index.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useTheme } from 'next-themes'
import Image from 'next/image'
import { useEffect, useState } from 'react'
diff --git a/packages/ui-patterns/ThemeToggle.tsx b/packages/ui-patterns/ThemeToggle.tsx
index 8a53c91112d..f5443a0e4c1 100644
--- a/packages/ui-patterns/ThemeToggle.tsx
+++ b/packages/ui-patterns/ThemeToggle.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import { useTheme } from 'next-themes'
import { useState } from 'react'
import {
diff --git a/packages/ui-patterns/package.json b/packages/ui-patterns/package.json
index cdce0f619bf..ee62b3c0aa1 100644
--- a/packages/ui-patterns/package.json
+++ b/packages/ui-patterns/package.json
@@ -37,6 +37,7 @@
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^13.5.0",
"@types/common-tags": "^1.8.4",
+ "@types/lodash": "^4.17.5",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"api-types": "*",
diff --git a/packages/ui/src/components/TextLink/TextLink.tsx b/packages/ui/src/components/TextLink/TextLink.tsx
index ce946291ca9..17f7ae1cc88 100644
--- a/packages/ui/src/components/TextLink/TextLink.tsx
+++ b/packages/ui/src/components/TextLink/TextLink.tsx
@@ -1,3 +1,5 @@
+'use client'
+
import Link from 'next/link'
import { IconChevronRight, cn } from 'ui'
From e45c1b90d7f1f9fce7f64e542ebd72276738500a Mon Sep 17 00:00:00 2001
From: 0xflotus <0xflotus@gmail.com>
Date: Tue, 25 Jun 2024 00:57:04 +0200
Subject: [PATCH 026/316] chore: fixed small error in features.mdx (#27508)
* chore: fixed small error in features.mdx
* Update features.mdx
---
apps/docs/content/guides/getting-started/features.mdx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/apps/docs/content/guides/getting-started/features.mdx b/apps/docs/content/guides/getting-started/features.mdx
index f6869b58edf..a3f255db912 100644
--- a/apps/docs/content/guides/getting-started/features.mdx
+++ b/apps/docs/content/guides/getting-started/features.mdx
@@ -104,7 +104,7 @@ Provide phone logins using a third-party SMS provider. [Docs](/docs/guides/auth/
### Passwordless login
-Build passwordless logins via magic links for your application or website.[Docs](/docs/guides/auth/auth-magic-link).
+Build passwordless logins via magic links for your application or website. [Docs](/docs/guides/auth/auth-magic-link).
### Authorization via Row Level Security
@@ -185,7 +185,7 @@ Features are initially launched as a private alpha to gather feedback from the c
### Public Alpha
-he alpha stage indicates that the API might change in the future, not that the service isn’t stable. Even though the [uptime Service Level Agreement](https://supabase.com/sla) does not cover products in Alpha, we do our best to have the service as stable as possible.
+The alpha stage indicates that the API might change in the future, not that the service isn’t stable. Even though the [uptime Service Level Agreement](https://supabase.com/sla) does not cover products in Alpha, we do our best to have the service as stable as possible.
### Beta
From 029a4f7cb74838620fd4a0a7f43969a3ad8cc8e2 Mon Sep 17 00:00:00 2001
From: Joel Lee
Date: Tue, 25 Jun 2024 06:03:58 +0200
Subject: [PATCH 027/316] feat: update package-lock to use ssr v0.4.0 (#27503)
---
examples/auth/nextjs/package-lock.json | 366 +++++++++++++------------
1 file changed, 195 insertions(+), 171 deletions(-)
diff --git a/examples/auth/nextjs/package-lock.json b/examples/auth/nextjs/package-lock.json
index e9c5b085dfc..87ecf300851 100644
--- a/examples/auth/nextjs/package-lock.json
+++ b/examples/auth/nextjs/package-lock.json
@@ -94,14 +94,14 @@
}
},
"node_modules/@next/env": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz",
- "integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ=="
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.4.tgz",
+ "integrity": "sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg=="
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz",
- "integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz",
+ "integrity": "sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==",
"cpu": [
"arm64"
],
@@ -114,9 +114,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz",
- "integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz",
+ "integrity": "sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==",
"cpu": [
"x64"
],
@@ -129,9 +129,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz",
- "integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz",
+ "integrity": "sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==",
"cpu": [
"arm64"
],
@@ -144,9 +144,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz",
- "integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz",
+ "integrity": "sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==",
"cpu": [
"arm64"
],
@@ -159,9 +159,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz",
- "integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz",
+ "integrity": "sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==",
"cpu": [
"x64"
],
@@ -174,9 +174,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz",
- "integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz",
+ "integrity": "sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==",
"cpu": [
"x64"
],
@@ -189,9 +189,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz",
- "integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz",
+ "integrity": "sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==",
"cpu": [
"arm64"
],
@@ -204,9 +204,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz",
- "integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz",
+ "integrity": "sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==",
"cpu": [
"ia32"
],
@@ -219,9 +219,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz",
- "integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz",
+ "integrity": "sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg==",
"cpu": [
"x64"
],
@@ -274,18 +274,30 @@
"node": ">=14"
}
},
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
+ "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
"node_modules/@supabase/auth-js": {
- "version": "2.63.0",
- "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.63.0.tgz",
- "integrity": "sha512-yIgcHnlgv24GxHtVGUhwGqAFDyJkPIC/xjx7HostN08A8yCy8HIfl4JEkTKyBqD1v1L05jNEJOUke4Lf4O1+Qg==",
+ "version": "2.64.2",
+ "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.64.2.tgz",
+ "integrity": "sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==",
"dependencies": {
"@supabase/node-fetch": "^2.6.14"
}
},
"node_modules/@supabase/functions-js": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.2.2.tgz",
- "integrity": "sha512-sJGq1nludmi7pY/fdtCpyY/pYonx7MfHdN408bqb736guWcVI1AChYVbI4kUM978EuOE4Ci6l7bUudfGg07QRw==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.1.tgz",
+ "integrity": "sha512-8sZ2ibwHlf+WkHDUZJUXqqmPvWQ3UHN0W30behOJngVh/qHHekhJLCFbh0AjkE9/FqqXtf9eoVvmYgfCLk5tNA==",
"dependencies": {
"@supabase/node-fetch": "^2.6.14"
}
@@ -302,17 +314,17 @@
}
},
"node_modules/@supabase/postgrest-js": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.0.tgz",
- "integrity": "sha512-U4bwBOrhsXWqDjZiYNbVqMBtRGgIIYE0kE5ZNSwsIbeBWfr/UxOMrnkIQUBGIZRhpYW/tw1WnTdRl1AGNyaxcw==",
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.5.tgz",
+ "integrity": "sha512-YR4TiitTE2hizT7mB99Cl3V9i00RAY5sUxS2/NuWWzkreM7OeYlP2OqnqVwwb4z6ILn+j8x9e/igJDepFhjswQ==",
"dependencies": {
"@supabase/node-fetch": "^2.6.14"
}
},
"node_modules/@supabase/realtime-js": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.3.tgz",
- "integrity": "sha512-lAp50s2n3FhGJFq+wTSXLNIDPw5Y0Wxrgt44eM5nLSA3jZNUUP3Oq2Ccd1CbZdVntPCWLZvJaU//pAd2NE+QnQ==",
+ "version": "2.9.5",
+ "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.5.tgz",
+ "integrity": "sha512-TEHlGwNGGmKPdeMtca1lFTYCedrhTAv3nZVoSjrKQ+wkMmaERuCe57zkC5KSWFzLYkb5FVHW8Hrr+PX1DDwplQ==",
"dependencies": {
"@supabase/node-fetch": "^2.6.14",
"@types/phoenix": "^1.5.4",
@@ -321,43 +333,51 @@
}
},
"node_modules/@supabase/ssr": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@supabase/ssr/-/ssr-0.1.0.tgz",
- "integrity": "sha512-bIVrkqjAK5G3KjkIMKYKtAOlCgRRplEWjrlyRyXSOYtgDieiOhk2ZyNAPsEOa1By9OZVxuX5eAW1fitdnuxayw==",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@supabase/ssr/-/ssr-0.4.0.tgz",
+ "integrity": "sha512-6WS3NUvHDhCPAFN2kJ79AQDO8+M9fJ7y2fYpxgZqIuJEpnnGsHDNnB5Xnv8CiaJIuRU+0pKboy62RVZBMfZ0Lg==",
"dependencies": {
- "cookie": "^0.5.0",
- "ramda": "^0.29.0"
+ "cookie": "^0.6.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-linux-x64-gnu": "^4.9.5"
},
"peerDependencies": {
- "@supabase/supabase-js": "^2.33.1"
+ "@supabase/supabase-js": "^2.43.4"
}
},
"node_modules/@supabase/storage-js": {
- "version": "2.5.5",
- "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz",
- "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.6.0.tgz",
+ "integrity": "sha512-REAxr7myf+3utMkI2oOmZ6sdplMZZ71/2NEIEMBZHL9Fkmm3/JnaOZVSRqvG4LStYj2v5WhCruCzuMn6oD/Drw==",
"dependencies": {
"@supabase/node-fetch": "^2.6.14"
}
},
"node_modules/@supabase/supabase-js": {
- "version": "2.42.0",
- "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.42.0.tgz",
- "integrity": "sha512-1PDqJiA4iG45w3AAu6xkccJ3wPqlGJUoz9CPhScRLLTStxhewYhz0mjryTpXz1kgtNHdUAsirALreezn8UZMjA==",
+ "version": "2.43.5",
+ "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.43.5.tgz",
+ "integrity": "sha512-Y4GukjZWW6ouohMaPlYz8tSz9ykf9jY7w9/RhqKuScmla3Xiklce8eLr8TYAtA+oQYCWxo3RgS3B6O4rd/72FA==",
"dependencies": {
- "@supabase/auth-js": "2.63.0",
- "@supabase/functions-js": "2.2.2",
+ "@supabase/auth-js": "2.64.2",
+ "@supabase/functions-js": "2.4.1",
"@supabase/node-fetch": "2.6.15",
- "@supabase/postgrest-js": "1.15.0",
- "@supabase/realtime-js": "2.9.3",
- "@supabase/storage-js": "2.5.5"
+ "@supabase/postgrest-js": "1.15.5",
+ "@supabase/realtime-js": "2.9.5",
+ "@supabase/storage-js": "2.6.0"
}
},
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
+ },
"node_modules/@swc/helpers": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
- "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
+ "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
"dependencies": {
+ "@swc/counter": "^0.1.3",
"tslib": "^2.4.0"
}
},
@@ -370,9 +390,9 @@
}
},
"node_modules/@types/phoenix": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz",
- "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA=="
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.5.tgz",
+ "integrity": "sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w=="
},
"node_modules/@types/prop-types": {
"version": "15.7.12",
@@ -519,20 +539,20 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/browserslist": {
- "version": "4.23.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
- "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
+ "version": "4.23.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz",
+ "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
"funding": [
{
"type": "opencollective",
@@ -548,10 +568,10 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001587",
- "electron-to-chromium": "^1.4.668",
+ "caniuse-lite": "^1.0.30001629",
+ "electron-to-chromium": "^1.4.796",
"node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.13"
+ "update-browserslist-db": "^1.0.16"
},
"bin": {
"browserslist": "cli.js"
@@ -580,9 +600,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001605",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz",
- "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==",
+ "version": "1.0.30001636",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz",
+ "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==",
"funding": [
{
"type": "opencollective",
@@ -662,9 +682,9 @@
}
},
"node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"engines": {
"node": ">= 0.6"
}
@@ -715,9 +735,9 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/electron-to-chromium": {
- "version": "1.4.728",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.728.tgz",
- "integrity": "sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw=="
+ "version": "1.4.810",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz",
+ "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ=="
},
"node_modules/emoji-regex": {
"version": "9.2.2",
@@ -776,9 +796,9 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -787,9 +807,9 @@
}
},
"node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+ "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -843,21 +863,22 @@
}
},
"node_modules/glob": {
- "version": "10.3.12",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
- "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.6",
- "minimatch": "^9.0.1",
- "minipass": "^7.0.4",
- "path-scurry": "^1.10.2"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -914,11 +935,14 @@
}
},
"node_modules/is-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
+ "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
"dependencies": {
- "hasown": "^2.0.0"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -965,9 +989,9 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -982,9 +1006,9 @@
}
},
"node_modules/jiti": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
- "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
"bin": {
"jiti": "bin/jiti.js"
}
@@ -1019,9 +1043,9 @@
}
},
"node_modules/lru-cache": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
- "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+ "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
"engines": {
"node": "14 || >=16.14"
}
@@ -1035,11 +1059,11 @@
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -1061,9 +1085,9 @@
}
},
"node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -1096,12 +1120,12 @@
}
},
"node_modules/next": {
- "version": "14.1.4",
- "resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz",
- "integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==",
+ "version": "14.2.4",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.4.tgz",
+ "integrity": "sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ==",
"dependencies": {
- "@next/env": "14.1.4",
- "@swc/helpers": "0.5.2",
+ "@next/env": "14.2.4",
+ "@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
"graceful-fs": "^4.2.11",
@@ -1115,18 +1139,19 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.1.4",
- "@next/swc-darwin-x64": "14.1.4",
- "@next/swc-linux-arm64-gnu": "14.1.4",
- "@next/swc-linux-arm64-musl": "14.1.4",
- "@next/swc-linux-x64-gnu": "14.1.4",
- "@next/swc-linux-x64-musl": "14.1.4",
- "@next/swc-win32-arm64-msvc": "14.1.4",
- "@next/swc-win32-ia32-msvc": "14.1.4",
- "@next/swc-win32-x64-msvc": "14.1.4"
+ "@next/swc-darwin-arm64": "14.2.4",
+ "@next/swc-darwin-x64": "14.2.4",
+ "@next/swc-linux-arm64-gnu": "14.2.4",
+ "@next/swc-linux-arm64-musl": "14.2.4",
+ "@next/swc-linux-x64-gnu": "14.2.4",
+ "@next/swc-linux-x64-musl": "14.2.4",
+ "@next/swc-win32-arm64-msvc": "14.2.4",
+ "@next/swc-win32-ia32-msvc": "14.2.4",
+ "@next/swc-win32-x64-msvc": "14.2.4"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sass": "^1.3.0"
@@ -1135,6 +1160,9 @@
"@opentelemetry/api": {
"optional": true
},
+ "@playwright/test": {
+ "optional": true
+ },
"sass": {
"optional": true
}
@@ -1204,6 +1232,11 @@
"node": ">= 6"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw=="
+ },
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -1218,24 +1251,24 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-scurry": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
- "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dependencies": {
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -1360,9 +1393,9 @@
}
},
"node_modules/postcss-load-config/node_modules/lilconfig": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
- "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
"engines": {
"node": ">=14"
},
@@ -1389,9 +1422,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.16",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
- "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -1424,15 +1457,6 @@
}
]
},
- "node_modules/ramda": {
- "version": "0.29.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz",
- "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/ramda"
- }
- },
"node_modules/react": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
@@ -1529,9 +1553,9 @@
"dev": true
},
"node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"dependencies": {
"loose-envify": "^1.1.0"
}
@@ -1801,9 +1825,9 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
},
"node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
},
"node_modules/typescript": {
"version": "5.3.3",
@@ -1823,9 +1847,9 @@
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
+ "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
"funding": [
{
"type": "opencollective",
@@ -1841,8 +1865,8 @@
}
],
"dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -1969,9 +1993,9 @@
}
},
"node_modules/ws": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
- "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
"engines": {
"node": ">=10.0.0"
},
@@ -1989,9 +2013,9 @@
}
},
"node_modules/yaml": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
- "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
+ "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
"bin": {
"yaml": "bin.mjs"
},
From eb55650d764a39c11818c2e3e147a09cf26d2656 Mon Sep 17 00:00:00 2001
From: Jonathan Summers-Muir
Date: Tue, 25 Jun 2024 15:47:24 +0800
Subject: [PATCH 028/316] [Dashboard] add data api option to new project form
(#26809)
* init layouts in project settings
* Update general.tsx
* update gap
* Update Scaffold.tsx
* Update PostgrestConfig.tsx
* Update PostgrestConfig.tsx
* spacing issues
* now added a enabled switch
* Revert "now added a enabled switch"
This reverts commit f22050302aa339c23b59cf008ee9b4fdc0e3c2b7.
* Update PostgrestConfig.tsx
* Update PostgrestConfig.tsx
* revert
* Update project-postgrest-config-update-mutation.ts
* add bottom padding
* init changes
* Update PostgrestConfig.tsx
* Update [slug].tsx
* add radio group
* add types
* Update PostgrestConfig.tsx
* fix
* Update PostgrestConfig.tsx
* Update project-create-mutation.ts
* update API types
* Update PostgrestConfig.tsx
* Update PostgrestConfig.tsx
* Update api.d.ts
* Update API codegen typings
* fix: issue with booleans in radios
* add warning box
* Update [slug].tsx
---------
Co-authored-by: Joshen Lim
---
.../data/projects/project-create-mutation.ts | 3 +
apps/studio/pages/new/[slug].tsx | 89 ++++++++++++++++++-
packages/api-types/types/api.d.ts | 74 ++++++++++++---
.../ui/src/components/radio-group-stacked.tsx | 10 +--
4 files changed, 153 insertions(+), 23 deletions(-)
diff --git a/apps/studio/data/projects/project-create-mutation.ts b/apps/studio/data/projects/project-create-mutation.ts
index 5ba8b0c5246..cc253f778eb 100644
--- a/apps/studio/data/projects/project-create-mutation.ts
+++ b/apps/studio/data/projects/project-create-mutation.ts
@@ -27,6 +27,7 @@ export type ProjectCreateVariables = {
authSiteUrl?: string
customSupabaseRequest?: object
dbInstanceSize?: DbInstanceSize
+ dataApiExposedSchemas?: string[]
}
export async function createProject({
@@ -40,6 +41,7 @@ export async function createProject({
authSiteUrl,
customSupabaseRequest,
dbInstanceSize,
+ dataApiExposedSchemas,
}: ProjectCreateVariables) {
const body: components['schemas']['CreateProjectBody'] = {
cloud_provider: cloudProvider,
@@ -54,6 +56,7 @@ export async function createProject({
custom_supabase_internal_requests: customSupabaseRequest as any,
}),
desired_instance_size: dbInstanceSize,
+ data_api_exposed_schemas: dataApiExposedSchemas,
}
const { data, error } = await post(`/platform/projects`, {
diff --git a/apps/studio/pages/new/[slug].tsx b/apps/studio/pages/new/[slug].tsx
index b0ed5dafb40..becbd70eb8f 100644
--- a/apps/studio/pages/new/[slug].tsx
+++ b/apps/studio/pages/new/[slug].tsx
@@ -33,7 +33,7 @@ import {
} from 'lib/constants'
import { passwordStrength } from 'lib/helpers'
import { debounce } from 'lodash'
-import { ExternalLink } from 'lucide-react'
+import { ChevronRight, ExternalLink } from 'lucide-react'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { PropsWithChildren, useEffect, useRef, useState } from 'react'
@@ -41,12 +41,19 @@ import { useForm } from 'react-hook-form'
import toast from 'react-hot-toast'
import type { NextPageWithLayout } from 'types'
import {
+ Admonition,
Badge,
Button,
+ CollapsibleContent_Shadcn_,
+ CollapsibleTrigger_Shadcn_,
+ Collapsible_Shadcn_,
FormControl_Shadcn_,
FormField_Shadcn_,
+ FormItem_Shadcn_,
Form_Shadcn_,
Input_Shadcn_,
+ RadioGroupStacked,
+ RadioGroupStackedItem,
SelectContent_Shadcn_,
SelectGroup_Shadcn_,
SelectItem_Shadcn_,
@@ -59,6 +66,7 @@ import {
TableHead,
TableHeader,
TableRow,
+ cn,
} from 'ui'
import { Input } from 'ui-patterns/DataInputs/Input'
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
@@ -255,6 +263,7 @@ const Wizard: NextPageWithLayout = () => {
})
.min(1, 'Password is required.'),
instanceSize: z.string(),
+ dataApi: z.boolean(),
})
.superRefine(({ dbPassStrength }, refinementContext) => {
if (dbPassStrength < DEFAULT_MINIMUM_PASSWORD_STRENGTH) {
@@ -278,6 +287,7 @@ const Wizard: NextPageWithLayout = () => {
dbPassStrength: 0,
dbRegion: defaultRegion || undefined,
instanceSize: sizes[0],
+ dataApi: true,
},
})
@@ -308,10 +318,11 @@ const Wizard: NextPageWithLayout = () => {
delayedCheckPasswordStrength(password)
}
- const onClickNext = async (values: z.infer) => {
+ const onSubmit = async (values: z.infer) => {
if (!currentOrg) return console.error('Unable to retrieve current organization')
- const { cloudProvider, projectName, dbPass, dbRegion, postgresVersion, instanceSize } = values
+ const { cloudProvider, projectName, dbPass, dbRegion, postgresVersion, instanceSize, dataApi } =
+ values
const data: ProjectCreateVariables = {
cloudProvider: cloudProvider,
@@ -324,6 +335,7 @@ const Wizard: NextPageWithLayout = () => {
// only set the instance size on pro+ plans. Free plans always use micro (nano in the future) size.
dbInstanceSize:
orgSubscription?.plan.id === 'free' ? undefined : (instanceSize as DesiredInstanceSize),
+ dataApiExposedSchemas: !dataApi ? [] : undefined,
}
if (postgresVersion) {
if (!postgresVersion.match(/1[2-9]\..*/)) {
@@ -380,7 +392,7 @@ const Wizard: NextPageWithLayout = () => {
return (
-