Repository: supabase/cli
Pull request #2339 (2024-05-29 12:05:22)

fix: pass jwt secret to studio container
## What kind of change does this PR introduce?

relates to https://github.com/supabase/supabase/pull/26858

## What is the new behavior?

- [ ] Bump studio version once upstream is merged.

## Additional context

Add any other context or screenshots.


coveralls: ## Pull Request Test Coverage Report for [Build 9285733816](https://coveralls.io/builds/67765305)


### Details

* **1** of **1**   **(100.0%)**  changed or added relevant line in **1** file are covered.
* **5** unchanged lines in **1** file lost coverage.
* Overall coverage decreased (**-0.01%**) to **60.185%**

---


|  Files with Coverage Reduction | New Missed Lines | % |
| :-----|--------------|--: |
| [internal/gen/keys/keys.go](https://coveralls.io/builds/67765305/source?filename=internal%2Fgen%2Fkeys%2Fkeys.go#L101) | 5 | 11.76% |
<!-- | **Total:** | **5** |  | -->

|  Totals | [![Coverage Status](https://coveralls.io/builds/67765305/badge)](https://coveralls.io/builds/67765305) |
| :-- | --: |
| Change from base [Build 9284607288](https://coveralls.io/builds/67763685): |  -0.01% |
| Covered Lines: | 6890 |
| Relevant Lines: | 11448 |

---
##### 💛  - [Coveralls](https://coveralls.io)


Patch:
diff --git a/.github/workflows/release-beta.yml b/.github/workflows/release-beta.yml
index 32a2089d..bc2601c0 100644
--- a/.github/workflows/release-beta.yml
+++ b/.github/workflows/release-beta.yml
@@ -41,10 +41,10 @@ jobs:
           go-version-file: go.mod
           cache: true
 
-      - uses: goreleaser/goreleaser-action@v5
+      - uses: goreleaser/goreleaser-action@v6
         with:
           distribution: goreleaser
-          version: ~> 1
+          version: ~> v2
           args: release --clean
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/api/beta.yaml b/api/beta.yaml
index e8542f9c..271985aa 100644
--- a/api/beta.yaml
+++ b/api/beta.yaml
@@ -106,7 +106,7 @@ paths:
         - bearer: []
   /v1/projects:
     get:
-      operationId: v1-get-all-projects
+      operationId: v1-list-all-projects
       summary: List all projects
       description: Returns a list of all projects you've previously created.
       parameters: []
@@ -1066,7 +1066,7 @@ paths:
       security:
         - bearer: []
     delete:
-      operationId: v1-deactive-vanity-subdomain-config
+      operationId: v1-deactivate-vanity-subdomain-config
       summary: '[Beta] Deletes a project''s vanity subdomain configuration'
       parameters:
         - name: ref
@@ -1401,7 +1401,7 @@ paths:
         - bearer: []
   /v1/projects/{ref}/config/database/postgres:
     get:
-      operationId: get-postgres-config
+      operationId: v1-get-postgres-config
       summary: Gets project's Postgres config
       parameters:
         - name: ref
@@ -1426,7 +1426,7 @@ paths:
       security:
         - bearer: []
     put:
-      operationId: update-postgres-config
+      operationId: v1-update-postgres-config
       summary: Updates project's Postgres config
       parameters:
         - name: ref
@@ -1480,6 +1480,67 @@ paths:
           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
@@ -3198,6 +3259,80 @@ components:
           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:
diff --git a/cmd/bootstrap.go b/cmd/bootstrap.go
index 64fb1af2..da5d96e4 100644
--- a/cmd/bootstrap.go
+++ b/cmd/bootstrap.go
@@ -65,7 +65,7 @@ var (
 
 func init() {
 	bootstrapFlags := bootstrapCmd.Flags()
-	bootstrapFlags.StringP("password", "p", "", "Password to your remote Postgres database.")
+	bootstrapFlags.StringVarP(&dbPassword, "password", "p", "", "Password to your remote Postgres database.")
 	cobra.CheckErr(viper.BindPFlag("DB_PASSWORD", bootstrapFlags.Lookup("password")))
 	rootCmd.AddCommand(bootstrapCmd)
 }
diff --git a/cmd/functions.go b/cmd/functions.go
index 5db0d395..6555bae9 100644
--- a/cmd/functions.go
+++ b/cmd/functions.go
@@ -82,7 +82,7 @@ var (
 	}
 
 	envFilePath string
-	inspectRun  bool
+	inspectBrk  bool
 	inspectMode = utils.EnumFlag{
 		Allowed: []string{
 			string(serve.InspectModeRun),
@@ -107,8 +107,8 @@ var (
 
 			if len(inspectMode.Value) > 0 {
 				runtimeOption.InspectMode = utils.Ptr(serve.InspectMode(inspectMode.Value))
-			} else if inspectRun {
-				runtimeOption.InspectMode = utils.Ptr(serve.InspectModeRun)
+			} else if inspectBrk {
+				runtimeOption.InspectMode = utils.Ptr(serve.InspectModeBrk)
 			}
 			if runtimeOption.InspectMode == nil && runtimeOption.InspectMain {
 				return fmt.Errorf("--inspect-main must be used together with one of these flags: [inspect inspect-mode]")
@@ -130,7 +130,7 @@ func init() {
 	functionsServeCmd.Flags().BoolVar(noVerifyJWT, "no-verify-jwt", false, "Disable JWT verification for the Function.")
 	functionsServeCmd.Flags().StringVar(&envFilePath, "env-file", "", "Path to an env file to be populated to the Function environment.")
 	functionsServeCmd.Flags().StringVar(&importMapPath, "import-map", "", "Path to import map file.")
-	functionsServeCmd.Flags().BoolVar(&inspectRun, "inspect", false, "Alias of --inspect-mode run.")
+	functionsServeCmd.Flags().BoolVar(&inspectBrk, "inspect", false, "Alias of --inspect-mode brk.")
 	functionsServeCmd.Flags().Var(&inspectMode, "inspect-mode", "Activate inspector capability for debugging.")
 	functionsServeCmd.Flags().BoolVar(&runtimeOption.InspectMain, "inspect-main", false, "Allow inspecting the main worker.")
 	functionsServeCmd.MarkFlagsMutuallyExclusive("inspect", "inspect-mode")
diff --git a/cmd/link.go b/cmd/link.go
index facaa532..780b667e 100644
--- a/cmd/link.go
+++ b/cmd/link.go
@@ -45,7 +45,8 @@ var (
 func init() {
 	linkFlags := linkCmd.Flags()
 	linkFlags.StringVar(&flags.ProjectRef, "project-ref", "", "Project ref of the Supabase project.")
-	linkFlags.StringP("password", "p", "", "Password to your remote Postgres database.")
+	linkFlags.StringVarP(&dbPassword, "password", "p", "", "Password to your remote Postgres database.")
+	// For some reason, BindPFlag only works for StringVarP instead of StringP
 	cobra.CheckErr(viper.BindPFlag("DB_PASSWORD", linkFlags.Lookup("password")))
 	rootCmd.AddCommand(linkCmd)
 }
diff --git a/cmd/root.go b/cmd/root.go
index 138fbf45..b0f9d50a 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -241,6 +241,7 @@ func init() {
 	flags.Bool("debug", false, "output debug logs to stderr")
 	flags.String("workdir", "", "path to a Supabase project directory")
 	flags.Bool("experimental", false, "enable experimental features")
+	flags.String("network-id", "", "use the specified docker network instead of a generated one")
 	flags.Var(&utils.DNSResolver, "dns-resolver", "lookup domain names using the specified resolver")
 	flags.BoolVar(&createTicket, "create-ticket", false, "create a support ticket for any CLI error")
 	cobra.CheckErr(viper.BindPFlags(flags))
diff --git a/docs/supabase/functions/serve.md b/docs/supabase/functions/serve.md
index ac11ad6a..1ce46321 100644
--- a/docs/supabase/functions/serve.md
+++ b/docs/supabase/functions/serve.md
@@ -5,7 +5,7 @@ Serve all Functions locally.
 `supabase functions serve` command includes additional flags to assist developers in debugging using tools like `DevTools`.
 
 1. `--inspect`
-   * Alias of `--inspect-mode run`.
+   * Alias of `--inspect-mode brk`.
 
 2. `--inspect-mode [ run | brk | wait ]`
    * Activates the inspector capability.
diff --git a/go.mod b/go.mod
index 378a9631..cd8c2dcf 100644
--- a/go.mod
+++ b/go.mod
@@ -8,13 +8,13 @@ require (
 	github.com/andybalholm/brotli v1.1.0
 	github.com/cenkalti/backoff/v4 v4.3.0
 	github.com/charmbracelet/bubbles v0.18.0
-	github.com/charmbracelet/bubbletea v0.26.3
+	github.com/charmbracelet/bubbletea v0.26.4
 	github.com/charmbracelet/glamour v0.7.0
 	github.com/charmbracelet/lipgloss v0.11.0
-	github.com/containers/common v0.59.0
-	github.com/deepmap/oapi-codegen/v2 v2.1.0
+	github.com/containers/common v0.59.1
+	github.com/deepmap/oapi-codegen/v2 v2.2.0
 	github.com/docker/cli v26.1.2+incompatible
-	github.com/docker/docker v26.1.3+incompatible
+	github.com/docker/docker v26.1.4+incompatible
 	github.com/docker/go-connections v0.5.0
 	github.com/docker/go-units v0.5.0
 	github.com/getsentry/sentry-go v0.28.0
@@ -43,17 +43,17 @@ require (
 	github.com/spf13/afero v1.11.0
 	github.com/spf13/cobra v1.8.0
 	github.com/spf13/pflag v1.0.5
-	github.com/spf13/viper v1.18.2
+	github.com/spf13/viper v1.19.0
 	github.com/stretchr/testify v1.9.0
-	github.com/stripe/pg-schema-diff v0.6.0
+	github.com/stripe/pg-schema-diff v0.7.0
 	github.com/withfig/autocomplete-tools/packages/cobra v1.2.0
 	github.com/zalando/go-keyring v0.2.4
-	golang.org/x/mod v0.17.0
-	golang.org/x/oauth2 v0.20.0
-	golang.org/x/term v0.20.0
+	golang.org/x/mod v0.18.0
+	golang.org/x/oauth2 v0.21.0
+	golang.org/x/term v0.21.0
 	google.golang.org/grpc v1.64.0
 	gopkg.in/yaml.v3 v3.0.1
-	gotest.tools/gotestsum v1.11.0
+	gotest.tools/gotestsum v1.12.0
 )
 
 require (
@@ -86,7 +86,7 @@ require (
 	github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
 	github.com/aymerick/douceur v0.2.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
-	github.com/bitfield/gotestdox v0.2.1 // indirect
+	github.com/bitfield/gotestdox v0.2.2 // indirect
 	github.com/bkielbasa/cyclop v1.2.1 // indirect
 	github.com/blizzy78/varnamelen v0.8.0 // indirect
 	github.com/bombsimon/wsl/v4 v4.2.1 // indirect
@@ -101,7 +101,7 @@ require (
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/charithe/durationcheck v0.0.10 // indirect
 	github.com/charmbracelet/harmonica v0.2.0 // indirect
-	github.com/charmbracelet/x/ansi v0.1.1 // indirect
+	github.com/charmbracelet/x/ansi v0.1.2 // indirect
 	github.com/charmbracelet/x/input v0.1.0 // indirect
 	github.com/charmbracelet/x/term v0.1.1 // indirect
 	github.com/charmbracelet/x/windows v0.1.0 // indirect
@@ -136,7 +136,7 @@ require (
 	github.com/fvbommel/sortorder v1.1.0 // indirect
 	github.com/fzipp/gocyclo v0.6.0 // indirect
 	github.com/gabriel-vasile/mimetype v1.4.3 // indirect
-	github.com/getkin/kin-openapi v0.122.0 // indirect
+	github.com/getkin/kin-openapi v0.124.0 // indirect
 	github.com/ghostiam/protogetter v0.3.6 // indirect
 	github.com/gin-contrib/sse v0.1.0 // indirect
 	github.com/go-critic/go-critic v0.11.4 // indirect
@@ -341,7 +341,7 @@ require (
 	golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect
 	golang.org/x/net v0.25.0 // indirect
 	golang.org/x/sync v0.7.0 // indirect
-	golang.org/x/sys v0.20.0 // indirect
+	golang.org/x/sys v0.21.0 // indirect
 	golang.org/x/text v0.15.0 // indirect
 	golang.org/x/tools v0.21.0 // indirect
 	google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect
diff --git a/go.sum b/go.sum
index 87d3ebde..91535db0 100644
--- a/go.sum
+++ b/go.sum
@@ -120,8 +120,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bitfield/gotestdox v0.2.1 h1:Zj8IMLAO5/oiAKoMmtN96eyFiPZraJRTH2p0zDgtxc0=
-github.com/bitfield/gotestdox v0.2.1/go.mod h1:D+gwtS0urjBrzguAkTM2wodsTQYFHdpx8eqRJ3N+9pY=
+github.com/bitfield/gotestdox v0.2.2 h1:x6RcPAbBbErKLnapz1QeAlf3ospg8efBsedU93CDsnE=
+github.com/bitfield/gotestdox v0.2.2/go.mod h1:D+gwtS0urjBrzguAkTM2wodsTQYFHdpx8eqRJ3N+9pY=
 github.com/bitly/go-hostpool v0.1.0/go.mod h1:4gOCgp6+NZnVqlKyZ/iBZFTAJKembaVENUpMkpg42fw=
 github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
 github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJY=
@@ -166,16 +166,16 @@ github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iy
 github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ=
 github.com/charmbracelet/bubbles v0.18.0 h1:PYv1A036luoBGroX6VWjQIE9Syf2Wby2oOl/39KLfy0=
 github.com/charmbracelet/bubbles v0.18.0/go.mod h1:08qhZhtIwzgrtBjAcJnij1t1H0ZRjwHyGsy6AL11PSw=
-github.com/charmbracelet/bubbletea v0.26.3 h1:iXyGvI+FfOWqkB2V07m1DF3xxQijxjY2j8PqiXYqasg=
-github.com/charmbracelet/bubbletea v0.26.3/go.mod h1:bpZHfDHTYJC5g+FBK+ptJRCQotRC+Dhh3AoMxa/2+3Q=
+github.com/charmbracelet/bubbletea v0.26.4 h1:2gDkkzLZaTjMl/dQBpNVtnvcCxsh/FCkimep7FC9c40=
+github.com/charmbracelet/bubbletea v0.26.4/go.mod h1:P+r+RRA5qtI1DOHNFn0otoNwB4rn+zNAzSj/EXz6xU0=
 github.com/charmbracelet/glamour v0.7.0 h1:2BtKGZ4iVJCDfMF229EzbeR1QRKLWztO9dMtjmqZSng=
 github.com/charmbracelet/glamour v0.7.0/go.mod h1:jUMh5MeihljJPQbJ/wf4ldw2+yBP59+ctV36jASy7ps=
 github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
 github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
 github.com/charmbracelet/lipgloss v0.11.0 h1:UoAcbQ6Qml8hDwSWs0Y1cB5TEQuZkDPH/ZqwWWYTG4g=
 github.com/charmbracelet/lipgloss v0.11.0/go.mod h1:1UdRTH9gYgpcdNN5oBtjbu/IzNKtzVtb7sqN1t9LNn8=
-github.com/charmbracelet/x/ansi v0.1.1 h1:CGAduulr6egay/YVbGc8Hsu8deMg1xZ/bkaXTPi1JDk=
-github.com/charmbracelet/x/ansi v0.1.1/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
+github.com/charmbracelet/x/ansi v0.1.2 h1:6+LR39uG8DE6zAmbu023YlqjJHkYXDF1z36ZwzO4xZY=
+github.com/charmbracelet/x/ansi v0.1.2/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
 github.com/charmbracelet/x/input v0.1.0 h1:TEsGSfZYQyOtp+STIjyBq6tpRaorH0qpwZUj8DavAhQ=
 github.com/charmbracelet/x/input v0.1.0/go.mod h1:ZZwaBxPF7IG8gWWzPUVqHEtWhc1+HXJPNuerJGRGZ28=
 github.com/charmbracelet/x/term v0.1.1 h1:3cosVAiPOig+EV4X9U+3LDgtwwAoEzJjNdwbXDjF6yI=
@@ -204,8 +204,8 @@ github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I
 github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
 github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
 github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-github.com/containers/common v0.59.0 h1:fy9Jz0B7Qs1C030bm73YJtVddaiFSZD3558EV1tgN2g=
-github.com/containers/common v0.59.0/go.mod h1:53VicJCZ2AD0O+Br7VVoyrS7viXF4YmwlTIocWUT8XE=
+github.com/containers/common v0.59.1 h1:7VkmJN3YvD0jLFwaUjLHSRJ98JLffydiyOJjYr0dUTo=
+github.com/containers/common v0.59.1/go.mod h1:53VicJCZ2AD0O+Br7VVoyrS7viXF4YmwlTIocWUT8XE=
 github.com/containers/storage v1.54.0 h1:xwYAlf6n9OnIlURQLLg3FYHbO74fQ/2W2N6EtQEUM4I=
 github.com/containers/storage v1.54.0/go.mod h1:PlMOoinRrBSnhYODLxt4EXl0nmJt+X0kjG0Xdt9fMTw=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
@@ -227,8 +227,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/deepmap/oapi-codegen/v2 v2.1.0 h1:I/NMVhJCtuvL9x+S2QzZKpSjGi33oDZwPRdemvOZWyQ=
-github.com/deepmap/oapi-codegen/v2 v2.1.0/go.mod h1:R1wL226vc5VmCNJUvMyYr3hJMm5reyv25j952zAVXZ8=
+github.com/deepmap/oapi-codegen/v2 v2.2.0 h1:FW4f7C0Xb6EaezBSB3GYw2QGwHD5ChDflG+3xSZBdvY=
+github.com/deepmap/oapi-codegen/v2 v2.2.0/go.mod h1:L4zUv7ULYDtYSb/aYk/xO3OYcQU6BoU/0viULkbi2DE=
 github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8=
 github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY=
 github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
@@ -243,8 +243,8 @@ github.com/docker/cli v26.1.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvM
 github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
 github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
 github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo=
-github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU=
+github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo=
 github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
 github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
@@ -274,6 +274,7 @@ github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a
 github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q=
 github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A=
 github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
+github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
 github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
 github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
 github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
@@ -285,7 +286,6 @@ github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7
 github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
 github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
 github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQmYw=
@@ -294,8 +294,8 @@ github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
 github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
 github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
 github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
-github.com/getkin/kin-openapi v0.122.0 h1:WB9Jbl0Hp/T79/JF9xlSW5Kl9uYdk/AWD0yAd9HOM10=
-github.com/getkin/kin-openapi v0.122.0/go.mod h1:PCWw/lfBrJY4HcdqE3jj+QFkaFK8ABoqo7PvqVhXXqw=
+github.com/getkin/kin-openapi v0.124.0 h1:VSFNMB9C9rTKBnQ/fpyDU8ytMTr4dWI9QovSKj9kz/M=
+github.com/getkin/kin-openapi v0.124.0/go.mod h1:wb1aSZA/iWmorQP9KTAS/phLj/t17B5jT7+fS8ed9NM=
 github.com/getsentry/sentry-go v0.28.0 h1:7Rqx9M3ythTKy2J6uZLHmc8Sz9OGgIlseuO1iBX/s0M=
 github.com/getsentry/sentry-go v0.28.0/go.mod h1:1fQZ+7l7eeJ3wYi82q5Hg8GqAPgefRq+FP/QhafYVgg=
 github.com/ghostiam/protogetter v0.3.6 h1:R7qEWaSgFCsy20yYHNIJsU9ZOb8TziSRRxuAOTVKeOk=
@@ -924,12 +924,11 @@ github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
 github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
 github.com/spf13/jwalterweatherman v0.0.0-20141219030609-3d60171a6431/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v1.0.0/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/viper v0.0.0-20150530192845-be5ff3e4840c/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
-github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
-github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
+github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
+github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
 github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0=
 github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0=
 github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I=
@@ -953,8 +952,8 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/stripe/pg-schema-diff v0.6.0 h1:A/fSyNrj4uA3yHw8KPDlhfL+kaPYUmFpVmF+Hh7qISk=
-github.com/stripe/pg-schema-diff v0.6.0/go.mod h1:NTdRinkrNDP9A0p1y9ioutRv0DOmjBcIwjpPnHW8sMY=
+github.com/stripe/pg-schema-diff v0.7.0 h1:00Z+LGGe9GhMsN5gLtx/ZwF/+xPOMgod/g8x8H1JmV4=
+github.com/stripe/pg-schema-diff v0.7.0/go.mod h1:HuTBuWLuvnY9g9nptbSD58xugN19zSJNkF4w/sYRtdU=
 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
 github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8=
@@ -1101,8 +1100,10 @@ golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw
 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
 golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
 golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
+golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
 golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
 golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1133,8 +1134,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl
 golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
 golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
-golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
 golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
 golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
@@ -1153,8 +1152,10 @@ golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
-golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
+golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1199,7 +1200,9 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
+golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
+golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
 golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
 golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -1208,8 +1211,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr
 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo=
-golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
+golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1224,6 +1227,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
 golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1279,7 +1283,6 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1293,9 +1296,13 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
-golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
+golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -1306,9 +1313,11 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
 golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
 golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
 golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
+golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
-golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
-golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
+golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
+golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
+golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1323,6 +1332,7 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
 golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
@@ -1400,6 +1410,8 @@ golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
 golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8=
+golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
 golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw=
 golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1526,10 +1538,10 @@ gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
-gotest.tools/gotestsum v1.11.0 h1:A88/QWw7acMjZH1dMe6KZFhw32odUOIjCiAU/Q4n3mI=
-gotest.tools/gotestsum v1.11.0/go.mod h1:cUOKgFEvWAP0twchmiOvdzX0SBZX0UI58bGRpRIu4xs=
-gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo=
-gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A=
+gotest.tools/gotestsum v1.12.0 h1:CmwtaGDkHxrZm4Ib0Vob89MTfpc3GrEFMJKovliPwGk=
+gotest.tools/gotestsum v1.12.0/go.mod h1:fAvqkSptospfSbQw26CTYzNwnsE/ztqLeyhP0h67ARY=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/internal/db/diff/migra.go b/internal/db/diff/migra.go
index 01ee2f5a..6b7dbd16 100644
--- a/internal/db/diff/migra.go
+++ b/internal/db/diff/migra.go
@@ -30,7 +30,7 @@ func DiffSchemaMigra(ctx context.Context, source, target string, schema []string
 			Cmd:   cmd,
 		},
 		container.HostConfig{
-			NetworkMode: container.NetworkMode("host"),
+			NetworkMode: network.NetworkHost,
 		},
 		network.NetworkingConfig{},
 		"",
diff --git a/internal/db/dump/dump.go b/internal/db/dump/dump.go
index ae812dea..a72ec30b 100644
--- a/internal/db/dump/dump.go
+++ b/internal/db/dump/dump.go
@@ -96,11 +96,12 @@ func dumpData(ctx context.Context, config pgconn.Config, schema, excludeTable []
 		"extensions",
 		"pgbouncer",
 		"realtime",
-		"_realtime",
 		// "storage",
-		"_analytics",
 		// "supabase_functions",
 		"supabase_migrations",
+		"_analytics",
+		"_realtime",
+		"_supavisor",
 	}
 	var env []string
 	if len(schema) > 0 {
@@ -174,7 +175,7 @@ func dump(ctx context.Context, config pgconn.Config, script string, env []string
 			Cmd:   []string{"bash", "-c", script, "--"},
 		},
 		container.HostConfig{
-			NetworkMode: container.NetworkMode("host"),
+			NetworkMode: network.NetworkHost,
 		},
 		network.NetworkingConfig{},
 		"",
diff --git a/internal/db/reset/templates/drop.sql b/internal/db/reset/templates/drop.sql
index d5583e39..368ee722 100644
--- a/internal/db/reset/templates/drop.sql
+++ b/internal/db/reset/templates/drop.sql
@@ -38,7 +38,8 @@ begin
     select *
     from pg_class c
     where
-      c.relnamespace::regnamespace::name in ('auth', 'supabase_migrations')
+      (c.relnamespace::regnamespace::name = 'auth' and c.relname != 'schema_migrations'
+      or c.relnamespace::regnamespace::name = 'supabase_migrations')
       and c.relkind = 'r'
   loop
     execute format('truncate %I.%I restart identity cascade', rec.relnamespace::regnamespace::name, rec.relname);
diff --git a/internal/db/start/start.go b/internal/db/start/start.go
index 778e3e5e..97ea520b 100644
--- a/internal/db/start/start.go
+++ b/internal/db/start/start.go
@@ -107,7 +107,6 @@ func NewHostConfig() container.HostConfig {
 			utils.DbId + ":/var/lib/postgresql/data",
 			utils.ConfigId + ":/etc/postgresql-custom",
 		},
-		ExtraHosts: []string{"host.docker.internal:host-gateway"},
 	})
 	return hostConfig
 }
diff --git a/internal/db/start/templates/schema.sql b/internal/db/start/templates/schema.sql
index a215f0d8..0d001023 100644
--- a/internal/db/start/templates/schema.sql
+++ b/internal/db/start/templates/schema.sql
@@ -18,6 +18,9 @@ alter schema _realtime owner to postgres;
 create schema if not exists _analytics;
 alter schema _analytics owner to postgres;
 
+create schema if not exists _supavisor;
+alter schema _supavisor owner to postgres;
+
 BEGIN;
 
 -- Create pg_net extension
diff --git a/internal/functions/deploy/deploy.go b/internal/functions/deploy/deploy.go
index 8041a9d4..01a4e607 100644
--- a/internal/functions/deploy/deploy.go
+++ b/internal/functions/deploy/deploy.go
@@ -129,8 +129,7 @@ func bundleFunction(ctx context.Context, slug, dockerEntrypointPath, importMapPa
 			Cmd:   cmd,
 		},
 		start.WithSyslogConfig(container.HostConfig{
-			Binds:      binds,
-			ExtraHosts: []string{"host.docker.internal:host-gateway"},
+			Binds: binds,
 		}),
 		network.NetworkingConfig{},
 		"",
diff --git a/internal/functions/download/download.go b/internal/functions/download/download.go
index 06b84273..6e7ee982 100644
--- a/internal/functions/download/download.go
+++ b/internal/functions/download/download.go
@@ -188,8 +188,7 @@ func extractOne(ctx context.Context, slug, eszipPath string) error {
 			Cmd:   []string{"unbundle", "--eszip", dockerEszipPath, "--output", utils.DockerDenoDir},
 		},
 		start.WithSyslogConfig(container.HostConfig{
-			Binds:      binds,
-			ExtraHosts: []string{"host.docker.internal:host-gateway"},
+			Binds: binds,
 		}),
 		network.NetworkingConfig{},
 		"",
diff --git a/internal/functions/serve/serve.go b/internal/functions/serve/serve.go
index a99acfc8..e227c9f5 100644
--- a/internal/functions/serve/serve.go
+++ b/internal/functions/serve/serve.go
@@ -220,7 +220,6 @@ EOF
 		start.WithSyslogConfig(container.HostConfig{
 			Binds:        binds,
 			PortBindings: portBindings,
-			ExtraHosts:   []string{"host.docker.internal:host-gateway"},
 		}),
 		network.NetworkingConfig{
 			EndpointsConfig: map[string]*network.EndpointSettings{
diff --git a/internal/gen/types/typescript/typescript.go b/internal/gen/types/typescript/typescript.go
index 3e85369d..442afdb8 100644
--- a/internal/gen/types/typescript/typescript.go
+++ b/internal/gen/types/typescript/typescript.go
@@ -40,7 +40,7 @@ func Run(ctx context.Context, projectId string, dbConfig pgconn.Config, schemas
 		return nil
 	}
 
-	networkID := "host"
+	hostConfig := container.HostConfig{}
 	if utils.IsLocalDatabase(dbConfig) {
 		if err := utils.AssertSupabaseDbIsRunning(); err != nil {
 			return err
@@ -53,7 +53,8 @@ func Run(ctx context.Context, projectId string, dbConfig pgconn.Config, schemas
 		// Use custom network when connecting to local database
 		dbConfig.Host = utils.DbAliases[0]
 		dbConfig.Port = 5432
-		networkID = utils.NetId
+	} else {
+		hostConfig.NetworkMode = network.NetworkHost
 	}
 	// pg-meta does not set username as the default database, ie. postgres
 	if len(dbConfig.Database) == 0 {
@@ -81,9 +82,7 @@ func Run(ctx context.Context, projectId string, dbConfig pgconn.Config, schemas
 			},
 			Cmd: []string{"node", "dist/server/server.js"},
 		},
-		container.HostConfig{
-			NetworkMode: container.NetworkMode(networkID),
-		},
+		hostConfig,
 		network.NetworkingConfig{},
 		"",
 		os.Stdout,
diff --git a/internal/login/login_linux.go b/internal/login/login_linux.go
index 6475a60d..a8a182c5 100644
--- a/internal/login/login_linux.go
+++ b/internal/login/login_linux.go
@@ -1,4 +1,4 @@
-//go:build !windows && !darwin
+//go:build linux
 
 package login
 
diff --git a/internal/postgresConfig/get/get.go b/internal/postgresConfig/get/get.go
index 1234c454..ad311b39 100644
--- a/internal/postgresConfig/get/get.go
+++ b/internal/postgresConfig/get/get.go
@@ -49,7 +49,7 @@ func PrintOutPostgresConfigOverrides(config map[string]interface{}) error {
 }
 
 func GetCurrentPostgresConfig(ctx context.Context, projectRef string) (map[string]interface{}, error) {
-	resp, err := utils.GetSupabase().GetPostgresConfig(ctx, projectRef)
+	resp, err := utils.GetSupabase().V1GetPostgresConfig(ctx, projectRef)
 	if err != nil {
 		return nil, errors.Errorf("failed to retrieve Postgres config overrides: %w", err)
 	}
diff --git a/internal/postgresConfig/update/update.go b/internal/postgresConfig/update/update.go
index 428b5be6..00a9766f 100644
--- a/internal/postgresConfig/update/update.go
+++ b/internal/postgresConfig/update/update.go
@@ -53,7 +53,7 @@ func Run(ctx context.Context, projectRef string, values []string, replaceOverrid
 		if err != nil {
 			return errors.Errorf("failed to serialize config overrides: %w", err)
 		}
-		resp, err := utils.GetSupabase().UpdatePostgresConfigWithBodyWithResponse(ctx, projectRef, "application/json", bytes.NewReader(bts))
+		resp, err := utils.GetSupabase().V1UpdatePostgresConfigWithBodyWithResponse(ctx, projectRef, "application/json", bytes.NewReader(bts))
 		if err != nil {
 			return errors.Errorf("failed to update config overrides: %w", err)
 		}
diff --git a/internal/projects/delete/delete.go b/internal/projects/delete/delete.go
index e9c9fd00..c8ce9d53 100644
--- a/internal/projects/delete/delete.go
+++ b/internal/projects/delete/delete.go
@@ -8,6 +8,7 @@ import (
 
 	"github.com/go-errors/errors"
 	"github.com/spf13/afero"
+	"github.com/supabase/cli/internal/unlink"
 	"github.com/supabase/cli/internal/utils"
 	"github.com/supabase/cli/internal/utils/credentials"
 	"github.com/zalando/go-keyring"
@@ -46,17 +47,8 @@ func Run(ctx context.Context, ref string, fsys afero.Fs) error {
 		fmt.Fprintln(os.Stderr, err)
 	}
 	if match, err := afero.FileContainsBytes(fsys, utils.ProjectRefPath, []byte(ref)); match {
-		tmpFiles := []string{
-			utils.ProjectRefPath,
-			utils.PostgresVersionPath,
-			utils.GotrueVersionPath,
-			utils.RestVersionPath,
-			utils.StorageVersionPath,
-		}
-		for _, path := range tmpFiles {
-			if err := fsys.Remove(path); err != nil && !errors.Is(err, os.ErrNotExist) {
-				fmt.Fprintln(os.Stderr, err)
-			}
+		if err := unlink.Unlink(ref, fsys); err != nil {
+			fmt.Fprintln(os.Stderr, err)
 		}
 	} else if err != nil {
 		logger := utils.GetDebugLogger()
diff --git a/internal/projects/list/list.go b/internal/projects/list/list.go
index f071752f..18798ec0 100644
--- a/internal/projects/list/list.go
+++ b/internal/projects/list/list.go
@@ -15,7 +15,7 @@ import (
 )
 
 func Run(ctx context.Context, fsys afero.Fs) error {
-	resp, err := utils.GetSupabase().V1GetAllProjectsWithResponse(ctx)
+	resp, err := utils.GetSupabase().V1ListAllProjectsWithResponse(ctx)
 	if err != nil {
 		return errors.Errorf("failed to list projects: %w", err)
 	}
diff --git a/internal/services/services.go b/internal/services/services.go
index 626139f2..f0bd2e1b 100644
--- a/internal/services/services.go
+++ b/internal/services/services.go
@@ -52,7 +52,7 @@ func GetServiceImages() []string {
 		utils.StudioImage,
 		utils.PgmetaImage,
 		utils.LogflareImage,
-		utils.PgbouncerImage,
+		utils.SupavisorImage,
 		utils.ImageProxyImage,
 	}
 }
diff --git a/internal/start/start.go b/internal/start/start.go
index 16192be0..b2bededd 100644
--- a/internal/start/start.go
+++ b/internal/start/start.go
@@ -136,6 +136,23 @@ var (
 	vectorConfigTemplate = template.Must(template.New("vectorConfig").Parse(vectorConfigEmbed))
 )
 
+type poolerTenant struct {
+	DbHost            string
+	DbPort            uint16
+	DbDatabase        string
+	DbPassword        string
+	ExternalId        string
+	ModeType          utils.PoolMode
+	DefaultMaxClients uint
+	DefaultPoolSize   uint
+}
+
+var (
+	//go:embed templates/pooler.exs
+	poolerTenantEmbed    string
+	poolerTenantTemplate = template.Must(template.New("poolerTenant").Parse(poolerTenantEmbed))
+)
+
 func run(p utils.Program, ctx context.Context, fsys afero.Fs, excludedContainers []string, dbConfig pgconn.Config, options ...func(*pgx.ConnConfig)) error {
 	excluded := make(map[string]bool)
 	for _, name := range excludedContainers {
@@ -171,12 +188,9 @@ func run(p utils.Program, ctx context.Context, fsys afero.Fs, excludedContainers
 EOF
 `},
 				Healthcheck: &container.HealthConfig{
-					Test: []string{"CMD",
-						"wget",
-						"--no-verbose",
-						"--tries=1",
-						"--spider",
-						"http://127.0.0.1:9001/health"},
+					Test: []string{"CMD", "wget", "--no-verbose", "--tries=1", "--spider",
+						"http://127.0.0.1:9001/health",
+					},
 					Interval: 10 * time.Second,
 					Timeout:  2 * time.Second,
 					Retries:  3,
@@ -267,7 +281,9 @@ EOF
 EOF
 `},
 				Healthcheck: &container.HealthConfig{
-					Test:        []string{"CMD", "curl", "-sSfL", "--head", "-o", "/dev/null", "http://127.0.0.1:4000/health"},
+					Test: []string{"CMD", "curl", "-sSfL", "--head", "-o", "/dev/null",
+						"http://127.0.0.1:4000/health",
+					},
 					Interval:    10 * time.Second,
 					Timeout:     2 * time.Second,
 					Retries:     3,
@@ -570,7 +586,9 @@ EOF
 				Env:          env,
 				ExposedPorts: nat.PortSet{"9999/tcp": {}},
 				Healthcheck: &container.HealthConfig{
-					Test:     []string{"CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:9999/health"},
+					Test: []string{"CMD", "wget", "--no-verbose", "--tries=1", "--spider",
+						"http://127.0.0.1:9999/health",
+					},
 					Interval: 10 * time.Second,
 					Timeout:  2 * time.Second,
 					Retries:  3,
@@ -663,8 +681,10 @@ EOF
 				},
 				ExposedPorts: nat.PortSet{"4000/tcp": {}},
 				Healthcheck: &container.HealthConfig{
-					Test: []string{"CMD", "curl", "-sSfL", "--head", "-o", "/dev/null", "-H", "Authorization: Bearer " + utils.Config.Auth.AnonKey,
-						fmt.Sprintf("http://127.0.0.1:4000/api/tenants/%s/health", utils.Config.Realtime.TenantId),
+					// Podman splits command by spaces unless it's quoted, but curl header can't be quoted.
+					Test: []string{"CMD", "curl", "-sSfL", "--head", "-o", "/dev/null",
+						"-H", "Host:" + utils.Config.Realtime.TenantId,
+						"http://127.0.0.1:4000/api/ping",
 					},
 					Interval: 10 * time.Second,
 					Timeout:  2 * time.Second,
@@ -752,8 +772,10 @@ EOF
 					"UPLOAD_FILE_SIZE_LIMIT_STANDARD=5242880000",
 				},
 				Healthcheck: &container.HealthConfig{
-					// For some reason, 127.0.0.1 resolves to IPv6 address on GitPod which breaks healthcheck.
-					Test:     []string{"CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:5000/status"},
+					// For some reason, localhost resolves to IPv6 address on GitPod which breaks healthcheck.
+					Test: []string{"CMD", "wget", "--no-verbose", "--tries=1", "--spider",
+						"http://127.0.0.1:5000/status",
+					},
 					Interval: 10 * time.Second,
 					Timeout:  2 * time.Second,
 					Retries:  3,
@@ -835,9 +857,10 @@ EOF
 					"PG_META_DB_USER=" + dbConfig.User,
 					fmt.Sprintf("PG_META_DB_PORT=%d", dbConfig.Port),
 					"PG_META_DB_PASSWORD=" + dbConfig.Password,
+					"AUTH_JWT_SECRET=" + utils.Config.Auth.JwtSecret,
 				},
 				Healthcheck: &container.HealthConfig{
-					Test:     []string{"CMD", "node", "-e", "fetch('http://127.0.0.1:8080/health').then((r) => {if (r.status !== 200) throw new Error(r.status)})"},
+					Test:     []string{"CMD", "node", `--eval='fetch("http://127.0.0.1:8080/health").then((r) => {if (r.status !== 200) throw new Error(r.status)})'`},
 					Interval: 10 * time.Second,
 					Timeout:  2 * time.Second,
 					Retries:  3,
@@ -882,7 +905,7 @@ EOF
 					"HOSTNAME=0.0.0.0",
 				},
 				Healthcheck: &container.HealthConfig{
-					Test:     []string{"CMD", "node", "-e", "fetch('http://127.0.0.1:3000/api/profile', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})"},
+					Test:     []string{"CMD", "node", `--eval='fetch("http://127.0.0.1:3000/api/profile", (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})'`},
 					Interval: 10 * time.Second,
 					Timeout:  2 * time.Second,
 					Retries:  3,
@@ -907,34 +930,64 @@ EOF
 	}
 
 	// Start pooler.
-	if utils.Config.Db.Pooler.Enabled && !isContainerExcluded(utils.PgbouncerImage, excluded) {
+	if utils.Config.Db.Pooler.Enabled && !isContainerExcluded(utils.SupavisorImage, excluded) {
+		portSession := uint16(5432)
+		portTransaction := uint16(6543)
+		dockerPort := portTransaction
+		if utils.Config.Db.Pooler.PoolMode == utils.SessionMode {
+			dockerPort = portSession
+		}
+		// Create pooler tenant
+		var poolerTenantBuf bytes.Buffer
+		if err := poolerTenantTemplate.Execute(&poolerTenantBuf, poolerTenant{
+			DbHost:            dbConfig.Host,
+			DbPort:            dbConfig.Port,
+			DbDatabase:        dbConfig.Database,
+			DbPassword:        dbConfig.Password,
+			ExternalId:        utils.Config.Db.Pooler.TenantId,
+			ModeType:          utils.Config.Db.Pooler.PoolMode,
+			DefaultMaxClients: utils.Config.Db.Pooler.MaxClientConn,
+			DefaultPoolSize:   utils.Config.Db.Pooler.DefaultPoolSize,
+		}); err != nil {
+			return errors.Errorf("failed to exec template: %w", err)
+		}
 		if _, err := utils.DockerStart(
 			ctx,
 			container.Config{
-				Image: utils.PgbouncerImage,
+				Image: utils.SupavisorImage,
 				Env: []string{
-					"POSTGRESQL_HOST=" + dbConfig.Host,
-					fmt.Sprintf("POSTGRESQL_PORT=%d", dbConfig.Port),
-					"POSTGRESQL_USERNAME=pgbouncer",
-					"POSTGRESQL_PASSWORD=" + dbConfig.Password,
-					"POSTGRESQL_DATABASE=" + dbConfig.Database,
-					"PGBOUNCER_AUTH_USER=pgbouncer",
-					"PGBOUNCER_AUTH_QUERY=SELECT * FROM pgbouncer.get_auth($1)",
-					fmt.Sprintf("PGBOUNCER_POOL_MODE=%s", utils.Config.Db.Pooler.PoolMode),
-					fmt.Sprintf("PGBOUNCER_DEFAULT_POOL_SIZE=%d", utils.Config.Db.Pooler.DefaultPoolSize),
-					fmt.Sprintf("PGBOUNCER_MAX_CLIENT_CONN=%d", utils.Config.Db.Pooler.MaxClientConn),
-					// Default platform config: https://github.com/supabase/postgres/blob/develop/ansible/files/pgbouncer_config/pgbouncer.ini.j2
-					"PGBOUNCER_IGNORE_STARTUP_PARAMETERS=extra_float_digits",
+					"PORT=4000",
+					fmt.Sprintf("PROXY_PORT_SESSION=%d", portSession),
+					fmt.Sprintf("PROXY_PORT_TRANSACTION=%d", portTransaction),
+					fmt.Sprintf("DATABASE_URL=ecto://%s:%s@%s:%d/%s", dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Database),
+					"CLUSTER_POSTGRES=true",
+					"SECRET_KEY_BASE=" + utils.Config.Db.Pooler.SecretKeyBase,
+					"VAULT_ENC_KEY=" + utils.Config.Db.Pooler.EncryptionKey,
+					"API_JWT_SECRET=" + utils.Config.Auth.JwtSecret,
+					"METRICS_JWT_SECRET=" + utils.Config.Auth.JwtSecret,
+					"REGION=local",
+					"ERL_AFLAGS=-proto_dist inet_tcp",
+				},
+				Cmd: []string{
+					"/bin/sh", "-c",
+					fmt.Sprintf("/app/bin/migrate && /app/bin/supavisor eval '%s' && /app/bin/server", poolerTenantBuf.String()),
+				},
+				ExposedPorts: nat.PortSet{
+					"4000/tcp": {},
+					nat.Port(fmt.Sprintf("%d/tcp", portSession)):     {},
+					nat.Port(fmt.Sprintf("%d/tcp", portTransaction)): {},
 				},
 				Healthcheck: &container.HealthConfig{
-					Test:     []string{"CMD", "bash", "-c", "printf \\0 > /dev/tcp/127.0.0.1/6432"},
+					Test:     []string{"CMD", "curl", "-sSfL", "--head", "-o", "/dev/null", "http://127.0.0.1:4000/api/health"},
 					Interval: 10 * time.Second,
 					Timeout:  2 * time.Second,
 					Retries:  3,
 				},
 			},
 			container.HostConfig{
-				PortBindings:  nat.PortMap{"6432/tcp": []nat.PortBinding{{HostPort: strconv.FormatUint(uint64(utils.Config.Db.Pooler.Port), 10)}}},
+				PortBindings: nat.PortMap{nat.Port(fmt.Sprintf("%d/tcp", dockerPort)): []nat.PortBinding{{
+					HostPort: strconv.FormatUint(uint64(utils.Config.Db.Pooler.Port), 10)},
+				}},
 				RestartPolicy: container.RestartPolicy{Name: "always"},
 			},
 			network.NetworkingConfig{
diff --git a/internal/start/templates/pooler.exs b/internal/start/templates/pooler.exs
new file mode 100644
index 00000000..0178fa22
--- /dev/null
+++ b/internal/start/templates/pooler.exs
@@ -0,0 +1,28 @@
+Application.ensure_all_started(:supavisor)
+
+{:ok, version} =
+  case Supavisor.Repo.query!("select version()") do
+    %{rows: [[ver]]} -> Supavisor.Helpers.parse_pg_version(ver)
+    _ -> nil
+  end
+
+params = %{
+  "external_id" => "{{ .ExternalId }}",
+  "db_host" => "{{ .DbHost }}",
+  "db_port" => {{ .DbPort }},
+  "db_database" => "{{ .DbDatabase }}",
+  "require_user" => false,
+  "auth_query" => "SELECT * FROM pgbouncer.get_auth($1)",
+  "default_max_clients" => {{ .DefaultMaxClients }},
+  "default_pool_size" => {{ .DefaultPoolSize }},
+  "default_parameter_status" => %{"server_version" => version},
+  "users" => [%{
+    "db_user" => "pgbouncer",
+    "db_password" => "{{ .DbPassword }}",
+    "mode_type" => "{{ .ModeType }}",
+    "pool_size" => {{ .DefaultPoolSize }},
+    "is_manager" => true
+  }]
+}
+
+{:ok, _} = Supavisor.Tenants.create_tenant(params)
diff --git a/internal/stop/stop.go b/internal/stop/stop.go
index 955622ad..b4bd94c2 100644
--- a/internal/stop/stop.go
+++ b/internal/stop/stop.go
@@ -15,7 +15,6 @@ func Run(ctx context.Context, backup bool, projectId string, fsys afero.Fs) erro
 	// Sanity checks.
 	if len(projectId) > 0 {
 		utils.Config.ProjectId = projectId
-		utils.UpdateDockerIds()
 	} else if err := utils.LoadConfigFS(fsys); err != nil {
 		return err
 	}
diff --git a/internal/unlink/unlink.go b/internal/unlink/unlink.go
index 25411c6b..aa0f7687 100644
--- a/internal/unlink/unlink.go
+++ b/internal/unlink/unlink.go
@@ -18,19 +18,26 @@ func Run(ctx context.Context, fsys afero.Fs) error {
 	if err != nil {
 		return err
 	}
+	if err := Unlink(projectRef, fsys); err != nil {
+		return err
+	}
+	fmt.Fprintln(os.Stdout, "Finished "+utils.Aqua("supabase unlink")+".")
+	return nil
+}
 
+func Unlink(projectRef string, fsys afero.Fs) error {
 	fmt.Fprintln(os.Stderr, "Unlinking project:", projectRef)
+	var allErrors []error
 	// Remove temp directory
 	if err := fsys.RemoveAll(utils.TempDir); err != nil {
-		return errors.Errorf("failed to remove temp directory: %w", err)
+		wrapped := errors.Errorf("failed to remove temp directory: %w", err)
+		allErrors = append(allErrors, wrapped)
 	}
 	// Remove linked credentials
 	if err := credentials.Delete(projectRef); err != nil &&
 		!errors.Is(err, credentials.ErrNotSupported) &&
 		!errors.Is(err, keyring.ErrNotFound) {
-		return err
+		allErrors = append(allErrors, err)
 	}
-
-	fmt.Fprintln(os.Stdout, "Finished "+utils.Aqua("supabase unlink")+".")
-	return nil
+	return errors.Join(allErrors...)
 }
diff --git a/internal/utils/config.go b/internal/utils/config.go
index 66e82871..098a4ae0 100644
--- a/internal/utils/config.go
+++ b/internal/utils/config.go
@@ -74,7 +74,9 @@ func GetId(name string) string {
 }
 
 func UpdateDockerIds() {
-	NetId = GetId("network")
+	if NetId = viper.GetString("network-id"); len(NetId) == 0 {
+		NetId = GetId("network")
+	}
 	DbId = GetId(DbAliases[0])
 	ConfigId = GetId("config")
 	KongId = GetId(KongAliases[0])
@@ -174,6 +176,11 @@ var Config = config{
 		Image:    Pg15Image,
 		Password: "postgres",
 		RootKey:  "d4dc5b6d4a1d6a10b2c1e76112c994d65db7cec380572cc1839624d4be3fa275",
+		Pooler: pooler{
+			TenantId:      "pooler-dev",
+			EncryptionKey: "12345678901234567890123456789032",
+			SecretKeyBase: "EAx3IQ/wRG1v47ZD4NE4/9RzBI8Jmil3x0yhcW4V2NHBP6c2iPIzwjofi2Ep4HIG",
+		},
 	},
 	Realtime: realtime{
 		IpVersion:       AddressIPv4,
@@ -303,6 +310,9 @@ type (
 		DefaultPoolSize  uint     `toml:"default_pool_size"`
 		MaxClientConn    uint     `toml:"max_client_conn"`
 		ConnectionString string   `toml:"-"`
+		TenantId         string   `toml:"-"`
+		EncryptionKey    string   `toml:"-"`
+		SecretKeyBase    string   `toml:"-"`
 	}
 
 	realtime struct {
diff --git a/internal/utils/docker.go b/internal/utils/docker.go
index 5cb397bd..3d8bbcb4 100644
--- a/internal/utils/docker.go
+++ b/internal/utils/docker.go
@@ -54,18 +54,15 @@ const (
 	composeProjectLabel = "com.docker.compose.project"
 )
 
-func DockerNetworkCreateIfNotExists(ctx context.Context, networkId string) error {
-	_, err := Docker.NetworkCreate(
-		ctx,
-		networkId,
-		types.NetworkCreate{
-			CheckDuplicate: true,
-			Labels: map[string]string{
-				CliProjectLabel:     Config.ProjectId,
-				composeProjectLabel: Config.ProjectId,
-			},
-		},
-	)
+func DockerNetworkCreateIfNotExists(ctx context.Context, mode container.NetworkMode, labels map[string]string) error {
+	// Non-user defined networks should already exist
+	if !isUserDefined(mode) {
+		return nil
+	}
+	_, err := Docker.NetworkCreate(ctx, mode.NetworkName(), types.NetworkCreate{
+		CheckDuplicate: true,
+		Labels:         labels,
+	})
 	// if error is network already exists, no need to propagate to user
 	if errdefs.IsConflict(err) || errors.Is(err, podman.ErrNetworkExists) {
 		return nil
@@ -253,19 +250,21 @@ func DockerStart(ctx context.Context, config container.Config, hostConfig contai
 	// Setup default config
 	config.Image = GetRegistryImageUrl(config.Image)
 	if config.Labels == nil {
-		config.Labels = map[string]string{}
+		config.Labels = make(map[string]string, 2)
 	}
 	config.Labels[CliProjectLabel] = Config.ProjectId
 	config.Labels[composeProjectLabel] = Config.ProjectId
-	if len(hostConfig.NetworkMode) == 0 {
+	// Configure container network
+	hostConfig.ExtraHosts = append(hostConfig.ExtraHosts, extraHosts...)
+	if networkId := viper.GetString("network-id"); len(networkId) > 0 {
+		hostConfig.NetworkMode = container.NetworkMode(networkId)
+	} else if len(hostConfig.NetworkMode) == 0 {
 		hostConfig.NetworkMode = container.NetworkMode(NetId)
 	}
-	// Create network with name
-	if hostConfig.NetworkMode.IsUserDefined() && hostConfig.NetworkMode.UserDefined() != "host" {
-		if err := DockerNetworkCreateIfNotExists(ctx, hostConfig.NetworkMode.NetworkName()); err != nil {
-			return "", err
-		}
+	if err := DockerNetworkCreateIfNotExists(ctx, hostConfig.NetworkMode, config.Labels); err != nil {
+		return "", err
 	}
+	// Configure container volumes
 	var binds, sources []string
 	for _, bind := range hostConfig.Binds {
 		spec, err := loader.ParseVolume(bind)
diff --git a/internal/utils/docker_darwin.go b/internal/utils/docker_darwin.go
new file mode 100644
index 00000000..af183bc3
--- /dev/null
+++ b/internal/utils/docker_darwin.go
@@ -0,0 +1,11 @@
+//go:build darwin
+
+package utils
+
+import "github.com/docker/docker/api/types/container"
+
+var extraHosts []string
+
+func isUserDefined(mode container.NetworkMode) bool {
+	return mode.IsUserDefined()
+}
diff --git a/internal/utils/docker_linux.go b/internal/utils/docker_linux.go
new file mode 100644
index 00000000..392fec4e
--- /dev/null
+++ b/internal/utils/docker_linux.go
@@ -0,0 +1,12 @@
+//go:build linux
+
+package utils
+
+import "github.com/docker/docker/api/types/container"
+
+// Allows containers to resolve host network: https://stackoverflow.com/a/62431165
+var extraHosts = []string{"host.docker.internal:host-gateway"}
+
+func isUserDefined(mode container.NetworkMode) bool {
+	return mode.IsUserDefined()
+}
diff --git a/internal/utils/docker_windows.go b/internal/utils/docker_windows.go
new file mode 100644
index 00000000..99e68d9b
--- /dev/null
+++ b/internal/utils/docker_windows.go
@@ -0,0 +1,15 @@
+//go:build windows
+
+package utils
+
+import (
+	"github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/network"
+)
+
+var extraHosts []string
+
+func isUserDefined(mode container.NetworkMode) bool {
+	// Host network requires explicit check on windows: https://github.com/supabase/cli/pull/952
+	return mode.IsUserDefined() && mode.UserDefined() != network.NetworkHost
+}
diff --git a/internal/utils/flags/project_ref.go b/internal/utils/flags/project_ref.go
index e57ac4c1..c2d5012b 100644
--- a/internal/utils/flags/project_ref.go
+++ b/internal/utils/flags/project_ref.go
@@ -35,7 +35,7 @@ func ParseProjectRef(ctx context.Context, fsys afero.Fs) error {
 }
 
 func PromptProjectRef(ctx context.Context, title string) error {
-	resp, err := utils.GetSupabase().V1GetAllProjectsWithResponse(ctx)
+	resp, err := utils.GetSupabase().V1ListAllProjectsWithResponse(ctx)
 	if err != nil {
 		return errors.Errorf("failed to retrieve projects: %w", err)
 	}
diff --git a/internal/utils/misc.go b/internal/utils/misc.go
index f8a2aa8e..88dc46e6 100644
--- a/internal/utils/misc.go
+++ b/internal/utils/misc.go
@@ -38,7 +38,7 @@ const (
 	ImageProxyImage  = "darthsim/imgproxy:v3.8.0"
 	EdgeRuntimeImage = "supabase/edge-runtime:v1.53.3"
 	VectorImage      = "timberio/vector:0.28.1-alpine"
-	PgbouncerImage   = "bitnami/pgbouncer:1.20.1-debian-11-r39"
+	SupavisorImage   = "supabase/supavisor:1.1.56"
 	PgProveImage     = "supabase/pg_prove:3.36"
 	GotrueImage      = "supabase/gotrue:v2.151.0"
 	RealtimeImage    = "supabase/realtime:v2.28.32"
@@ -61,7 +61,7 @@ var ServiceImages = []string{
 	EdgeRuntimeImage,
 	LogflareImage,
 	VectorImage,
-	PgbouncerImage,
+	SupavisorImage,
 }
 
 var JobImages = []string{
@@ -118,6 +118,7 @@ var (
 	ManagedSchemas = append([]string{
 		"_analytics",
 		"_realtime",
+		"_supavisor",
 		"pgbouncer",
 		"pgsodium",
 		"pgtle",
@@ -125,13 +126,14 @@ var (
 		"vault",
 	}, PgSchemas...)
 	InternalSchemas = append([]string{
+		"_analytics",
+		"_realtime",
+		"_supavisor",
 		"auth",
 		"extensions",
 		"pgbouncer",
 		"realtime",
-		"_realtime",
 		"storage",
-		"_analytics",
 		"supabase_functions",
 		"supabase_migrations",
 		// Owned by extensions
diff --git a/internal/utils/tenant/database.go b/internal/utils/tenant/database.go
index 20e62ec2..1ae1ee6a 100644
--- a/internal/utils/tenant/database.go
+++ b/internal/utils/tenant/database.go
@@ -10,7 +10,7 @@ import (
 var errDatabaseVersion = errors.New("Database version not found.")
 
 func GetDatabaseVersion(ctx context.Context, projectRef string) (string, error) {
-	resp, err := utils.GetSupabase().V1GetAllProjectsWithResponse(ctx)
+	resp, err := utils.GetSupabase().V1ListAllProjectsWithResponse(ctx)
 	if err != nil {
 		return "", errors.Errorf("failed to retrieve projects: %w", err)
 	}
diff --git a/internal/vanity_subdomains/delete/delete.go b/internal/vanity_subdomains/delete/delete.go
index 0744a0be..3ee24d47 100644
--- a/internal/vanity_subdomains/delete/delete.go
+++ b/internal/vanity_subdomains/delete/delete.go
@@ -13,7 +13,7 @@ func Run(ctx context.Context, projectRef string, fsys afero.Fs) error {
 	// 1. Sanity checks.
 	// 2. delete config
 	{
-		resp, err := utils.GetSupabase().V1DeactiveVanitySubdomainConfigWithResponse(ctx, projectRef)
+		resp, err := utils.GetSupabase().V1DeactivateVanitySubdomainConfigWithResponse(ctx, projectRef)
 		if err != nil {
 			return errors.Errorf("failed to delete vanity subdomain: %w", err)
 		}
diff --git a/package.json b/package.json
index 749d1c7c..be283c4b 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
     "bin-links": "^4.0.3",
     "https-proxy-agent": "^7.0.2",
     "node-fetch": "^3.3.2",
-    "tar": "7.1.0"
+    "tar": "7.2.0"
   },
   "release": {
     "branches": [
diff --git a/pkg/api/client.gen.go b/pkg/api/client.gen.go
index 3b800a0f..6f2147c6 100644
--- a/pkg/api/client.gen.go
+++ b/pkg/api/client.gen.go
@@ -1,6 +1,6 @@
 // Package api provides primitives to interact with the openapi HTTP API.
 //
-// Code generated by github.com/deepmap/oapi-codegen/v2 version v2.1.0 DO NOT EDIT.
+// Code generated by github.com/deepmap/oapi-codegen/v2 version v2.2.0 DO NOT EDIT.
 package api
 
 import (
@@ -125,8 +125,8 @@ type ClientInterface interface {
 	// V1ListOrganizationMembers request
 	V1ListOrganizationMembers(ctx context.Context, slug string, reqEditors ...RequestEditorFn) (*http.Response, error)
 
-	// V1GetAllProjects request
-	V1GetAllProjects(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error)
+	// V1ListAllProjects request
+	V1ListAllProjects(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error)
 
 	// V1CreateAProjectWithBody request with any body
 	V1CreateAProjectWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error)
@@ -180,13 +180,21 @@ type ClientInterface interface {
 	// V1GetProjectPgbouncerConfig request
 	V1GetProjectPgbouncerConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
 
-	// GetPostgresConfig request
-	GetPostgresConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
+	// V1GetSupavisorConfig request
+	V1GetSupavisorConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
 
-	// UpdatePostgresConfigWithBody request with any body
-	UpdatePostgresConfigWithBody(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error)
+	// V1UpdateSupavisorConfigWithBody request with any body
+	V1UpdateSupavisorConfigWithBody(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error)
 
-	UpdatePostgresConfig(ctx context.Context, ref string, body UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error)
+	V1UpdateSupavisorConfig(ctx context.Context, ref string, body V1UpdateSupavisorConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error)
+
+	// V1GetPostgresConfig request
+	V1GetPostgresConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
+
+	// V1UpdatePostgresConfigWithBody request with any body
+	V1UpdatePostgresConfigWithBody(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error)
+
+	V1UpdatePostgresConfig(ctx context.Context, ref string, body V1UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error)
 
 	// V1DeleteHostnameConfig request
 	V1DeleteHostnameConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
@@ -332,8 +340,8 @@ type ClientInterface interface {
 	// V1GetPostgrestUpgradeStatus request
 	V1GetPostgrestUpgradeStatus(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
 
-	// V1DeactiveVanitySubdomainConfig request
-	V1DeactiveVanitySubdomainConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
+	// V1DeactivateVanitySubdomainConfig request
+	V1DeactivateVanitySubdomainConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
 
 	// V1GetVanitySubdomainConfig request
 	V1GetVanitySubdomainConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error)
@@ -511,8 +519,8 @@ func (c *Client) V1ListOrganizationMembers(ctx context.Context, slug string, req
 	return c.Client.Do(req)
 }
 
-func (c *Client) V1GetAllProjects(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) {
-	req, err := NewV1GetAllProjectsRequest(c.Server)
+func (c *Client) V1ListAllProjects(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1ListAllProjectsRequest(c.Server)
 	if err != nil {
 		return nil, err
 	}
@@ -751,8 +759,20 @@ func (c *Client) V1GetProjectPgbouncerConfig(ctx context.Context, ref string, re
 	return c.Client.Do(req)
 }
 
-func (c *Client) GetPostgresConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error) {
-	req, err := NewGetPostgresConfigRequest(c.Server, ref)
+func (c *Client) V1GetSupavisorConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1GetSupavisorConfigRequest(c.Server, ref)
+	if err != nil {
+		return nil, err
+	}
+	req = req.WithContext(ctx)
+	if err := c.applyEditors(ctx, req, reqEditors); err != nil {
+		return nil, err
+	}
+	return c.Client.Do(req)
+}
+
+func (c *Client) V1UpdateSupavisorConfigWithBody(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1UpdateSupavisorConfigRequestWithBody(c.Server, ref, contentType, body)
 	if err != nil {
 		return nil, err
 	}
@@ -763,8 +783,8 @@ func (c *Client) GetPostgresConfig(ctx context.Context, ref string, reqEditors .
 	return c.Client.Do(req)
 }
 
-func (c *Client) UpdatePostgresConfigWithBody(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) {
-	req, err := NewUpdatePostgresConfigRequestWithBody(c.Server, ref, contentType, body)
+func (c *Client) V1UpdateSupavisorConfig(ctx context.Context, ref string, body V1UpdateSupavisorConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1UpdateSupavisorConfigRequest(c.Server, ref, body)
 	if err != nil {
 		return nil, err
 	}
@@ -775,8 +795,32 @@ func (c *Client) UpdatePostgresConfigWithBody(ctx context.Context, ref string, c
 	return c.Client.Do(req)
 }
 
-func (c *Client) UpdatePostgresConfig(ctx context.Context, ref string, body UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) {
-	req, err := NewUpdatePostgresConfigRequest(c.Server, ref, body)
+func (c *Client) V1GetPostgresConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1GetPostgresConfigRequest(c.Server, ref)
+	if err != nil {
+		return nil, err
+	}
+	req = req.WithContext(ctx)
+	if err := c.applyEditors(ctx, req, reqEditors); err != nil {
+		return nil, err
+	}
+	return c.Client.Do(req)
+}
+
+func (c *Client) V1UpdatePostgresConfigWithBody(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1UpdatePostgresConfigRequestWithBody(c.Server, ref, contentType, body)
+	if err != nil {
+		return nil, err
+	}
+	req = req.WithContext(ctx)
+	if err := c.applyEditors(ctx, req, reqEditors); err != nil {
+		return nil, err
+	}
+	return c.Client.Do(req)
+}
+
+func (c *Client) V1UpdatePostgresConfig(ctx context.Context, ref string, body V1UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1UpdatePostgresConfigRequest(c.Server, ref, body)
 	if err != nil {
 		return nil, err
 	}
@@ -1423,8 +1467,8 @@ func (c *Client) V1GetPostgrestUpgradeStatus(ctx context.Context, ref string, re
 	return c.Client.Do(req)
 }
 
-func (c *Client) V1DeactiveVanitySubdomainConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error) {
-	req, err := NewV1DeactiveVanitySubdomainConfigRequest(c.Server, ref)
+func (c *Client) V1DeactivateVanitySubdomainConfig(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*http.Response, error) {
+	req, err := NewV1DeactivateVanitySubdomainConfigRequest(c.Server, ref)
 	if err != nil {
 		return nil, err
 	}
@@ -1992,8 +2036,8 @@ func NewV1ListOrganizationMembersRequest(server string, slug string) (*http.Requ
 	return req, nil
 }
 
-// NewV1GetAllProjectsRequest generates requests for V1GetAllProjects
-func NewV1GetAllProjectsRequest(server string) (*http.Request, error) {
+// NewV1ListAllProjectsRequest generates requests for V1ListAllProjects
+func NewV1ListAllProjectsRequest(server string) (*http.Request, error) {
 	var err error
 
 	serverURL, err := url.Parse(server)
@@ -2574,8 +2618,89 @@ func NewV1GetProjectPgbouncerConfigRequest(server string, ref string) (*http.Req
 	return req, nil
 }
 
-// NewGetPostgresConfigRequest generates requests for GetPostgresConfig
-func NewGetPostgresConfigRequest(server string, ref string) (*http.Request, error) {
+// NewV1GetSupavisorConfigRequest generates requests for V1GetSupavisorConfig
+func NewV1GetSupavisorConfigRequest(server string, ref string) (*http.Request, error) {
+	var err error
+
+	var pathParam0 string
+
+	pathParam0, err = runtime.StyleParamWithLocation("simple", false, "ref", runtime.ParamLocationPath, ref)
+	if err != nil {
+		return nil, err
+	}
+
+	serverURL, err := url.Parse(server)
+	if err != nil {
+		return nil, err
+	}
+
+	operationPath := fmt.Sprintf("/v1/projects/%s/config/database/pooler", pathParam0)
+	if operationPath[0] == '/' {
+		operationPath = "." + operationPath
+	}
+
+	queryURL, err := serverURL.Parse(operationPath)
+	if err != nil {
+		return nil, err
+	}
+
+	req, err := http.NewRequest("GET", queryURL.String(), nil)
+	if err != nil {
+		return nil, err
+	}
+
+	return req, nil
+}
+
+// NewV1UpdateSupavisorConfigRequest calls the generic V1UpdateSupavisorConfig builder with application/json body
+func NewV1UpdateSupavisorConfigRequest(server string, ref string, body V1UpdateSupavisorConfigJSONRequestBody) (*http.Request, error) {
+	var bodyReader io.Reader
+	buf, err := json.Marshal(body)
+	if err != nil {
+		return nil, err
+	}
+	bodyReader = bytes.NewReader(buf)
+	return NewV1UpdateSupavisorConfigRequestWithBody(server, ref, "application/json", bodyReader)
+}
+
+// NewV1UpdateSupavisorConfigRequestWithBody generates requests for V1UpdateSupavisorConfig with any type of body
+func NewV1UpdateSupavisorConfigRequestWithBody(server string, ref string, contentType string, body io.Reader) (*http.Request, error) {
+	var err error
+
+	var pathParam0 string
+
+	pathParam0, err = runtime.StyleParamWithLocation("simple", false, "ref", runtime.ParamLocationPath, ref)
+	if err != nil {
+		return nil, err
+	}
+
+	serverURL, err := url.Parse(server)
+	if err != nil {
+		return nil, err
+	}
+
+	operationPath := fmt.Sprintf("/v1/projects/%s/config/database/pooler", pathParam0)
+	if operationPath[0] == '/' {
+		operationPath = "." + operationPath
+	}
+
+	queryURL, err := serverURL.Parse(operationPath)
+	if err != nil {
+		return nil, err
+	}
+
+	req, err := http.NewRequest("PATCH", queryURL.String(), body)
+	if err != nil {
+		return nil, err
+	}
+
+	req.Header.Add("Content-Type", contentType)
+
+	return req, nil
+}
+
+// NewV1GetPostgresConfigRequest generates requests for V1GetPostgresConfig
+func NewV1GetPostgresConfigRequest(server string, ref string) (*http.Request, error) {
 	var err error
 
 	var pathParam0 string
@@ -2608,19 +2733,19 @@ func NewGetPostgresConfigRequest(server string, ref string) (*http.Request, erro
 	return req, nil
 }
 
-// NewUpdatePostgresConfigRequest calls the generic UpdatePostgresConfig builder with application/json body
-func NewUpdatePostgresConfigRequest(server string, ref string, body UpdatePostgresConfigJSONRequestBody) (*http.Request, error) {
+// NewV1UpdatePostgresConfigRequest calls the generic V1UpdatePostgresConfig builder with application/json body
+func NewV1UpdatePostgresConfigRequest(server string, ref string, body V1UpdatePostgresConfigJSONRequestBody) (*http.Request, error) {
 	var bodyReader io.Reader
 	buf, err := json.Marshal(body)
 	if err != nil {
 		return nil, err
 	}
 	bodyReader = bytes.NewReader(buf)
-	return NewUpdatePostgresConfigRequestWithBody(server, ref, "application/json", bodyReader)
+	return NewV1UpdatePostgresConfigRequestWithBody(server, ref, "application/json", bodyReader)
 }
 
-// NewUpdatePostgresConfigRequestWithBody generates requests for UpdatePostgresConfig with any type of body
-func NewUpdatePostgresConfigRequestWithBody(server string, ref string, contentType string, body io.Reader) (*http.Request, error) {
+// NewV1UpdatePostgresConfigRequestWithBody generates requests for V1UpdatePostgresConfig with any type of body
+func NewV1UpdatePostgresConfigRequestWithBody(server string, ref string, contentType string, body io.Reader) (*http.Request, error) {
 	var err error
 
 	var pathParam0 string
@@ -4430,8 +4555,8 @@ func NewV1GetPostgrestUpgradeStatusRequest(server string, ref string) (*http.Req
 	return req, nil
 }
 
-// NewV1DeactiveVanitySubdomainConfigRequest generates requests for V1DeactiveVanitySubdomainConfig
-func NewV1DeactiveVanitySubdomainConfigRequest(server string, ref string) (*http.Request, error) {
+// NewV1DeactivateVanitySubdomainConfigRequest generates requests for V1DeactivateVanitySubdomainConfig
+func NewV1DeactivateVanitySubdomainConfigRequest(server string, ref string) (*http.Request, error) {
 	var err error
 
 	var pathParam0 string
@@ -4754,8 +4879,8 @@ type ClientWithResponsesInterface interface {
 	// V1ListOrganizationMembersWithResponse request
 	V1ListOrganizationMembersWithResponse(ctx context.Context, slug string, reqEditors ...RequestEditorFn) (*V1ListOrganizationMembersResponse, error)
 
-	// V1GetAllProjectsWithResponse request
-	V1GetAllProjectsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*V1GetAllProjectsResponse, error)
+	// V1ListAllProjectsWithResponse request
+	V1ListAllProjectsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*V1ListAllProjectsResponse, error)
 
 	// V1CreateAProjectWithBodyWithResponse request with any body
 	V1CreateAProjectWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*V1CreateAProjectResponse, error)
@@ -4809,13 +4934,21 @@ type ClientWithResponsesInterface interface {
 	// V1GetProjectPgbouncerConfigWithResponse request
 	V1GetProjectPgbouncerConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1GetProjectPgbouncerConfigResponse, error)
 
-	// GetPostgresConfigWithResponse request
-	GetPostgresConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*GetPostgresConfigResponse, error)
+	// V1GetSupavisorConfigWithResponse request
+	V1GetSupavisorConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1GetSupavisorConfigResponse, error)
+
+	// V1UpdateSupavisorConfigWithBodyWithResponse request with any body
+	V1UpdateSupavisorConfigWithBodyWithResponse(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*V1UpdateSupavisorConfigResponse, error)
 
-	// UpdatePostgresConfigWithBodyWithResponse request with any body
-	UpdatePostgresConfigWithBodyWithResponse(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*UpdatePostgresConfigResponse, error)
+	V1UpdateSupavisorConfigWithResponse(ctx context.Context, ref string, body V1UpdateSupavisorConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*V1UpdateSupavisorConfigResponse, error)
 
-	UpdatePostgresConfigWithResponse(ctx context.Context, ref string, body UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*UpdatePostgresConfigResponse, error)
+	// V1GetPostgresConfigWithResponse request
+	V1GetPostgresConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1GetPostgresConfigResponse, error)
+
+	// V1UpdatePostgresConfigWithBodyWithResponse request with any body
+	V1UpdatePostgresConfigWithBodyWithResponse(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*V1UpdatePostgresConfigResponse, error)
+
+	V1UpdatePostgresConfigWithResponse(ctx context.Context, ref string, body V1UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*V1UpdatePostgresConfigResponse, error)
 
 	// V1DeleteHostnameConfigWithResponse request
 	V1DeleteHostnameConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1DeleteHostnameConfigResponse, error)
@@ -4961,8 +5094,8 @@ type ClientWithResponsesInterface interface {
 	// V1GetPostgrestUpgradeStatusWithResponse request
 	V1GetPostgrestUpgradeStatusWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1GetPostgrestUpgradeStatusResponse, error)
 
-	// V1DeactiveVanitySubdomainConfigWithResponse request
-	V1DeactiveVanitySubdomainConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1DeactiveVanitySubdomainConfigResponse, error)
+	// V1DeactivateVanitySubdomainConfigWithResponse request
+	V1DeactivateVanitySubdomainConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1DeactivateVanitySubdomainConfigResponse, error)
 
 	// V1GetVanitySubdomainConfigWithResponse request
 	V1GetVanitySubdomainConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1GetVanitySubdomainConfigResponse, error)
@@ -5203,14 +5336,14 @@ func (r V1ListOrganizationMembersResponse) StatusCode() int {
 	return 0
 }
 
-type V1GetAllProjectsResponse struct {
+type V1ListAllProjectsResponse struct {
 	Body         []byte
 	HTTPResponse *http.Response
 	JSON200      *[]V1ProjectResponse
 }
 
 // Status returns HTTPResponse.Status
-func (r V1GetAllProjectsResponse) Status() string {
+func (r V1ListAllProjectsResponse) Status() string {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.Status
 	}
@@ -5218,7 +5351,7 @@ func (r V1GetAllProjectsResponse) Status() string {
 }
 
 // StatusCode returns HTTPResponse.StatusCode
-func (r V1GetAllProjectsResponse) StatusCode() int {
+func (r V1ListAllProjectsResponse) StatusCode() int {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.StatusCode
 	}
@@ -5532,14 +5665,58 @@ func (r V1GetProjectPgbouncerConfigResponse) StatusCode() int {
 	return 0
 }
 
-type GetPostgresConfigResponse struct {
+type V1GetSupavisorConfigResponse struct {
+	Body         []byte
+	HTTPResponse *http.Response
+	JSON200      *[]SupavisorConfigResponse
+}
+
+// Status returns HTTPResponse.Status
+func (r V1GetSupavisorConfigResponse) Status() string {
+	if r.HTTPResponse != nil {
+		return r.HTTPResponse.Status
+	}
+	return http.StatusText(0)
+}
+
+// StatusCode returns HTTPResponse.StatusCode
+func (r V1GetSupavisorConfigResponse) StatusCode() int {
+	if r.HTTPResponse != nil {
+		return r.HTTPResponse.StatusCode
+	}
+	return 0
+}
+
+type V1UpdateSupavisorConfigResponse struct {
+	Body         []byte
+	HTTPResponse *http.Response
+	JSON200      *UpdateSupavisorConfigResponse
+}
+
+// Status returns HTTPResponse.Status
+func (r V1UpdateSupavisorConfigResponse) Status() string {
+	if r.HTTPResponse != nil {
+		return r.HTTPResponse.Status
+	}
+	return http.StatusText(0)
+}
+
+// StatusCode returns HTTPResponse.StatusCode
+func (r V1UpdateSupavisorConfigResponse) StatusCode() int {
+	if r.HTTPResponse != nil {
+		return r.HTTPResponse.StatusCode
+	}
+	return 0
+}
+
+type V1GetPostgresConfigResponse struct {
 	Body         []byte
 	HTTPResponse *http.Response
 	JSON200      *PostgresConfigResponse
 }
 
 // Status returns HTTPResponse.Status
-func (r GetPostgresConfigResponse) Status() string {
+func (r V1GetPostgresConfigResponse) Status() string {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.Status
 	}
@@ -5547,21 +5724,21 @@ func (r GetPostgresConfigResponse) Status() string {
 }
 
 // StatusCode returns HTTPResponse.StatusCode
-func (r GetPostgresConfigResponse) StatusCode() int {
+func (r V1GetPostgresConfigResponse) StatusCode() int {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.StatusCode
 	}
 	return 0
 }
 
-type UpdatePostgresConfigResponse struct {
+type V1UpdatePostgresConfigResponse struct {
 	Body         []byte
 	HTTPResponse *http.Response
 	JSON200      *PostgresConfigResponse
 }
 
 // Status returns HTTPResponse.Status
-func (r UpdatePostgresConfigResponse) Status() string {
+func (r V1UpdatePostgresConfigResponse) Status() string {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.Status
 	}
@@ -5569,7 +5746,7 @@ func (r UpdatePostgresConfigResponse) Status() string {
 }
 
 // StatusCode returns HTTPResponse.StatusCode
-func (r UpdatePostgresConfigResponse) StatusCode() int {
+func (r V1UpdatePostgresConfigResponse) StatusCode() int {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.StatusCode
 	}
@@ -6402,13 +6579,13 @@ func (r V1GetPostgrestUpgradeStatusResponse) StatusCode() int {
 	return 0
 }
 
-type V1DeactiveVanitySubdomainConfigResponse struct {
+type V1DeactivateVanitySubdomainConfigResponse struct {
 	Body         []byte
 	HTTPResponse *http.Response
 }
 
 // Status returns HTTPResponse.Status
-func (r V1DeactiveVanitySubdomainConfigResponse) Status() string {
+func (r V1DeactivateVanitySubdomainConfigResponse) Status() string {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.Status
 	}
@@ -6416,7 +6593,7 @@ func (r V1DeactiveVanitySubdomainConfigResponse) Status() string {
 }
 
 // StatusCode returns HTTPResponse.StatusCode
-func (r V1DeactiveVanitySubdomainConfigResponse) StatusCode() int {
+func (r V1DeactivateVanitySubdomainConfigResponse) StatusCode() int {
 	if r.HTTPResponse != nil {
 		return r.HTTPResponse.StatusCode
 	}
@@ -6647,13 +6824,13 @@ func (c *ClientWithResponses) V1ListOrganizationMembersWithResponse(ctx context.
 	return ParseV1ListOrganizationMembersResponse(rsp)
 }
 
-// V1GetAllProjectsWithResponse request returning *V1GetAllProjectsResponse
-func (c *ClientWithResponses) V1GetAllProjectsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*V1GetAllProjectsResponse, error) {
-	rsp, err := c.V1GetAllProjects(ctx, reqEditors...)
+// V1ListAllProjectsWithResponse request returning *V1ListAllProjectsResponse
+func (c *ClientWithResponses) V1ListAllProjectsWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*V1ListAllProjectsResponse, error) {
+	rsp, err := c.V1ListAllProjects(ctx, reqEditors...)
 	if err != nil {
 		return nil, err
 	}
-	return ParseV1GetAllProjectsResponse(rsp)
+	return ParseV1ListAllProjectsResponse(rsp)
 }
 
 // V1CreateAProjectWithBodyWithResponse request with arbitrary body returning *V1CreateAProjectResponse
@@ -6822,30 +6999,56 @@ func (c *ClientWithResponses) V1GetProjectPgbouncerConfigWithResponse(ctx contex
 	return ParseV1GetProjectPgbouncerConfigResponse(rsp)
 }
 
-// GetPostgresConfigWithResponse request returning *GetPostgresConfigResponse
-func (c *ClientWithResponses) GetPostgresConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*GetPostgresConfigResponse, error) {
-	rsp, err := c.GetPostgresConfig(ctx, ref, reqEditors...)
+// V1GetSupavisorConfigWithResponse request returning *V1GetSupavisorConfigResponse
+func (c *ClientWithResponses) V1GetSupavisorConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1GetSupavisorConfigResponse, error) {
+	rsp, err := c.V1GetSupavisorConfig(ctx, ref, reqEditors...)
+	if err != nil {
+		return nil, err
+	}
+	return ParseV1GetSupavisorConfigResponse(rsp)
+}
+
+// V1UpdateSupavisorConfigWithBodyWithResponse request with arbitrary body returning *V1UpdateSupavisorConfigResponse
+func (c *ClientWithResponses) V1UpdateSupavisorConfigWithBodyWithResponse(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*V1UpdateSupavisorConfigResponse, error) {
+	rsp, err := c.V1UpdateSupavisorConfigWithBody(ctx, ref, contentType, body, reqEditors...)
 	if err != nil {
 		return nil, err
 	}
-	return ParseGetPostgresConfigResponse(rsp)
+	return ParseV1UpdateSupavisorConfigResponse(rsp)
 }
 
-// UpdatePostgresConfigWithBodyWithResponse request with arbitrary body returning *UpdatePostgresConfigResponse
-func (c *ClientWithResponses) UpdatePostgresConfigWithBodyWithResponse(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*UpdatePostgresConfigResponse, error) {
-	rsp, err := c.UpdatePostgresConfigWithBody(ctx, ref, contentType, body, reqEditors...)
+func (c *ClientWithResponses) V1UpdateSupavisorConfigWithResponse(ctx context.Context, ref string, body V1UpdateSupavisorConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*V1UpdateSupavisorConfigResponse, error) {
+	rsp, err := c.V1UpdateSupavisorConfig(ctx, ref, body, reqEditors...)
 	if err != nil {
 		return nil, err
 	}
-	return ParseUpdatePostgresConfigResponse(rsp)
+	return ParseV1UpdateSupavisorConfigResponse(rsp)
 }
 
-func (c *ClientWithResponses) UpdatePostgresConfigWithResponse(ctx context.Context, ref string, body UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*UpdatePostgresConfigResponse, error) {
-	rsp, err := c.UpdatePostgresConfig(ctx, ref, body, reqEditors...)
+// V1GetPostgresConfigWithResponse request returning *V1GetPostgresConfigResponse
+func (c *ClientWithResponses) V1GetPostgresConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1GetPostgresConfigResponse, error) {
+	rsp, err := c.V1GetPostgresConfig(ctx, ref, reqEditors...)
 	if err != nil {
 		return nil, err
 	}
-	return ParseUpdatePostgresConfigResponse(rsp)
+	return ParseV1GetPostgresConfigResponse(rsp)
+}
+
+// V1UpdatePostgresConfigWithBodyWithResponse request with arbitrary body returning *V1UpdatePostgresConfigResponse
+func (c *ClientWithResponses) V1UpdatePostgresConfigWithBodyWithResponse(ctx context.Context, ref string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*V1UpdatePostgresConfigResponse, error) {
+	rsp, err := c.V1UpdatePostgresConfigWithBody(ctx, ref, contentType, body, reqEditors...)
+	if err != nil {
+		return nil, err
+	}
+	return ParseV1UpdatePostgresConfigResponse(rsp)
+}
+
+func (c *ClientWithResponses) V1UpdatePostgresConfigWithResponse(ctx context.Context, ref string, body V1UpdatePostgresConfigJSONRequestBody, reqEditors ...RequestEditorFn) (*V1UpdatePostgresConfigResponse, error) {
+	rsp, err := c.V1UpdatePostgresConfig(ctx, ref, body, reqEditors...)
+	if err != nil {
+		return nil, err
+	}
+	return ParseV1UpdatePostgresConfigResponse(rsp)
 }
 
 // V1DeleteHostnameConfigWithResponse request returning *V1DeleteHostnameConfigResponse
@@ -7310,13 +7513,13 @@ func (c *ClientWithResponses) V1GetPostgrestUpgradeStatusWithResponse(ctx contex
 	return ParseV1GetPostgrestUpgradeStatusResponse(rsp)
 }
 
-// V1DeactiveVanitySubdomainConfigWithResponse request returning *V1DeactiveVanitySubdomainConfigResponse
-func (c *ClientWithResponses) V1DeactiveVanitySubdomainConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1DeactiveVanitySubdomainConfigResponse, error) {
-	rsp, err := c.V1DeactiveVanitySubdomainConfig(ctx, ref, reqEditors...)
+// V1DeactivateVanitySubdomainConfigWithResponse request returning *V1DeactivateVanitySubdomainConfigResponse
+func (c *ClientWithResponses) V1DeactivateVanitySubdomainConfigWithResponse(ctx context.Context, ref string, reqEditors ...RequestEditorFn) (*V1DeactivateVanitySubdomainConfigResponse, error) {
+	rsp, err := c.V1DeactivateVanitySubdomainConfig(ctx, ref, reqEditors...)
 	if err != nil {
 		return nil, err
 	}
-	return ParseV1DeactiveVanitySubdomainConfigResponse(rsp)
+	return ParseV1DeactivateVanitySubdomainConfigResponse(rsp)
 }
 
 // V1GetVanitySubdomainConfigWithResponse request returning *V1GetVanitySubdomainConfigResponse
@@ -7630,15 +7833,15 @@ func ParseV1ListOrganizationMembersResponse(rsp *http.Response) (*V1ListOrganiza
 	return response, nil
 }
 
-// ParseV1GetAllProjectsResponse parses an HTTP response from a V1GetAllProjectsWithResponse call
-func ParseV1GetAllProjectsResponse(rsp *http.Response) (*V1GetAllProjectsResponse, error) {
+// ParseV1ListAllProjectsResponse parses an HTTP response from a V1ListAllProjectsWithResponse call
+func ParseV1ListAllProjectsResponse(rsp *http.Response) (*V1ListAllProjectsResponse, error) {
 	bodyBytes, err := io.ReadAll(rsp.Body)
 	defer func() { _ = rsp.Body.Close() }()
 	if err != nil {
 		return nil, err
 	}
 
-	response := &V1GetAllProjectsResponse{
+	response := &V1ListAllProjectsResponse{
 		Body:         bodyBytes,
 		HTTPResponse: rsp,
 	}
@@ -8010,15 +8213,67 @@ func ParseV1GetProjectPgbouncerConfigResponse(rsp *http.Response) (*V1GetProject
 	return response, nil
 }
 
-// ParseGetPostgresConfigResponse parses an HTTP response from a GetPostgresConfigWithResponse call
-func ParseGetPostgresConfigResponse(rsp *http.Response) (*GetPostgresConfigResponse, error) {
+// ParseV1GetSupavisorConfigResponse parses an HTTP response from a V1GetSupavisorConfigWithResponse call
+func ParseV1GetSupavisorConfigResponse(rsp *http.Response) (*V1GetSupavisorConfigResponse, error) {
+	bodyBytes, err := io.ReadAll(rsp.Body)
+	defer func() { _ = rsp.Body.Close() }()
+	if err != nil {
+		return nil, err
+	}
+
+	response := &V1GetSupavisorConfigResponse{
+		Body:         bodyBytes,
+		HTTPResponse: rsp,
+	}
+
+	switch {
+	case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200:
+		var dest []SupavisorConfigResponse
+		if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+			return nil, err
+		}
+		response.JSON200 = &dest
+
+	}
+
+	return response, nil
+}
+
+// ParseV1UpdateSupavisorConfigResponse parses an HTTP response from a V1UpdateSupavisorConfigWithResponse call
+func ParseV1UpdateSupavisorConfigResponse(rsp *http.Response) (*V1UpdateSupavisorConfigResponse, error) {
+	bodyBytes, err := io.ReadAll(rsp.Body)
+	defer func() { _ = rsp.Body.Close() }()
+	if err != nil {
+		return nil, err
+	}
+
+	response := &V1UpdateSupavisorConfigResponse{
+		Body:         bodyBytes,
+		HTTPResponse: rsp,
+	}
+
+	switch {
+	case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200:
+		var dest UpdateSupavisorConfigResponse
+		if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+			return nil, err
+		}
+		response.JSON200 = &dest
+
+	}
+
+	return response, nil
+}
+
+// ParseV1GetPostgresConfigResponse parses an HTTP response from a V1GetPostgresConfigWithResponse call
+func ParseV1GetPostgresConfigResponse(rsp *http.Response) (*V1GetPostgresConfigResponse, error) {
 	bodyBytes, err := io.ReadAll(rsp.Body)
 	defer func() { _ = rsp.Body.Close() }()
 	if err != nil {
 		return nil, err
 	}
 
-	response := &GetPostgresConfigResponse{
+	response := &V1GetPostgresConfigResponse{
 		Body:         bodyBytes,
 		HTTPResponse: rsp,
 	}
@@ -8036,15 +8291,15 @@ func ParseGetPostgresConfigResponse(rsp *http.Response) (*GetPostgresConfigRespo
 	return response, nil
 }
 
-// ParseUpdatePostgresConfigResponse parses an HTTP response from a UpdatePostgresConfigWithResponse call
-func ParseUpdatePostgresConfigResponse(rsp *http.Response) (*UpdatePostgresConfigResponse, error) {
+// ParseV1UpdatePostgresConfigResponse parses an HTTP response from a V1UpdatePostgresConfigWithResponse call
+func ParseV1UpdatePostgresConfigResponse(rsp *http.Response) (*V1UpdatePostgresConfigResponse, error) {
 	bodyBytes, err := io.ReadAll(rsp.Body)
 	defer func() { _ = rsp.Body.Close() }()
 	if err != nil {
 		return nil, err
 	}
 
-	response := &UpdatePostgresConfigResponse{
+	response := &V1UpdatePostgresConfigResponse{
 		Body:         bodyBytes,
 		HTTPResponse: rsp,
 	}
@@ -8950,15 +9205,15 @@ func ParseV1GetPostgrestUpgradeStatusResponse(rsp *http.Response) (*V1GetPostgre
 	return response, nil
 }
 
-// ParseV1DeactiveVanitySubdomainConfigResponse parses an HTTP response from a V1DeactiveVanitySubdomainConfigWithResponse call
-func ParseV1DeactiveVanitySubdomainConfigResponse(rsp *http.Response) (*V1DeactiveVanitySubdomainConfigResponse, error) {
+// ParseV1DeactivateVanitySubdomainConfigResponse parses an HTTP response from a V1DeactivateVanitySubdomainConfigWithResponse call
+func ParseV1DeactivateVanitySubdomainConfigResponse(rsp *http.Response) (*V1DeactivateVanitySubdomainConfigResponse, error) {
 	bodyBytes, err := io.ReadAll(rsp.Body)
 	defer func() { _ = rsp.Body.Close() }()
 	if err != nil {
 		return nil, err
 	}
 
-	response := &V1DeactiveVanitySubdomainConfigResponse{
+	response := &V1DeactivateVanitySubdomainConfigResponse{
 		Body:         bodyBytes,
 		HTTPResponse: rsp,
 	}
diff --git a/pkg/api/types.gen.go b/pkg/api/types.gen.go
index d5c5fb6c..1a225394 100644
--- a/pkg/api/types.gen.go
+++ b/pkg/api/types.gen.go
@@ -1,6 +1,6 @@
 // Package api provides primitives to interact with the openapi HTTP API.
 //
-// Code generated by github.com/deepmap/oapi-codegen/v2 version v2.1.0 DO NOT EDIT.
+// Code generated by github.com/deepmap/oapi-codegen/v2 version v2.2.0 DO NOT EDIT.
 package api
 
 import (
@@ -188,6 +188,18 @@ const (
 	SnippetResponseVisibilityUser    SnippetResponseVisibility = "user"
 )
 
+// Defines values for SupavisorConfigResponseDatabaseType.
+const (
+	PRIMARY     SupavisorConfigResponseDatabaseType = "PRIMARY"
+	READREPLICA SupavisorConfigResponseDatabaseType = "READ_REPLICA"
+)
+
+// Defines values for SupavisorConfigResponsePoolMode.
+const (
+	SupavisorConfigResponsePoolModeSession     SupavisorConfigResponsePoolMode = "session"
+	SupavisorConfigResponsePoolModeTransaction SupavisorConfigResponsePoolMode = "transaction"
+)
+
 // Defines values for UpdateAuthConfigBodyPasswordRequiredCharacters.
 const (
 	AbcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789  UpdateAuthConfigBodyPasswordRequiredCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:0123456789"
@@ -212,6 +224,18 @@ const (
 	UpdatePostgresConfigBodySessionReplicationRoleReplica UpdatePostgresConfigBodySessionReplicationRole = "replica"
 )
 
+// Defines values for UpdateSupavisorConfigBodyPoolMode.
+const (
+	UpdateSupavisorConfigBodyPoolModeSession     UpdateSupavisorConfigBodyPoolMode = "session"
+	UpdateSupavisorConfigBodyPoolModeTransaction UpdateSupavisorConfigBodyPoolMode = "transaction"
+)
+
+// Defines values for UpdateSupavisorConfigResponsePoolMode.
+const (
+	UpdateSupavisorConfigResponsePoolModeSession     UpdateSupavisorConfigResponsePoolMode = "session"
+	UpdateSupavisorConfigResponsePoolModeTransaction UpdateSupavisorConfigResponsePoolMode = "transaction"
+)
+
 // Defines values for V1BackupStatus.
 const (
 	V1BackupStatusARCHIVED  V1BackupStatus = "ARCHIVED"
@@ -253,9 +277,9 @@ const (
 
 // Defines values for V1PgbouncerConfigResponsePoolMode.
 const (
-	Session     V1PgbouncerConfigResponsePoolMode = "session"
-	Statement   V1PgbouncerConfigResponsePoolMode = "statement"
-	Transaction V1PgbouncerConfigResponsePoolMode = "transaction"
+	V1PgbouncerConfigResponsePoolModeSession     V1PgbouncerConfigResponsePoolMode = "session"
+	V1PgbouncerConfigResponsePoolModeStatement   V1PgbouncerConfigResponsePoolMode = "statement"
+	V1PgbouncerConfigResponsePoolModeTransaction V1PgbouncerConfigResponsePoolMode = "transaction"
 )
 
 // Defines values for V1ProjectResponseStatus.
@@ -969,6 +993,27 @@ type SubdomainAvailabilityResponse struct {
 	Available bool `json:"available"`
 }
 
+// SupavisorConfigResponse defines model for SupavisorConfigResponse.
+type SupavisorConfigResponse struct {
+	ConnectionString string                              `json:"connectionString"`
+	DatabaseType     SupavisorConfigResponseDatabaseType `json:"database_type"`
+	DbHost           string                              `json:"db_host"`
+	DbName           string                              `json:"db_name"`
+	DbPort           float32                             `json:"db_port"`
+	DbUser           string                              `json:"db_user"`
+	DefaultPoolSize  *float32                            `json:"default_pool_size"`
+	Identifier       string                              `json:"identifier"`
+	IsUsingScramAuth bool                                `json:"is_using_scram_auth"`
+	MaxClientConn    *float32                            `json:"max_client_conn"`
+	PoolMode         SupavisorConfigResponsePoolMode     `json:"pool_mode"`
+}
+
+// SupavisorConfigResponseDatabaseType defines model for SupavisorConfigResponse.DatabaseType.
+type SupavisorConfigResponseDatabaseType string
+
+// SupavisorConfigResponsePoolMode defines model for SupavisorConfigResponse.PoolMode.
+type SupavisorConfigResponsePoolMode string
+
 // TypescriptResponse defines model for TypescriptResponse.
 type TypescriptResponse struct {
 	Types string `json:"types"`
@@ -1210,6 +1255,27 @@ type UpdateProviderResponse struct {
 	UpdatedAt *string         `json:"updated_at,omitempty"`
 }
 
+// UpdateSupavisorConfigBody defines model for UpdateSupavisorConfigBody.
+type UpdateSupavisorConfigBody struct {
+	DefaultPoolSize *int `json:"default_pool_size"`
+
+	// PoolMode This field is deprecated and is ignored in this request
+	// Deprecated:
+	PoolMode *UpdateSupavisorConfigBodyPoolMode `json:"pool_mode,omitempty"`
+}
+
+// UpdateSupavisorConfigBodyPoolMode This field is deprecated and is ignored in this request
+type UpdateSupavisorConfigBodyPoolMode string
+
+// UpdateSupavisorConfigResponse defines model for UpdateSupavisorConfigResponse.
+type UpdateSupavisorConfigResponse struct {
+	DefaultPoolSize *float32                              `json:"default_pool_size"`
+	PoolMode        UpdateSupavisorConfigResponsePoolMode `json:"pool_mode"`
+}
+
+// UpdateSupavisorConfigResponsePoolMode defines model for UpdateSupavisorConfigResponse.PoolMode.
+type UpdateSupavisorConfigResponsePoolMode string
+
 // UpgradeDatabaseBody defines model for UpgradeDatabaseBody.
 type UpgradeDatabaseBody struct {
 	TargetVersion float32 `json:"target_version"`
@@ -1510,8 +1576,11 @@ type V1CreateASsoProviderJSONRequestBody = CreateProviderBody
 // V1UpdateASsoProviderJSONRequestBody defines body for V1UpdateASsoProvider for application/json ContentType.
 type V1UpdateASsoProviderJSONRequestBody = UpdateProviderBody
 
-// UpdatePostgresConfigJSONRequestBody defines body for UpdatePostgresConfig for application/json ContentType.
-type UpdatePostgresConfigJSONRequestBody = UpdatePostgresConfigBody
+// V1UpdateSupavisorConfigJSONRequestBody defines body for V1UpdateSupavisorConfig for application/json ContentType.
+type V1UpdateSupavisorConfigJSONRequestBody = UpdateSupavisorConfigBody
+
+// V1UpdatePostgresConfigJSONRequestBody defines body for V1UpdatePostgresConfig for application/json ContentType.
+type V1UpdatePostgresConfigJSONRequestBody = UpdatePostgresConfigBody
 
 // V1UpdateHostnameConfigJSONRequestBody defines body for V1UpdateHostnameConfig for application/json ContentType.
 type V1UpdateHostnameConfigJSONRequestBody = UpdateCustomHostnameBody


Test patch:
diff --git a/internal/db/diff/diff_test.go b/internal/db/diff/diff_test.go
index 6eb1a609..69671be7 100644
--- a/internal/db/diff/diff_test.go
+++ b/internal/db/diff/diff_test.go
@@ -37,6 +37,7 @@ var dbConfig = pgconn.Config{
 var escapedSchemas = []string{
 	`\_analytics`,
 	`\_realtime`,
+	`\_supavisor`,
 	"pgbouncer",
 	"pgsodium",
 	"pgtle",
diff --git a/internal/db/pull/pull_test.go b/internal/db/pull/pull_test.go
index 98fb5efb..37c1ee8f 100644
--- a/internal/db/pull/pull_test.go
+++ b/internal/db/pull/pull_test.go
@@ -32,6 +32,7 @@ var dbConfig = pgconn.Config{
 var escapedSchemas = []string{
 	`\_analytics`,
 	`\_realtime`,
+	`\_supavisor`,
 	"pgbouncer",
 	"pgsodium",
 	"pgtle",
diff --git a/internal/db/reset/reset_test.go b/internal/db/reset/reset_test.go
index f8b5cc7c..239cd9b8 100644
--- a/internal/db/reset/reset_test.go
+++ b/internal/db/reset/reset_test.go
@@ -308,6 +308,7 @@ var escapedSchemas = []string{
 	"public",
 	`\_analytics`,
 	`\_realtime`,
+	`\_supavisor`,
 	"pgbouncer",
 	"pgsodium",
 	"pgtle",
diff --git a/internal/db/test/test.go b/internal/db/test/test.go
index 2fb4e753..7fd4b9dd 100644
--- a/internal/db/test/test.go
+++ b/internal/db/test/test.go
@@ -66,11 +66,12 @@ func Run(ctx context.Context, testFiles []string, config pgconn.Config, fsys afe
 		}()
 	}
 	// Use custom network when connecting to local database
-	networkID := "host"
+	hostConfig := container.HostConfig{Binds: binds}
 	if utils.IsLocalDatabase(config) {
 		config.Host = utils.DbAliases[0]
 		config.Port = 5432
-		networkID = utils.NetId
+	} else {
+		hostConfig.NetworkMode = network.NetworkHost
 	}
 	// Run pg_prove on volume mount
 	return utils.DockerRunOnceWithConfig(
@@ -87,10 +88,7 @@ func Run(ctx context.Context, testFiles []string, config pgconn.Config, fsys afe
 			Cmd:        cmd,
 			WorkingDir: dstPath,
 		},
-		container.HostConfig{
-			NetworkMode: container.NetworkMode(networkID),
-			Binds:       binds,
-		},
+		hostConfig,
 		network.NetworkingConfig{},
 		"",
 		os.Stdout,