- Use an authenticator app (like Google Authenticator or 1Password) to protect your account. -
-- Name:{' '} - {factor.friendly_name ?? 'No name provided'} -
-
+ No authenticator apps yet. {factor.friendly_name ?? 'No name provided'}
Added on {dayjs(factor.created_at).format(DATETIME_FORMAT)}
Resource config ARN: {resource_access_manager_resource_config_arn}
+ )} + {resource_access_manager_share_arn && ( +Resource share ARN: {resource_access_manager_share_arn}
+ )} +No accounts connected
+No connections yet
- Are you sure you want to delete the AWS account connection for{' '} - {selectedAccount?.aws_account_id}? + This removes the PrivateLink connection for {selectedAccount?.aws_account_id}. + Applications using this private path will lose access.
Database:{' '}
diff --git a/apps/studio/data/aws-accounts/aws-account-create-mutation.ts b/apps/studio/data/aws-accounts/aws-account-create-mutation.ts
index 9bfe6bedf8c4b..060e6f9e56629 100644
--- a/apps/studio/data/aws-accounts/aws-account-create-mutation.ts
+++ b/apps/studio/data/aws-accounts/aws-account-create-mutation.ts
@@ -56,7 +56,7 @@ export const useAWSAccountCreateMutation = ({
},
async onError(data, variables, context) {
if (onError === undefined) {
- toast.error(`Failed to create AWS account: ${data.message}`)
+ toast.error(`Failed to create connection: ${data.message}`)
} else {
onError(data, variables, context)
}
diff --git a/apps/studio/data/aws-accounts/aws-account-delete-mutation.ts b/apps/studio/data/aws-accounts/aws-account-delete-mutation.ts
index 9389d2eca9533..2fc22aa974a0b 100644
--- a/apps/studio/data/aws-accounts/aws-account-delete-mutation.ts
+++ b/apps/studio/data/aws-accounts/aws-account-delete-mutation.ts
@@ -63,7 +63,7 @@ export const useAWSAccountDeleteMutation = ({
},
async onError(data, variables, context) {
if (onError === undefined) {
- toast.error(`Failed to delete AWS account: ${data.message}`)
+ toast.error(`Failed to delete connection: ${data.message}`)
} else {
onError(data, variables, context)
}
diff --git a/apps/studio/data/aws-accounts/aws-accounts-query.ts b/apps/studio/data/aws-accounts/aws-accounts-query.ts
index 19f2208ef0a34..ca378da61fdf9 100644
--- a/apps/studio/data/aws-accounts/aws-accounts-query.ts
+++ b/apps/studio/data/aws-accounts/aws-accounts-query.ts
@@ -11,11 +11,14 @@ type AWSAccountsVariables = {
projectRef?: string
}
-// [Joshen] API types should be updated with these 2 parameters, so remove once verified
+// [Joshen] API types should be updated with these parameters, so remove once verified
export type AWSAccount =
components['schemas']['GetPrivateLinkResponse']['private_link_associations'][number] & {
database_type?: 'PRIMARY' | 'READ_REPLICA'
database_identifier?: string
+ resource_access_manager_resource_config_id?: string
+ resource_access_manager_resource_config_arn?: string
+ resource_access_manager_share_arn?: string
}
async function getAWSAccounts({ projectRef }: AWSAccountsVariables, signal?: AbortSignal) {
From c15a8b67397b758eed43dfe8c1659ff35cb0b7fd Mon Sep 17 00:00:00 2001
From: Danny White <3104761+dnywh@users.noreply.github.com>
Date: Mon, 17 Aug 2026 11:29:59 +1000
Subject: [PATCH 3/5] chore(studio): lighten FormLayout descriptions and
tighten GitHub copy (#49091)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## What kind of change does this PR introduce?
UI nits
## What is the current behavior?
`FormLayout` descriptions that are not in a react-hook-form field use
`text-foreground-light`, which fights the component’s
`text-foreground-lighter` variant. New-project GitHub helper copy is one
long colon sentence.
## What is the new behavior?
Those `FormLayout` descriptions use the shared description variant
(`foreground-lighter`). New-project GitHub copy is two short sentences.
| Figure |
| --- |
| |
| _Example call site of **before** the `FormLayout` fix._ |
|
|
| _**After** New-project copy shortening._ |
## To test
- **Organization → New project.** GitHub (optional): “Ideal for
agent-first workflows. Update your schema in code and push it to GitHub.
Supabase deploys the changes.”
- **Project Settings → Database → SSL configuration.** “Reject non-SSL
connections to your database” should look more muted
(`foreground-lighter`), not the brighter `foreground-light`.
## Summary by CodeRabbit
* **Documentation**
* Simplified the GitHub repository field description while preserving
deployment guidance and the “Learn more” link.
* **Style**
* Lightened the color of descriptive text in form layouts for improved
visual hierarchy.
---
.../interfaces/ProjectCreation/ProjectCreationForm.tsx | 4 ++--
packages/ui-patterns/src/form/Layout/FormLayout.tsx | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx b/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx
index 99f9cb7658ede..6ef98e5749da5 100644
--- a/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx
+++ b/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx
@@ -676,8 +676,8 @@ export const ProjectCreationForm = ({
label="GitHub (optional)"
description={
<>
- Ideal for agent-first workflows: update your schema in code, push it
- to GitHub, and Supabase deploys the changes automatically.{' '}
+ Ideal for agent-first workflows. Update your schema in code and push
+ it to GitHub. Supabase deploys the changes.{' '}
{description}
From 44292c09968a818c763240f2e0bd54758476a9d5 Mon Sep 17 00:00:00 2001
From: Danny White <3104761+dnywh@users.noreply.github.com>
Date: Mon, 17 Aug 2026 11:32:18 +1000
Subject: [PATCH 4/5] feat(studio): extract PrivateLink status copy (#49084)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## What kind of change does this PR introduce?
Refactor
## What is the current behavior?
Status labels and sheet copy are inline switches in the list and form.
## What is the new behavior?
One status lookup drives the badge and the view-sheet copy. No intended
visual change. Ready is still green.
| Before and After |
| --- |
|
|
| _No visual changes_ |
## Additional context
Stacked on #48967. See https://github.com/supabase/supabase/pull/49030
for the end state, as it may already include fixes you might propose.
## To test
- **Project Settings → Integrations → AWS PrivateLink.** Look at a
connection row badge, then **View** it. Labels should match today’s
statuses. Ready should still be green.
## Summary by CodeRabbit
* **New Features**
* Added clear status messaging for AWS PrivateLink connections,
including accepted, ready, creating, deleting, expired, and failed
states.
* Added fallback messaging for unavailable or unrecognized connection
statuses.
* **Bug Fixes**
* Improved consistency of PrivateLink status badges, labels,
descriptions, and visual styles.
---
.../AWSPrivateLink.utils.test.ts | 69 +++++++++++++++++++
.../AWSPrivateLink/AWSPrivateLink.utils.ts | 63 +++++++++++++++++
.../AWSPrivateLinkAccountItem.tsx | 23 +------
3 files changed, 135 insertions(+), 20 deletions(-)
create mode 100644 apps/studio/components/interfaces/Settings/Integrations/AWSPrivateLink/AWSPrivateLink.utils.test.ts
create mode 100644 apps/studio/components/interfaces/Settings/Integrations/AWSPrivateLink/AWSPrivateLink.utils.ts
diff --git a/apps/studio/components/interfaces/Settings/Integrations/AWSPrivateLink/AWSPrivateLink.utils.test.ts b/apps/studio/components/interfaces/Settings/Integrations/AWSPrivateLink/AWSPrivateLink.utils.test.ts
new file mode 100644
index 0000000000000..7cc18dd989c9f
--- /dev/null
+++ b/apps/studio/components/interfaces/Settings/Integrations/AWSPrivateLink/AWSPrivateLink.utils.test.ts
@@ -0,0 +1,69 @@
+import { describe, expect, it } from 'vitest'
+
+import { getConnectionStatusUi, type PrivateLinkConnectionStatus } from './AWSPrivateLink.utils'
+
+describe('getConnectionStatusUi', () => {
+ it.each([
+ [
+ 'ASSOCIATION_ACCEPTED',
+ {
+ badge: 'Connected',
+ badgeVariant: 'success',
+ title: 'This connection is active',
+ },
+ ],
+ [
+ 'READY',
+ {
+ badge: 'Ready',
+ badgeVariant: 'success',
+ title: 'Waiting for the AWS account owner to accept',
+ description: 'This request expires after 12 hours.',
+ },
+ ],
+ [
+ 'CREATING',
+ {
+ badge: 'Creating',
+ badgeVariant: 'warning',
+ title: 'This connection is being created',
+ },
+ ],
+ [
+ 'DELETING',
+ {
+ badge: 'Deleting',
+ badgeVariant: 'destructive',
+ title: 'This connection is being deleted',
+ },
+ ],
+ [
+ 'ASSOCIATION_REQUEST_EXPIRED',
+ {
+ badge: 'Expired',
+ badgeVariant: 'destructive',
+ title: 'This request has expired',
+ },
+ ],
+ [
+ 'CREATION_FAILED',
+ {
+ badge: 'Failed',
+ badgeVariant: 'destructive',
+ title: "Couldn't create this connection",
+ },
+ ],
+ ] as const satisfies ReadonlyArray<
+ [PrivateLinkConnectionStatus, Partial