diff --git a/apps/sdk-test/app/scenarios/core/use-autumn/page.tsx b/apps/sdk-test/app/scenarios/core/use-autumn/page.tsx index 42234b2f7..c52f9c743 100644 --- a/apps/sdk-test/app/scenarios/core/use-autumn/page.tsx +++ b/apps/sdk-test/app/scenarios/core/use-autumn/page.tsx @@ -6,7 +6,7 @@ import type { ClientOpenCustomerPortalParams, ClientSetupPaymentParams, } from "autumn-js/react"; -import { useCustomer } from "autumn-js/react"; +import { useCustomer, useListPlans } from "autumn-js/react"; import { useId, useState } from "react"; import { DataViewer } from "@/components/debug/DataViewer"; import { DebugCard } from "@/components/debug/DebugCard"; @@ -53,6 +53,9 @@ const toErrorPayload = ({ error }: { error: unknown }) => { }; export default function UseAutumnScenarioPage() { + const customerResult = useCustomer({ + errorOnNotFound: false, + }); const { isLoading, error, @@ -62,10 +65,11 @@ export default function UseAutumnScenarioPage() { check, setupPayment, openCustomerPortal, - } = useCustomer({ - errorOnNotFound: false, - }); + } = customerResult; + const plansResult = useListPlans(); + + const [showDebugData, setShowDebugData] = useState(false); const [lastUpdatedAt, setLastUpdatedAt] = useState(null); const [isRunning, setIsRunning] = useState(false); const [lastAction, setLastAction] = useState(null); @@ -83,7 +87,7 @@ export default function UseAutumnScenarioPage() { const [setupPaymentSuccessUrl, setSetupPaymentSuccessUrl] = useState(""); const [setupPaymentPlanId, setSetupPaymentPlanId] = useState(""); const [checkoutSessionParams, setCheckoutSessionParams] = useState( - '{\n "billing_address_collection": "required",\n "automatic_tax": { "enabled": true }\n}', + '{\n "billing_address_collection": "required"\n}', ); // Form element IDs @@ -569,6 +573,36 @@ export default function UseAutumnScenarioPage() { value={lastAction?.error ?? null} defaultExpandedDepth={3} /> + + + setShowDebugData(e.target.checked)} + className="rounded border-zinc-300" + /> + Show + + } + > + {showDebugData && ( +
+ + +
+ )} +
); } diff --git a/packages/autumn-js/package.json b/packages/autumn-js/package.json index a11620cd8..1b8d20c11 100644 --- a/packages/autumn-js/package.json +++ b/packages/autumn-js/package.json @@ -1,7 +1,7 @@ { "name": "autumn-js", "description": "Autumn JS Library", - "version": "1.0.3", + "version": "1.0.4", "repository": "github:useautumn/autumn", "homepage": "https://docs.useautumn.com", "main": "./dist/sdk/index.js", diff --git a/packages/autumn-js/src/react/hooks/internal/useCustomerActions.ts b/packages/autumn-js/src/react/hooks/internal/useCustomerActions.ts index a03af0001..76f7b7e79 100644 --- a/packages/autumn-js/src/react/hooks/internal/useCustomerActions.ts +++ b/packages/autumn-js/src/react/hooks/internal/useCustomerActions.ts @@ -1,5 +1,6 @@ "use client"; +import { useQueryClient } from "@tanstack/react-query"; import type { AttachResponse, BillingUpdateResponse, @@ -48,6 +49,7 @@ export const useCustomerActions = ({ client: IAutumnClient; customer: Customer | null; }) => { + const queryClient = useQueryClient(); const attach = useCallback( async (params: AttachParams): Promise => { const response = await client.attach({ @@ -60,10 +62,12 @@ export const useCustomerActions = ({ url: response.paymentUrl, openInNewTab: params.openInNewTab, }); + } else { + queryClient.invalidateQueries({ queryKey: ["autumn"] }); } return response; }, - [client], + [client, queryClient], ); const previewAttach = useCallback( @@ -84,10 +88,12 @@ export const useCustomerActions = ({ url: response.paymentUrl, openInNewTab: params.openInNewTab, }); + } else { + queryClient.invalidateQueries({ queryKey: ["autumn"] }); } return response; }, - [client], + [client, queryClient], ); const previewUpdateSubscription = useCallback( @@ -140,10 +146,12 @@ export const useCustomerActions = ({ url: response.paymentUrl, openInNewTab: params.openInNewTab, }); + } else { + queryClient.invalidateQueries({ queryKey: ["autumn"] }); } return response; }, - [client], + [client, queryClient], ); const previewMultiAttach = useCallback( diff --git a/server/tests/_temp/temp.test.ts b/server/tests/_temp/temp.test.ts index 740e2dcfa..174cb64e3 100644 --- a/server/tests/_temp/temp.test.ts +++ b/server/tests/_temp/temp.test.ts @@ -1,5 +1,4 @@ import { test } from "bun:test"; -import { type ApiCustomerV3, tryCatch } from "@autumn/shared"; import { expectCustomerFeatureCorrect } from "@tests/integration/billing/utils/expectCustomerFeatureCorrect"; import { calculateTrialEndMs, @@ -12,57 +11,14 @@ import { initScenario, s } from "@tests/utils/testInitUtils/initScenario"; import { advanceTestClock } from "@/utils/scriptUtils/testClockUtils"; test("temp: paid default trial customer can upgrade to premium", async () => { - const customerId = `temp-default-trial-upgrade`; - - const defaultTrial = products.defaultTrial({ - id: "default-trial", - items: [items.monthlyMessages({ includedUsage: 500 })], - trialDays: 7, - cardRequired: false, - }); - - const premium = products.premium({ - id: "premium", - items: [items.monthlyMessages({ includedUsage: 1000 })], - }); + const customerId = `sdk-test-customer`; const { autumnV1, ctx, testClockId } = await initScenario({ customerId, setup: [ - s.customer({ testClock: true, withDefault: true }), - s.products({ list: [defaultTrial, premium] }), + s.customer({ testClock: true, paymentMethod: "success" }), + // s.products({ list: [defaultTrial, premium] }), ], actions: [], }); - - const customerBeforeUpgrade = - await autumnV1.customers.get(customerId); - - await expectProductTrialing({ - customer: customerBeforeUpgrade, - productId: defaultTrial.id, - trialEndsAt: calculateTrialEndMs({ trialDays: 7 }), - }); - - expectCustomerFeatureCorrect({ - customer: customerBeforeUpgrade, - featureId: TestFeature.Messages, - includedUsage: 500, - balance: 500, - usage: 0, - }); - - try { - await autumnV1.billing.attach({ - customer_id: customerId, - product_id: premium.id, - // redirect_mode: "redirect_mode", - }); - } catch (error) {} - - await advanceTestClock({ - stripeCli: ctx.stripeCli, - testClockId: testClockId!, - numberOfDays: 12, - }); });