diff --git a/apps/docs/content/guides/auth/passwords.mdx b/apps/docs/content/guides/auth/passwords.mdx
index afdfa5b0c0b7c..a261020a66b03 100644
--- a/apps/docs/content/guides/auth/passwords.mdx
+++ b/apps/docs/content/guides/auth/passwords.mdx
@@ -960,11 +960,11 @@ Consider configuring a custom SMTP server for production.
See the [Custom SMTP guide](/docs/guides/auth/auth-smtp) for instructions.
-#### Local development with Inbucket
+#### Local development with Mailpit
-You can test email flows on your local machine. The Supabase CLI automatically captures emails sent locally by using [Inbucket](https://github.com/inbucket/inbucket).
+You can test email flows on your local machine. The Supabase CLI automatically captures emails sent locally by using [Mailpit](https://github.com/axllent/mailpit).
-In your terminal, run `supabase status` to get the Inbucket URL. Go to this URL in your browser, and follow the instructions to find your emails.
+In your terminal, run `supabase status` to get the Mailpit URL. Go to this URL in your browser, and follow the instructions to find your emails.
## With phone
diff --git a/apps/docs/content/guides/local-development/cli/getting-started.mdx b/apps/docs/content/guides/local-development/cli/getting-started.mdx
index 4240378957e8d..a65e54431ea43 100644
--- a/apps/docs/content/guides/local-development/cli/getting-started.mdx
+++ b/apps/docs/content/guides/local-development/cli/getting-started.mdx
@@ -217,7 +217,7 @@ Started supabase local development setup.
API URL: http://localhost:54321
DB URL: postgresql://postgres:postgres@localhost:54322/postgres
Studio URL: http://localhost:54323
- Inbucket URL: http://localhost:54324
+ Mailpit URL: http://localhost:54324
anon key: eyJh......
service_role key: eyJh......
diff --git a/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx b/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx
index c3c8d2eb9a398..59e8bb4e0d1ee 100644
--- a/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx
+++ b/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx
@@ -36,11 +36,11 @@ Edge Functions are powered by Deno, which provides a [native set of testing tool
## Testing Auth emails
-The Supabase CLI uses [Inbucket](https://github.com/inbucket/inbucket) to capture emails sent from your local machine. This is useful for testing emails sent from Supabase Auth.
+The Supabase CLI uses [Mailpit](https://github.com/axllent/mailpit) to capture emails sent from your local machine. This is useful for testing emails sent from Supabase Auth.
-### Accessing Inbucket
+### Accessing Mailpit
-By default, Inbucket is available at [localhost:54324](http://localhost:54324) when you run `supabase start`. Open this URL in your browser to view the emails.
+By default, Mailpit is available at [localhost:54324](http://localhost:54324) when you run `supabase start`. Open this URL in your browser to view the emails.
### Going into production
diff --git a/apps/docs/content/guides/platform/access-control.mdx b/apps/docs/content/guides/platform/access-control.mdx
index 37b7b85dd52a4..7ca44c31e802b 100644
--- a/apps/docs/content/guides/platform/access-control.mdx
+++ b/apps/docs/content/guides/platform/access-control.mdx
@@ -269,11 +269,12 @@ The table below shows the actions each role can take on the resources belonging
| | Revoke | | | | |
| | List | | | | |
| **Branching** | | | | | |
-| Enable branching | - | | | | |
-| Disable branching | - | | | | |
+| Production Branch | Read | | | | |
+| | Write | | | | |
+| Development Branches | List | | | | |
| | Create | | | | |
+| | Update | | | | |
| | Delete | | | | |
-| | List | | | | |
[^1]: Available on the Team and Enterprise Plans.
[^2]: Sending anonymous data to OpenAI is opt in and can improve Studio AI Assistant's responses.
diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/MemberRow.tsx b/apps/studio/components/interfaces/Organization/TeamSettings/MemberRow.tsx
index 4eccdd17f71f2..068c517764d2c 100644
--- a/apps/studio/components/interfaces/Organization/TeamSettings/MemberRow.tsx
+++ b/apps/studio/components/interfaces/Organization/TeamSettings/MemberRow.tsx
@@ -88,7 +88,7 @@ export const MemberRow = ({ member }: MemberRowProps) => {
/>
{member.primary_email}
- {member.primary_email === profile?.primary_email &&
You}
+ {member.gotrue_id === profile?.gotrue_id &&
You}
{(member.metadata as any)?.origin && (
diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx b/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx
index 2de693bc844cc..3ecc3b3de9041 100644
--- a/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx
+++ b/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx
@@ -54,13 +54,13 @@ const MembersView = ({ searchString }: MembersViewProps) => {
const [[user], otherMembers] = partition(
filteredMembers,
- (m) => m.primary_email === profile?.primary_email
+ (m) => m.gotrue_id === profile?.gotrue_id
)
const sortedMembers = otherMembers.sort((a, b) =>
(a.primary_email ?? '').localeCompare(b.primary_email ?? '')
)
- const userMember = members.find((m) => m.primary_email === profile?.primary_email)
+ const userMember = members.find((m) => m.gotrue_id === profile?.gotrue_id)
const orgScopedRoleIds = (roles?.org_scoped_roles ?? []).map((r) => r.id)
const isOrgScopedRole = orgScopedRoleIds.includes(userMember?.role_ids?.[0] ?? -1)
diff --git a/apps/studio/data/api-keys/api-key-create-mutation.ts b/apps/studio/data/api-keys/api-key-create-mutation.ts
index 0cc6b36ec5730..f84d56055ec57 100644
--- a/apps/studio/data/api-keys/api-key-create-mutation.ts
+++ b/apps/studio/data/api-keys/api-key-create-mutation.ts
@@ -36,7 +36,7 @@ export async function createAPIKey(payload: APIKeyCreateVariables) {
? {
// secret_jwt_template: payload?.secret_jwt_template || null,
secret_jwt_template: {
- role: 'service_role', // @mildtomato (Jonny) this should be default in API for type secret
+ role: 'service_role',
},
}
: name),
diff --git a/apps/studio/data/api-keys/keys.ts b/apps/studio/data/api-keys/keys.ts
index 222a51b0b1cf4..e0bfd8932647d 100644
--- a/apps/studio/data/api-keys/keys.ts
+++ b/apps/studio/data/api-keys/keys.ts
@@ -1,6 +1,6 @@
export const apiKeysKeys = {
list: (projectRef?: string, reveal?: boolean) =>
- ['projects', projectRef, 'api-keys', reveal] as const,
+ ['projects', projectRef, 'api-keys', reveal].filter(Boolean),
single: (projectRef?: string, id?: string) => ['projects', projectRef, 'api-keys', id] as const,
status: (projectRef?: string) => ['projects', projectRef, 'api-keys', 'legacy'] as const,
}
diff --git a/apps/studio/state/ai-assistant-state.tsx b/apps/studio/state/ai-assistant-state.tsx
index 8d8cc7e27134a..c6047f3e8bea7 100644
--- a/apps/studio/state/ai-assistant-state.tsx
+++ b/apps/studio/state/ai-assistant-state.tsx
@@ -2,6 +2,7 @@ import type { Message as MessageType } from 'ai/react'
import { DBSchema, IDBPDatabase, openDB } from 'idb'
import { debounce } from 'lodash'
import { createContext, PropsWithChildren, useContext, useEffect, useState } from 'react'
+import { v4 as uuidv4 } from 'uuid'
import { proxy, snapshot, subscribe, useSnapshot } from 'valtio'
import { LOCAL_STORAGE_KEYS } from 'common'
@@ -234,7 +235,7 @@ export const createAiAssistantState = (): AiAssistantState => {
Pick
>
) => {
- const chatId = crypto.randomUUID()
+ const chatId = uuidv4()
const newChat: ChatSession = {
id: chatId,
name: options?.name ?? 'Untitled',
diff --git a/apps/www/data/features.tsx b/apps/www/data/features.tsx
index 8da84a02e3e78..f2907db1572bb 100644
--- a/apps/www/data/features.tsx
+++ b/apps/www/data/features.tsx
@@ -795,7 +795,7 @@ Supabase's Email Login feature enables secure email-based authentication for you
- Secure authentication: Implement industry-standard security practices.
- Customizable workflows: Tailor the signup and login processes to your needs.
- Seamless integration: Works with Supabase's other auth providers and features.
-- Local development support: Test email flows using built-in tools like Inbucket.
+- Local development support: Test email flows using built-in tools like Mailpit.
## Email login is valuable for:
- SaaS applications requiring user accounts
diff --git a/supa-mdx-lint/Rule001HeadingCase.toml b/supa-mdx-lint/Rule001HeadingCase.toml
index c5afd2925466a..770ce4ba94f9a 100644
--- a/supa-mdx-lint/Rule001HeadingCase.toml
+++ b/supa-mdx-lint/Rule001HeadingCase.toml
@@ -124,6 +124,7 @@ may_uppercase = [
"Llamafile",
"Logs Explorer",
"Magic Link",
+ "Mailpit",
"Management API",
"Mixpeek",
"Mixpeek Embed",
diff --git a/supa-mdx-lint/Rule003Spelling.toml b/supa-mdx-lint/Rule003Spelling.toml
index 449ffc5cf0423..c38cdf3637e41 100644
--- a/supa-mdx-lint/Rule003Spelling.toml
+++ b/supa-mdx-lint/Rule003Spelling.toml
@@ -204,6 +204,7 @@ allow_list = [
"Logflare",
"Lua",
"Mailgun",
+ "Mailpit",
"Mailtrap",
"Mansueli",
"Metabase",