)
}
diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt
index 3d76a41db96e1..5a1292cb1b39d 100644
--- a/apps/docs/public/humans.txt
+++ b/apps/docs/public/humans.txt
@@ -8,6 +8,7 @@ Alaister Young
Alan De Los Santos
Aleksi Immonen
Alexander Korotkov
+Ali Waseem
Amy Q
Andrew Valleteau
Andrey A
diff --git a/apps/studio/README.md b/apps/studio/README.md
index 7f8fd0a63bb33..155c40ee873d1 100644
--- a/apps/studio/README.md
+++ b/apps/studio/README.md
@@ -40,9 +40,15 @@ Project settings are managed outside of the Dashboard. If you use docker compose
# You'll need to be on Node v20
# in /studio
-pnpmn install # install dependencies
-mise studio # Supabase internal use: if you are working on the platform version of the Studio
+## For external contributors
+pnpm install # install dependencies
pnpm run dev # start dev server
+
+## For internal contributors
+## First clone the private supabase/infrastructure repo and follow instructions for setting up mise
+mise studio # Run from supabase/infrastructure alongside `mise infra`
+
+## For all
pnpm run test # run tests
pnpm run test -- --watch # run tests in watch mode
```
diff --git a/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx b/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx
index 83e752106725a..7630a524b0be0 100644
--- a/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx
+++ b/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx
@@ -72,7 +72,7 @@ export const RegionSelector = ({
)
const availableRegions = getAvailableRegions(PROVIDERS[cloudProvider].id)
- const regionsArray = Object.entries(availableRegions).map(([key, value]) => {
+ const regionsArray = Object.entries(availableRegions).map(([_key, value]) => {
return {
code: value.code,
name: value.displayName,
@@ -88,6 +88,11 @@ export const RegionSelector = ({
process.env.NEXT_PUBLIC_ENVIRONMENT === 'local' ||
process.env.NEXT_PUBLIC_ENVIRONMENT === 'staging'
+ const allSelectableRegions = [...smartRegions, ...regionOptions]
+ const selectedRegion = allSelectableRegions.find((region) => {
+ return !!region.name && region.name === field.value
+ })
+
if (isErrorAvailableRegions) {
return
}
@@ -118,7 +123,20 @@ export const RegionSelector = ({
placeholder={
isLoading ? 'Loading available regions...' : 'Select a region for your project..'
}
- />
+ >
+ {field.value !== undefined && (
+
+ )}
+
{smartRegionEnabled && (
diff --git a/apps/studio/data/profile/profile-identities-query.ts b/apps/studio/data/profile/profile-identities-query.ts
index e640502c83bf7..15482f0536e0b 100644
--- a/apps/studio/data/profile/profile-identities-query.ts
+++ b/apps/studio/data/profile/profile-identities-query.ts
@@ -5,11 +5,16 @@ import { auth } from 'lib/gotrue'
import { profileKeys } from './keys'
export async function getProfileIdentities() {
- const { error, data } = await auth.getUser()
+ // getSession() uses a cached user object, which is almost never stale as the
+ // session refresh logic keeps it fresh. If there are claims of data not being
+ // fresh, it's because it was modified on another device / browser and the
+ // session hasn't been refreshed yet.
+ const { error, data } = await auth.getSession()
if (error) throw error
+ if (!data.session) throw new Error('Session not found with getSession()')
- const { identities = [], new_email, email_change_sent_at } = data.user
+ const { identities = [], new_email, email_change_sent_at } = data.session.user
return { identities, new_email, email_change_sent_at }
}
diff --git a/apps/www/pages/careers.tsx b/apps/www/pages/careers.tsx
index 58ee7f1465a26..49564cc4b7111 100644
--- a/apps/www/pages/careers.tsx
+++ b/apps/www/pages/careers.tsx
@@ -313,7 +313,7 @@ const CareerPage = ({ jobs, placeholderJob, contributors }: CareersPageProps) =>