diff --git a/apps/web/app/auth/connect/page.tsx b/apps/web/app/auth/connect/page.tsx index 544002e0d..5839062c5 100644 --- a/apps/web/app/auth/connect/page.tsx +++ b/apps/web/app/auth/connect/page.tsx @@ -169,7 +169,7 @@ function AuthConnectContent() { setIsUpgrading(true) const safeSuccessUrl = `${window.location.origin}${window.location.pathname}?callback=${encodeURIComponent(callback ?? "")}&client=${encodeURIComponent(validClient ?? "")}` await autumn.attach({ - productId: "api_pro", + planId: "api_pro", successUrl: safeSuccessUrl, }) } catch (err) { diff --git a/apps/web/components/add-document/connections.tsx b/apps/web/components/add-document/connections.tsx index e9114276b..5814f55c0 100644 --- a/apps/web/components/add-document/connections.tsx +++ b/apps/web/components/add-document/connections.tsx @@ -226,7 +226,7 @@ interface ConnectContentProps { export function ConnectContent({ selectedProject }: ConnectContentProps) { const queryClient = useQueryClient() const autumn = useCustomer() - const isProUser = hasActivePlan(autumn.customer?.products, "api_pro") + const isProUser = hasActivePlan(autumn.data?.subscriptions, "api_pro") const [connectingProvider, setConnectingProvider] = useState(null) const [gdriveSyncScope, setGdriveSyncScope] = @@ -244,7 +244,7 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) { setIsUpgrading(true) try { await autumn.attach({ - productId: "api_pro", + planId: "api_pro", successUrl: window.location.href, }) } catch (error) { @@ -254,9 +254,9 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) { } } - const connectionsFeature = autumn.customer?.features?.connections - const connectionsUsed = connectionsFeature?.usage ?? 0 - const connectionsLimit = connectionsFeature?.included_usage ?? 10 + const connectionsBalance = autumn.data?.balances?.connections + const connectionsUsed = connectionsBalance?.usage ?? 0 + const connectionsLimit = connectionsBalance?.granted ?? 10 const canAddConnection = connectionsUsed < connectionsLimit // Fetch connections diff --git a/apps/web/components/add-document/index.tsx b/apps/web/components/add-document/index.tsx index 4c441ce18..f44ad898d 100644 --- a/apps/web/components/add-document/index.tsx +++ b/apps/web/components/add-document/index.tsx @@ -16,7 +16,7 @@ import { toast } from "sonner" import { useDocumentMutations } from "../../hooks/use-document-mutations" import { useCustomer } from "autumn-js/react" import { useTokenUsage } from "@/hooks/use-token-usage" -import { tokensToCredits, formatUsageNumber } from "@/lib/billing-utils" +import { formatUsageNumber } from "@/lib/billing-utils" import { SpaceSelector } from "../space-selector" import { useIsMobile } from "@hooks/use-mobile" import { addDocumentParam } from "@/lib/search-params" @@ -127,11 +127,8 @@ export function AddDocument({ const autumn = useCustomer() const { tokensUsed, - tokensLimit, - tokensPercent, searchesUsed, - searchesLimit, - searchesPercent, + planUsagePct, hasPaidPlan, isLoading: isLoadingUsage, } = useTokenUsage(autumn) @@ -298,72 +295,46 @@ export function AddDocument({ dmSansClassName(), )} > - Credits + Plan usage {isLoadingUsage ? "…" - : `${tokensToCredits(tokensUsed)} / ${tokensToCredits(tokensLimit)}`} + : `${planUsagePct < 1 && planUsagePct > 0 ? "< 1" : Math.round(planUsagePct)}% used`}
80 + planUsagePct > 80 ? "#ef4444" : hasPaidPlan ? "linear-gradient(to right, #4BA0FA 80%, #002757 100%)" : "#0054AD", }} + title={`${formatUsageNumber(tokensUsed)} tokens · ${formatUsageNumber(searchesUsed)} queries`} />
-
- -
-
- - Search Queries - - - {isLoadingUsage - ? "…" - : `${formatUsageNumber(searchesUsed)} / ${formatUsageNumber(searchesLimit)}`} - -
-
-
80 - ? "#ef4444" - : hasPaidPlan - ? "linear-gradient(to right, #4BA0FA 80%, #002757 100%)" - : "#0054AD", - }} - /> -
+ {formatUsageNumber(tokensUsed)} tokens ·{" "} + {formatUsageNumber(searchesUsed)} queries +

