diff --git a/apps/docs/content/guides/platform/project-transfer.mdx b/apps/docs/content/guides/platform/project-transfer.mdx index 91fe31b7542bf..856441436fe51 100644 --- a/apps/docs/content/guides/platform/project-transfer.mdx +++ b/apps/docs/content/guides/platform/project-transfer.mdx @@ -53,4 +53,4 @@ The target organization will be charged at the end of the billing cycle for usag ## Transfer to a different region -Note that project transfers are only transferring your projects across an organization and cannot be used to transfer between different regions. To move your project to a different region, see [migrating your project](/docs/guides/platform/migrating-and-upgrading-projects#migrate-your-project). +Note that project transfers are only transferring your projects across an organization and cannot be used to transfer between different regions. To move your project to a different region, see [migrating your project](/docs/guides/platform/migrating-within-supabase). diff --git a/apps/docs/content/troubleshooting/pausing-pro-projects-vNL-2a.mdx b/apps/docs/content/troubleshooting/pausing-pro-projects-vNL-2a.mdx index f451edf32c93a..f783efb49a709 100644 --- a/apps/docs/content/troubleshooting/pausing-pro-projects-vNL-2a.mdx +++ b/apps/docs/content/troubleshooting/pausing-pro-projects-vNL-2a.mdx @@ -14,7 +14,7 @@ Pro-Projects at the moment cannot be paused. However, [You are allowed to have t If a project is under 500MB, you can [transfer it to be under a free organization](/docs/guides/platform/project-transfer). Afterwards, you can initiate a pause. -Alternatively, you can download a [daily backup](/dashboard/project/_/database/backups/scheduled) of just your database for archiving. You can also manually download a .SQL file of your database and storage buckets by following this [guide](/docs/guides/platform/migrating-and-upgrading-projects#migrate-your-project). +Alternatively, you can download a [daily backup](/dashboard/project/_/database/backups/scheduled) of just your database for archiving. You can also manually download a .SQL file of your database and storage buckets by following this [guide](/docs/guides/platform/migrating-within-supabase/backup-restore). You can also download your storage buckets with the [Supabase CLI:](/docs/guides/cli/getting-started?queryGroups=platform&platform=npx) diff --git a/apps/studio/components/interfaces/HomeNew/GettingStarted/GettingStarted.utils.tsx b/apps/studio/components/interfaces/HomeNew/GettingStarted/GettingStarted.utils.tsx index a5eb527201034..be2fe1fbb651e 100644 --- a/apps/studio/components/interfaces/HomeNew/GettingStarted/GettingStarted.utils.tsx +++ b/apps/studio/components/interfaces/HomeNew/GettingStarted/GettingStarted.utils.tsx @@ -37,7 +37,6 @@ export const getCodeWorkflowSteps = ({ hasCliSetup, hasSampleData, hasRlsPolicies, - hasConfiguredAuth, hasAppConnected, hasFirstUser, hasStorageObjects, @@ -140,15 +139,6 @@ export const getCodeWorkflowSteps = ({ }, ], }, - { - key: 'setup-auth', - status: hasConfiguredAuth ? 'complete' : 'incomplete', - title: 'Allow user signups', - icon: , - description: - "It's time to configure your authentication providers and settings for Supabase Auth, so jump into the configuration page and tailor the providers you need.", - actions: [{ label: 'Configure', href: `/project/${ref}/auth/providers`, variant: 'default' }], - }, { key: 'connect-app', status: hasAppConnected ? 'complete' : 'incomplete', @@ -246,7 +236,6 @@ export const getNoCodeWorkflowSteps = ({ hasTables, hasSampleData, hasRlsPolicies, - hasConfiguredAuth, hasAppConnected, hasFirstUser, hasStorageObjects, @@ -323,17 +312,6 @@ export const getNoCodeWorkflowSteps = ({ }, ], }, - { - key: 'setup-auth', - status: hasConfiguredAuth ? 'complete' : 'incomplete', - title: 'Allow user signups', - icon: , - description: - "It's time to set up authentication so you can start signing up users, configuring providers and settings from the auth dashboard.", - actions: [ - { label: 'Configure auth', href: `/project/${ref}/auth/providers`, variant: 'default' }, - ], - }, { key: 'connect-app', status: hasAppConnected ? 'complete' : 'incomplete', diff --git a/apps/studio/components/interfaces/HomeNew/GettingStarted/useGettingStartedProgress.ts b/apps/studio/components/interfaces/HomeNew/GettingStarted/useGettingStartedProgress.ts index 51bef8978cc63..62c2d7b464b60 100644 --- a/apps/studio/components/interfaces/HomeNew/GettingStarted/useGettingStartedProgress.ts +++ b/apps/studio/components/interfaces/HomeNew/GettingStarted/useGettingStartedProgress.ts @@ -18,7 +18,6 @@ type GettingStartedStatuses = { hasCliSetup: boolean hasSampleData: boolean hasRlsPolicies: boolean - hasConfiguredAuth: boolean hasAppConnected: boolean hasFirstUser: boolean hasStorageObjects: boolean @@ -94,7 +93,6 @@ export const useGettingStartedProgress = (): GettingStartedStatuses => { const hasRlsPolicies = (policiesData?.length ?? 0) > 0 const allowSignupsEnabled = authConfig ? !authConfig.DISABLE_SIGNUP : false const emailProviderEnabled = !!authConfig?.EXTERNAL_EMAIL_ENABLED - const hasConfiguredAuth = allowSignupsEnabled && emailProviderEnabled const hasFirstUser = !!usersCountData && !usersCountData.is_estimate && usersCountData.count > 0 const hasStorageObjects = (storageTablesData ?? []).some( (table) => table.name === 'objects' && Number(table?.live_rows_estimate ?? 0) > 0 @@ -119,7 +117,6 @@ export const useGettingStartedProgress = (): GettingStartedStatuses => { hasCliSetup, hasSampleData, hasRlsPolicies, - hasConfiguredAuth, hasAppConnected, hasFirstUser, hasStorageObjects, diff --git a/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx b/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx index c1e09f73f7c54..31e22f38b2597 100644 --- a/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx +++ b/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx @@ -8,6 +8,7 @@ import { useEffect, useState } from 'react' import { SubmitHandler, useForm } from 'react-hook-form' import z from 'zod' +import { useAuthError } from 'common' import AlertError from 'components/ui/AlertError' import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader' import { useMfaChallengeAndVerifyMutation } from 'data/profile/mfa-challenge-and-verify-mutation' @@ -86,6 +87,22 @@ export const SignInMfaForm = ({ context = 'sign-in' }: SignInMfaFormProps) => { } }, [factors?.totp, isSuccessFactors, router, queryClient]) + const error = useAuthError() + + if (error) { + return ( + + Back to sign in + + } + /> + ) + } + return ( <> {isLoadingFactors && } diff --git a/apps/studio/components/layouts/ProjectLayout/LayoutHeader/HomeIcon.tsx b/apps/studio/components/layouts/ProjectLayout/LayoutHeader/HomeIcon.tsx index aaed9c2cc7935..95e7abe28a98f 100644 --- a/apps/studio/components/layouts/ProjectLayout/LayoutHeader/HomeIcon.tsx +++ b/apps/studio/components/layouts/ProjectLayout/LayoutHeader/HomeIcon.tsx @@ -1,4 +1,3 @@ -import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' @@ -7,11 +6,14 @@ import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { IS_PLATFORM } from 'lib/constants' +import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' export const HomeIcon = () => { const { data: selectedOrganization } = useSelectedOrganizationQuery() const { data: organizations } = useOrganizationsQuery() + const largeLogo = useIsFeatureEnabled('branding:large_logo') + const router = useRouter() const [lastVisitedOrganization] = useLocalStorageQuery( LOCAL_STORAGE_KEYS.LAST_VISITED_ORGANIZATION, @@ -29,12 +31,10 @@ export const HomeIcon = () => { return ( - Supabase ) diff --git a/apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx b/apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx index f0141fa27639b..ca0a7f839c2ae 100644 --- a/apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx +++ b/apps/studio/components/layouts/ProjectLayout/PauseFailedState.tsx @@ -70,7 +70,7 @@ export const PauseFailedState = () => {
+
+ {additionalActions} + +
) diff --git a/apps/studio/components/ui/GlobalErrorBoundaryState.tsx b/apps/studio/components/ui/GlobalErrorBoundaryState.tsx index 2959826daa3db..c8539fd37eec2 100644 --- a/apps/studio/components/ui/GlobalErrorBoundaryState.tsx +++ b/apps/studio/components/ui/GlobalErrorBoundaryState.tsx @@ -2,11 +2,11 @@ import { isError } from 'lodash' import { ExternalLink } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' -import CopyButton from './CopyButton' -import Image from 'next/image' +import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { Button, cn } from 'ui' import { Admonition } from 'ui-patterns' +import CopyButton from './CopyButton' import { InlineLinkClassName } from './InlineLink' export type FallbackProps = { @@ -18,6 +18,8 @@ export const GlobalErrorBoundaryState = ({ error, resetErrorBoundary }: Fallback const router = useRouter() const checkIsError = isError(error) + const largeLogo = useIsFeatureEnabled('branding:large_logo') + const errorMessage = checkIsError ? error.message : '' const urlMessage = checkIsError ? `Path name: ${router.pathname}\n\n${error?.stack}` : '' const isRemoveChildError = checkIsError @@ -44,12 +46,10 @@ export const GlobalErrorBoundaryState = ({ error, resetErrorBoundary }: Fallback
- Supabase
diff --git a/packages/common/enabled-features/enabled-features.json b/packages/common/enabled-features/enabled-features.json index d47444f59f4b1..e5204a6f50f8e 100644 --- a/packages/common/enabled-features/enabled-features.json +++ b/packages/common/enabled-features/enabled-features.json @@ -24,8 +24,11 @@ "authentication:show_sort_by_email": true, "authentication:show_sort_by_phone": true, "authentication:show_user_type_filter": true, + "billing:all": true, + "branding:large_logo": false, + "dashboard_auth:sign_up": true, "dashboard_auth:sign_in_with_github": true, "dashboard_auth:sign_in_with_sso": true, diff --git a/packages/common/enabled-features/enabled-features.schema.json b/packages/common/enabled-features/enabled-features.schema.json index 96cd9ef0d8e38..8fe3d88dbcc7d 100644 --- a/packages/common/enabled-features/enabled-features.schema.json +++ b/packages/common/enabled-features/enabled-features.schema.json @@ -95,6 +95,11 @@ "description": "Enable the billing settings page" }, + "branding:large_logo": { + "type": "boolean", + "description": "Show larger logo sizes throughout the apps" + }, + "dashboard_auth:sign_up": { "type": "boolean", "description": "Enable the sign up page in the dashboard"