@foldspace-fe/casdoor-next-auth-kit 0.1.23 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/auth-role-C35sP1i6.d.ts +40 -0
  2. package/dist/callback-Da3JC_EN.d.ts +18 -0
  3. package/dist/casdoor/index.d.ts +3 -8
  4. package/dist/casdoor/index.js +6 -4
  5. package/dist/{chunk-GLK4IW22.js → chunk-CSQFNYTS.js} +25 -11
  6. package/dist/chunk-CSQFNYTS.js.map +1 -0
  7. package/dist/{chunk-MWXY4JSL.js → chunk-IPJT66SK.js} +19 -11
  8. package/dist/{chunk-MWXY4JSL.js.map → chunk-IPJT66SK.js.map} +1 -1
  9. package/dist/chunk-JCQ5P7QZ.js +74 -0
  10. package/dist/chunk-JCQ5P7QZ.js.map +1 -0
  11. package/dist/chunk-YHPSOLXM.js +904 -0
  12. package/dist/chunk-YHPSOLXM.js.map +1 -0
  13. package/dist/cli-templates-IhA9gjyF.d.ts +31 -0
  14. package/dist/cli-templates.d.ts +2 -0
  15. package/dist/cli-templates.js +7 -0
  16. package/dist/cli-templates.js.map +1 -0
  17. package/dist/cli.js +52 -557
  18. package/dist/cli.js.map +1 -1
  19. package/dist/index.d.ts +8 -14
  20. package/dist/index.js +56 -6
  21. package/dist/next/index.d.ts +3 -3
  22. package/dist/next/index.js +7 -5
  23. package/dist/{options-D2YQdRWu.d.ts → options-CpWDszxZ.d.ts} +5 -2
  24. package/dist/react/index.d.ts +5 -4
  25. package/dist/react/index.js +4 -18
  26. package/dist/react/index.js.map +1 -1
  27. package/dist/skills/casdoor-next-auth-kit/SKILL.md +1 -0
  28. package/dist/{types-BJv6j3NZ.d.ts → types-COXcI8tx.d.ts} +3 -1
  29. package/package.json +1 -1
  30. package/dist/callback-rEWxVGyL.d.ts +0 -12
  31. package/dist/chunk-GLK4IW22.js.map +0 -1
  32. package/dist/chunk-SZVWLQQT.js +0 -332
  33. package/dist/chunk-SZVWLQQT.js.map +0 -1
  34. package/dist/chunk-T2M5MVPE.js +0 -20
  35. package/dist/chunk-T2M5MVPE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/provider.tsx","../../src/react/hooks.ts","../../src/billing/react.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { Session } from 'next-auth';\nimport { SessionProvider } from 'next-auth/react';\n\nexport function AuthProvider({\n children,\n session,\n}: {\n children: ReactNode;\n session?: Session | null;\n}) {\n return <SessionProvider session={session}>{children}</SessionProvider>;\n}\n","'use client';\n\nimport { useSession } from 'next-auth/react';\nimport { buildAuthJumpHref } from '../core/redirect';\nimport type { AuthSession } from '../next/options';\n\nexport type AuthRole = 'guest' | 'user' | 'admin';\n\nexport interface AuthUserSummary {\n id: string | null;\n name: string;\n email: string | null;\n image: string | null;\n isAuthenticated: boolean;\n isAdmin: boolean;\n tokenBalance: number;\n isVip: boolean;\n role: AuthRole;\n}\n\nexport interface AuthActions {\n loginHref: string;\n signupHref: string;\n logoutHref: string;\n accountHref: string;\n adminHref: string;\n}\n\nexport interface AuthActionsOptions {\n redirect?: string | null;\n}\n\nfunction getUserSummary(session: AuthSession | null | undefined): AuthUserSummary {\n const user = session?.user;\n const name = user?.name || '登录';\n const isAuthenticated = Boolean(user);\n const isAdmin = Boolean(user?.isAdmin);\n const role: AuthRole = !isAuthenticated ? 'guest' : isAdmin ? 'admin' : 'user';\n\n return {\n id: user?.id ?? null,\n name,\n email: user?.email ?? null,\n image: user?.image ?? null,\n isAuthenticated,\n isAdmin,\n tokenBalance: Number(user?.tokenBalance ?? 2580),\n isVip: Boolean(user?.isVip ?? true),\n role,\n };\n}\n\nexport function useAuthSession() {\n return useSession() as ReturnType<typeof useSession> & {\n data: AuthSession | null | undefined;\n };\n}\n\nexport function useAuthUser(): AuthUserSummary {\n const { data: session } = useAuthSession();\n return getUserSummary(session ?? null);\n}\n\nexport function useAuthRole(): AuthRole {\n return useAuthUser().role;\n}\n\nexport function useAuthActions(options: AuthActionsOptions = {}): AuthActions {\n const user = useAuthUser();\n const redirect = options.redirect ?? null;\n\n return {\n loginHref: buildAuthJumpHref('login', redirect ?? undefined),\n signupHref: buildAuthJumpHref('signup', redirect ?? undefined),\n logoutHref: '/logout',\n accountHref: '/user/account',\n adminHref: '/admin',\n };\n}\n","'use client';\n\nimport {\n type Context,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n buildBillingActionPayload,\n buildBillingPurchaseRequest,\n deriveBillingCreditsState,\n deriveBillingEntitlements,\n filterBillingPurchasableItems,\n normalizeCasdoorOrderHistoryItem,\n normalizeCasdoorPaymentHistoryItem,\n normalizeCasdoorSubscriptionDetail,\n normalizeCasdoorSubscriptionHistoryItem,\n normalizeBillingPurchaseStatus,\n normalizeBillingCatalogConfig,\n normalizeBillingRuntimeConfig,\n resolveBillingItem,\n resolveBillingPurchasable,\n resolveBillingProductSnapshot,\n resolveBillingSubscriptionProduct,\n} from './runtime';\nimport {\n buildCasdoorBuyProductRequest,\n normalizeCasdoorBuyProductResponse,\n normalizeCasdoorProductId,\n} from './casdoor-purchase.js';\nimport type {\n BillingActionExecutor,\n BillingActionKind,\n BillingActionExecutionResult,\n BillingActionPayload,\n BillingApiClient,\n BillingCatalogConfig,\n BillingCasdoorBuyProductRequest,\n BillingCasdoorOrderDetail,\n BillingCasdoorOrdersResponse,\n BillingCasdoorPlanDetail,\n BillingCasdoorPricingDetail,\n BillingCasdoorProductDetail,\n BillingCasdoorQueryState,\n BillingCasdoorSubscriptionDetail,\n BillingCasdoorSubscriptionsResponse,\n BillingCoreContextValue,\n BillingCreditsContextValue,\n BillingCreditsState,\n BillingDefaults,\n BillingEntitlementState,\n BillingLoaders,\n BillingOrderHistoryItem,\n BillingPaymentHistoryItem,\n BillingItem,\n BillingProductState,\n BillingProductContextValue,\n BillingProductSnapshot,\n BillingPurchaseHooks,\n BillingPurchaseStatus,\n BillingRuntimeConfig,\n BillingStatusState,\n BillingSubscriptionContextValue,\n BillingSubscriptionHistoryItem,\n BillingSubscriptionState,\n} from './types';\n\nexport interface BillingProviderProps {\n children: ReactNode;\n apiClient: BillingApiClient;\n loaders?: BillingLoaders;\n runtimeConfigLoader?: BillingLoaders['runtimeConfigLoader'];\n actionExecutor?: BillingActionExecutor;\n defaults?: BillingDefaults;\n runtimeConfig?: BillingRuntimeConfig | BillingCatalogConfig;\n subscription?: BillingSubscriptionState;\n subscriptionHistory?: BillingSubscriptionHistoryItem[];\n products?: BillingProductState[];\n orderHistory?: BillingOrderHistoryItem[];\n paymentHistory?: BillingPaymentHistoryItem[];\n credits?: BillingCreditsState;\n entitlements?: BillingEntitlementState;\n status?: BillingStatusState;\n purchaseStatus?: BillingPurchaseStatus;\n purchaseHooks?: BillingPurchaseHooks;\n autoRefresh?: boolean;\n}\n\nexport type BillingCoreProviderProps = BillingProviderProps;\nexport interface BillingSubscriptionProviderProps {\n children: ReactNode;\n availablePlans?: BillingItem[];\n subscription?: BillingSubscriptionState;\n subscriptionHistory?: BillingSubscriptionHistoryItem[];\n entitlements?: BillingEntitlementState;\n status?: BillingStatusState;\n}\n\nexport interface BillingProductProviderProps {\n children: ReactNode;\n availableProducts?: BillingItem[];\n products?: BillingProductState[];\n orderHistory?: BillingOrderHistoryItem[];\n paymentHistory?: BillingPaymentHistoryItem[];\n status?: BillingStatusState;\n}\n\nexport interface BillingCreditsProviderProps {\n children: ReactNode;\n credits?: BillingCreditsState;\n status?: BillingStatusState;\n}\n\nexport interface BillingPipelineOptions {\n onBeforeAction?: (payload: BillingActionPayload) => Promise<BillingActionPayload>;\n onAfterAction?: (result: { redirectTo?: string; nextAction?: string }) => Promise<void>;\n onError?: (error: unknown) => Promise<void>;\n}\n\nconst BillingCoreContext = createContext<BillingCoreContextValue | null>(null);\nconst BillingSubscriptionContext = createContext<BillingSubscriptionContextValue | null>(null);\nconst BillingProductContext = createContext<BillingProductContextValue | null>(null);\nconst BillingCreditsContext = createContext<BillingCreditsContextValue | null>(null);\n\nfunction useOptionalContext<T>(context: Context<T | null>): T | null {\n return useContext(context);\n}\n\nfunction useRequiredCoreContext(): BillingCoreContextValue {\n const context = useContext(BillingCoreContext);\n if (!context) {\n throw new Error('Billing hooks must be used inside BillingProvider or BillingCoreProvider.');\n }\n return context;\n}\n\nfunction choose<T>(primary: T | undefined, fallback: T | undefined): T | undefined {\n return primary ?? fallback;\n}\n\nasync function runPurchaseHook<T>(\n name: string,\n hook: ((context: T) => void | Promise<void>) | undefined,\n context: T | undefined,\n): Promise<void> {\n if (!hook || context === undefined) {\n return;\n }\n\n try {\n await hook(context);\n } catch (error) {\n console.error(`[casdoor-next-auth-kit] billing ${name} hook failed`, error);\n }\n}\n\nfunction getLatestOrder(orders: BillingOrderHistoryItem[] | undefined): BillingOrderHistoryItem | undefined {\n return [...(orders ?? [])].sort((a, b) => {\n const left = Date.parse(b.updatedAt ?? b.createdAt ?? '') || 0;\n const right = Date.parse(a.updatedAt ?? a.createdAt ?? '') || 0;\n return left - right;\n })[0];\n}\n\nfunction getLatestPayment(payments: BillingPaymentHistoryItem[] | undefined): BillingPaymentHistoryItem | undefined {\n return [...(payments ?? [])].sort((a, b) => {\n const left = Date.parse(b.updatedAt ?? b.createdAt ?? '') || 0;\n const right = Date.parse(a.updatedAt ?? a.createdAt ?? '') || 0;\n return left - right;\n })[0];\n}\n\nfunction extractCasdoorResponseData<TData>(response: { data?: TData } | TData | undefined): TData | undefined {\n if (!response) return undefined;\n if (typeof response === 'object' && response !== null && 'data' in response) {\n return (response as { data?: TData }).data;\n }\n return response as TData;\n}\n\nfunction useBillingCasdoorQuery<TData, TArgs extends Record<string, unknown>>(\n loader: ((args: TArgs) => Promise<{ data?: TData } | TData>) | undefined,\n buildArgs: () => TArgs,\n deps: readonly unknown[],\n missingLoaderMessage: string,\n): BillingCasdoorQueryState<TData> {\n const [data, setData] = useState<TData | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n if (!loader) {\n setData(undefined);\n setError(missingLoaderMessage);\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const response = await loader(buildArgs());\n const extracted = extractCasdoorResponseData<TData>(response);\n setData(extracted);\n setError(null);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setData(undefined);\n setError(message);\n } finally {\n setLoading(false);\n }\n }, [buildArgs, loader, missingLoaderMessage]);\n\n useEffect(() => {\n void refresh();\n }, [refresh, ...deps]);\n\n return useMemo(\n () => ({\n data,\n loading,\n error,\n refresh,\n }),\n [data, error, loading, refresh],\n );\n}\n\nfunction pickCurrentCasdoorSubscription(records: BillingCasdoorSubscriptionDetail[]): BillingCasdoorSubscriptionDetail | undefined {\n if (!records.length) return undefined;\n const active = records.find((record) => {\n const status = (record.state ?? '').toLowerCase();\n return status.includes('active') || status.includes('trial');\n });\n if (active) return active;\n return [...records].sort((left, right) => {\n const leftTime = Date.parse(left.endTime ?? left.createdTime ?? '') || 0;\n const rightTime = Date.parse(right.endTime ?? right.createdTime ?? '') || 0;\n return rightTime - leftTime;\n })[0];\n}\n\nfunction pickLatestCasdoorOrder(records: BillingCasdoorOrderDetail[]): BillingCasdoorOrderDetail | undefined {\n if (!records.length) return undefined;\n return [...records].sort((left, right) => {\n const leftTime = Date.parse((left as { updatedTime?: string }).updatedTime ?? left.createdTime ?? '') || 0;\n const rightTime = Date.parse((right as { updatedTime?: string }).updatedTime ?? right.createdTime ?? '') || 0;\n return rightTime - leftTime;\n })[0];\n}\n\nasync function runCasdoorProductPurchase(\n purchaseRequest: NonNullable<ReturnType<typeof buildBillingPurchaseRequest>>,\n apiClient: BillingApiClient,\n loaders: BillingLoaders | undefined,\n): Promise<BillingActionExecutionResult | null> {\n const buyProductLoader = loaders?.buyProductLoader ?? apiClient.buyProduct;\n if (!buyProductLoader) {\n return null;\n }\n\n const productLoader = loaders?.productLoader ?? apiClient.fetchProduct;\n const organizationNamesLoader = loaders?.organizationNamesLoader ?? apiClient.fetchOrganizationNames;\n\n let productDetail: BillingCasdoorProductDetail | undefined;\n if (productLoader) {\n const productResponse = await productLoader({ id: purchaseRequest.productId }).catch(() => undefined);\n productDetail = extractCasdoorResponseData<BillingCasdoorProductDetail>(productResponse);\n }\n\n if (!productDetail) {\n if (purchaseRequest.productOwner && purchaseRequest.productName) {\n productDetail = {\n owner: purchaseRequest.productOwner,\n name: purchaseRequest.productName,\n };\n } else {\n try {\n const normalized = normalizeCasdoorProductId(purchaseRequest.productId);\n productDetail = {\n owner: normalized.owner,\n name: normalized.name,\n };\n } catch {\n return null;\n }\n }\n }\n\n if (organizationNamesLoader && productDetail.owner) {\n const organizationResponse = await organizationNamesLoader({ owner: productDetail.owner }).catch(() => undefined);\n void extractCasdoorResponseData(organizationResponse);\n }\n\n const buyRequest: BillingCasdoorBuyProductRequest = buildCasdoorBuyProductRequest(\n purchaseRequest,\n productDetail,\n purchaseRequest.providerName,\n );\n\n const response = await buyProductLoader(buyRequest);\n return normalizeCasdoorBuyProductResponse(response, purchaseRequest.returnTo ?? productDetail.returnUrl ?? productDetail.successUrl);\n}\n\nfunction normalizeRuntimeConfigInput(config?: BillingRuntimeConfig | BillingCatalogConfig | null): BillingRuntimeConfig | undefined {\n if (!config) return undefined;\n return normalizeBillingRuntimeConfig(config);\n}\n\nfunction normalizeCatalogConfigInput(config?: BillingRuntimeConfig | BillingCatalogConfig | null): BillingCatalogConfig | undefined {\n if (!config) return undefined;\n return normalizeBillingCatalogConfig(config);\n}\n\nfunction buildCoreValue(input: {\n apiClient: BillingApiClient;\n loaders?: BillingLoaders;\n runtimeConfigLoader?: BillingLoaders['runtimeConfigLoader'];\n actionExecutor?: BillingActionExecutor;\n defaults?: BillingDefaults;\n runtimeConfig?: BillingRuntimeConfig | BillingCatalogConfig;\n runtimeCatalog?: BillingCatalogConfig;\n runtimeConfigLoading: boolean;\n runtimeConfigError: string | null;\n subscription?: BillingSubscriptionState;\n subscriptionHistory?: BillingSubscriptionHistoryItem[];\n products?: BillingProductState[];\n orderHistory?: BillingOrderHistoryItem[];\n paymentHistory?: BillingPaymentHistoryItem[];\n credits?: BillingCreditsState;\n entitlements?: BillingEntitlementState;\n purchaseStatus?: BillingPurchaseStatus;\n purchaseHooks?: BillingPurchaseHooks;\n status: BillingStatusState;\n refresh: () => Promise<void>;\n runAction: (payload: BillingActionPayload) => Promise<BillingActionExecutionResult>;\n setRuntimeConfig: (config?: BillingRuntimeConfig) => void;\n setSubscription: (value?: BillingSubscriptionState) => void;\n setSubscriptionHistory: (value?: BillingSubscriptionHistoryItem[]) => void;\n setProducts: (value?: BillingProductState[]) => void;\n setOrderHistory: (value?: BillingOrderHistoryItem[]) => void;\n setPaymentHistory: (value?: BillingPaymentHistoryItem[]) => void;\n setCredits: (value?: BillingCreditsState) => void;\n setEntitlements: (value?: BillingEntitlementState) => void;\n setPurchaseStatus: (status?: BillingPurchaseStatus) => void;\n setStatus: (status: BillingStatusState | ((current: BillingStatusState) => BillingStatusState)) => void;\n}): BillingCoreContextValue {\n return {\n apiClient: input.apiClient,\n loaders: input.loaders,\n runtimeConfigLoader: input.runtimeConfigLoader,\n actionExecutor: input.actionExecutor,\n defaults: input.defaults,\n runtimeConfig: input.runtimeConfig,\n runtimeCatalog: input.runtimeCatalog,\n runtimeConfigLoading: input.runtimeConfigLoading,\n runtimeConfigError: input.runtimeConfigError,\n subscription: input.subscription,\n subscriptionHistory: input.subscriptionHistory,\n products: input.products,\n orderHistory: input.orderHistory,\n paymentHistory: input.paymentHistory,\n availablePlans: filterBillingPurchasableItems(\n input.runtimeConfig?.items?.filter((item) => item.kind === 'subscription'),\n input.runtimeConfig ?? input.runtimeCatalog,\n ),\n availableProducts: filterBillingPurchasableItems(\n input.runtimeConfig?.items?.filter((item) => item.kind === 'product'),\n input.runtimeConfig ?? input.runtimeCatalog,\n ),\n credits: input.credits,\n entitlements: input.entitlements,\n purchaseStatus: input.purchaseStatus,\n purchaseHooks: input.purchaseHooks,\n status: input.status,\n refresh: input.refresh,\n runAction: input.runAction,\n setRuntimeConfig: input.setRuntimeConfig,\n setSubscription: input.setSubscription,\n setSubscriptionHistory: input.setSubscriptionHistory,\n setProducts: input.setProducts,\n setOrderHistory: input.setOrderHistory,\n setPaymentHistory: input.setPaymentHistory,\n setCredits: input.setCredits,\n setEntitlements: input.setEntitlements,\n setPurchaseStatus: input.setPurchaseStatus,\n setStatus: input.setStatus,\n };\n}\n\nexport function BillingProvider({\n children,\n apiClient,\n loaders,\n runtimeConfigLoader,\n actionExecutor,\n defaults,\n runtimeConfig: runtimeConfigProp,\n subscription: subscriptionProp,\n subscriptionHistory: subscriptionHistoryProp,\n products: productsProp,\n orderHistory: orderHistoryProp,\n paymentHistory: paymentHistoryProp,\n credits: creditsProp,\n entitlements: entitlementsProp,\n status: statusProp,\n purchaseStatus: purchaseStatusProp,\n purchaseHooks,\n autoRefresh = true,\n}: BillingProviderProps) {\n const [runtimeConfig, setRuntimeConfig] = useState<BillingRuntimeConfig | undefined>(normalizeRuntimeConfigInput(runtimeConfigProp));\n const [runtimeCatalog, setRuntimeCatalog] = useState<BillingCatalogConfig | undefined>(normalizeCatalogConfigInput(runtimeConfigProp));\n const [runtimeConfigLoading, setRuntimeConfigLoading] = useState(false);\n const [runtimeConfigError, setRuntimeConfigError] = useState<string | null>(null);\n const [subscription, setSubscription] = useState<BillingSubscriptionState | undefined>(subscriptionProp);\n const [subscriptionHistory, setSubscriptionHistory] = useState<BillingSubscriptionHistoryItem[] | undefined>(subscriptionHistoryProp);\n const [products, setProducts] = useState<BillingProductState[] | undefined>(productsProp);\n const [orderHistory, setOrderHistory] = useState<BillingOrderHistoryItem[] | undefined>(orderHistoryProp);\n const [paymentHistory, setPaymentHistory] = useState<BillingPaymentHistoryItem[] | undefined>(paymentHistoryProp);\n const [credits, setCredits] = useState<BillingCreditsState | undefined>(creditsProp);\n const [entitlements, setEntitlements] = useState<BillingEntitlementState | undefined>(entitlementsProp);\n const [purchaseStatus, setPurchaseStatus] = useState<BillingPurchaseStatus | undefined>(purchaseStatusProp);\n const [status, setStatus] = useState<BillingStatusState>(\n statusProp ?? { loading: false, refreshing: false, error: null },\n );\n\n useEffect(() => {\n if (runtimeConfigProp) {\n setRuntimeConfig(normalizeRuntimeConfigInput(runtimeConfigProp));\n setRuntimeCatalog(normalizeCatalogConfigInput(runtimeConfigProp));\n }\n }, [runtimeConfigProp]);\n\n useEffect(() => {\n if (subscriptionProp) setSubscription(subscriptionProp);\n }, [subscriptionProp]);\n\n useEffect(() => {\n if (subscriptionHistoryProp) setSubscriptionHistory(subscriptionHistoryProp);\n }, [subscriptionHistoryProp]);\n\n useEffect(() => {\n if (productsProp) setProducts(productsProp);\n }, [productsProp]);\n\n useEffect(() => {\n if (orderHistoryProp) setOrderHistory(orderHistoryProp);\n }, [orderHistoryProp]);\n\n useEffect(() => {\n if (paymentHistoryProp) setPaymentHistory(paymentHistoryProp);\n }, [paymentHistoryProp]);\n\n useEffect(() => {\n if (creditsProp) setCredits(creditsProp);\n }, [creditsProp]);\n\n useEffect(() => {\n if (entitlementsProp) setEntitlements(entitlementsProp);\n }, [entitlementsProp]);\n\n useEffect(() => {\n if (purchaseStatusProp) setPurchaseStatus(purchaseStatusProp);\n }, [purchaseStatusProp]);\n\n useEffect(() => {\n if (statusProp) setStatus(statusProp);\n }, [statusProp]);\n\n const refresh = useCallback(async () => {\n const catalogKey = runtimeCatalog?.catalogKey ?? runtimeConfig?.catalogKey ?? 'default';\n const runtimeLoader = runtimeConfigLoader ?? apiClient.fetchRuntimeConfig;\n const resolvedLoaders = loaders ?? {};\n const subscriptionLoader = resolvedLoaders.subscriptionLoader ?? apiClient.fetchSubscription;\n const subscriptionHistoryLoader = resolvedLoaders.subscriptionHistoryLoader ?? apiClient.fetchSubscriptionHistory;\n const subscriptionsLoader = resolvedLoaders.subscriptionsLoader ?? apiClient.fetchSubscriptions;\n const productsLoader = resolvedLoaders.productsLoader ?? apiClient.fetchProducts;\n const orderHistoryLoader = resolvedLoaders.orderHistoryLoader ?? apiClient.fetchOrderHistory;\n const ordersLoader = resolvedLoaders.ordersLoader ?? apiClient.fetchOrders;\n const paymentHistoryLoader = resolvedLoaders.paymentHistoryLoader ?? apiClient.fetchPaymentHistory;\n const paymentLoader = resolvedLoaders.paymentLoader ?? apiClient.fetchPayment;\n const purchaseStatusLoader = resolvedLoaders.purchaseStatusLoader ?? apiClient.fetchPurchaseStatus;\n const creditsLoader = resolvedLoaders.creditsLoader ?? apiClient.fetchCredits;\n const entitlementsLoader = resolvedLoaders.entitlementsLoader ?? apiClient.fetchEntitlements;\n\n setRuntimeConfigLoading(true);\n setRuntimeConfigError(null);\n setStatus((current) => ({ ...current, loading: true, refreshing: true, error: null }));\n\n try {\n const nextRuntimeCatalog = normalizeCatalogConfigInput(await runtimeLoader(catalogKey));\n const nextRuntimeConfig = nextRuntimeCatalog ? normalizeRuntimeConfigInput(nextRuntimeCatalog) : undefined;\n if (nextRuntimeConfig) {\n setRuntimeCatalog(nextRuntimeCatalog);\n setRuntimeConfig(nextRuntimeConfig);\n }\n\n const nextCatalogKey = nextRuntimeConfig?.catalogKey ?? nextRuntimeCatalog?.catalogKey ?? catalogKey;\n const nextSubscriptionsResponsePromise: Promise<BillingCasdoorSubscriptionsResponse | undefined> = subscriptionsLoader\n ? subscriptionsLoader({}).catch(() => undefined)\n : Promise.resolve(undefined);\n const nextOrdersResponsePromise: Promise<BillingCasdoorOrdersResponse | undefined> = ordersLoader\n ? ordersLoader({}).catch(() => undefined)\n : Promise.resolve(undefined);\n\n const [\n nextSubscription,\n nextSubscriptionHistory,\n nextSubscriptionsResponse,\n nextProducts,\n nextOrderHistory,\n nextOrdersResponse,\n nextPaymentHistory,\n nextCredits,\n nextEntitlements,\n ] = await Promise.all([\n subscriptionLoader({ catalogKey: nextCatalogKey }),\n subscriptionHistoryLoader({ catalogKey: nextCatalogKey }),\n nextSubscriptionsResponsePromise,\n productsLoader({ catalogKey: nextCatalogKey }),\n orderHistoryLoader({ catalogKey: nextCatalogKey }),\n nextOrdersResponsePromise,\n paymentHistoryLoader({ catalogKey: nextCatalogKey }),\n creditsLoader({ catalogKey: nextCatalogKey }),\n entitlementsLoader({ catalogKey: nextCatalogKey }),\n ]);\n\n const casdoorSubscriptions = extractCasdoorResponseData<BillingCasdoorSubscriptionDetail[]>(nextSubscriptionsResponse) ?? [];\n const casdoorOrders = extractCasdoorResponseData<BillingCasdoorOrderDetail[]>(nextOrdersResponse) ?? [];\n const derivedSubscriptionHistory = nextSubscriptionHistory ?? casdoorSubscriptions.map(normalizeCasdoorSubscriptionHistoryItem);\n const derivedOrderHistory = nextOrderHistory ?? casdoorOrders.map(normalizeCasdoorOrderHistoryItem);\n\n let resolvedPaymentHistory = nextPaymentHistory;\n if ((!resolvedPaymentHistory || resolvedPaymentHistory.length === 0) && casdoorOrders.length && paymentLoader) {\n const latestCasdoorOrder = pickLatestCasdoorOrder(casdoorOrders);\n const paymentId = latestCasdoorOrder?.payment ?? latestCasdoorOrder?.transaction;\n if (paymentId) {\n const paymentResponse = await paymentLoader({ id: paymentId }).catch(() => undefined);\n const paymentDetail = extractCasdoorResponseData<{\n name?: string;\n order?: string;\n outOrderId?: string;\n product?: string;\n productName?: string;\n productDisplayName?: string;\n price?: number;\n currency?: string;\n state?: string;\n transactionId?: string;\n createdTime?: string;\n updatedTime?: string;\n }>(paymentResponse);\n if (paymentDetail?.name) {\n resolvedPaymentHistory = [\n normalizeCasdoorPaymentHistoryItem({\n name: paymentDetail.name,\n order: paymentDetail.order,\n outOrderId: paymentDetail.outOrderId,\n product: paymentDetail.product ?? paymentDetail.productName,\n productName: paymentDetail.productName,\n productDisplayName: paymentDetail.productDisplayName,\n price: paymentDetail.price,\n currency: paymentDetail.currency,\n state: paymentDetail.state,\n transactionId: paymentDetail.transactionId,\n createdTime: paymentDetail.createdTime,\n updatedTime: paymentDetail.updatedTime,\n }),\n ];\n }\n }\n }\n\n const subscriptionWithProduct = nextSubscription\n ? {\n ...nextSubscription,\n product: resolveBillingSubscriptionProduct(nextSubscription, nextRuntimeConfig ?? runtimeConfig),\n }\n : (() => {\n const derivedSubscription = normalizeCasdoorSubscriptionDetail(pickCurrentCasdoorSubscription(casdoorSubscriptions));\n return derivedSubscription\n ? {\n ...derivedSubscription,\n product: resolveBillingSubscriptionProduct(derivedSubscription, nextRuntimeConfig ?? runtimeConfig),\n }\n : undefined;\n })();\n\n const normalizedCredits = deriveBillingCreditsState(nextCredits, nextProducts, nextRuntimeConfig?.conversionRules ?? runtimeConfig?.conversionRules);\n const normalizedEntitlements = nextEntitlements ?? deriveBillingEntitlements(subscriptionWithProduct, nextProducts, normalizedCredits, nextRuntimeConfig ?? runtimeConfig);\n const latestOrder = getLatestOrder(derivedOrderHistory);\n const latestPayment = getLatestPayment(resolvedPaymentHistory);\n const fetchedPurchaseStatus = await purchaseStatusLoader({\n orderId: latestOrder?.orderId,\n paymentId: latestPayment?.paymentId,\n transactionId: latestPayment?.transactionId ?? latestOrder?.transactionId,\n }).catch(() => undefined);\n const normalizedPurchaseStatus = normalizeBillingPurchaseStatus(\n fetchedPurchaseStatus,\n latestOrder,\n latestPayment,\n );\n\n setSubscription(subscriptionWithProduct);\n setSubscriptionHistory(derivedSubscriptionHistory);\n setProducts(nextProducts);\n setOrderHistory(derivedOrderHistory);\n setPaymentHistory(resolvedPaymentHistory);\n setCredits(normalizedCredits);\n setEntitlements(normalizedEntitlements);\n setPurchaseStatus(normalizedPurchaseStatus);\n setStatus({ loading: false, refreshing: false, error: null, lastFetchedAt: new Date().toISOString() });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n setRuntimeConfigError(message);\n setStatus((current) => ({ ...current, loading: false, refreshing: false, error: message }));\n } finally {\n setRuntimeConfigLoading(false);\n }\n }, [apiClient, loaders, runtimeConfig, runtimeConfigLoader, runtimeCatalog]);\n\n const runAction = useCallback(\n async (payload: BillingActionPayload) => {\n const prepared = buildBillingActionPayload(payload, runtimeConfig);\n const executor = actionExecutor ?? ((input: BillingActionPayload) => apiClient.createAction(input));\n const isPurchaseFlow = prepared.kind === 'purchase' || prepared.kind === 'subscribe';\n const purchasable = isPurchaseFlow\n ? resolveBillingPurchasable(runtimeConfig, prepared.key) ?? resolveBillingPurchasable(runtimeConfig, prepared.productId)\n : undefined;\n const purchaseRequest = isPurchaseFlow ? buildBillingPurchaseRequest(prepared, runtimeConfig) : null;\n\n if (isPurchaseFlow && !purchasable) {\n throw new Error(`Billing item \"${prepared.key}\" is not purchasable in the current runtime config.`);\n }\n\n await runPurchaseHook('onPurchaseStart', purchaseHooks?.onPurchaseStart, purchaseRequest ?? undefined);\n\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: current?.orderId,\n paymentId: current?.paymentId,\n transactionId: current?.transactionId,\n status: 'pending',\n redirectTo: current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n setStatus((current) => ({ ...current, loading: true, refreshing: true, error: null }));\n\n try {\n let result: BillingActionExecutionResult;\n let usedCasdoorPurchaseFlow = false;\n if (isPurchaseFlow && purchaseRequest) {\n const casdoorResult = await runCasdoorProductPurchase(\n purchaseRequest as NonNullable<ReturnType<typeof buildBillingPurchaseRequest>>,\n apiClient,\n loaders,\n );\n if (casdoorResult) {\n result = casdoorResult;\n usedCasdoorPurchaseFlow = true;\n } else {\n result = await executor(prepared);\n }\n } else {\n result = await executor(prepared);\n }\n\n if (result.status === 'failed') {\n await runPurchaseHook(\n 'onPurchaseError',\n purchaseHooks?.onPurchaseError,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n status: 'failed',\n message: result.message ?? 'Purchase failed.',\n errorCode: result.errorCode,\n redirectTo: result.redirectTo ?? null,\n rawResult: result.rawResult ?? result,\n }\n : undefined,\n );\n\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: result.orderId ?? current?.orderId,\n paymentId: result.paymentId ?? current?.paymentId,\n transactionId: result.transactionId ?? current?.transactionId,\n status: 'failed',\n redirectTo: result.redirectTo ?? current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n setStatus((current) => ({\n ...current,\n loading: false,\n refreshing: false,\n error: result.message ?? current.error ?? 'Purchase failed.',\n }));\n\n await runPurchaseHook(\n 'onPurchaseComplete',\n purchaseHooks?.onPurchaseComplete,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n status: 'failed',\n redirectTo: result.redirectTo ?? null,\n }\n : undefined,\n );\n\n await refresh();\n return result;\n }\n\n await runPurchaseHook(\n 'onOrderCreated',\n purchaseHooks?.onOrderCreated,\n purchaseRequest && purchasable\n ? {\n request: purchaseRequest,\n purchasable,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n redirectTo: result.redirectTo ?? null,\n rawResult: result.rawResult ?? result,\n }\n : undefined,\n );\n\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: current?.orderId,\n paymentId: current?.paymentId,\n transactionId: current?.transactionId,\n status:\n usedCasdoorPurchaseFlow && result.status !== 'failed'\n ? 'requires_payment'\n : result.status === 'failed'\n ? 'failed'\n : result.status === 'succeeded'\n ? 'paid'\n : 'pending',\n redirectTo: result.redirectTo ?? current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n if (result.redirectTo || result.nextAction) {\n // host handles the redirect/next action, we only persist the result\n }\n\n await runPurchaseHook(\n 'onPurchaseComplete',\n purchaseHooks?.onPurchaseComplete,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n status: 'succeeded',\n redirectTo: result.redirectTo ?? null,\n }\n : undefined,\n );\n\n await refresh();\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n await runPurchaseHook(\n 'onPurchaseError',\n purchaseHooks?.onPurchaseError,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: null,\n paymentId: null,\n status: 'failed',\n message,\n redirectTo: null,\n rawResult: error,\n }\n : undefined,\n );\n await runPurchaseHook(\n 'onPurchaseComplete',\n purchaseHooks?.onPurchaseComplete,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: null,\n paymentId: null,\n status: 'failed',\n redirectTo: null,\n }\n : undefined,\n );\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: current?.orderId,\n paymentId: current?.paymentId,\n transactionId: current?.transactionId,\n status: 'failed',\n redirectTo: current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n setStatus((current) => ({ ...current, loading: false, refreshing: false, error: message }));\n throw error;\n }\n },\n [actionExecutor, apiClient, loaders, purchaseHooks, refresh, runtimeConfig],\n );\n\n useEffect(() => {\n if (!autoRefresh) return;\n if (runtimeConfigLoading) return;\n if (!runtimeConfig && !runtimeConfigError) {\n void refresh();\n }\n }, [autoRefresh, refresh, runtimeConfig, runtimeConfigError, runtimeConfigLoading]);\n\n const coreValue = useMemo(\n () =>\n buildCoreValue({\n apiClient,\n loaders,\n runtimeConfigLoader,\n actionExecutor,\n defaults,\n runtimeConfig,\n runtimeCatalog,\n runtimeConfigLoading,\n runtimeConfigError,\n subscription,\n subscriptionHistory,\n products,\n orderHistory,\n paymentHistory,\n credits,\n entitlements,\n purchaseStatus,\n purchaseHooks,\n status,\n refresh,\n runAction,\n setRuntimeConfig,\n setSubscription,\n setSubscriptionHistory,\n setProducts,\n setOrderHistory,\n setPaymentHistory,\n setCredits,\n setEntitlements,\n setPurchaseStatus,\n setStatus,\n }),\n [\n actionExecutor,\n apiClient,\n credits,\n defaults,\n entitlements,\n orderHistory,\n paymentHistory,\n products,\n purchaseStatus,\n purchaseHooks,\n refresh,\n runAction,\n runtimeConfig,\n runtimeConfigError,\n runtimeConfigLoader,\n runtimeConfigLoading,\n runtimeCatalog,\n loaders,\n status,\n subscription,\n subscriptionHistory,\n ],\n );\n\n return (\n <BillingCoreContext.Provider value={coreValue}>\n <SubscriptionProvider subscription={subscription} subscriptionHistory={subscriptionHistory} entitlements={entitlements} status={status}>\n <ProductProvider products={products} orderHistory={orderHistory} paymentHistory={paymentHistory} status={status}>\n <CreditsProvider credits={credits} status={status}>{children}</CreditsProvider>\n </ProductProvider>\n </SubscriptionProvider>\n </BillingCoreContext.Provider>\n );\n}\n\nexport function BillingCoreProvider(props: BillingCoreProviderProps) {\n return <BillingProvider {...props} />;\n}\n\nexport function SubscriptionProvider({\n children,\n availablePlans,\n subscription,\n subscriptionHistory,\n entitlements,\n status,\n}: BillingSubscriptionProviderProps) {\n const core = useOptionalContext(BillingCoreContext);\n const runtimeConfig = core?.runtimeConfig ?? core?.runtimeCatalog;\n const visiblePlans = choose(availablePlans, core?.availablePlans);\n const value = useMemo<BillingSubscriptionContextValue>(\n () => ({\n availablePlans: choose(\n visiblePlans ? filterBillingPurchasableItems(visiblePlans, runtimeConfig) : undefined,\n filterBillingPurchasableItems(core?.runtimeConfig?.items?.filter((item) => item.kind === 'subscription'), runtimeConfig),\n ),\n subscription: choose(subscription, core?.subscription),\n subscriptionHistory: choose(subscriptionHistory, core?.subscriptionHistory),\n entitlements: choose(entitlements, core?.entitlements),\n status: choose(status, core?.status),\n }),\n [availablePlans, core?.availablePlans, core?.entitlements, core?.runtimeCatalog, core?.runtimeConfig, core?.status, core?.subscription, core?.subscriptionHistory, entitlements, runtimeConfig, status, subscription, subscriptionHistory, visiblePlans],\n );\n\n return <BillingSubscriptionContext.Provider value={value}>{children}</BillingSubscriptionContext.Provider>;\n}\n\nexport function ProductProvider({\n children,\n availableProducts,\n products,\n orderHistory,\n paymentHistory,\n status,\n}: BillingProductProviderProps) {\n const core = useOptionalContext(BillingCoreContext);\n const runtimeConfig = core?.runtimeConfig ?? core?.runtimeCatalog;\n const visibleProducts = choose(availableProducts, core?.availableProducts);\n const value = useMemo<BillingProductContextValue>(\n () => ({\n availableProducts: choose(\n visibleProducts ? filterBillingPurchasableItems(visibleProducts, runtimeConfig) : undefined,\n filterBillingPurchasableItems(core?.runtimeConfig?.items?.filter((item) => item.kind === 'product'), runtimeConfig),\n ),\n products: choose(products, core?.products),\n orderHistory: choose(orderHistory, core?.orderHistory),\n paymentHistory: choose(paymentHistory, core?.paymentHistory),\n status: choose(status, core?.status),\n }),\n [availableProducts, core?.availableProducts, core?.orderHistory, core?.paymentHistory, core?.products, core?.runtimeCatalog, core?.runtimeConfig, core?.status, orderHistory, paymentHistory, products, runtimeConfig, status, visibleProducts],\n );\n\n return <BillingProductContext.Provider value={value}>{children}</BillingProductContext.Provider>;\n}\n\nexport function CreditsProvider({ children, credits, status }: BillingCreditsProviderProps) {\n const core = useOptionalContext(BillingCoreContext);\n const value = useMemo<BillingCreditsContextValue>(\n () => ({\n credits: choose(credits, core?.credits),\n status: choose(status, core?.status),\n }),\n [credits, core?.credits, core?.status, status],\n );\n\n return <BillingCreditsContext.Provider value={value}>{children}</BillingCreditsContext.Provider>;\n}\n\nexport interface BillingCatalogState {\n catalog?: BillingRuntimeConfig | BillingCatalogConfig;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingContext(): BillingCoreContextValue {\n return useRequiredCoreContext();\n}\n\nexport function useBillingCatalog(): BillingCatalogState {\n const core = useRequiredCoreContext();\n return useMemo(\n () => ({\n catalog: core.runtimeCatalog ?? core.runtimeConfig,\n loading: core.runtimeConfigLoading,\n error: core.runtimeConfigError,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeCatalog, core.runtimeConfig, core.runtimeConfigError, core.runtimeConfigLoading],\n );\n}\n\nexport interface BillingItemState {\n item?: BillingProductSnapshot;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingItem(itemKey: string): BillingItemState {\n const core = useRequiredCoreContext();\n return useMemo(() => {\n const item = resolveBillingItem(core.runtimeConfig?.items, itemKey);\n return {\n item: resolveBillingProductSnapshot(item),\n loading: core.runtimeConfigLoading,\n error: core.runtimeConfigError,\n refresh: core.refresh,\n };\n }, [core.refresh, core.runtimeConfig?.items, core.runtimeConfigError, core.runtimeConfigLoading, itemKey]);\n}\n\nexport interface BillingProductDetailState {\n product?: BillingCasdoorProductDetail;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProductDetail(productId: string): BillingProductDetailState {\n const core = useRequiredCoreContext();\n const productLoader = core.loaders?.productLoader ?? core.apiClient.fetchProduct;\n const [product, setProduct] = useState<BillingCasdoorProductDetail | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n if (!productLoader || !productId) {\n setProduct(undefined);\n setError(productId ? 'Missing Casdoor product loader.' : null);\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const response = await productLoader({ id: productId });\n const detail = extractCasdoorResponseData<BillingCasdoorProductDetail>(response);\n setProduct(detail);\n setError(null);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setProduct(undefined);\n setError(message);\n } finally {\n setLoading(false);\n }\n }, [productId, productLoader]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return useMemo(\n () => ({\n product,\n loading: loading || core.runtimeConfigLoading || core.status.loading,\n error: error ?? core.runtimeConfigError ?? core.status.error,\n refresh,\n }),\n [core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, error, loading, product, refresh],\n );\n}\n\nexport interface BillingProductPurchaseOptionsState {\n product?: BillingCasdoorProductDetail;\n providers: BillingCasdoorProductDetail['providers'];\n providerObjs: BillingCasdoorProductDetail['providerObjs'];\n providerName?: string;\n selectedProvider?: NonNullable<BillingCasdoorProductDetail['providerObjs']>[number];\n setProviderName: (providerName?: string) => void;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProductPurchaseOptions(productId: string, preferredProviderName?: string): BillingProductPurchaseOptionsState {\n const detailState = useBillingProductDetail(productId);\n const [providerName, setProviderName] = useState<string | undefined>(preferredProviderName);\n\n useEffect(() => {\n if (preferredProviderName) {\n setProviderName(preferredProviderName);\n return;\n }\n\n const product = detailState.product;\n const fallbackProvider = product?.providers?.[0] ?? product?.providerObjs?.[0]?.name;\n if (!providerName || (product && !product.providers?.includes(providerName) && !product.providerObjs?.some((item) => item.name === providerName))) {\n setProviderName(fallbackProvider);\n }\n }, [detailState.product, preferredProviderName, providerName]);\n\n return useMemo(\n () => ({\n product: detailState.product,\n providers: detailState.product?.providers ?? [],\n providerObjs: detailState.product?.providerObjs ?? [],\n providerName,\n selectedProvider: detailState.product?.providerObjs?.find((item) => item.name === providerName),\n setProviderName,\n loading: detailState.loading,\n error: detailState.error,\n refresh: detailState.refresh,\n }),\n [detailState.error, detailState.loading, detailState.product, detailState.refresh, providerName],\n );\n}\n\nexport type BillingPricingState = BillingCasdoorQueryState<BillingCasdoorPricingDetail>;\nexport type BillingPlanState = BillingCasdoorQueryState<BillingCasdoorPlanDetail>;\nexport type BillingOrderState = BillingCasdoorQueryState<BillingCasdoorOrderDetail>;\nexport type BillingOrdersState = BillingCasdoorQueryState<BillingCasdoorOrderDetail[]>;\nexport type BillingSubscriptionRecordState = BillingCasdoorQueryState<BillingCasdoorSubscriptionDetail>;\nexport type BillingSubscriptionsState = BillingCasdoorQueryState<BillingCasdoorSubscriptionDetail[]>;\n\nexport function useBillingPricing(pricingId: string): BillingPricingState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.pricingLoader ?? core.apiClient.fetchPricing;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: pricingId }), [pricingId]),\n [pricingId, loader],\n 'Missing billing pricing loader.',\n );\n}\n\nexport function useBillingPlan(planId: string, includeOption = false): BillingPlanState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.planLoader ?? core.apiClient.fetchPlan;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: planId, includeOption }), [includeOption, planId]),\n [includeOption, loader, planId],\n 'Missing billing plan loader.',\n );\n}\n\nexport function useBillingOrder(orderId: string): BillingOrderState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.orderLoader ?? core.apiClient.fetchOrder;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: orderId }), [orderId]),\n [loader, orderId],\n 'Missing billing order loader.',\n );\n}\n\nexport function useBillingSubscriptionRecord(subscriptionId: string): BillingSubscriptionRecordState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.subscriptionRecordLoader ?? core.apiClient.fetchSubscriptionRecord;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: subscriptionId }), [subscriptionId]),\n [loader, subscriptionId],\n 'Missing billing subscription loader.',\n );\n}\n\nexport function useBillingOrders(options: { owner?: string; user?: string; product?: string } = {}): BillingOrdersState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.ordersLoader ?? core.apiClient.fetchOrders;\n const owner = options.owner;\n const user = options.user;\n const product = options.product;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ owner, user, product }), [owner, product, user]),\n [loader, owner, product, user],\n 'Missing billing orders loader.',\n );\n}\n\nexport function useBillingSubscriptions(options: { owner?: string; user?: string } = {}): BillingSubscriptionsState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.subscriptionsLoader ?? core.apiClient.fetchSubscriptions;\n const owner = options.owner;\n const user = options.user;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ owner, user }), [owner, user]),\n [loader, owner, user],\n 'Missing billing subscriptions loader.',\n );\n}\n\nexport interface BillingPricingPlansState {\n pricing?: BillingCasdoorPricingDetail;\n plans: BillingCasdoorPlanDetail[];\n selectedPlanName?: string;\n selectedPlan?: BillingCasdoorPlanDetail;\n setSelectedPlanName: (planName?: string) => void;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPricingPlans(\n pricingId: string,\n includeOption = false,\n preferredPlanName?: string,\n): BillingPricingPlansState {\n const pricingState = useBillingPricing(pricingId);\n const core = useRequiredCoreContext();\n const [selectedPlanName, setSelectedPlanName] = useState<string | undefined>(preferredPlanName);\n const planLoader = core.loaders?.planLoader ?? core.apiClient.fetchPlan;\n const [plans, setPlans] = useState<BillingCasdoorPlanDetail[]>([]);\n const [planLoading, setPlanLoading] = useState(false);\n const [planError, setPlanError] = useState<string | null>(null);\n\n useEffect(() => {\n if (preferredPlanName) {\n setSelectedPlanName(preferredPlanName);\n }\n }, [preferredPlanName]);\n\n useEffect(() => {\n const nextPlanName = selectedPlanName ?? pricingState.data?.plans?.[0];\n if (!nextPlanName || (selectedPlanName && pricingState.data?.plans && !pricingState.data.plans.includes(selectedPlanName))) {\n setSelectedPlanName(pricingState.data?.plans?.[0]);\n return;\n }\n if (!selectedPlanName && nextPlanName) {\n setSelectedPlanName(nextPlanName);\n }\n }, [pricingState.data?.plans, selectedPlanName]);\n\n const refreshPlans = useCallback(async () => {\n if (!planLoader) {\n setPlans([]);\n setPlanError('Missing billing plan loader.');\n setPlanLoading(false);\n return;\n }\n\n const planNames = pricingState.data?.plans ?? [];\n if (!planNames.length) {\n setPlans([]);\n setPlanError(null);\n setPlanLoading(false);\n return;\n }\n\n setPlanLoading(true);\n setPlanError(null);\n try {\n const results = await Promise.all(\n planNames.map(async (planName) => {\n const response = await planLoader({ id: planName, includeOption });\n return extractCasdoorResponseData<BillingCasdoorPlanDetail>(response);\n }),\n );\n setPlans(results.filter((plan): plan is BillingCasdoorPlanDetail => Boolean(plan)));\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setPlans([]);\n setPlanError(message);\n } finally {\n setPlanLoading(false);\n }\n }, [includeOption, planLoader, pricingState.data?.plans]);\n\n useEffect(() => {\n void refreshPlans();\n }, [refreshPlans]);\n\n const selectedPlan = useMemo(\n () => plans.find((plan) => plan.name === selectedPlanName) ?? (plans.length === 1 ? plans[0] : undefined),\n [plans, selectedPlanName],\n );\n\n return useMemo(\n () => ({\n pricing: pricingState.data,\n plans,\n selectedPlanName,\n selectedPlan,\n setSelectedPlanName,\n loading: pricingState.loading || planLoading,\n error: pricingState.error ?? planError,\n refresh: async () => {\n await pricingState.refresh();\n await refreshPlans();\n },\n }),\n [planError, planLoading, plans, pricingState, refreshPlans, selectedPlan, selectedPlanName],\n );\n}\n\nexport interface BillingSubscriptionPurchaseOptionsState {\n pricing?: BillingCasdoorPricingDetail;\n plans: BillingCasdoorPlanDetail[];\n selectedPlanName?: string;\n selectedPlan?: BillingCasdoorPlanDetail;\n setSelectedPlanName: (planName?: string) => void;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscriptionPurchaseOptions(\n pricingId: string,\n includeOption = false,\n preferredPlanName?: string,\n): BillingSubscriptionPurchaseOptionsState {\n const pricingPlans = useBillingPricingPlans(pricingId, includeOption, preferredPlanName);\n return useMemo(\n () => ({\n pricing: pricingPlans.pricing,\n plans: pricingPlans.plans,\n selectedPlanName: pricingPlans.selectedPlanName,\n selectedPlan: pricingPlans.selectedPlan,\n setSelectedPlanName: pricingPlans.setSelectedPlanName,\n loading: pricingPlans.loading,\n error: pricingPlans.error,\n refresh: pricingPlans.refresh,\n }),\n [pricingPlans],\n );\n}\n\nexport interface BillingProductsState {\n products: BillingProductState[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProducts(): BillingProductsState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const products = choose(productContext?.products, core.products) ?? [];\n return useMemo(\n () => ({\n products,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, products],\n );\n}\n\nexport interface BillingAvailablePlansState {\n plans: BillingItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingAvailablePlans(): BillingAvailablePlansState {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const plans = choose(subscriptionContext?.availablePlans, core.availablePlans) ?? [];\n return useMemo(\n () => ({\n plans,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.availablePlans, core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, plans],\n );\n}\n\nexport interface BillingAvailableProductsState {\n items: BillingItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingAvailableProducts(): BillingAvailableProductsState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const items = choose(productContext?.availableProducts, core.availableProducts) ?? [];\n return useMemo(\n () => ({\n items,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.availableProducts, core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, items],\n );\n}\n\nexport interface BillingOrderHistoryState {\n orders: BillingOrderHistoryItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingOrderHistory(_options: { userId?: string; catalogKey?: string; productKey?: string } = {}): BillingOrderHistoryState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const orders = choose(productContext?.orderHistory, core.orderHistory) ?? [];\n return useMemo(\n () => ({\n orders,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, orders],\n );\n}\n\nexport interface BillingPaymentHistoryState {\n payments: BillingPaymentHistoryItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPaymentHistory(_options: { userId?: string; catalogKey?: string } = {}): BillingPaymentHistoryState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const payments = choose(productContext?.paymentHistory, core.paymentHistory) ?? [];\n return useMemo(\n () => ({\n payments,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, payments],\n );\n}\n\nexport interface BillingSubscriptionStateView {\n subscription?: BillingSubscriptionState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscription(): BillingSubscriptionStateView {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n return useMemo(\n () => ({\n subscription: choose(subscriptionContext?.subscription, core.subscription),\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, core.subscription, subscriptionContext?.subscription],\n );\n}\n\nexport interface BillingSubscriptionProductState {\n product?: BillingProductSnapshot;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscriptionProduct(): BillingSubscriptionProductState {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const subscription = choose(subscriptionContext?.subscription, core.subscription);\n return useMemo(\n () => ({\n product: subscription?.product ?? resolveBillingSubscriptionProduct(subscription, core.runtimeConfig),\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfig, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, subscription],\n );\n}\n\nexport interface BillingSubscriptionHistoryState {\n history: BillingSubscriptionHistoryItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscriptionHistory(_options: { userId?: string; catalogKey?: string } = {}): BillingSubscriptionHistoryState {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const history = choose(subscriptionContext?.subscriptionHistory, core.subscriptionHistory) ?? [];\n return useMemo(\n () => ({\n history,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, history],\n );\n}\n\nexport interface BillingCreditsStateView {\n credits?: BillingCreditsState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingCredits(): BillingCreditsStateView {\n const core = useRequiredCoreContext();\n const creditsContext = useOptionalContext(BillingCreditsContext);\n const credits = choose(creditsContext?.credits, core.credits) ?? deriveBillingCreditsState(undefined, core.products, core.runtimeConfig?.conversionRules);\n return useMemo(\n () => ({\n credits,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfig?.conversionRules, core.runtimeConfigError, core.runtimeConfigLoading, core.products, core.status.error, core.status.loading, credits],\n );\n}\n\nexport interface BillingEntitlementsStateView {\n entitlements?: BillingEntitlementState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingEntitlements(): BillingEntitlementsStateView {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const entitlements =\n choose(subscriptionContext?.entitlements, core.entitlements) ??\n deriveBillingEntitlements(subscriptionContext?.subscription ?? core.subscription, core.products, core.credits, core.runtimeConfig);\n return useMemo(\n () => ({\n entitlements,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.credits, core.products, core.refresh, core.runtimeConfig, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, entitlements, subscriptionContext?.subscription, core.subscription],\n );\n}\n\nexport interface BillingPurchaseStatusView {\n purchaseStatus?: BillingPurchaseStatus;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPurchaseStatus(): BillingPurchaseStatusView {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const order = getLatestOrder(choose(productContext?.orderHistory, core.orderHistory));\n const payment = getLatestPayment(choose(productContext?.paymentHistory, core.paymentHistory));\n const purchaseStatus = core.purchaseStatus ?? normalizeBillingPurchaseStatus(undefined, order, payment);\n return useMemo(\n () => ({\n purchaseStatus,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.purchaseStatus, core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, order, payment, purchaseStatus],\n );\n}\n\nexport interface BillingStatusView {\n status: BillingStatusState;\n}\n\nexport function useBillingStatus(): BillingStatusView {\n const core = useRequiredCoreContext();\n return useMemo(() => ({ status: core.status }), [core.status]);\n}\n\nexport interface BillingRefreshView {\n refresh: () => Promise<void>;\n}\n\nexport function useBillingRefresh(): BillingRefreshView {\n const core = useRequiredCoreContext();\n return useMemo(() => ({ refresh: core.refresh }), [core.refresh]);\n}\n\nexport interface BillingPipelineResult {\n run: (payload: BillingActionPayload) => Promise<void>;\n loading: boolean;\n error: string | null;\n purchaseStatus?: BillingPurchaseStatus;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPipeline(options: BillingPipelineOptions = {}): BillingPipelineResult {\n const core = useRequiredCoreContext();\n const purchaseStatusView = useBillingPurchaseStatus();\n\n const run = useCallback(\n async (payload: BillingActionPayload) => {\n const prepared = options.onBeforeAction ? await options.onBeforeAction(payload) : payload;\n try {\n const result = await core.runAction(prepared);\n if (options.onAfterAction) {\n await options.onAfterAction({ redirectTo: result.redirectTo, nextAction: result.nextAction });\n }\n } catch (error) {\n if (options.onError) {\n await options.onError(error);\n }\n throw error;\n }\n },\n [core, options],\n );\n\n return useMemo(\n () => ({\n run,\n loading: core.status.loading || core.runtimeConfigLoading,\n error: core.status.error ?? core.runtimeConfigError,\n purchaseStatus: purchaseStatusView.purchaseStatus,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, purchaseStatusView.purchaseStatus, run],\n );\n}\n\nexport interface BillingActionHookResult {\n run: (payload: BillingActionPayload) => Promise<void>;\n loading: boolean;\n error: string | null;\n}\n\nfunction useBillingActionRunner(kind: BillingActionKind, defaults?: Partial<BillingActionPayload>): BillingActionHookResult {\n const pipeline = useBillingPipeline();\n const run = useCallback(\n async (payload: BillingActionPayload) => {\n await pipeline.run({\n ...defaults,\n ...payload,\n kind,\n });\n },\n [defaults, kind, pipeline],\n );\n\n return useMemo(\n () => ({\n run,\n loading: pipeline.loading,\n error: pipeline.error,\n }),\n [pipeline.error, pipeline.loading, run],\n );\n}\n\nexport function useSubscribePlan(): BillingActionHookResult {\n return useBillingActionRunner('subscribe');\n}\n\nexport function useManageSubscription(): BillingActionHookResult {\n return useBillingActionRunner('manage');\n}\n\nexport function useUpgradePlan(): BillingActionHookResult {\n return useBillingActionRunner('upgrade');\n}\n\nexport function useCancelSubscription(): BillingActionHookResult {\n return useBillingActionRunner('cancel');\n}\n\nexport function usePurchaseProduct(): BillingActionHookResult {\n return useBillingActionRunner('purchase');\n}\n\nexport interface BillingProductStateView {\n product?: BillingProductState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProduct(productKey: string): BillingProductStateView {\n const productsState = useBillingProducts();\n const product = productsState.products.find((item) => item.productKey === productKey);\n return useMemo(\n () => ({\n product,\n loading: productsState.loading,\n error: productsState.error,\n refresh: productsState.refresh,\n }),\n [product, productsState.error, productsState.loading, productsState.refresh],\n );\n}\n\nexport function useBillingCatalogConfig(): BillingCatalogState {\n return useBillingCatalog();\n}\n"],"mappings":"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","names":["jsx"]}
1
+ {"version":3,"sources":["../../src/react/provider.tsx","../../src/react/hooks.ts","../../src/billing/react.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { Session } from 'next-auth';\nimport { SessionProvider } from 'next-auth/react';\n\nexport function AuthProvider({\n children,\n session,\n}: {\n children: ReactNode;\n session?: Session | null;\n}) {\n return <SessionProvider session={session}>{children}</SessionProvider>;\n}\n","'use client';\n\nimport { useSession } from 'next-auth/react';\nimport { buildAuthJumpHref } from '../core/redirect';\nimport { buildAuthUserSummary, type AuthSummaryRole } from '../core/auth-role';\nimport type { AuthSession } from '../next/options';\n\nexport type AuthRole = AuthSummaryRole;\n\nexport interface AuthUserSummary {\n id: string | null;\n name: string;\n email: string | null;\n image: string | null;\n isAuthenticated: boolean;\n isAdmin: boolean;\n tokenBalance: number;\n isVip: boolean;\n role: AuthRole;\n}\n\nexport interface AuthActions {\n loginHref: string;\n signupHref: string;\n logoutHref: string;\n accountHref: string;\n adminHref: string;\n}\n\nexport interface AuthActionsOptions {\n redirect?: string | null;\n}\n\nexport function getUserSummary(session: AuthSession | null | undefined): AuthUserSummary {\n return buildAuthUserSummary(session?.user);\n}\n\nexport function useAuthSession() {\n return useSession() as ReturnType<typeof useSession> & {\n data: AuthSession | null | undefined;\n };\n}\n\nexport function useAuthUser(): AuthUserSummary {\n const { data: session } = useAuthSession();\n return getUserSummary(session ?? null);\n}\n\nexport function useAuthRole(): AuthRole {\n return useAuthUser().role;\n}\n\nexport function useAuthActions(options: AuthActionsOptions = {}): AuthActions {\n const user = useAuthUser();\n const redirect = options.redirect ?? null;\n\n return {\n loginHref: buildAuthJumpHref('login', redirect ?? undefined),\n signupHref: buildAuthJumpHref('signup', redirect ?? undefined),\n logoutHref: '/logout',\n accountHref: '/user/account',\n adminHref: '/admin',\n };\n}\n","'use client';\n\nimport {\n type Context,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n buildBillingActionPayload,\n buildBillingPurchaseRequest,\n deriveBillingCreditsState,\n deriveBillingEntitlements,\n filterBillingPurchasableItems,\n normalizeCasdoorOrderHistoryItem,\n normalizeCasdoorPaymentHistoryItem,\n normalizeCasdoorSubscriptionDetail,\n normalizeCasdoorSubscriptionHistoryItem,\n normalizeBillingPurchaseStatus,\n normalizeBillingCatalogConfig,\n normalizeBillingRuntimeConfig,\n resolveBillingItem,\n resolveBillingPurchasable,\n resolveBillingProductSnapshot,\n resolveBillingSubscriptionProduct,\n} from './runtime';\nimport {\n buildCasdoorBuyProductRequest,\n normalizeCasdoorBuyProductResponse,\n normalizeCasdoorProductId,\n} from './casdoor-purchase.js';\nimport type {\n BillingActionExecutor,\n BillingActionKind,\n BillingActionExecutionResult,\n BillingActionPayload,\n BillingApiClient,\n BillingCatalogConfig,\n BillingCasdoorBuyProductRequest,\n BillingCasdoorOrderDetail,\n BillingCasdoorOrdersResponse,\n BillingCasdoorPlanDetail,\n BillingCasdoorPricingDetail,\n BillingCasdoorProductDetail,\n BillingCasdoorQueryState,\n BillingCasdoorSubscriptionDetail,\n BillingCasdoorSubscriptionsResponse,\n BillingCoreContextValue,\n BillingCreditsContextValue,\n BillingCreditsState,\n BillingDefaults,\n BillingEntitlementState,\n BillingLoaders,\n BillingOrderHistoryItem,\n BillingPaymentHistoryItem,\n BillingItem,\n BillingProductState,\n BillingProductContextValue,\n BillingProductSnapshot,\n BillingPurchaseHooks,\n BillingPurchaseStatus,\n BillingRuntimeConfig,\n BillingStatusState,\n BillingSubscriptionContextValue,\n BillingSubscriptionHistoryItem,\n BillingSubscriptionState,\n} from './types';\n\nexport interface BillingProviderProps {\n children: ReactNode;\n apiClient: BillingApiClient;\n loaders?: BillingLoaders;\n runtimeConfigLoader?: BillingLoaders['runtimeConfigLoader'];\n actionExecutor?: BillingActionExecutor;\n defaults?: BillingDefaults;\n runtimeConfig?: BillingRuntimeConfig | BillingCatalogConfig;\n subscription?: BillingSubscriptionState;\n subscriptionHistory?: BillingSubscriptionHistoryItem[];\n products?: BillingProductState[];\n orderHistory?: BillingOrderHistoryItem[];\n paymentHistory?: BillingPaymentHistoryItem[];\n credits?: BillingCreditsState;\n entitlements?: BillingEntitlementState;\n status?: BillingStatusState;\n purchaseStatus?: BillingPurchaseStatus;\n purchaseHooks?: BillingPurchaseHooks;\n autoRefresh?: boolean;\n}\n\nexport type BillingCoreProviderProps = BillingProviderProps;\nexport interface BillingSubscriptionProviderProps {\n children: ReactNode;\n availablePlans?: BillingItem[];\n subscription?: BillingSubscriptionState;\n subscriptionHistory?: BillingSubscriptionHistoryItem[];\n entitlements?: BillingEntitlementState;\n status?: BillingStatusState;\n}\n\nexport interface BillingProductProviderProps {\n children: ReactNode;\n availableProducts?: BillingItem[];\n products?: BillingProductState[];\n orderHistory?: BillingOrderHistoryItem[];\n paymentHistory?: BillingPaymentHistoryItem[];\n status?: BillingStatusState;\n}\n\nexport interface BillingCreditsProviderProps {\n children: ReactNode;\n credits?: BillingCreditsState;\n status?: BillingStatusState;\n}\n\nexport interface BillingPipelineOptions {\n onBeforeAction?: (payload: BillingActionPayload) => Promise<BillingActionPayload>;\n onAfterAction?: (result: { redirectTo?: string; nextAction?: string }) => Promise<void>;\n onError?: (error: unknown) => Promise<void>;\n}\n\nconst BillingCoreContext = createContext<BillingCoreContextValue | null>(null);\nconst BillingSubscriptionContext = createContext<BillingSubscriptionContextValue | null>(null);\nconst BillingProductContext = createContext<BillingProductContextValue | null>(null);\nconst BillingCreditsContext = createContext<BillingCreditsContextValue | null>(null);\n\nfunction useOptionalContext<T>(context: Context<T | null>): T | null {\n return useContext(context);\n}\n\nfunction useRequiredCoreContext(): BillingCoreContextValue {\n const context = useContext(BillingCoreContext);\n if (!context) {\n throw new Error('Billing hooks must be used inside BillingProvider or BillingCoreProvider.');\n }\n return context;\n}\n\nfunction choose<T>(primary: T | undefined, fallback: T | undefined): T | undefined {\n return primary ?? fallback;\n}\n\nasync function runPurchaseHook<T>(\n name: string,\n hook: ((context: T) => void | Promise<void>) | undefined,\n context: T | undefined,\n): Promise<void> {\n if (!hook || context === undefined) {\n return;\n }\n\n try {\n await hook(context);\n } catch (error) {\n console.error(`[casdoor-next-auth-kit] billing ${name} hook failed`, error);\n }\n}\n\nfunction getLatestOrder(orders: BillingOrderHistoryItem[] | undefined): BillingOrderHistoryItem | undefined {\n return [...(orders ?? [])].sort((a, b) => {\n const left = Date.parse(b.updatedAt ?? b.createdAt ?? '') || 0;\n const right = Date.parse(a.updatedAt ?? a.createdAt ?? '') || 0;\n return left - right;\n })[0];\n}\n\nfunction getLatestPayment(payments: BillingPaymentHistoryItem[] | undefined): BillingPaymentHistoryItem | undefined {\n return [...(payments ?? [])].sort((a, b) => {\n const left = Date.parse(b.updatedAt ?? b.createdAt ?? '') || 0;\n const right = Date.parse(a.updatedAt ?? a.createdAt ?? '') || 0;\n return left - right;\n })[0];\n}\n\nfunction extractCasdoorResponseData<TData>(response: { data?: TData } | TData | undefined): TData | undefined {\n if (!response) return undefined;\n if (typeof response === 'object' && response !== null && 'data' in response) {\n return (response as { data?: TData }).data;\n }\n return response as TData;\n}\n\nfunction useBillingCasdoorQuery<TData, TArgs extends Record<string, unknown>>(\n loader: ((args: TArgs) => Promise<{ data?: TData } | TData>) | undefined,\n buildArgs: () => TArgs,\n deps: readonly unknown[],\n missingLoaderMessage: string,\n): BillingCasdoorQueryState<TData> {\n const [data, setData] = useState<TData | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n if (!loader) {\n setData(undefined);\n setError(missingLoaderMessage);\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const response = await loader(buildArgs());\n const extracted = extractCasdoorResponseData<TData>(response);\n setData(extracted);\n setError(null);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setData(undefined);\n setError(message);\n } finally {\n setLoading(false);\n }\n }, [buildArgs, loader, missingLoaderMessage]);\n\n useEffect(() => {\n void refresh();\n }, [refresh, ...deps]);\n\n return useMemo(\n () => ({\n data,\n loading,\n error,\n refresh,\n }),\n [data, error, loading, refresh],\n );\n}\n\nfunction pickCurrentCasdoorSubscription(records: BillingCasdoorSubscriptionDetail[]): BillingCasdoorSubscriptionDetail | undefined {\n if (!records.length) return undefined;\n const active = records.find((record) => {\n const status = (record.state ?? '').toLowerCase();\n return status.includes('active') || status.includes('trial');\n });\n if (active) return active;\n return [...records].sort((left, right) => {\n const leftTime = Date.parse(left.endTime ?? left.createdTime ?? '') || 0;\n const rightTime = Date.parse(right.endTime ?? right.createdTime ?? '') || 0;\n return rightTime - leftTime;\n })[0];\n}\n\nfunction pickLatestCasdoorOrder(records: BillingCasdoorOrderDetail[]): BillingCasdoorOrderDetail | undefined {\n if (!records.length) return undefined;\n return [...records].sort((left, right) => {\n const leftTime = Date.parse((left as { updatedTime?: string }).updatedTime ?? left.createdTime ?? '') || 0;\n const rightTime = Date.parse((right as { updatedTime?: string }).updatedTime ?? right.createdTime ?? '') || 0;\n return rightTime - leftTime;\n })[0];\n}\n\nasync function runCasdoorProductPurchase(\n purchaseRequest: NonNullable<ReturnType<typeof buildBillingPurchaseRequest>>,\n apiClient: BillingApiClient,\n loaders: BillingLoaders | undefined,\n): Promise<BillingActionExecutionResult | null> {\n const buyProductLoader = loaders?.buyProductLoader ?? apiClient.buyProduct;\n if (!buyProductLoader) {\n return null;\n }\n\n const productLoader = loaders?.productLoader ?? apiClient.fetchProduct;\n const organizationNamesLoader = loaders?.organizationNamesLoader ?? apiClient.fetchOrganizationNames;\n\n let productDetail: BillingCasdoorProductDetail | undefined;\n if (productLoader) {\n const productResponse = await productLoader({ id: purchaseRequest.productId }).catch(() => undefined);\n productDetail = extractCasdoorResponseData<BillingCasdoorProductDetail>(productResponse);\n }\n\n if (!productDetail) {\n if (purchaseRequest.productOwner && purchaseRequest.productName) {\n productDetail = {\n owner: purchaseRequest.productOwner,\n name: purchaseRequest.productName,\n };\n } else {\n try {\n const normalized = normalizeCasdoorProductId(purchaseRequest.productId);\n productDetail = {\n owner: normalized.owner,\n name: normalized.name,\n };\n } catch {\n return null;\n }\n }\n }\n\n if (organizationNamesLoader && productDetail.owner) {\n const organizationResponse = await organizationNamesLoader({ owner: productDetail.owner }).catch(() => undefined);\n void extractCasdoorResponseData(organizationResponse);\n }\n\n const buyRequest: BillingCasdoorBuyProductRequest = buildCasdoorBuyProductRequest(\n purchaseRequest,\n productDetail,\n purchaseRequest.providerName,\n );\n\n const response = await buyProductLoader(buyRequest);\n return normalizeCasdoorBuyProductResponse(response, purchaseRequest.returnTo ?? productDetail.returnUrl ?? productDetail.successUrl);\n}\n\nfunction normalizeRuntimeConfigInput(config?: BillingRuntimeConfig | BillingCatalogConfig | null): BillingRuntimeConfig | undefined {\n if (!config) return undefined;\n return normalizeBillingRuntimeConfig(config);\n}\n\nfunction normalizeCatalogConfigInput(config?: BillingRuntimeConfig | BillingCatalogConfig | null): BillingCatalogConfig | undefined {\n if (!config) return undefined;\n return normalizeBillingCatalogConfig(config);\n}\n\nfunction buildCoreValue(input: {\n apiClient: BillingApiClient;\n loaders?: BillingLoaders;\n runtimeConfigLoader?: BillingLoaders['runtimeConfigLoader'];\n actionExecutor?: BillingActionExecutor;\n defaults?: BillingDefaults;\n runtimeConfig?: BillingRuntimeConfig | BillingCatalogConfig;\n runtimeCatalog?: BillingCatalogConfig;\n runtimeConfigLoading: boolean;\n runtimeConfigError: string | null;\n subscription?: BillingSubscriptionState;\n subscriptionHistory?: BillingSubscriptionHistoryItem[];\n products?: BillingProductState[];\n orderHistory?: BillingOrderHistoryItem[];\n paymentHistory?: BillingPaymentHistoryItem[];\n credits?: BillingCreditsState;\n entitlements?: BillingEntitlementState;\n purchaseStatus?: BillingPurchaseStatus;\n purchaseHooks?: BillingPurchaseHooks;\n status: BillingStatusState;\n refresh: () => Promise<void>;\n runAction: (payload: BillingActionPayload) => Promise<BillingActionExecutionResult>;\n setRuntimeConfig: (config?: BillingRuntimeConfig) => void;\n setSubscription: (value?: BillingSubscriptionState) => void;\n setSubscriptionHistory: (value?: BillingSubscriptionHistoryItem[]) => void;\n setProducts: (value?: BillingProductState[]) => void;\n setOrderHistory: (value?: BillingOrderHistoryItem[]) => void;\n setPaymentHistory: (value?: BillingPaymentHistoryItem[]) => void;\n setCredits: (value?: BillingCreditsState) => void;\n setEntitlements: (value?: BillingEntitlementState) => void;\n setPurchaseStatus: (status?: BillingPurchaseStatus) => void;\n setStatus: (status: BillingStatusState | ((current: BillingStatusState) => BillingStatusState)) => void;\n}): BillingCoreContextValue {\n return {\n apiClient: input.apiClient,\n loaders: input.loaders,\n runtimeConfigLoader: input.runtimeConfigLoader,\n actionExecutor: input.actionExecutor,\n defaults: input.defaults,\n runtimeConfig: input.runtimeConfig,\n runtimeCatalog: input.runtimeCatalog,\n runtimeConfigLoading: input.runtimeConfigLoading,\n runtimeConfigError: input.runtimeConfigError,\n subscription: input.subscription,\n subscriptionHistory: input.subscriptionHistory,\n products: input.products,\n orderHistory: input.orderHistory,\n paymentHistory: input.paymentHistory,\n availablePlans: filterBillingPurchasableItems(\n input.runtimeConfig?.items?.filter((item) => item.kind === 'subscription'),\n input.runtimeConfig ?? input.runtimeCatalog,\n ),\n availableProducts: filterBillingPurchasableItems(\n input.runtimeConfig?.items?.filter((item) => item.kind === 'product'),\n input.runtimeConfig ?? input.runtimeCatalog,\n ),\n credits: input.credits,\n entitlements: input.entitlements,\n purchaseStatus: input.purchaseStatus,\n purchaseHooks: input.purchaseHooks,\n status: input.status,\n refresh: input.refresh,\n runAction: input.runAction,\n setRuntimeConfig: input.setRuntimeConfig,\n setSubscription: input.setSubscription,\n setSubscriptionHistory: input.setSubscriptionHistory,\n setProducts: input.setProducts,\n setOrderHistory: input.setOrderHistory,\n setPaymentHistory: input.setPaymentHistory,\n setCredits: input.setCredits,\n setEntitlements: input.setEntitlements,\n setPurchaseStatus: input.setPurchaseStatus,\n setStatus: input.setStatus,\n };\n}\n\nexport function BillingProvider({\n children,\n apiClient,\n loaders,\n runtimeConfigLoader,\n actionExecutor,\n defaults,\n runtimeConfig: runtimeConfigProp,\n subscription: subscriptionProp,\n subscriptionHistory: subscriptionHistoryProp,\n products: productsProp,\n orderHistory: orderHistoryProp,\n paymentHistory: paymentHistoryProp,\n credits: creditsProp,\n entitlements: entitlementsProp,\n status: statusProp,\n purchaseStatus: purchaseStatusProp,\n purchaseHooks,\n autoRefresh = true,\n}: BillingProviderProps) {\n const [runtimeConfig, setRuntimeConfig] = useState<BillingRuntimeConfig | undefined>(normalizeRuntimeConfigInput(runtimeConfigProp));\n const [runtimeCatalog, setRuntimeCatalog] = useState<BillingCatalogConfig | undefined>(normalizeCatalogConfigInput(runtimeConfigProp));\n const [runtimeConfigLoading, setRuntimeConfigLoading] = useState(false);\n const [runtimeConfigError, setRuntimeConfigError] = useState<string | null>(null);\n const [subscription, setSubscription] = useState<BillingSubscriptionState | undefined>(subscriptionProp);\n const [subscriptionHistory, setSubscriptionHistory] = useState<BillingSubscriptionHistoryItem[] | undefined>(subscriptionHistoryProp);\n const [products, setProducts] = useState<BillingProductState[] | undefined>(productsProp);\n const [orderHistory, setOrderHistory] = useState<BillingOrderHistoryItem[] | undefined>(orderHistoryProp);\n const [paymentHistory, setPaymentHistory] = useState<BillingPaymentHistoryItem[] | undefined>(paymentHistoryProp);\n const [credits, setCredits] = useState<BillingCreditsState | undefined>(creditsProp);\n const [entitlements, setEntitlements] = useState<BillingEntitlementState | undefined>(entitlementsProp);\n const [purchaseStatus, setPurchaseStatus] = useState<BillingPurchaseStatus | undefined>(purchaseStatusProp);\n const [status, setStatus] = useState<BillingStatusState>(\n statusProp ?? { loading: false, refreshing: false, error: null },\n );\n\n useEffect(() => {\n if (runtimeConfigProp) {\n setRuntimeConfig(normalizeRuntimeConfigInput(runtimeConfigProp));\n setRuntimeCatalog(normalizeCatalogConfigInput(runtimeConfigProp));\n }\n }, [runtimeConfigProp]);\n\n useEffect(() => {\n if (subscriptionProp) setSubscription(subscriptionProp);\n }, [subscriptionProp]);\n\n useEffect(() => {\n if (subscriptionHistoryProp) setSubscriptionHistory(subscriptionHistoryProp);\n }, [subscriptionHistoryProp]);\n\n useEffect(() => {\n if (productsProp) setProducts(productsProp);\n }, [productsProp]);\n\n useEffect(() => {\n if (orderHistoryProp) setOrderHistory(orderHistoryProp);\n }, [orderHistoryProp]);\n\n useEffect(() => {\n if (paymentHistoryProp) setPaymentHistory(paymentHistoryProp);\n }, [paymentHistoryProp]);\n\n useEffect(() => {\n if (creditsProp) setCredits(creditsProp);\n }, [creditsProp]);\n\n useEffect(() => {\n if (entitlementsProp) setEntitlements(entitlementsProp);\n }, [entitlementsProp]);\n\n useEffect(() => {\n if (purchaseStatusProp) setPurchaseStatus(purchaseStatusProp);\n }, [purchaseStatusProp]);\n\n useEffect(() => {\n if (statusProp) setStatus(statusProp);\n }, [statusProp]);\n\n const refresh = useCallback(async () => {\n const catalogKey = runtimeCatalog?.catalogKey ?? runtimeConfig?.catalogKey ?? 'default';\n const runtimeLoader = runtimeConfigLoader ?? apiClient.fetchRuntimeConfig;\n const resolvedLoaders = loaders ?? {};\n const subscriptionLoader = resolvedLoaders.subscriptionLoader ?? apiClient.fetchSubscription;\n const subscriptionHistoryLoader = resolvedLoaders.subscriptionHistoryLoader ?? apiClient.fetchSubscriptionHistory;\n const subscriptionsLoader = resolvedLoaders.subscriptionsLoader ?? apiClient.fetchSubscriptions;\n const productsLoader = resolvedLoaders.productsLoader ?? apiClient.fetchProducts;\n const orderHistoryLoader = resolvedLoaders.orderHistoryLoader ?? apiClient.fetchOrderHistory;\n const ordersLoader = resolvedLoaders.ordersLoader ?? apiClient.fetchOrders;\n const paymentHistoryLoader = resolvedLoaders.paymentHistoryLoader ?? apiClient.fetchPaymentHistory;\n const paymentLoader = resolvedLoaders.paymentLoader ?? apiClient.fetchPayment;\n const purchaseStatusLoader = resolvedLoaders.purchaseStatusLoader ?? apiClient.fetchPurchaseStatus;\n const creditsLoader = resolvedLoaders.creditsLoader ?? apiClient.fetchCredits;\n const entitlementsLoader = resolvedLoaders.entitlementsLoader ?? apiClient.fetchEntitlements;\n\n setRuntimeConfigLoading(true);\n setRuntimeConfigError(null);\n setStatus((current) => ({ ...current, loading: true, refreshing: true, error: null }));\n\n try {\n const nextRuntimeCatalog = normalizeCatalogConfigInput(await runtimeLoader(catalogKey));\n const nextRuntimeConfig = nextRuntimeCatalog ? normalizeRuntimeConfigInput(nextRuntimeCatalog) : undefined;\n if (nextRuntimeConfig) {\n setRuntimeCatalog(nextRuntimeCatalog);\n setRuntimeConfig(nextRuntimeConfig);\n }\n\n const nextCatalogKey = nextRuntimeConfig?.catalogKey ?? nextRuntimeCatalog?.catalogKey ?? catalogKey;\n const nextSubscriptionsResponsePromise: Promise<BillingCasdoorSubscriptionsResponse | undefined> = subscriptionsLoader\n ? subscriptionsLoader({}).catch(() => undefined)\n : Promise.resolve(undefined);\n const nextOrdersResponsePromise: Promise<BillingCasdoorOrdersResponse | undefined> = ordersLoader\n ? ordersLoader({}).catch(() => undefined)\n : Promise.resolve(undefined);\n\n const [\n nextSubscription,\n nextSubscriptionHistory,\n nextSubscriptionsResponse,\n nextProducts,\n nextOrderHistory,\n nextOrdersResponse,\n nextPaymentHistory,\n nextCredits,\n nextEntitlements,\n ] = await Promise.all([\n subscriptionLoader({ catalogKey: nextCatalogKey }),\n subscriptionHistoryLoader({ catalogKey: nextCatalogKey }),\n nextSubscriptionsResponsePromise,\n productsLoader({ catalogKey: nextCatalogKey }),\n orderHistoryLoader({ catalogKey: nextCatalogKey }),\n nextOrdersResponsePromise,\n paymentHistoryLoader({ catalogKey: nextCatalogKey }),\n creditsLoader({ catalogKey: nextCatalogKey }),\n entitlementsLoader({ catalogKey: nextCatalogKey }),\n ]);\n\n const casdoorSubscriptions = extractCasdoorResponseData<BillingCasdoorSubscriptionDetail[]>(nextSubscriptionsResponse) ?? [];\n const casdoorOrders = extractCasdoorResponseData<BillingCasdoorOrderDetail[]>(nextOrdersResponse) ?? [];\n const derivedSubscriptionHistory = nextSubscriptionHistory ?? casdoorSubscriptions.map(normalizeCasdoorSubscriptionHistoryItem);\n const derivedOrderHistory = nextOrderHistory ?? casdoorOrders.map(normalizeCasdoorOrderHistoryItem);\n\n let resolvedPaymentHistory = nextPaymentHistory;\n if ((!resolvedPaymentHistory || resolvedPaymentHistory.length === 0) && casdoorOrders.length && paymentLoader) {\n const latestCasdoorOrder = pickLatestCasdoorOrder(casdoorOrders);\n const paymentId = latestCasdoorOrder?.payment ?? latestCasdoorOrder?.transaction;\n if (paymentId) {\n const paymentResponse = await paymentLoader({ id: paymentId }).catch(() => undefined);\n const paymentDetail = extractCasdoorResponseData<{\n name?: string;\n order?: string;\n outOrderId?: string;\n product?: string;\n productName?: string;\n productDisplayName?: string;\n price?: number;\n currency?: string;\n state?: string;\n transactionId?: string;\n createdTime?: string;\n updatedTime?: string;\n }>(paymentResponse);\n if (paymentDetail?.name) {\n resolvedPaymentHistory = [\n normalizeCasdoorPaymentHistoryItem({\n name: paymentDetail.name,\n order: paymentDetail.order,\n outOrderId: paymentDetail.outOrderId,\n product: paymentDetail.product ?? paymentDetail.productName,\n productName: paymentDetail.productName,\n productDisplayName: paymentDetail.productDisplayName,\n price: paymentDetail.price,\n currency: paymentDetail.currency,\n state: paymentDetail.state,\n transactionId: paymentDetail.transactionId,\n createdTime: paymentDetail.createdTime,\n updatedTime: paymentDetail.updatedTime,\n }),\n ];\n }\n }\n }\n\n const subscriptionWithProduct = nextSubscription\n ? {\n ...nextSubscription,\n product: resolveBillingSubscriptionProduct(nextSubscription, nextRuntimeConfig ?? runtimeConfig),\n }\n : (() => {\n const derivedSubscription = normalizeCasdoorSubscriptionDetail(pickCurrentCasdoorSubscription(casdoorSubscriptions));\n return derivedSubscription\n ? {\n ...derivedSubscription,\n product: resolveBillingSubscriptionProduct(derivedSubscription, nextRuntimeConfig ?? runtimeConfig),\n }\n : undefined;\n })();\n\n const normalizedCredits = deriveBillingCreditsState(nextCredits, nextProducts, nextRuntimeConfig?.conversionRules ?? runtimeConfig?.conversionRules);\n const normalizedEntitlements = nextEntitlements ?? deriveBillingEntitlements(subscriptionWithProduct, nextProducts, normalizedCredits, nextRuntimeConfig ?? runtimeConfig);\n const latestOrder = getLatestOrder(derivedOrderHistory);\n const latestPayment = getLatestPayment(resolvedPaymentHistory);\n const fetchedPurchaseStatus = await purchaseStatusLoader({\n orderId: latestOrder?.orderId,\n paymentId: latestPayment?.paymentId,\n transactionId: latestPayment?.transactionId ?? latestOrder?.transactionId,\n }).catch(() => undefined);\n const normalizedPurchaseStatus = normalizeBillingPurchaseStatus(\n fetchedPurchaseStatus,\n latestOrder,\n latestPayment,\n );\n\n setSubscription(subscriptionWithProduct);\n setSubscriptionHistory(derivedSubscriptionHistory);\n setProducts(nextProducts);\n setOrderHistory(derivedOrderHistory);\n setPaymentHistory(resolvedPaymentHistory);\n setCredits(normalizedCredits);\n setEntitlements(normalizedEntitlements);\n setPurchaseStatus(normalizedPurchaseStatus);\n setStatus({ loading: false, refreshing: false, error: null, lastFetchedAt: new Date().toISOString() });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n setRuntimeConfigError(message);\n setStatus((current) => ({ ...current, loading: false, refreshing: false, error: message }));\n } finally {\n setRuntimeConfigLoading(false);\n }\n }, [apiClient, loaders, runtimeConfig, runtimeConfigLoader, runtimeCatalog]);\n\n const runAction = useCallback(\n async (payload: BillingActionPayload) => {\n const prepared = buildBillingActionPayload(payload, runtimeConfig);\n const executor = actionExecutor ?? ((input: BillingActionPayload) => apiClient.createAction(input));\n const isPurchaseFlow = prepared.kind === 'purchase' || prepared.kind === 'subscribe';\n const purchasable = isPurchaseFlow\n ? resolveBillingPurchasable(runtimeConfig, prepared.key) ?? resolveBillingPurchasable(runtimeConfig, prepared.productId)\n : undefined;\n const purchaseRequest = isPurchaseFlow ? buildBillingPurchaseRequest(prepared, runtimeConfig) : null;\n\n if (isPurchaseFlow && !purchasable) {\n throw new Error(`Billing item \"${prepared.key}\" is not purchasable in the current runtime config.`);\n }\n\n await runPurchaseHook('onPurchaseStart', purchaseHooks?.onPurchaseStart, purchaseRequest ?? undefined);\n\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: current?.orderId,\n paymentId: current?.paymentId,\n transactionId: current?.transactionId,\n status: 'pending',\n redirectTo: current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n setStatus((current) => ({ ...current, loading: true, refreshing: true, error: null }));\n\n try {\n let result: BillingActionExecutionResult;\n let usedCasdoorPurchaseFlow = false;\n if (isPurchaseFlow && purchaseRequest) {\n const casdoorResult = await runCasdoorProductPurchase(\n purchaseRequest as NonNullable<ReturnType<typeof buildBillingPurchaseRequest>>,\n apiClient,\n loaders,\n );\n if (casdoorResult) {\n result = casdoorResult;\n usedCasdoorPurchaseFlow = true;\n } else {\n result = await executor(prepared);\n }\n } else {\n result = await executor(prepared);\n }\n\n if (result.status === 'failed') {\n await runPurchaseHook(\n 'onPurchaseError',\n purchaseHooks?.onPurchaseError,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n status: 'failed',\n message: result.message ?? 'Purchase failed.',\n errorCode: result.errorCode,\n redirectTo: result.redirectTo ?? null,\n rawResult: result.rawResult ?? result,\n }\n : undefined,\n );\n\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: result.orderId ?? current?.orderId,\n paymentId: result.paymentId ?? current?.paymentId,\n transactionId: result.transactionId ?? current?.transactionId,\n status: 'failed',\n redirectTo: result.redirectTo ?? current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n setStatus((current) => ({\n ...current,\n loading: false,\n refreshing: false,\n error: result.message ?? current.error ?? 'Purchase failed.',\n }));\n\n await runPurchaseHook(\n 'onPurchaseComplete',\n purchaseHooks?.onPurchaseComplete,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n status: 'failed',\n redirectTo: result.redirectTo ?? null,\n }\n : undefined,\n );\n\n await refresh();\n return result;\n }\n\n await runPurchaseHook(\n 'onOrderCreated',\n purchaseHooks?.onOrderCreated,\n purchaseRequest && purchasable\n ? {\n request: purchaseRequest,\n purchasable,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n redirectTo: result.redirectTo ?? null,\n rawResult: result.rawResult ?? result,\n }\n : undefined,\n );\n\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: current?.orderId,\n paymentId: current?.paymentId,\n transactionId: current?.transactionId,\n status:\n usedCasdoorPurchaseFlow && result.status !== 'failed'\n ? 'requires_payment'\n : result.status === 'failed'\n ? 'failed'\n : result.status === 'succeeded'\n ? 'paid'\n : 'pending',\n redirectTo: result.redirectTo ?? current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n if (result.redirectTo || result.nextAction) {\n // host handles the redirect/next action, we only persist the result\n }\n\n await runPurchaseHook(\n 'onPurchaseComplete',\n purchaseHooks?.onPurchaseComplete,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: result.orderId ?? null,\n paymentId: result.paymentId ?? null,\n status: 'succeeded',\n redirectTo: result.redirectTo ?? null,\n }\n : undefined,\n );\n\n await refresh();\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n await runPurchaseHook(\n 'onPurchaseError',\n purchaseHooks?.onPurchaseError,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: null,\n paymentId: null,\n status: 'failed',\n message,\n redirectTo: null,\n rawResult: error,\n }\n : undefined,\n );\n await runPurchaseHook(\n 'onPurchaseComplete',\n purchaseHooks?.onPurchaseComplete,\n purchaseRequest\n ? {\n request: purchaseRequest,\n orderId: null,\n paymentId: null,\n status: 'failed',\n redirectTo: null,\n }\n : undefined,\n );\n setPurchaseStatus((current) => ({\n actionKey: prepared.key,\n orderId: current?.orderId,\n paymentId: current?.paymentId,\n transactionId: current?.transactionId,\n status: 'failed',\n redirectTo: current?.redirectTo,\n updatedAt: new Date().toISOString(),\n }));\n setStatus((current) => ({ ...current, loading: false, refreshing: false, error: message }));\n throw error;\n }\n },\n [actionExecutor, apiClient, loaders, purchaseHooks, refresh, runtimeConfig],\n );\n\n useEffect(() => {\n if (!autoRefresh) return;\n if (runtimeConfigLoading) return;\n if (!runtimeConfig && !runtimeConfigError) {\n void refresh();\n }\n }, [autoRefresh, refresh, runtimeConfig, runtimeConfigError, runtimeConfigLoading]);\n\n const coreValue = useMemo(\n () =>\n buildCoreValue({\n apiClient,\n loaders,\n runtimeConfigLoader,\n actionExecutor,\n defaults,\n runtimeConfig,\n runtimeCatalog,\n runtimeConfigLoading,\n runtimeConfigError,\n subscription,\n subscriptionHistory,\n products,\n orderHistory,\n paymentHistory,\n credits,\n entitlements,\n purchaseStatus,\n purchaseHooks,\n status,\n refresh,\n runAction,\n setRuntimeConfig,\n setSubscription,\n setSubscriptionHistory,\n setProducts,\n setOrderHistory,\n setPaymentHistory,\n setCredits,\n setEntitlements,\n setPurchaseStatus,\n setStatus,\n }),\n [\n actionExecutor,\n apiClient,\n credits,\n defaults,\n entitlements,\n orderHistory,\n paymentHistory,\n products,\n purchaseStatus,\n purchaseHooks,\n refresh,\n runAction,\n runtimeConfig,\n runtimeConfigError,\n runtimeConfigLoader,\n runtimeConfigLoading,\n runtimeCatalog,\n loaders,\n status,\n subscription,\n subscriptionHistory,\n ],\n );\n\n return (\n <BillingCoreContext.Provider value={coreValue}>\n <SubscriptionProvider subscription={subscription} subscriptionHistory={subscriptionHistory} entitlements={entitlements} status={status}>\n <ProductProvider products={products} orderHistory={orderHistory} paymentHistory={paymentHistory} status={status}>\n <CreditsProvider credits={credits} status={status}>{children}</CreditsProvider>\n </ProductProvider>\n </SubscriptionProvider>\n </BillingCoreContext.Provider>\n );\n}\n\nexport function BillingCoreProvider(props: BillingCoreProviderProps) {\n return <BillingProvider {...props} />;\n}\n\nexport function SubscriptionProvider({\n children,\n availablePlans,\n subscription,\n subscriptionHistory,\n entitlements,\n status,\n}: BillingSubscriptionProviderProps) {\n const core = useOptionalContext(BillingCoreContext);\n const runtimeConfig = core?.runtimeConfig ?? core?.runtimeCatalog;\n const visiblePlans = choose(availablePlans, core?.availablePlans);\n const value = useMemo<BillingSubscriptionContextValue>(\n () => ({\n availablePlans: choose(\n visiblePlans ? filterBillingPurchasableItems(visiblePlans, runtimeConfig) : undefined,\n filterBillingPurchasableItems(core?.runtimeConfig?.items?.filter((item) => item.kind === 'subscription'), runtimeConfig),\n ),\n subscription: choose(subscription, core?.subscription),\n subscriptionHistory: choose(subscriptionHistory, core?.subscriptionHistory),\n entitlements: choose(entitlements, core?.entitlements),\n status: choose(status, core?.status),\n }),\n [availablePlans, core?.availablePlans, core?.entitlements, core?.runtimeCatalog, core?.runtimeConfig, core?.status, core?.subscription, core?.subscriptionHistory, entitlements, runtimeConfig, status, subscription, subscriptionHistory, visiblePlans],\n );\n\n return <BillingSubscriptionContext.Provider value={value}>{children}</BillingSubscriptionContext.Provider>;\n}\n\nexport function ProductProvider({\n children,\n availableProducts,\n products,\n orderHistory,\n paymentHistory,\n status,\n}: BillingProductProviderProps) {\n const core = useOptionalContext(BillingCoreContext);\n const runtimeConfig = core?.runtimeConfig ?? core?.runtimeCatalog;\n const visibleProducts = choose(availableProducts, core?.availableProducts);\n const value = useMemo<BillingProductContextValue>(\n () => ({\n availableProducts: choose(\n visibleProducts ? filterBillingPurchasableItems(visibleProducts, runtimeConfig) : undefined,\n filterBillingPurchasableItems(core?.runtimeConfig?.items?.filter((item) => item.kind === 'product'), runtimeConfig),\n ),\n products: choose(products, core?.products),\n orderHistory: choose(orderHistory, core?.orderHistory),\n paymentHistory: choose(paymentHistory, core?.paymentHistory),\n status: choose(status, core?.status),\n }),\n [availableProducts, core?.availableProducts, core?.orderHistory, core?.paymentHistory, core?.products, core?.runtimeCatalog, core?.runtimeConfig, core?.status, orderHistory, paymentHistory, products, runtimeConfig, status, visibleProducts],\n );\n\n return <BillingProductContext.Provider value={value}>{children}</BillingProductContext.Provider>;\n}\n\nexport function CreditsProvider({ children, credits, status }: BillingCreditsProviderProps) {\n const core = useOptionalContext(BillingCoreContext);\n const value = useMemo<BillingCreditsContextValue>(\n () => ({\n credits: choose(credits, core?.credits),\n status: choose(status, core?.status),\n }),\n [credits, core?.credits, core?.status, status],\n );\n\n return <BillingCreditsContext.Provider value={value}>{children}</BillingCreditsContext.Provider>;\n}\n\nexport interface BillingCatalogState {\n catalog?: BillingRuntimeConfig | BillingCatalogConfig;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingContext(): BillingCoreContextValue {\n return useRequiredCoreContext();\n}\n\nexport function useBillingCatalog(): BillingCatalogState {\n const core = useRequiredCoreContext();\n return useMemo(\n () => ({\n catalog: core.runtimeCatalog ?? core.runtimeConfig,\n loading: core.runtimeConfigLoading,\n error: core.runtimeConfigError,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeCatalog, core.runtimeConfig, core.runtimeConfigError, core.runtimeConfigLoading],\n );\n}\n\nexport interface BillingItemState {\n item?: BillingProductSnapshot;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingItem(itemKey: string): BillingItemState {\n const core = useRequiredCoreContext();\n return useMemo(() => {\n const item = resolveBillingItem(core.runtimeConfig?.items, itemKey);\n return {\n item: resolveBillingProductSnapshot(item),\n loading: core.runtimeConfigLoading,\n error: core.runtimeConfigError,\n refresh: core.refresh,\n };\n }, [core.refresh, core.runtimeConfig?.items, core.runtimeConfigError, core.runtimeConfigLoading, itemKey]);\n}\n\nexport interface BillingProductDetailState {\n product?: BillingCasdoorProductDetail;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProductDetail(productId: string): BillingProductDetailState {\n const core = useRequiredCoreContext();\n const productLoader = core.loaders?.productLoader ?? core.apiClient.fetchProduct;\n const [product, setProduct] = useState<BillingCasdoorProductDetail | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n if (!productLoader || !productId) {\n setProduct(undefined);\n setError(productId ? 'Missing Casdoor product loader.' : null);\n setLoading(false);\n return;\n }\n\n setLoading(true);\n setError(null);\n try {\n const response = await productLoader({ id: productId });\n const detail = extractCasdoorResponseData<BillingCasdoorProductDetail>(response);\n setProduct(detail);\n setError(null);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setProduct(undefined);\n setError(message);\n } finally {\n setLoading(false);\n }\n }, [productId, productLoader]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return useMemo(\n () => ({\n product,\n loading: loading || core.runtimeConfigLoading || core.status.loading,\n error: error ?? core.runtimeConfigError ?? core.status.error,\n refresh,\n }),\n [core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, error, loading, product, refresh],\n );\n}\n\nexport interface BillingProductPurchaseOptionsState {\n product?: BillingCasdoorProductDetail;\n providers: BillingCasdoorProductDetail['providers'];\n providerObjs: BillingCasdoorProductDetail['providerObjs'];\n providerName?: string;\n selectedProvider?: NonNullable<BillingCasdoorProductDetail['providerObjs']>[number];\n setProviderName: (providerName?: string) => void;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProductPurchaseOptions(productId: string, preferredProviderName?: string): BillingProductPurchaseOptionsState {\n const detailState = useBillingProductDetail(productId);\n const [providerName, setProviderName] = useState<string | undefined>(preferredProviderName);\n\n useEffect(() => {\n if (preferredProviderName) {\n setProviderName(preferredProviderName);\n return;\n }\n\n const product = detailState.product;\n const fallbackProvider = product?.providers?.[0] ?? product?.providerObjs?.[0]?.name;\n if (!providerName || (product && !product.providers?.includes(providerName) && !product.providerObjs?.some((item) => item.name === providerName))) {\n setProviderName(fallbackProvider);\n }\n }, [detailState.product, preferredProviderName, providerName]);\n\n return useMemo(\n () => ({\n product: detailState.product,\n providers: detailState.product?.providers ?? [],\n providerObjs: detailState.product?.providerObjs ?? [],\n providerName,\n selectedProvider: detailState.product?.providerObjs?.find((item) => item.name === providerName),\n setProviderName,\n loading: detailState.loading,\n error: detailState.error,\n refresh: detailState.refresh,\n }),\n [detailState.error, detailState.loading, detailState.product, detailState.refresh, providerName],\n );\n}\n\nexport type BillingPricingState = BillingCasdoorQueryState<BillingCasdoorPricingDetail>;\nexport type BillingPlanState = BillingCasdoorQueryState<BillingCasdoorPlanDetail>;\nexport type BillingOrderState = BillingCasdoorQueryState<BillingCasdoorOrderDetail>;\nexport type BillingOrdersState = BillingCasdoorQueryState<BillingCasdoorOrderDetail[]>;\nexport type BillingSubscriptionRecordState = BillingCasdoorQueryState<BillingCasdoorSubscriptionDetail>;\nexport type BillingSubscriptionsState = BillingCasdoorQueryState<BillingCasdoorSubscriptionDetail[]>;\n\nexport function useBillingPricing(pricingId: string): BillingPricingState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.pricingLoader ?? core.apiClient.fetchPricing;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: pricingId }), [pricingId]),\n [pricingId, loader],\n 'Missing billing pricing loader.',\n );\n}\n\nexport function useBillingPlan(planId: string, includeOption = false): BillingPlanState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.planLoader ?? core.apiClient.fetchPlan;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: planId, includeOption }), [includeOption, planId]),\n [includeOption, loader, planId],\n 'Missing billing plan loader.',\n );\n}\n\nexport function useBillingOrder(orderId: string): BillingOrderState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.orderLoader ?? core.apiClient.fetchOrder;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: orderId }), [orderId]),\n [loader, orderId],\n 'Missing billing order loader.',\n );\n}\n\nexport function useBillingSubscriptionRecord(subscriptionId: string): BillingSubscriptionRecordState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.subscriptionRecordLoader ?? core.apiClient.fetchSubscriptionRecord;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ id: subscriptionId }), [subscriptionId]),\n [loader, subscriptionId],\n 'Missing billing subscription loader.',\n );\n}\n\nexport function useBillingOrders(options: { owner?: string; user?: string; product?: string } = {}): BillingOrdersState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.ordersLoader ?? core.apiClient.fetchOrders;\n const owner = options.owner;\n const user = options.user;\n const product = options.product;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ owner, user, product }), [owner, product, user]),\n [loader, owner, product, user],\n 'Missing billing orders loader.',\n );\n}\n\nexport function useBillingSubscriptions(options: { owner?: string; user?: string } = {}): BillingSubscriptionsState {\n const core = useRequiredCoreContext();\n const loader = core.loaders?.subscriptionsLoader ?? core.apiClient.fetchSubscriptions;\n const owner = options.owner;\n const user = options.user;\n return useBillingCasdoorQuery(\n loader,\n useCallback(() => ({ owner, user }), [owner, user]),\n [loader, owner, user],\n 'Missing billing subscriptions loader.',\n );\n}\n\nexport interface BillingPricingPlansState {\n pricing?: BillingCasdoorPricingDetail;\n plans: BillingCasdoorPlanDetail[];\n selectedPlanName?: string;\n selectedPlan?: BillingCasdoorPlanDetail;\n setSelectedPlanName: (planName?: string) => void;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPricingPlans(\n pricingId: string,\n includeOption = false,\n preferredPlanName?: string,\n): BillingPricingPlansState {\n const pricingState = useBillingPricing(pricingId);\n const core = useRequiredCoreContext();\n const [selectedPlanName, setSelectedPlanName] = useState<string | undefined>(preferredPlanName);\n const planLoader = core.loaders?.planLoader ?? core.apiClient.fetchPlan;\n const [plans, setPlans] = useState<BillingCasdoorPlanDetail[]>([]);\n const [planLoading, setPlanLoading] = useState(false);\n const [planError, setPlanError] = useState<string | null>(null);\n\n useEffect(() => {\n if (preferredPlanName) {\n setSelectedPlanName(preferredPlanName);\n }\n }, [preferredPlanName]);\n\n useEffect(() => {\n const nextPlanName = selectedPlanName ?? pricingState.data?.plans?.[0];\n if (!nextPlanName || (selectedPlanName && pricingState.data?.plans && !pricingState.data.plans.includes(selectedPlanName))) {\n setSelectedPlanName(pricingState.data?.plans?.[0]);\n return;\n }\n if (!selectedPlanName && nextPlanName) {\n setSelectedPlanName(nextPlanName);\n }\n }, [pricingState.data?.plans, selectedPlanName]);\n\n const refreshPlans = useCallback(async () => {\n if (!planLoader) {\n setPlans([]);\n setPlanError('Missing billing plan loader.');\n setPlanLoading(false);\n return;\n }\n\n const planNames = pricingState.data?.plans ?? [];\n if (!planNames.length) {\n setPlans([]);\n setPlanError(null);\n setPlanLoading(false);\n return;\n }\n\n setPlanLoading(true);\n setPlanError(null);\n try {\n const results = await Promise.all(\n planNames.map(async (planName) => {\n const response = await planLoader({ id: planName, includeOption });\n return extractCasdoorResponseData<BillingCasdoorPlanDetail>(response);\n }),\n );\n setPlans(results.filter((plan): plan is BillingCasdoorPlanDetail => Boolean(plan)));\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n setPlans([]);\n setPlanError(message);\n } finally {\n setPlanLoading(false);\n }\n }, [includeOption, planLoader, pricingState.data?.plans]);\n\n useEffect(() => {\n void refreshPlans();\n }, [refreshPlans]);\n\n const selectedPlan = useMemo(\n () => plans.find((plan) => plan.name === selectedPlanName) ?? (plans.length === 1 ? plans[0] : undefined),\n [plans, selectedPlanName],\n );\n\n return useMemo(\n () => ({\n pricing: pricingState.data,\n plans,\n selectedPlanName,\n selectedPlan,\n setSelectedPlanName,\n loading: pricingState.loading || planLoading,\n error: pricingState.error ?? planError,\n refresh: async () => {\n await pricingState.refresh();\n await refreshPlans();\n },\n }),\n [planError, planLoading, plans, pricingState, refreshPlans, selectedPlan, selectedPlanName],\n );\n}\n\nexport interface BillingSubscriptionPurchaseOptionsState {\n pricing?: BillingCasdoorPricingDetail;\n plans: BillingCasdoorPlanDetail[];\n selectedPlanName?: string;\n selectedPlan?: BillingCasdoorPlanDetail;\n setSelectedPlanName: (planName?: string) => void;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscriptionPurchaseOptions(\n pricingId: string,\n includeOption = false,\n preferredPlanName?: string,\n): BillingSubscriptionPurchaseOptionsState {\n const pricingPlans = useBillingPricingPlans(pricingId, includeOption, preferredPlanName);\n return useMemo(\n () => ({\n pricing: pricingPlans.pricing,\n plans: pricingPlans.plans,\n selectedPlanName: pricingPlans.selectedPlanName,\n selectedPlan: pricingPlans.selectedPlan,\n setSelectedPlanName: pricingPlans.setSelectedPlanName,\n loading: pricingPlans.loading,\n error: pricingPlans.error,\n refresh: pricingPlans.refresh,\n }),\n [pricingPlans],\n );\n}\n\nexport interface BillingProductsState {\n products: BillingProductState[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProducts(): BillingProductsState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const products = choose(productContext?.products, core.products) ?? [];\n return useMemo(\n () => ({\n products,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, products],\n );\n}\n\nexport interface BillingAvailablePlansState {\n plans: BillingItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingAvailablePlans(): BillingAvailablePlansState {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const plans = choose(subscriptionContext?.availablePlans, core.availablePlans) ?? [];\n return useMemo(\n () => ({\n plans,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.availablePlans, core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, plans],\n );\n}\n\nexport interface BillingAvailableProductsState {\n items: BillingItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingAvailableProducts(): BillingAvailableProductsState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const items = choose(productContext?.availableProducts, core.availableProducts) ?? [];\n return useMemo(\n () => ({\n items,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.availableProducts, core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, items],\n );\n}\n\nexport interface BillingOrderHistoryState {\n orders: BillingOrderHistoryItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingOrderHistory(_options: { userId?: string; catalogKey?: string; productKey?: string } = {}): BillingOrderHistoryState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const orders = choose(productContext?.orderHistory, core.orderHistory) ?? [];\n return useMemo(\n () => ({\n orders,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, orders],\n );\n}\n\nexport interface BillingPaymentHistoryState {\n payments: BillingPaymentHistoryItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPaymentHistory(_options: { userId?: string; catalogKey?: string } = {}): BillingPaymentHistoryState {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const payments = choose(productContext?.paymentHistory, core.paymentHistory) ?? [];\n return useMemo(\n () => ({\n payments,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, payments],\n );\n}\n\nexport interface BillingSubscriptionStateView {\n subscription?: BillingSubscriptionState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscription(): BillingSubscriptionStateView {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n return useMemo(\n () => ({\n subscription: choose(subscriptionContext?.subscription, core.subscription),\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, core.subscription, subscriptionContext?.subscription],\n );\n}\n\nexport interface BillingSubscriptionProductState {\n product?: BillingProductSnapshot;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscriptionProduct(): BillingSubscriptionProductState {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const subscription = choose(subscriptionContext?.subscription, core.subscription);\n return useMemo(\n () => ({\n product: subscription?.product ?? resolveBillingSubscriptionProduct(subscription, core.runtimeConfig),\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfig, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, subscription],\n );\n}\n\nexport interface BillingSubscriptionHistoryState {\n history: BillingSubscriptionHistoryItem[];\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingSubscriptionHistory(_options: { userId?: string; catalogKey?: string } = {}): BillingSubscriptionHistoryState {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const history = choose(subscriptionContext?.subscriptionHistory, core.subscriptionHistory) ?? [];\n return useMemo(\n () => ({\n history,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, history],\n );\n}\n\nexport interface BillingCreditsStateView {\n credits?: BillingCreditsState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingCredits(): BillingCreditsStateView {\n const core = useRequiredCoreContext();\n const creditsContext = useOptionalContext(BillingCreditsContext);\n const credits = choose(creditsContext?.credits, core.credits) ?? deriveBillingCreditsState(undefined, core.products, core.runtimeConfig?.conversionRules);\n return useMemo(\n () => ({\n credits,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfig?.conversionRules, core.runtimeConfigError, core.runtimeConfigLoading, core.products, core.status.error, core.status.loading, credits],\n );\n}\n\nexport interface BillingEntitlementsStateView {\n entitlements?: BillingEntitlementState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingEntitlements(): BillingEntitlementsStateView {\n const core = useRequiredCoreContext();\n const subscriptionContext = useOptionalContext(BillingSubscriptionContext);\n const entitlements =\n choose(subscriptionContext?.entitlements, core.entitlements) ??\n deriveBillingEntitlements(subscriptionContext?.subscription ?? core.subscription, core.products, core.credits, core.runtimeConfig);\n return useMemo(\n () => ({\n entitlements,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.credits, core.products, core.refresh, core.runtimeConfig, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, entitlements, subscriptionContext?.subscription, core.subscription],\n );\n}\n\nexport interface BillingPurchaseStatusView {\n purchaseStatus?: BillingPurchaseStatus;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPurchaseStatus(): BillingPurchaseStatusView {\n const core = useRequiredCoreContext();\n const productContext = useOptionalContext(BillingProductContext);\n const order = getLatestOrder(choose(productContext?.orderHistory, core.orderHistory));\n const payment = getLatestPayment(choose(productContext?.paymentHistory, core.paymentHistory));\n const purchaseStatus = core.purchaseStatus ?? normalizeBillingPurchaseStatus(undefined, order, payment);\n return useMemo(\n () => ({\n purchaseStatus,\n loading: core.runtimeConfigLoading || core.status.loading,\n error: core.runtimeConfigError ?? core.status.error,\n refresh: core.refresh,\n }),\n [core.purchaseStatus, core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, order, payment, purchaseStatus],\n );\n}\n\nexport interface BillingStatusView {\n status: BillingStatusState;\n}\n\nexport function useBillingStatus(): BillingStatusView {\n const core = useRequiredCoreContext();\n return useMemo(() => ({ status: core.status }), [core.status]);\n}\n\nexport interface BillingRefreshView {\n refresh: () => Promise<void>;\n}\n\nexport function useBillingRefresh(): BillingRefreshView {\n const core = useRequiredCoreContext();\n return useMemo(() => ({ refresh: core.refresh }), [core.refresh]);\n}\n\nexport interface BillingPipelineResult {\n run: (payload: BillingActionPayload) => Promise<void>;\n loading: boolean;\n error: string | null;\n purchaseStatus?: BillingPurchaseStatus;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingPipeline(options: BillingPipelineOptions = {}): BillingPipelineResult {\n const core = useRequiredCoreContext();\n const purchaseStatusView = useBillingPurchaseStatus();\n\n const run = useCallback(\n async (payload: BillingActionPayload) => {\n const prepared = options.onBeforeAction ? await options.onBeforeAction(payload) : payload;\n try {\n const result = await core.runAction(prepared);\n if (options.onAfterAction) {\n await options.onAfterAction({ redirectTo: result.redirectTo, nextAction: result.nextAction });\n }\n } catch (error) {\n if (options.onError) {\n await options.onError(error);\n }\n throw error;\n }\n },\n [core, options],\n );\n\n return useMemo(\n () => ({\n run,\n loading: core.status.loading || core.runtimeConfigLoading,\n error: core.status.error ?? core.runtimeConfigError,\n purchaseStatus: purchaseStatusView.purchaseStatus,\n refresh: core.refresh,\n }),\n [core.refresh, core.runtimeConfigError, core.runtimeConfigLoading, core.status.error, core.status.loading, purchaseStatusView.purchaseStatus, run],\n );\n}\n\nexport interface BillingActionHookResult {\n run: (payload: BillingActionPayload) => Promise<void>;\n loading: boolean;\n error: string | null;\n}\n\nfunction useBillingActionRunner(kind: BillingActionKind, defaults?: Partial<BillingActionPayload>): BillingActionHookResult {\n const pipeline = useBillingPipeline();\n const run = useCallback(\n async (payload: BillingActionPayload) => {\n await pipeline.run({\n ...defaults,\n ...payload,\n kind,\n });\n },\n [defaults, kind, pipeline],\n );\n\n return useMemo(\n () => ({\n run,\n loading: pipeline.loading,\n error: pipeline.error,\n }),\n [pipeline.error, pipeline.loading, run],\n );\n}\n\nexport function useSubscribePlan(): BillingActionHookResult {\n return useBillingActionRunner('subscribe');\n}\n\nexport function useManageSubscription(): BillingActionHookResult {\n return useBillingActionRunner('manage');\n}\n\nexport function useUpgradePlan(): BillingActionHookResult {\n return useBillingActionRunner('upgrade');\n}\n\nexport function useCancelSubscription(): BillingActionHookResult {\n return useBillingActionRunner('cancel');\n}\n\nexport function usePurchaseProduct(): BillingActionHookResult {\n return useBillingActionRunner('purchase');\n}\n\nexport interface BillingProductStateView {\n product?: BillingProductState;\n loading: boolean;\n error: string | null;\n refresh: () => Promise<void>;\n}\n\nexport function useBillingProduct(productKey: string): BillingProductStateView {\n const productsState = useBillingProducts();\n const product = productsState.products.find((item) => item.productKey === productKey);\n return useMemo(\n () => ({\n product,\n loading: productsState.loading,\n error: productsState.error,\n refresh: productsState.refresh,\n }),\n [product, productsState.error, productsState.loading, productsState.refresh],\n );\n}\n\nexport function useBillingCatalogConfig(): BillingCatalogState {\n return useBillingCatalog();\n}\n"],"mappings":"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","names":["jsx"]}
@@ -74,6 +74,7 @@ npx @foldspace-fe/casdoor-next-auth-kit@latest check
74
74
  - `useAuthSession` — 获取当前 NextAuth 会话对象
75
75
  - `useAuthUser` — 获取当前登录用户信息(含 Casdoor 用户字段)
76
76
  - `useAuthRole` — 获取当前用户的角色信息,用于权限判断
77
+ - `role` 是一等认证字段,Casdoor profile、callback、JWT/session、`useAuthUser`、`useAuthRole` 和生成的 `auth-config.ts` 会一起维护它;`isAdmin` 仍然保留兼容推导,但不要只依赖它
77
78
  - `useAuthActions` — 提供登录、注册、注销等认证操作方法
78
79
  - Casdoor 登录 / 注册入口处理器 — 处理用户进入认证流程的初始交互
79
80
  - callback / logout / nextauth 路由处理器 — 处理 OAuth 回调、注销和 NextAuth 路由请求
@@ -21,12 +21,14 @@ interface OAuthTokens {
21
21
  token_type?: string;
22
22
  [key: string]: unknown;
23
23
  }
24
+ type AuthUserRole = 'user' | 'admin';
24
25
  interface AuthUser {
25
26
  id: string;
26
27
  name: string | null;
27
28
  email: string | null;
28
29
  image: string | null;
29
30
  isAdmin: boolean;
31
+ role: AuthUserRole;
30
32
  tokenBalance: number;
31
33
  isVip: boolean;
32
34
  }
@@ -119,4 +121,4 @@ interface PrismaSchemaModelDefinition {
119
121
  blockAttributes?: string[];
120
122
  }
121
123
 
122
- export type { AuthKitConfig as A, CasdoorUserInfo as C, ManagedEnvFile as M, OAuthTokens as O, PrismaSchemaModelDefinition as P, AuthBusinessAdapter as a, AuthPersistenceAdapter as b, AuthUser as c, ManagedEnvVariableDefinition as d, AuthIndexHtmlOptions as e, AuthDatabaseContract as f, AuthDatabaseFieldRequirement as g, AuthDatabaseTableRequirement as h, AuthRuntimeContext as i, PrismaSchemaFieldDefinition as j };
124
+ export type { AuthUserRole as A, CasdoorUserInfo as C, ManagedEnvFile as M, OAuthTokens as O, PrismaSchemaModelDefinition as P, AuthUser as a, AuthKitConfig as b, AuthBusinessAdapter as c, AuthPersistenceAdapter as d, AuthIndexHtmlOptions as e, AuthDatabaseContract as f, AuthDatabaseFieldRequirement as g, AuthDatabaseTableRequirement as h, AuthRuntimeContext as i, ManagedEnvVariableDefinition as j, PrismaSchemaFieldDefinition as k };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foldspace-fe/casdoor-next-auth-kit",
3
- "version": "0.1.23",
3
+ "version": "0.1.25",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,12 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { A as AuthKitConfig, a as AuthBusinessAdapter, b as AuthPersistenceAdapter } from './types-BJv6j3NZ.js';
3
-
4
- interface CallbackHandlerOptions {
5
- config: AuthKitConfig;
6
- adapter?: AuthBusinessAdapter;
7
- persistence?: AuthPersistenceAdapter;
8
- }
9
- declare function createCallbackResponse(request: NextRequest, options: CallbackHandlerOptions): Promise<NextResponse>;
10
- declare function createCallbackHandler(options: CallbackHandlerOptions): (request: NextRequest) => Promise<NextResponse<unknown>>;
11
-
12
- export { type CallbackHandlerOptions as C, createCallbackResponse as a, createCallbackHandler as c };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/next/login.ts","../src/next/signup.ts","../src/next/authorize.ts","../src/next/logout.ts","../src/next/options.ts"],"sourcesContent":["import type { NextRequest } from 'next/server';\nimport type { AuthKitConfig } from '../types';\nimport { createLoginEntryResponse } from '../casdoor/entry';\n\nexport function createLoginRouteHandler(config: AuthKitConfig) {\n return async (request: NextRequest) => createLoginEntryResponse(request, config);\n}\n","import type { NextRequest } from 'next/server';\nimport type { AuthKitConfig } from '../types';\nimport { createSignupEntryResponse } from '../casdoor/entry';\n\nexport function createSignupRouteHandler(config: AuthKitConfig) {\n return async (request: NextRequest) => createSignupEntryResponse(request, config);\n}\n","import type { NextRequest } from 'next/server';\nimport type { AuthKitConfig } from '../types';\nimport { createAuthorizeEntryResponse } from '../casdoor/entry';\n\nexport function createAuthorizeRouteHandler(config: AuthKitConfig) {\n return async (request: NextRequest) => createAuthorizeEntryResponse(request, config);\n}\n","import { NextResponse, type NextRequest } from 'next/server';\nimport type { AuthKitConfig } from '../types';\nimport { isSecureRequest } from '../core/request-security';\nimport { clearAuthRedirectCookie } from '../core/auth-redirect';\nimport { clearPublicOriginCookie } from '../core/public-origin';\n\nfunction getCookieNamesFromHeader(cookieHeader: string | null): string[] {\n if (!cookieHeader) {\n return [];\n }\n\n return cookieHeader\n .split(';')\n .map((part) => part.trim())\n .filter(Boolean)\n .map((part) => part.split('=')[0]?.trim())\n .filter((name): name is string => Boolean(name));\n}\n\nfunction getPathCandidates(pathname: string): string[] {\n const normalized = pathname.startsWith('/') ? pathname : `/${pathname}`;\n const segments = normalized.split('/').filter(Boolean);\n const paths = new Set<string>(['/']);\n\n let current = '';\n for (const segment of segments) {\n current += `/${segment}`;\n paths.add(current);\n }\n\n return [...paths];\n}\n\nfunction resolveLogoutTargetUrl(request: NextRequest, config: AuthKitConfig): URL {\n const origin = request.cookies.get('auth_origin')?.value ?? config.appUrl ?? new URL(request.url).origin;\n const logoutRedirectPath = config.logoutRedirectPath ?? '/';\n return new URL(logoutRedirectPath, origin);\n}\n\nfunction clearCookieEverywhere(\n response: NextResponse,\n cookieName: string,\n secure: boolean,\n pathCandidates: string[],\n) {\n for (const path of pathCandidates) {\n response.cookies.set(cookieName, '', {\n path,\n httpOnly: true,\n sameSite: 'lax',\n secure,\n maxAge: 0,\n });\n }\n}\n\nexport function createLogoutHandler(config: AuthKitConfig) {\n return async function GET(request: NextRequest) {\n const secure = config.cookie?.secure === 'auto' ? isSecureRequest(request, config.appUrl) : Boolean(config.cookie?.secure);\n // 307 keeps same-path targets behaving like a reload instead of a cache-friendly rewrite.\n const targetUrl = resolveLogoutTargetUrl(request, config);\n const response = NextResponse.redirect(targetUrl, 307);\n response.headers.set('Clear-Site-Data', '\"cookies\"');\n const cookieNames = getCookieNamesFromHeader(request.headers.get('cookie'));\n const pathCandidates = getPathCandidates(request.nextUrl.pathname);\n\n for (const cookieName of cookieNames) {\n clearCookieEverywhere(response, cookieName, secure, pathCandidates);\n }\n clearCookieEverywhere(response, 'oauth_state', secure, pathCandidates);\n clearCookieEverywhere(response, 'auth_origin', secure, pathCandidates);\n clearCookieEverywhere(response, 'auth_redirect', secure, pathCandidates);\n clearAuthRedirectCookie(response, secure);\n clearPublicOriginCookie(response, secure);\n\n return response;\n };\n}\n","import NextAuth from 'next-auth';\nimport type { NextAuthOptions, Session } from 'next-auth';\nimport type { JWT } from 'next-auth/jwt';\nimport type { AuthBusinessAdapter, AuthKitConfig, AuthPersistenceAdapter, AuthUser } from '../types';\nimport { normalizeAuthKitConfig } from '../core/config';\nimport { decodeSessionToken, encodeSessionToken } from '../core/session-token';\nimport { isGlobalAdminEmail } from '../core/admin';\n\nexport interface NextAuthRouteOptions {\n config: AuthKitConfig;\n adapter?: AuthBusinessAdapter;\n persistence?: AuthPersistenceAdapter;\n providers?: NextAuthOptions['providers'];\n}\n\nexport interface AuthTokenPayload extends JWT {\n id?: string;\n name?: string;\n email?: string;\n picture?: string | null;\n userId?: string;\n accessToken?: string;\n expiresAt?: number;\n tokenBalance?: number;\n isVip?: boolean;\n isAdmin?: boolean;\n}\n\nexport interface AuthSessionUser {\n id?: string;\n isAdmin?: boolean;\n tokenBalance?: number;\n isVip?: boolean;\n}\n\nexport interface AuthSession extends Session {\n accessToken?: string;\n expiresAt?: number;\n user?: AuthSessionUser & NonNullable<Session['user']>;\n}\n\nfunction resolveAuthUserFromToken(token: AuthTokenPayload, adapter?: AuthBusinessAdapter): AuthUser {\n const email = typeof token.email === 'string' ? token.email : null;\n return {\n id: token.userId || token.sub || token.id || email || 'casdoor-user',\n name: typeof token.name === 'string' ? token.name : null,\n email,\n image: typeof token.picture === 'string' ? token.picture : null,\n isAdmin: Boolean(token.isAdmin) || Boolean(adapter?.isAdminEmail?.(email)) || isGlobalAdminEmail(email),\n tokenBalance: Number(token.tokenBalance ?? 2580),\n isVip: Boolean(token.isVip ?? true),\n };\n}\n\nexport function createNextAuthOptions(options: NextAuthRouteOptions): NextAuthOptions {\n const normalized = normalizeAuthKitConfig(options.config);\n\n return {\n providers: options.providers ?? [],\n session: {\n strategy: 'jwt',\n },\n jwt: {\n encode: encodeSessionToken,\n decode: decodeSessionToken,\n },\n pages: {\n signIn: '/login',\n error: '/callback/error',\n },\n callbacks: {\n async jwt({ token, account, profile }) {\n const typedToken = token as AuthTokenPayload;\n\n if (account) {\n typedToken.accessToken = account.access_token;\n typedToken.expiresAt = account.expires_at ? account.expires_at * 1000 : undefined;\n }\n\n if (profile && typeof profile === 'object') {\n const typedProfile = profile as Partial<AuthUser> & {\n sub?: string;\n id?: string;\n picture?: string;\n };\n\n typedToken.userId = typedProfile.id || typedProfile.sub || typedToken.userId;\n typedToken.name = typedProfile.name || typedToken.name;\n typedToken.email = typedProfile.email || typedToken.email;\n typedToken.picture = typedProfile.image || typedProfile.picture || typedToken.picture;\n typedToken.isAdmin = Boolean(typedProfile.isAdmin ?? typedToken.isAdmin);\n typedToken.tokenBalance = typedProfile.tokenBalance ?? typedToken.tokenBalance ?? 2580;\n typedToken.isVip = typedProfile.isVip ?? typedToken.isVip ?? true;\n }\n\n return typedToken;\n },\n async session({ session, token }) {\n const typedSession = session as AuthSession;\n const typedToken = token as AuthTokenPayload;\n const tokenUserId = typedToken.userId || typedToken.sub || typedToken.id || '';\n const tokenEmail = typeof typedToken.email === 'string' ? typedToken.email : null;\n const persistedUser = options.persistence?.findAuthUser\n ? await options.persistence.findAuthUser({ id: tokenUserId || undefined, email: tokenEmail })\n : null;\n const resolvedUser = persistedUser ?? resolveAuthUserFromToken(typedToken, options.adapter);\n\n if (typedSession.user) {\n typedSession.user.id = resolvedUser.id;\n typedSession.user.isAdmin = resolvedUser.isAdmin;\n typedSession.user.tokenBalance = resolvedUser.tokenBalance;\n typedSession.user.isVip = resolvedUser.isVip;\n }\n\n typedSession.accessToken = typedToken.accessToken;\n typedSession.expiresAt = typedToken.expiresAt;\n typedSession.user = {\n ...(typedSession.user || {}),\n name: typedSession.user?.name || resolvedUser.name,\n email: typedSession.user?.email || resolvedUser.email,\n image: typedSession.user?.image || resolvedUser.image,\n id: resolvedUser.id,\n isAdmin: resolvedUser.isAdmin,\n tokenBalance: resolvedUser.tokenBalance,\n isVip: resolvedUser.isVip,\n };\n\n return typedSession;\n },\n },\n events: {\n async signOut({ token }) {\n const typedToken = token as AuthTokenPayload | null;\n if (!typedToken?.accessToken || !normalized.appUrl) {\n return;\n }\n\n try {\n await fetch(new URL('/api/casdoor/logout', normalized.appUrl).toString(), {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${typedToken.accessToken}`,\n },\n });\n } catch {\n // ignored\n }\n },\n },\n secret: normalized.nextauthSecret,\n };\n}\n\nexport function createNextAuthRouteHandler(options: NextAuthRouteOptions) {\n const handler = NextAuth(createNextAuthOptions(options));\n return {\n GET: handler,\n POST: handler,\n };\n}\n"],"mappings":"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","names":[]}