+ )}
{!hasPaidPlan && ( @@ -373,7 +344,7 @@ export function AddDocument({ setIsUpgrading(true) try { await autumn.attach({ - productId: "api_pro", + planId: "api_pro", successUrl: "https://app.supermemory.ai/settings#account", }) window.location.reload() diff --git a/apps/web/components/integrations-view.tsx b/apps/web/components/integrations-view.tsx index ab8b0b1b5..70424e2e4 100644 --- a/apps/web/components/integrations-view.tsx +++ b/apps/web/components/integrations-view.tsx @@ -170,7 +170,7 @@ export function IntegrationsView() { const [, setAddDoc] = useQueryState("add", addDocumentParam) const { org } = useAuth() const autumn = useCustomer() - const hasProProduct = hasActivePlan(autumn.customer?.products, "api_pro") + const hasProProduct = hasActivePlan(autumn.data?.subscriptions, "api_pro") const { data: connections = [] } = useQuery({ queryKey: ["connections"], diff --git a/apps/web/components/integrations/plugins-detail.tsx b/apps/web/components/integrations/plugins-detail.tsx index 8f157a69d..0b4cb6841 100644 --- a/apps/web/components/integrations/plugins-detail.tsx +++ b/apps/web/components/integrations/plugins-detail.tsx @@ -386,7 +386,7 @@ export function PluginsDetail() { }) const [keyCopied, setKeyCopied] = useState(false) - const hasProProduct = hasActivePlan(autumn.customer?.products, "api_pro") + const hasProProduct = hasActivePlan(autumn.data?.subscriptions, "api_pro") const { data: pluginsData } = useQuery({ queryFn: async () => { @@ -496,7 +496,7 @@ export function PluginsDetail() { const handleUpgrade = async () => { try { await autumn.attach({ - productId: "api_pro", + planId: "api_pro", successUrl: "https://app.supermemory.ai/?view=integrations", }) window.location.reload() diff --git a/apps/web/components/settings/account.tsx b/apps/web/components/settings/account.tsx index 4ca5a9cb1..dfe34d66e 100644 --- a/apps/web/components/settings/account.tsx +++ b/apps/web/components/settings/account.tsx @@ -9,7 +9,7 @@ import { } from "@/hooks/use-account-settings" import { Avatar, AvatarFallback, AvatarImage } from "@ui/components/avatar" import { useTokenUsage } from "@/hooks/use-token-usage" -import { formatUsageNumber, tokensToCredits } from "@/lib/billing-utils" +import { formatUsageNumber } from "@/lib/billing-utils" import { Dialog, DialogContent, @@ -153,11 +153,8 @@ export default function Account() { const { tokensUsed, - tokensLimit, - tokensPercent, searchesUsed, - searchesLimit, - searchesPercent, + planUsagePct, currentPlan, hasPaidPlan, isLoading: isCheckingStatus, @@ -176,7 +173,7 @@ export default function Account() { setIsUpgrading(true) try { await autumn.attach({ - productId: "api_pro", + planId: "api_pro", successUrl: "https://app.supermemory.ai/settings#account", }) window.location.reload() @@ -388,7 +385,7 @@ export default function Account() {

- {/* Credits Usage Progress */} + {/* Plan usage (unified) */}

- Credits Used + Plan usage

- {tokensToCredits(tokensUsed)} /{" "} - {tokensToCredits(tokensLimit)} + {planUsagePct < 1 && planUsagePct > 0 + ? "< 1" + : Math.round(planUsagePct)} + % used
80 + planUsagePct > 80 ? "#ef4444" : "linear-gradient(to right, #4BA0FA 80%, #002757 100%)", }} + title={`${formatUsageNumber(tokensUsed)} tokens · ${formatUsageNumber(searchesUsed)} queries`} />
-
- - {/* Search Queries Progress */} -
-
-

- Search Queries -

- - {formatUsageNumber(searchesUsed)} /{" "} - {formatUsageNumber(searchesLimit)} - -
-
-
80 - ? "#ef4444" - : "linear-gradient(to right, #4BA0FA 80%, #002757 100%)", - }} - /> -
-
- - {/* Days remaining indicator */} - {daysRemaining !== null && (

- Resets in {daysRemaining} day - {daysRemaining !== 1 ? "s" : ""} + {formatUsageNumber(tokensUsed)} tokens ·{" "} + {formatUsageNumber(searchesUsed)} queries + {daysRemaining !== null && ( + <> + {" · resets in "} + {daysRemaining} day{daysRemaining !== 1 ? "s" : ""} + + )}

- )} +