@turtleclub/hooks 0.4.0-beta.4 → 0.4.0-beta.5
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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/v2/lib/api-client.ts +1 -1
package/dist/index.cjs
CHANGED
|
@@ -511,7 +511,7 @@ var import_query_key_factory = require("@lukemorales/query-key-factory");
|
|
|
511
511
|
|
|
512
512
|
// src/v2/lib/api-client.ts
|
|
513
513
|
var API_BASE_URL = "https://api.turtle.xyz";
|
|
514
|
-
var EARN_BASE_URL = "https://earn.turtle.
|
|
514
|
+
var EARN_BASE_URL = "https://earn.turtle.xyz";
|
|
515
515
|
var ApiError = class extends Error {
|
|
516
516
|
constructor(message, status, response) {
|
|
517
517
|
super(message);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/hooks/useConfig.ts","../src/hooks/client.ts","../src/hooks/endpoints/useOrganizations.ts","../src/hooks/endpoints/useExists.ts","../src/hooks/endpoints/useIndexerTvl.ts","../src/hooks/endpoints/useOrganizationDeals.ts","../src/hooks/endpoints/useOrganizationsDeals.ts","../src/hooks/endpoints/usePrepareSignup.ts","../src/hooks/endpoints/useProjectTvl.ts","../src/hooks/endpoints/useSignup.ts","../src/hooks/endpoints/earn/useCampaigns.ts","../src/hooks/endpoints/earn/useDeals.ts","../src/hooks/endpoints/earn/useRoute.ts","../src/hooks/endpoints/earn/useWalletBalances.ts","../src/hooks/endpoints/partner/usePartnerCampaigns.ts","../src/hooks/endpoints/partner/usePartnerDeals.ts","../src/hooks/endpoints/useGeocheck.ts","../src/v2/index.ts","../src/v2/opportunities/queries.ts","../src/v2/lib/api-client.ts","../src/v2/schemas/shared.ts","../src/v2/opportunities/schema.ts","../src/v2/opportunities/api.ts","../src/v2/earn-opportunities/queries.ts","../src/v2/earn-opportunities/schema.ts","../src/v2/earn-opportunities/api.ts","../src/v2/earn-route/queries.ts","../src/v2/earn-route/schema.ts","../src/v2/earn-route/api.ts","../src/v2/earn-membership/queries.ts","../src/v2/earn-membership/schema.ts","../src/v2/earn-membership/api.ts","../src/v2/earn-deposits/queries.ts","../src/v2/earn-deposits/schema.ts","../src/v2/earn-deposits/api.ts","../src/v2/products/queries.ts","../src/v2/products/schema.ts","../src/v2/products/api.ts","../src/v2/enso-balances/queries.ts","../src/v2/enso-balances/schemas.ts","../src/v2/enso-balances/api.ts","../src/v2/widget/queries.ts","../src/v2/widget/schema.ts","../src/v2/widget/api.ts","../src/v2/earn-opportunities/hooks.ts","../src/v2/lib/query-config.ts","../src/v2/earn-route/hooks.ts","../src/v2/earn-membership/hooks.ts","../src/v2/earn-deposits/hooks.ts","../src/v2/enso-balances/hooks.ts","../src/v2/opportunities/hooks.ts","../src/v2/products/hooks.ts","../src/v2/balance/useTokenBalance.ts","../src/v2/widget/hooks.ts"],"sourcesContent":["// TODO: delete - prerelease trigger\n// Hooks\nexport * from \"./hooks/useConfig\";\nexport * from \"./hooks/client\";\n\n// Endpoint hooks\nexport * from \"./hooks/endpoints/useOrganizations\";\nexport * from \"./hooks/endpoints/useExists\";\nexport * from \"./hooks/endpoints/useIndexerTvl\";\nexport * from \"./hooks/endpoints/useOrganizationDeals\";\nexport * from \"./hooks/endpoints/useOrganizationsDeals\";\nexport * from \"./hooks/endpoints/usePrepareSignup\";\nexport * from \"./hooks/endpoints/useProjectTvl\";\nexport * from \"./hooks/endpoints/useSignup\";\n\n// Earn hooks\nexport * from \"./hooks/endpoints/earn\";\n\n// Partner hooks\nexport * from \"./hooks/endpoints/partner\";\nexport * from \"./hooks/endpoints/useGeocheck\";\n\n// V2 exports\nexport * from \"./v2\";\n","import type { Config } from \"@turtleclub/api\";\nimport { defaultConfig } from \"@turtleclub/api\";\n\nexport function useConfig(): Config {\n // Placeholder implementation - in real app this would use TurtleProvider context\n return defaultConfig;\n}\n","import { createSyncStoragePersister } from \"@tanstack/query-sync-storage-persister\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { persistQueryClient } from \"@tanstack/react-query-persist-client\";\n\nexport const defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\n// Only persist on client side\nif (typeof window !== 'undefined') {\n const localStoragePersister = createSyncStoragePersister({\n storage: window.localStorage,\n key: \"turtle-sdk\",\n });\n\n persistQueryClient({\n queryClient: defaultQueryClient,\n persister: localStoragePersister,\n });\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organization, type OrganizationResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizations({\n config,\n queryClient,\n}: UseOrganizationsOptions = {}): UseQueryResult<OrganizationResponse | null> {\n const defaultConfig = useConfig();\n\n const query = useQuery(\n {\n queryKey: [\"organizations\"],\n queryFn: async () => {\n return await organization(config ?? defaultConfig);\n },\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, exists, type ExistsOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseExistsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useExists(\n options?: ExistsOptions,\n { config, queryClient }: UseExistsOptions = {},\n): UseQueryResult<boolean | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"exists\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await exists(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseIndexerTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useIndexerTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseIndexerTvlOptions = {}\n): UseQueryResult<\n {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[],\n Error\n> {\n const defaultConfig = useConfig();\n\n const queryResult = useQuery(\n {\n queryKey: [\"indexer-tvl\", options?.projects],\n queryFn: async () => {\n return await projectTvl(config ?? defaultConfig);\n },\n select: (data) => {\n if (!data) return [];\n const result = Object.entries(data.projects)\n .map(([key, value]) => {\n if (!options?.projects.includes(key)) return null;\n return {\n protocol: key,\n tvl: value.tvl_usd,\n assetTvl: value.asset_tvl_usd,\n debtTvl: value.debt_tvl_usd,\n };\n })\n .filter(Boolean) as {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[];\n\n return result;\n },\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n },\n queryClient ?? defaultQueryClient\n );\n\n return queryResult;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationDeals, type OrganizationDealsOptions, type OrganizationDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationDeals(\n options?: OrganizationDealsOptions,\n { config, queryClient }: UseOrganizationDealsOptions = {},\n): UseQueryResult<OrganizationDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationDeals\", options?.organizationId],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationsDeals, type OrganizationsDealsOptions, type OrganizationsDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationsDeals(\n options?: OrganizationsDealsOptions,\n { config, queryClient }: UseOrganizationsDealsOptions = {},\n): UseQueryResult<OrganizationsDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationsDeals\", options?.organizationIds],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationsDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n throwOnError: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, prepareSignup, type PrepareSignupOptions, type PrepareSignupResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UsePrepareSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePrepareSignup(\n options?: PrepareSignupOptions,\n { config, queryClient }: UsePrepareSignupOptions = {},\n): UseQueryResult<PrepareSignupResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"prepareSignup\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await prepareSignup(options, config ?? defaultConfig);\n },\n enabled,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions, type ProjectTvlResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseProjectTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useProjectTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseProjectTvlOptions = {},\n): UseQueryResult<ProjectTvlResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"projectTvl\", options?.projects],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await projectTvl(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 7 * 60 * 1000,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import {\n type QueryClient,\n useMutation,\n type UseMutationResult,\n useQuery,\n} from \"@tanstack/react-query\";\nimport { type Config, signup, type SignupOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useSignup(\n options?: Omit<SignupOptions, \"signature\">,\n { config, queryClient }: UseSignupOptions = {}\n): UseMutationResult<boolean | null, Error, string, unknown> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const mutation = useMutation(\n {\n mutationFn: async (signature: string) => {\n if (!enabled) return null;\n\n return await signup({ ...options, signature }, config ?? defaultConfig);\n },\n },\n queryClient ?? defaultQueryClient\n );\n\n return mutation;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UseEarnCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = true; // Always enabled for campaigns\n\n const query = useQuery({\n queryKey: [\n \"earn-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n return await earnCampaigns(options || {}, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnDeals, type EarnDealsOptions, type EarnDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnDeals(\n options?: EarnDealsOptions,\n { config, queryClient }: UseEarnDealsOptions = {},\n): UseQueryResult<EarnDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earn-deals\",\n options?.campaignId,\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnRoute, type EarnRouteOptions, type EarnRouteResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnRouteOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnRouteOld(\n options?: EarnRouteOptions,\n { config, queryClient }: UseEarnRouteOptions = {},\n): UseQueryResult<EarnRouteResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earnRoute\",\n options?.user,\n options?.chain,\n options?.slippage,\n options?.tokenIn,\n options?.tokenOut,\n options?.amount,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnRoute(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000, // 2 minutes - longer stale time for transaction stability\n refetchInterval: false, // Disable automatic refetch to prevent transaction state reset\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport {\n type Config,\n earnWalletBalances,\n type EarnWalletBalancesOptions,\n type EarnWalletBalancesResponse,\n} from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnWalletBalancesOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnWalletBalances(\n options?: EarnWalletBalancesOptions,\n { config, queryClient }: UseEarnWalletBalancesOptions = {}\n): UseQueryResult<EarnWalletBalancesResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery(\n {\n queryKey: [\"earnWalletBalances\", options?.chain, options?.user],\n queryFn: async () => {\n if (!enabled) return null;\n\n return await earnWalletBalances(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 30 * 1000,\n refetchInterval: 15 * 1000,\n refetchOnWindowFocus: true,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\n/**\n * Hook to fetch partner campaigns\n * Currently uses the same endpoint as earn campaigns\n */\nexport function usePartnerCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UsePartnerCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnCampaigns(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, turtleDeals, type TurtleDealsOptions, type TurtleDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePartnerDeals(\n options?: TurtleDealsOptions,\n { config, queryClient }: UsePartnerDealsOptions = {},\n): UseQueryResult<TurtleDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-deals\",\n options?.status,\n options?.protocol,\n options?.ids,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n const result = await turtleDeals(options || {}, config ?? defaultConfig);\n return result;\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, geocheck, type GeoCheckResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseGeocheckOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useGeocheck(\n { config, queryClient }: UseGeocheckOptions = {},\n): UseQueryResult<GeoCheckResponse> {\n const defaultConfig = useConfig();\n\n const query = useQuery({\n queryKey: [\"geocheck\"],\n queryFn: async () => {\n return await geocheck(config ?? defaultConfig);\n },\n staleTime: 5 * 60 * 1000, // 5 minutes\n gcTime: 10 * 60 * 1000, // 10 minutes\n refetchOnWindowFocus: false,\n retry: 1,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { mergeQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { opportunitiesQueries } from \"./opportunities/queries\";\nimport { earnOpportunitiesQueries } from \"./earn-opportunities/queries\";\nimport { earnRouteQueries } from \"./earn-route/queries\";\nimport { earnMembershipQueries } from \"./earn-membership/queries\";\nimport { earnDepositsQueries } from \"./earn-deposits/queries\";\nimport { productsQueries } from \"./products/queries\";\nimport { ensoBalancesQueries } from \"./enso-balances/queries\";\nimport { widgetQueries } from \"./widget/queries\";\n\n// Merged query keys for cache invalidation\nexport const queries = mergeQueryKeys(\n opportunitiesQueries,\n earnOpportunitiesQueries,\n earnRouteQueries,\n earnMembershipQueries,\n earnDepositsQueries,\n productsQueries,\n ensoBalancesQueries,\n widgetQueries\n);\n\n// Features - Earn API\nexport * from \"./earn-opportunities\";\nexport * from \"./earn-route\";\nexport * from \"./earn-membership\";\nexport * from \"./earn-deposits\";\nexport * from \"./enso-balances\";\n\n// Features\nexport * from \"./opportunities\";\nexport * from \"./products\";\nexport * from \"./balance\";\nexport * from \"./widget\";\n\n// Shared schemas\nexport * from \"./schemas/shared\";\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getOpportunities, getOpportunityById } from \"./api\";\nimport type { OpportunityFilters } from \"./schema\";\n\nexport const opportunitiesQueries = createQueryKeys(\"opportunities\", {\n // Get all opportunities (no filters)\n all: {\n queryKey: null,\n queryFn: () => getOpportunities(),\n },\n\n // Get opportunities with filters\n list: (filters?: OpportunityFilters) => ({\n queryKey: [{ filters }],\n queryFn: () => getOpportunities(filters),\n }),\n\n // Get single opportunity by ID\n byId: (id: string) => ({\n queryKey: [id],\n queryFn: () => getOpportunityById(id),\n }),\n});\n","export const API_BASE_URL = \"https://api.turtle.xyz\";\nexport const EARN_BASE_URL = \"https://earn.turtle.vision\";\n\nexport type ApiDomain = \"api\" | \"earn\" | \"custom\";\n\nexport interface ApiClientOptions<TDomain extends ApiDomain = \"api\"> extends RequestInit {\n debug?: boolean;\n domain?: TDomain;\n baseUrl?: TDomain extends \"custom\" ? string : never;\n}\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public status: number,\n public response?: unknown\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nconst getEarnUrl = () => {\n return process.env.NEXT_PUBLIC_EARN_URL || process.env.VITE_EARN_URL || EARN_BASE_URL;\n};\n\nconst getApiUrl = () => {\n return process.env.NEXT_PUBLIC_API_URL || process.env.VITE_API_URL || API_BASE_URL;\n};\n\n/**\n * Lightweight API client with automatic JSON parsing and error handling\n * @param endpoint - API endpoint path (e.g., \"/turtle/opportunities\")\n * @param options - Fetch options + debug flag + domain selection\n * @returns Parsed JSON response as unknown (validate with Zod later)\n */\nexport async function apiClient<TDomain extends ApiDomain = \"api\">(\n endpoint: string,\n options?: ApiClientOptions<TDomain>\n): Promise<unknown> {\n const { debug, domain = \"api\", baseUrl, ...fetchOptions } = options ?? {};\n\n const resolvedBaseUrl =\n domain === \"earn\" ? getEarnUrl() : domain === \"custom\" ? baseUrl : getApiUrl();\n const url = `${resolvedBaseUrl}${endpoint}`;\n\n if (debug) {\n console.log(\"[API Request]\", {\n method: fetchOptions.method ?? \"GET\",\n url,\n headers: fetchOptions.headers,\n body: fetchOptions.body,\n });\n }\n\n try {\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n ...fetchOptions.headers,\n },\n ...fetchOptions,\n });\n\n // Parse response body\n const data = await response.json();\n\n if (debug) {\n console.log(\"[API Response]\", {\n status: response.status,\n ok: response.ok,\n data,\n });\n }\n\n if (!response.ok) {\n throw new ApiError(\n `API error: ${response.status} ${response.statusText}`,\n response.status,\n data\n );\n }\n\n return data;\n } catch (error) {\n if (debug) {\n console.error(\"[API Error]\", error);\n }\n\n // Re-throw ApiError\n if (error instanceof ApiError) {\n throw error;\n }\n\n // Wrap other errors (network, JSON parse, etc)\n throw new ApiError(error instanceof Error ? error.message : \"Unknown error\", 0, error);\n }\n}\n","import { z } from \"zod\";\n\nexport const chainSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n chainId: z.string(),\n logoUrl: z.string(),\n ecosystem: z.string(),\n status: z.string(),\n explorerUrl: z.string(),\n});\n\nexport const tokenSchema = z.object({\n id: z.string(),\n name: z.string(),\n symbol: z.string(),\n address: z.string(),\n chain: chainSchema,\n decimals: z.number(),\n logoUrl: z.string(),\n isNative: z.boolean(),\n priceUsd: z.number(),\n});\n\nexport const organizationSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().nullable(),\n landingUrl: z.string().optional().nullable(),\n iconUrl: z.string().optional().nullable(),\n organizationType: z.string().optional().nullable(),\n turtleRefCode: z.string().optional().nullable(),\n twitterHandle: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n featured: z.boolean().optional().nullable(),\n});\n\nexport const productSchema = z.object({\n id: z.string(),\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n organization: organizationSchema,\n createdAt: z.string().optional().nullable(),\n});\n\n// Vault Configuration Schema - matching backend\nexport const vaultConfigSchema = z.object({\n id: z.string().uuid().optional(),\n infraProvider: organizationSchema.optional().nullable(),\n curator: organizationSchema.optional().nullable(),\n withdrawalCooldownSecs: z.number().int().min(0).optional().nullable(),\n withdrawalContractAddress: z.string().optional().nullable(),\n withdrawalDetails: z.any().optional().nullable(),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n performanceFee: z.number().min(0).max(100).optional().nullable(),\n managementFee: z.number().min(0).max(100).optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\n// Lending Configuration Schema - matching backend\nexport const lendingConfigSchema = z.object({\n id: z.string().uuid().optional(),\n protocol: z.object({ id: z.string() }),\n marketAddress: z.string().min(1, \"Market address is required\"),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\nexport const incentiveSchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n iconUrl: z.string(),\n rewardType: z.string(),\n rewardTypeName: z.string(),\n boostPct: z.number().nullable(),\n totalCapacity: z.number().nullable(),\n maxCapacityPerLP: z.number().nullable(),\n lockup: z.string().nullable(),\n minCommitment: z.number().nullable(),\n baseYieldTarget: z.number().nullable(),\n baseYieldSource: z.string().nullable(),\n incentiveYieldTarget: z.number().nullable(),\n fdvEstimate: z.number().nullable(),\n isIncentiveYieldGuaranteed: z.boolean().nullable(),\n tokenSupplyAllocation: z.number().nullable(),\n yield: z.number().nullable(),\n});\n\n// Opportunity Type Enum\nconst opportunityTypeEnum = z.enum([\"vault\", \"lending\", \"staking\"]);\n\n// Opportunity Status Enum\nconst opportunityStatusEnum = z.enum([\"active\", \"paused\", \"deprecated\"]);\n\n// Main Opportunity Schema - matching backend API exactly\nexport const opportunitySchema = z.object({\n id: z.string().uuid().optional(),\n name: z.string(),\n shortName: z.string(),\n type: opportunityTypeEnum,\n description: z.string().optional().default(\"\"),\n curator: z.string().optional().default(\"\"),\n tvl: z.number().min(0, \"TVL must be positive\"),\n featured: z.boolean().optional().default(false),\n featuredOrder: z.number().int().optional().nullable(),\n originalConfig: z.any().optional().nullable(),\n exposures: z.array(z.string()).optional().default([]),\n status: opportunityStatusEnum.optional().default(\"active\"),\n statusReason: z.string().optional().default(\"\"),\n depositDisabled: z.boolean().optional().default(false),\n depositDisabledReason: z.string().optional().default(\"\"),\n withdrawalDisabled: z.boolean().optional().default(false),\n withdrawalDisabledReason: z.string().optional().default(\"\"),\n docsUrl: z.string().optional().nullable(),\n auditsUrl: z.string().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n\n // Relationships\n depositTokens: z.array(tokenSchema),\n baseTokens: z.union([z.null(), tokenSchema]),\n receiptToken: z.union([z.null(), tokenSchema]),\n incentives: z.array(incentiveSchema),\n products: z.array(productSchema),\n vaultConfig: vaultConfigSchema.optional().nullable(),\n lendingConfig: lendingConfigSchema.optional().nullable(),\n\n // Will be deprecated\n token: tokenSchema,\n exposure: z.array(z.string()),\n explorerUrl: z.string().nullable(),\n});\n\nexport type Chain = z.infer<typeof chainSchema>;\nexport type Token = z.infer<typeof tokenSchema>;\nexport type Organization = z.infer<typeof organizationSchema>;\nexport type Product = z.infer<typeof productSchema>;\nexport type VaultConfig = z.infer<typeof vaultConfigSchema>;\nexport type LendingConfig = z.infer<typeof lendingConfigSchema>;\nexport type Incentive = z.infer<typeof incentiveSchema>;\nexport type Opportunity = z.infer<typeof opportunitySchema>;\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\nexport const opportunityFiltersSchema = z.object({\n tokenId: z.string().uuid().optional(),\n chain: z.string().optional(),\n productId: z.string().uuid().optional(),\n});\nexport type OpportunityFilters = z.infer<typeof opportunityFiltersSchema>;\n\nexport const opportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema),\n total: z.number().optional(),\n});\n\nexport type OpportunitiesResponse = z.infer<typeof opportunitiesResponseSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport type { OpportunityFilters, OpportunitiesResponse } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\nimport { opportunitySchema } from \"../schemas/shared\";\nimport { opportunitiesResponseSchema } from \"./schema\";\n\n// GET /turtle/opportunities\nexport async function getOpportunities(\n filters?: OpportunityFilters,\n options?: { debug?: boolean }\n): Promise<OpportunitiesResponse> {\n const params = new URLSearchParams();\n\n if (filters?.tokenId) params.append(\"tokenId\", filters.tokenId);\n if (filters?.chain) params.append(\"chain\", filters.chain);\n if (filters?.productId) params.append(\"productId\", filters.productId);\n\n const queryString = params.toString();\n const endpoint = `/turtle/opportunities${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /turtle/opportunities/{id}\nexport async function getOpportunityById(\n id: string,\n options?: { debug?: boolean }\n): Promise<Opportunity> {\n const data = await apiClient(`/turtle/opportunities/${id}`, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitySchema.safeParse(data);\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunity: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnOpportunities } from \"./api\";\n\nexport const earnOpportunitiesQueries = createQueryKeys(\"earnOpportunities\", {\n all: {\n queryKey: null,\n queryFn: (context) => getEarnOpportunities(context),\n },\n});\n","import { z } from \"zod\";\nimport { chainSchema, tokenSchema } from \"../schemas/shared\";\n\n// Earn Opportunity Response Schema\nexport const earnOpportunitySchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n type: z.string(),\n estimatedApr: z.number(),\n tvl: z.number(),\n featured: z.boolean(),\n baseTokens: tokenSchema,\n depositTokens: z.array(tokenSchema).nullable(),\n receiptToken: tokenSchema,\n});\n\n// Earn Opportunities Response Schema\nexport const earnOpportunitiesResponseSchema = z.object({\n opportunities: z.array(earnOpportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type EarnOpportunity = z.infer<typeof earnOpportunitySchema>;\nexport type EarnOpportunitiesResponse = z.infer<typeof earnOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnOpportunitiesResponse } from \"./schema\";\nimport { earnOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/opportunities\nexport async function getEarnOpportunities(\n context?: QueryFunctionContext\n): Promise<EarnOpportunitiesResponse> {\n const data = await apiClient(\"/v1/opportunities/\", {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = earnOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnRoute } from \"./api\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport const earnRouteQueries = createQueryKeys(\"earnRoute\", {\n // Get earn route with specific parameters\n byParams: (params: EarnRouteParams) => ({\n queryKey: [params],\n queryFn: (context) => getEarnRoute(params, context),\n }),\n});\n","import { ethz } from \"@turtleclub/utils\";\nimport { z } from \"zod\";\n\n// Asset schemas\nexport const assetImageData = z.object({\n kind: z.literal(\"image\"),\n url: z.string(),\n alt: z.string(),\n});\n\nexport const assetERC20Data = z.object({\n kind: z.literal(\"erc20\"),\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n decimals: z.number(),\n});\n\nexport const assetData = z.discriminatedUnion(\"kind\", [assetImageData, assetERC20Data]);\n\nexport const asset = z.object({\n id: z.string().uuid(),\n name: z.string(),\n slugs: z.array(z.string()),\n tags: z.array(z.string()),\n description: z.string().nullable(),\n data: z.array(assetData),\n});\n\n// Token schema\nexport const routeToken = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\n// Router substeps\nexport const swapSubstep = z.object({\n kind: z.literal(\"swap\"),\n from: z.array(routeToken),\n to: z.array(routeToken),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const depositSubstep = z.object({\n kind: z.literal(\"deposit\"),\n vault: z.string(),\n from: z.array(routeToken),\n to: z.array(routeToken),\n amount: z.string(),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const routerSubstep = z.discriminatedUnion(\"kind\", [swapSubstep, depositSubstep]);\n\n// Transaction schema\nexport const stepTx = z.object({\n from: ethz.address(),\n to: ethz.address(),\n data: ethz.hex(),\n value: z.string(),\n gas: z.number(),\n});\n\n// Router steps\nexport const approveStep = z.object({\n kind: z.literal(\"approve\"),\n owner: z.string(),\n spender: z.string(),\n token: routeToken,\n amount: z.string(),\n tx: stepTx,\n});\n\nexport const ensoStep = z.object({\n kind: z.literal(\"enso\"),\n substeps: z.array(routerSubstep),\n tx: stepTx,\n asset: asset.nullable(),\n});\n\nexport const routerStep = z.discriminatedUnion(\"kind\", [approveStep, ensoStep]);\n\n// Earn Route Response\nexport const earnRouteResponseSchema = z.object({\n steps: z.array(routerStep),\n amount_out: z.string(),\n price_impact: z.number().nullable(),\n});\n\n// Earn Route Request Params\nexport interface EarnRouteParams {\n user: string;\n chain: number;\n slippage: number;\n token_in: string;\n token_out: string;\n amount: string;\n distributor_id: string;\n referral_code?: string;\n // @deprecated productId is not supported anymore\n id?: string;\n}\n\nexport type AssetImageData = z.infer<typeof assetImageData>;\nexport type AssetERC20Data = z.infer<typeof assetERC20Data>;\nexport type AssetData = z.infer<typeof assetData>;\nexport type Asset = z.infer<typeof asset>;\nexport type RouteToken = z.infer<typeof routeToken>;\nexport type SwapSubstep = z.infer<typeof swapSubstep>;\nexport type DepositSubstep = z.infer<typeof depositSubstep>;\nexport type RouterSubstep = z.infer<typeof routerSubstep>;\nexport type StepTx = z.infer<typeof stepTx>;\nexport type ApproveStep = z.infer<typeof approveStep>;\nexport type EnsoStep = z.infer<typeof ensoStep>;\nexport type RouterStep = z.infer<typeof routerStep>;\nexport type EarnRouteResponse = z.infer<typeof earnRouteResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnRouteResponse, EarnRouteParams } from \"./schema\";\nimport { earnRouteResponseSchema } from \"./schema\";\n\n// GET /v1/route\nexport async function getEarnRoute(\n params: EarnRouteParams,\n context?: QueryFunctionContext\n): Promise<EarnRouteResponse> {\n const searchParams = new URLSearchParams({\n user: params.user,\n chain: params.chain.toString(),\n slippage: params.slippage.toString(),\n token_in: params.token_in,\n token_out: params.token_out,\n amount: params.amount,\n distributor_id: params.distributor_id,\n ...(params.referral_code && { referral_code: params.referral_code }),\n ...(params.id && { id: params.id }),\n });\n\n const response = await apiClient(`/v1/route/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n }) as { data: unknown };\n\n const data = response.data;\n const result = earnRouteResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn route: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { checkMembership } from \"./api\";\nimport type { CheckMembershipParams } from \"./schema\";\n\nexport const earnMembershipQueries = createQueryKeys(\"earnMembership\", {\n // Check membership status\n check: (params: CheckMembershipParams) => ({\n queryKey: [params],\n queryFn: (context) => checkMembership(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Wallet Ecosystem Enum\nexport const walletEcosystemEnum = z.enum([\"evm\", \"solana\", \"ton\"]);\n\n// GET /v1/membership/ - Check Membership\nexport interface CheckMembershipParams {\n address: string;\n walletEcosystem?: \"evm\" | \"solana\" | \"ton\";\n}\n\nexport const checkMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n});\n\n// POST /v1/membership/agreement - Create Agreement\nexport const createAgreementRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: walletEcosystemEnum,\n url: z.string(),\n chainId: z.string().default(\"1\"),\n});\n\nexport const createAgreementResponseSchema = z.object({\n message: z.string(),\n nonce: z.string(),\n});\n\n// POST /v1/membership/ - Create Membership\nexport const createMembershipRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: z.string(),\n signature: z.string(),\n nonce: z.string(),\n});\n\nexport const createMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n error: z.string().optional(),\n});\n\nexport type WalletEcosystem = z.infer<typeof walletEcosystemEnum>;\nexport type CheckMembershipResponse = z.infer<typeof checkMembershipResponseSchema>;\nexport type CreateAgreementRequest = z.infer<typeof createAgreementRequestSchema>;\nexport type CreateAgreementResponse = z.infer<typeof createAgreementResponseSchema>;\nexport type CreateMembershipRequest = z.infer<typeof createMembershipRequestSchema>;\nexport type CreateMembershipResponse = z.infer<typeof createMembershipResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type {\n CheckMembershipParams,\n CheckMembershipResponse,\n CreateAgreementRequest,\n CreateAgreementResponse,\n CreateMembershipRequest,\n CreateMembershipResponse,\n} from \"./schema\";\nimport {\n checkMembershipResponseSchema,\n createAgreementResponseSchema,\n createMembershipResponseSchema,\n} from \"./schema\";\n\n// GET /v1/membership/ - Check if wallet is a member\nexport async function checkMembership(\n params: CheckMembershipParams,\n context?: QueryFunctionContext\n): Promise<CheckMembershipResponse> {\n const searchParams = new URLSearchParams({\n address: params.address,\n ...(params.walletEcosystem && { walletEcosystem: params.walletEcosystem }),\n });\n\n const data = await apiClient(`/v1/membership/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = checkMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse check membership: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/agreement - Create membership agreement\nexport async function createMembershipAgreement(\n request: CreateAgreementRequest\n): Promise<CreateAgreementResponse> {\n const data = await apiClient(\"/v1/membership/agreement\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createAgreementResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create agreement: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/ - Create membership\nexport async function createMembership(\n request: CreateMembershipRequest\n): Promise<CreateMembershipResponse> {\n const data = await apiClient(\"/v1/membership/\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create membership: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getDeposits } from \"./api\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport const earnDepositsQueries = createQueryKeys(\"earnDeposits\", {\n byParams: (params: GetDepositsParams) => ({\n queryKey: [params],\n queryFn: (context) => getDeposits(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Deposit Schema\nexport const depositSchema = z.object({\n chain: z.number().int(),\n deposited_amount_usd: z.string(),\n deposited_token_address: z.string(),\n deposited_token_decimals: z.number().int(),\n deposited_token_logo: z.string(),\n deposited_token_name: z.string(),\n deposited_token_symbol: z.string(),\n deposited_value: z.string(),\n depositor: z.string(),\n target: z.string(),\n timestamp: z.string(),\n tx_hash: z.string(),\n});\n\n// Deposits Response Schema\nexport const depositsResponseSchema = z.object({\n deposits: z.array(depositSchema).nullable(),\n});\n\n// Deposits Request Params\nexport interface GetDepositsParams {\n distributor_id: string;\n depositor?: string;\n limit?: number;\n offset?: number;\n}\n\nexport type Deposit = z.infer<typeof depositSchema>;\nexport type DepositsResponse = z.infer<typeof depositsResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetDepositsParams, DepositsResponse } from \"./schema\";\nimport { depositsResponseSchema } from \"./schema\";\n\n// GET /v1/deposit/{distributor_id}\nexport async function getDeposits(\n params: GetDepositsParams,\n context?: QueryFunctionContext\n): Promise<DepositsResponse> {\n const { distributor_id, depositor, limit, offset } = params;\n\n const searchParams = new URLSearchParams({\n ...(depositor && { depositor }),\n ...(limit && { limit: limit.toString() }),\n ...(offset && { offset: offset.toString() }),\n });\n\n const queryString = searchParams.toString();\n const endpoint = `/v1/deposit/${distributor_id}${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = depositsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse deposits: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { createProduct, deleteProduct, getProducts, updateProduct } from \"./api\";\nimport { ProductCreateInput, ProductUpdateInput } from \"./schema\";\n\nexport const productsQueries = createQueryKeys(\"products\", {\n // Get all products (no filters)\n all: {\n queryKey: null,\n queryFn: () => getProducts(),\n },\n\n // Get single product by ID\n byId: (id: string) => ({\n queryKey: [id],\n // Replace by true query then\n queryFn: async () => {\n const products = await getProducts();\n return products.products.find((product) => product.id === id);\n },\n }),\n});\n","import { z } from \"zod\";\nimport { productSchema } from \"../schemas/shared\";\nimport { organization } from \"@turtleclub/api\";\n\nexport const productsResponseSchema = z.object({\n products: z.array(productSchema),\n total: z.number().optional(),\n});\n\nexport type ProductsResponse = z.infer<typeof productsResponseSchema>;\n\nexport const productCreateInputSchema = z.object({\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n\n // Relations\n organizationId: z.string().uuid(),\n});\n\nexport type ProductCreateInput = z.infer<typeof productCreateInputSchema>;\n\nexport const productUpdateInputSchema = productCreateInputSchema.extend({\n id: z.string().uuid(),\n});\n\nexport type ProductUpdateInput = z.infer<typeof productUpdateInputSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport { Product, productSchema } from \"../schemas/shared\";\nimport {\n ProductCreateInput,\n ProductsResponse,\n productsResponseSchema,\n ProductUpdateInput,\n} from \"./schema\";\n\n// GET /admin/products\nexport async function getProducts(options?: { debug?: boolean }): Promise<ProductsResponse> {\n const params = new URLSearchParams();\n\n const queryString = params.toString();\n const endpoint = `/admin/products${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse products: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /admin/products/:id\n\n// POST /admin/products\nexport async function createProduct(\n input: ProductCreateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products`;\n\n const data = await apiClient(endpoint, {\n method: \"POST\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to create product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// PUT /admin/products/:id\nexport async function updateProduct(\n input: ProductUpdateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products/${input.id}`;\n\n const data = await apiClient(endpoint, {\n method: \"PUT\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to update product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// DELETE /admin/products/:id\nexport async function deleteProduct(id: string, options?: { debug?: boolean }): Promise<void> {\n const endpoint = `/admin/products/${id}`;\n\n const data = await apiClient(endpoint, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to delete product: ${result.error.message}`);\n }\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWalletBalances } from \"./api\";\nimport type { GetWalletBalancesParams } from \"./schemas\";\n\nexport const ensoBalancesQueries = createQueryKeys(\"ensoBalances\", {\n byParams: (params: GetWalletBalancesParams) => ({\n queryKey: [params],\n queryFn: (context) => getWalletBalances(params, context),\n }),\n});\n","import { z } from \"zod\";\n\nexport const balanceTokenSchema = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\nexport const walletBalanceSchema = z.object({\n token: balanceTokenSchema,\n amount: z.string(),\n});\n\nexport interface GetWalletBalancesParams {\n user: string;\n chain: number;\n}\n\nexport const walletBalancesResponseSchema = z.object({\n balances: z.array(walletBalanceSchema),\n});\n\nexport type BalanceToken = z.infer<typeof balanceTokenSchema>;\nexport type WalletBalance = z.infer<typeof walletBalanceSchema>;\nexport type WalletBalancesResponse = z.infer<typeof walletBalancesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetWalletBalancesParams, WalletBalancesResponse } from \"./schemas\";\nimport { walletBalancesResponseSchema } from \"./schemas\";\n\n// GET /v1/api/wallet_balances\nexport async function getWalletBalances(\n params: GetWalletBalancesParams,\n context?: QueryFunctionContext\n): Promise<WalletBalancesResponse> {\n const { user, chain } = params;\n\n const searchParams = new URLSearchParams({\n user,\n chain: chain.toString(),\n });\n\n const endpoint = `/v1/api/wallet_balances?${searchParams.toString()}`;\n\n const data = await apiClient<\"custom\">(endpoint, {\n method: \"GET\",\n domain: \"custom\",\n baseUrl: \"https://earn.turtle.vision\",\n signal: context?.signal,\n });\n\n const result = walletBalancesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse wallet balances: ${result.error.message}`);\n }\n\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWidgetOpportunities } from \"./api\";\n\nexport const widgetQueries = createQueryKeys(\"widget\", {\n opportunities: (distributorId: string) => ({\n queryKey: [distributorId],\n queryFn: (context) => getWidgetOpportunities(distributorId, context),\n }),\n});\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\n// Widget Opportunities Response Schema\nexport const widgetOpportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type WidgetOpportunitiesResponse = z.infer<typeof widgetOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { WidgetOpportunitiesResponse } from \"./schema\";\nimport { widgetOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/widget/{distributorId}/opportunities\nexport async function getWidgetOpportunities(\n distributorId: string,\n context?: QueryFunctionContext\n): Promise<WidgetOpportunitiesResponse> {\n const data = await apiClient(`/widget/${distributorId}/opportunities`, {\n method: \"GET\",\n signal: context?.signal,\n });\n\n const result = widgetOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse widget opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnOpportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\n\nexport function useEarnOpportunities() {\n return useQuery({\n ...earnOpportunitiesQueries.all,\n ...queryDefaults,\n });\n}\n","// Default TanStack Query configuration\n// Override per-query as needed\n\nexport const queryDefaults = {\n staleTime: 5 * 60 * 1000, // 5 minutes - data is fresh\n gcTime: 10 * 60 * 1000, // 10 minutes - cache garbage collection (formerly cacheTime)\n retry: 1, // Retry failed requests once\n refetchOnWindowFocus: false, // Don't refetch on tab focus\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnRouteQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport interface UseEarnRouteOptions {\n params?: EarnRouteParams;\n enabled?: boolean;\n}\n\nexport function useEarnRoute({ params, enabled = true }: UseEarnRouteOptions) {\n return useQuery({\n // Null assertion is safe because the query is enable only if params is provided\n ...earnRouteQueries.byParams(params!),\n ...queryDefaults,\n enabled: !!params && enabled,\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { earnMembershipQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { createMembershipAgreement, createMembership } from \"./api\";\nimport type {\n CheckMembershipParams,\n CreateAgreementRequest,\n CreateMembershipRequest,\n} from \"./schema\";\n\n// Query hook for checking membership\nexport interface UseCheckMembershipOptions {\n params: CheckMembershipParams;\n enabled?: boolean;\n}\n\nexport function useCheckMembership({\n params,\n enabled = true,\n}: UseCheckMembershipOptions) {\n return useQuery({\n ...earnMembershipQueries.check(params),\n ...queryDefaults,\n enabled,\n });\n}\n\n// Mutation hook for creating membership agreement\nexport function useCreateMembershipAgreement() {\n return useMutation({\n mutationFn: (request: CreateAgreementRequest) =>\n createMembershipAgreement(request),\n });\n}\n\n// Mutation hook for creating membership\nexport function useCreateMembership() {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (request: CreateMembershipRequest) => createMembership(request),\n onSuccess: (data, variables) => {\n queryClient.invalidateQueries({\n queryKey: earnMembershipQueries.check({\n address: variables.address,\n walletEcosystem: variables.walletEcosystem as \"evm\" | \"solana\" | \"ton\",\n }).queryKey,\n });\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnDepositsQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport interface UseDepositsOptions {\n params: GetDepositsParams;\n enabled?: boolean;\n}\n\nexport function useDeposits({ params, enabled = true }: UseDepositsOptions) {\n return useQuery({\n ...earnDepositsQueries.byParams(params),\n ...queryDefaults,\n enabled,\n });\n}\n","import { useEffect, useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport type { Asset } from \"@turtleclub/ui\";\nimport { ensoBalancesQueries } from \"./queries\";\nimport type { WalletBalancesResponse } from \"./schemas\";\n\ninterface MultiChainBalancesParams {\n chainIds: number[];\n address?: string;\n}\n\ninterface MultiChainBalancesResult {\n balances: Record<number, WalletBalancesResponse[\"balances\"]>;\n isLoading: boolean;\n error: Error | null;\n refetchAll: () => void;\n}\n\nexport function useMultiChainBalances({\n chainIds,\n address,\n}: MultiChainBalancesParams): MultiChainBalancesResult {\n const queries = useQueries({\n queries: chainIds.map((chainId) => ({\n ...ensoBalancesQueries.byParams({ user: address || \"\", chain: chainId }),\n enabled: !!address,\n staleTime: 60 * 1000,\n refetchInterval: 3 * 60 * 1000,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n })),\n });\n\n const isLoading = queries.some((query) => query.isLoading);\n const error = queries.find((query) => query.error)?.error || null;\n\n const refetchAll = () => {\n queries.forEach((query) => {\n query.refetch();\n });\n };\n\n // Aggregate results\n const balances = useMemo(() => {\n const balanceMap: Record<number, WalletBalancesResponse[\"balances\"]> = {};\n\n queries.forEach((query, index) => {\n const chainId = chainIds[index];\n if (query.data && chainId !== undefined) {\n balanceMap[chainId] = query.data.balances;\n }\n });\n\n return balanceMap;\n }, [queries, chainIds]);\n\n return {\n balances,\n isLoading,\n error,\n refetchAll,\n };\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport { opportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { OpportunitiesResponse, OpportunityFilters } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\n\nexport interface UseOpportunitiesOptions\n extends Omit<UseQueryOptions<OpportunitiesResponse>, \"queryKey\" | \"queryFn\"> {\n filters?: OpportunityFilters;\n}\n\nexport function useOpportunities(options?: UseOpportunitiesOptions) {\n return useQuery({\n ...opportunitiesQueries.all,\n ...queryDefaults,\n select: (data: OpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n .map((opportunity) => opportunity.receiptToken?.chain)\n .filter((chain) => chain !== undefined)\n .map((chain) => [chain.id, chain])\n );\n\n const chains = Array.from(uniqueChainsMap.values());\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n\nexport interface UseOpportunityOptions\n extends Omit<UseQueryOptions<Opportunity>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useOpportunity({ id, ...options }: UseOpportunityOptions) {\n return useQuery({\n ...opportunitiesQueries.byId(id),\n ...queryDefaults,\n select: (data: Opportunity) => {\n return {\n ...data,\n chain: data.receiptToken?.chain,\n };\n },\n });\n}\n","import {\n useMutation,\n UseMutationOptions,\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { ProductCreateInput, ProductsResponse, ProductUpdateInput } from \"./schema\";\nimport type { Product } from \"../schemas/shared\";\nimport { productsQueries } from \"./queries\";\nimport { createProduct, deleteProduct, updateProduct } from \"./api\";\n\nexport interface UseProductsOptions\n extends Omit<UseQueryOptions<ProductsResponse>, \"queryKey\" | \"queryFn\"> {}\n\nexport function useProducts(options?: UseProductsOptions) {\n return useQuery({ ...productsQueries.all, ...queryDefaults });\n}\n\nexport interface UseProductOptions extends Omit<UseQueryOptions<Product>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useProduct({ id, ...options }: UseProductOptions) {\n return useQuery({ ...productsQueries.byId(id), ...queryDefaults });\n}\n\nexport interface UseCreateProductOptions\n extends Omit<UseMutationOptions<ProductCreateInput>, \"mutationFn\"> {}\n\nexport function useCreateProduct({ ...options }: UseCreateProductOptions) {\n return useMutation({ mutationFn: createProduct });\n}\n\nexport interface UseUpdateProductOptions\n extends Omit<UseMutationOptions<ProductUpdateInput>, \"mutationFn\"> {}\n\nexport function useUpdateProduct({ ...options }: UseUpdateProductOptions) {\n return useMutation({ mutationFn: updateProduct });\n}\n\nexport interface UseDeleteProductOptions extends Omit<UseMutationOptions<string>, \"mutationFn\"> {}\n\nexport function useDeleteProduct({ ...options }: UseDeleteProductOptions) {\n return useMutation({ mutationFn: deleteProduct });\n}\n","import { useCallback, useMemo } from \"react\";\nimport { parseUnits } from \"viem\";\nimport { calculateUsdValue, checkInsufficientBalance, calculateMaxAmount } from \"@turtleclub/utils\";\n\ninterface UseTokenBalanceProps {\n token:\n | {\n balance: string;\n decimals: number;\n price?: number;\n }\n | null\n | undefined;\n amount: string | undefined;\n setAmount: (amount: string | undefined) => void;\n}\n\nexport function useTokenBalance({ token, amount, setAmount }: UseTokenBalanceProps) {\n const usdValue = useMemo(() => calculateUsdValue(amount, token?.price), [amount, token?.price]);\n\n const hasInsufficientBalance = useMemo(\n () => checkInsufficientBalance(token, amount),\n [token, amount]\n );\n\n const handleMaxClick = useCallback(() => {\n if (!token) return;\n const maxAmount = calculateMaxAmount(token.balance, token.decimals);\n setAmount(maxAmount);\n }, [token, setAmount]);\n\n const amountBigInt = useMemo(() => {\n if (!token || !amount) return undefined;\n try {\n return parseUnits(amount, token.decimals);\n } catch {\n return undefined;\n }\n }, [amount, token]);\n\n return {\n usdValue,\n hasInsufficientBalance,\n handleMaxClick,\n amountBigInt,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { widgetQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { WidgetOpportunitiesResponse } from \"./schema\";\n\nexport function useWidgetOpportunities(distributorId: string) {\n return useQuery({\n ...widgetQueries.opportunities(distributorId),\n ...queryDefaults,\n select: (data: WidgetOpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n ?.map((opportunity) => opportunity.receiptToken?.chain)\n ?.filter((chain) => chain !== undefined)\n ?.map((chain) => [chain.id, chain]) || []\n );\n\n const chains = Array.from(uniqueChainsMap.values()) || [];\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n"],"mappings":"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","names":["import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","queries","import_react_query","import_react_query","import_react","import_utils","import_react_query"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/hooks/useConfig.ts","../src/hooks/client.ts","../src/hooks/endpoints/useOrganizations.ts","../src/hooks/endpoints/useExists.ts","../src/hooks/endpoints/useIndexerTvl.ts","../src/hooks/endpoints/useOrganizationDeals.ts","../src/hooks/endpoints/useOrganizationsDeals.ts","../src/hooks/endpoints/usePrepareSignup.ts","../src/hooks/endpoints/useProjectTvl.ts","../src/hooks/endpoints/useSignup.ts","../src/hooks/endpoints/earn/useCampaigns.ts","../src/hooks/endpoints/earn/useDeals.ts","../src/hooks/endpoints/earn/useRoute.ts","../src/hooks/endpoints/earn/useWalletBalances.ts","../src/hooks/endpoints/partner/usePartnerCampaigns.ts","../src/hooks/endpoints/partner/usePartnerDeals.ts","../src/hooks/endpoints/useGeocheck.ts","../src/v2/index.ts","../src/v2/opportunities/queries.ts","../src/v2/lib/api-client.ts","../src/v2/schemas/shared.ts","../src/v2/opportunities/schema.ts","../src/v2/opportunities/api.ts","../src/v2/earn-opportunities/queries.ts","../src/v2/earn-opportunities/schema.ts","../src/v2/earn-opportunities/api.ts","../src/v2/earn-route/queries.ts","../src/v2/earn-route/schema.ts","../src/v2/earn-route/api.ts","../src/v2/earn-membership/queries.ts","../src/v2/earn-membership/schema.ts","../src/v2/earn-membership/api.ts","../src/v2/earn-deposits/queries.ts","../src/v2/earn-deposits/schema.ts","../src/v2/earn-deposits/api.ts","../src/v2/products/queries.ts","../src/v2/products/schema.ts","../src/v2/products/api.ts","../src/v2/enso-balances/queries.ts","../src/v2/enso-balances/schemas.ts","../src/v2/enso-balances/api.ts","../src/v2/widget/queries.ts","../src/v2/widget/schema.ts","../src/v2/widget/api.ts","../src/v2/earn-opportunities/hooks.ts","../src/v2/lib/query-config.ts","../src/v2/earn-route/hooks.ts","../src/v2/earn-membership/hooks.ts","../src/v2/earn-deposits/hooks.ts","../src/v2/enso-balances/hooks.ts","../src/v2/opportunities/hooks.ts","../src/v2/products/hooks.ts","../src/v2/balance/useTokenBalance.ts","../src/v2/widget/hooks.ts"],"sourcesContent":["// TODO: delete - prerelease trigger\n// Hooks\nexport * from \"./hooks/useConfig\";\nexport * from \"./hooks/client\";\n\n// Endpoint hooks\nexport * from \"./hooks/endpoints/useOrganizations\";\nexport * from \"./hooks/endpoints/useExists\";\nexport * from \"./hooks/endpoints/useIndexerTvl\";\nexport * from \"./hooks/endpoints/useOrganizationDeals\";\nexport * from \"./hooks/endpoints/useOrganizationsDeals\";\nexport * from \"./hooks/endpoints/usePrepareSignup\";\nexport * from \"./hooks/endpoints/useProjectTvl\";\nexport * from \"./hooks/endpoints/useSignup\";\n\n// Earn hooks\nexport * from \"./hooks/endpoints/earn\";\n\n// Partner hooks\nexport * from \"./hooks/endpoints/partner\";\nexport * from \"./hooks/endpoints/useGeocheck\";\n\n// V2 exports\nexport * from \"./v2\";\n","import type { Config } from \"@turtleclub/api\";\nimport { defaultConfig } from \"@turtleclub/api\";\n\nexport function useConfig(): Config {\n // Placeholder implementation - in real app this would use TurtleProvider context\n return defaultConfig;\n}\n","import { createSyncStoragePersister } from \"@tanstack/query-sync-storage-persister\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { persistQueryClient } from \"@tanstack/react-query-persist-client\";\n\nexport const defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\n// Only persist on client side\nif (typeof window !== 'undefined') {\n const localStoragePersister = createSyncStoragePersister({\n storage: window.localStorage,\n key: \"turtle-sdk\",\n });\n\n persistQueryClient({\n queryClient: defaultQueryClient,\n persister: localStoragePersister,\n });\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organization, type OrganizationResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizations({\n config,\n queryClient,\n}: UseOrganizationsOptions = {}): UseQueryResult<OrganizationResponse | null> {\n const defaultConfig = useConfig();\n\n const query = useQuery(\n {\n queryKey: [\"organizations\"],\n queryFn: async () => {\n return await organization(config ?? defaultConfig);\n },\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, exists, type ExistsOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseExistsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useExists(\n options?: ExistsOptions,\n { config, queryClient }: UseExistsOptions = {},\n): UseQueryResult<boolean | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"exists\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await exists(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseIndexerTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useIndexerTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseIndexerTvlOptions = {}\n): UseQueryResult<\n {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[],\n Error\n> {\n const defaultConfig = useConfig();\n\n const queryResult = useQuery(\n {\n queryKey: [\"indexer-tvl\", options?.projects],\n queryFn: async () => {\n return await projectTvl(config ?? defaultConfig);\n },\n select: (data) => {\n if (!data) return [];\n const result = Object.entries(data.projects)\n .map(([key, value]) => {\n if (!options?.projects.includes(key)) return null;\n return {\n protocol: key,\n tvl: value.tvl_usd,\n assetTvl: value.asset_tvl_usd,\n debtTvl: value.debt_tvl_usd,\n };\n })\n .filter(Boolean) as {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[];\n\n return result;\n },\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n },\n queryClient ?? defaultQueryClient\n );\n\n return queryResult;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationDeals, type OrganizationDealsOptions, type OrganizationDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationDeals(\n options?: OrganizationDealsOptions,\n { config, queryClient }: UseOrganizationDealsOptions = {},\n): UseQueryResult<OrganizationDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationDeals\", options?.organizationId],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationsDeals, type OrganizationsDealsOptions, type OrganizationsDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationsDeals(\n options?: OrganizationsDealsOptions,\n { config, queryClient }: UseOrganizationsDealsOptions = {},\n): UseQueryResult<OrganizationsDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationsDeals\", options?.organizationIds],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationsDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n throwOnError: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, prepareSignup, type PrepareSignupOptions, type PrepareSignupResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UsePrepareSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePrepareSignup(\n options?: PrepareSignupOptions,\n { config, queryClient }: UsePrepareSignupOptions = {},\n): UseQueryResult<PrepareSignupResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"prepareSignup\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await prepareSignup(options, config ?? defaultConfig);\n },\n enabled,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions, type ProjectTvlResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseProjectTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useProjectTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseProjectTvlOptions = {},\n): UseQueryResult<ProjectTvlResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"projectTvl\", options?.projects],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await projectTvl(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 7 * 60 * 1000,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import {\n type QueryClient,\n useMutation,\n type UseMutationResult,\n useQuery,\n} from \"@tanstack/react-query\";\nimport { type Config, signup, type SignupOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useSignup(\n options?: Omit<SignupOptions, \"signature\">,\n { config, queryClient }: UseSignupOptions = {}\n): UseMutationResult<boolean | null, Error, string, unknown> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const mutation = useMutation(\n {\n mutationFn: async (signature: string) => {\n if (!enabled) return null;\n\n return await signup({ ...options, signature }, config ?? defaultConfig);\n },\n },\n queryClient ?? defaultQueryClient\n );\n\n return mutation;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UseEarnCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = true; // Always enabled for campaigns\n\n const query = useQuery({\n queryKey: [\n \"earn-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n return await earnCampaigns(options || {}, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnDeals, type EarnDealsOptions, type EarnDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnDeals(\n options?: EarnDealsOptions,\n { config, queryClient }: UseEarnDealsOptions = {},\n): UseQueryResult<EarnDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earn-deals\",\n options?.campaignId,\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnRoute, type EarnRouteOptions, type EarnRouteResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnRouteOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnRouteOld(\n options?: EarnRouteOptions,\n { config, queryClient }: UseEarnRouteOptions = {},\n): UseQueryResult<EarnRouteResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earnRoute\",\n options?.user,\n options?.chain,\n options?.slippage,\n options?.tokenIn,\n options?.tokenOut,\n options?.amount,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnRoute(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000, // 2 minutes - longer stale time for transaction stability\n refetchInterval: false, // Disable automatic refetch to prevent transaction state reset\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport {\n type Config,\n earnWalletBalances,\n type EarnWalletBalancesOptions,\n type EarnWalletBalancesResponse,\n} from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnWalletBalancesOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnWalletBalances(\n options?: EarnWalletBalancesOptions,\n { config, queryClient }: UseEarnWalletBalancesOptions = {}\n): UseQueryResult<EarnWalletBalancesResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery(\n {\n queryKey: [\"earnWalletBalances\", options?.chain, options?.user],\n queryFn: async () => {\n if (!enabled) return null;\n\n return await earnWalletBalances(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 30 * 1000,\n refetchInterval: 15 * 1000,\n refetchOnWindowFocus: true,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\n/**\n * Hook to fetch partner campaigns\n * Currently uses the same endpoint as earn campaigns\n */\nexport function usePartnerCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UsePartnerCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnCampaigns(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, turtleDeals, type TurtleDealsOptions, type TurtleDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePartnerDeals(\n options?: TurtleDealsOptions,\n { config, queryClient }: UsePartnerDealsOptions = {},\n): UseQueryResult<TurtleDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-deals\",\n options?.status,\n options?.protocol,\n options?.ids,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n const result = await turtleDeals(options || {}, config ?? defaultConfig);\n return result;\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, geocheck, type GeoCheckResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseGeocheckOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useGeocheck(\n { config, queryClient }: UseGeocheckOptions = {},\n): UseQueryResult<GeoCheckResponse> {\n const defaultConfig = useConfig();\n\n const query = useQuery({\n queryKey: [\"geocheck\"],\n queryFn: async () => {\n return await geocheck(config ?? defaultConfig);\n },\n staleTime: 5 * 60 * 1000, // 5 minutes\n gcTime: 10 * 60 * 1000, // 10 minutes\n refetchOnWindowFocus: false,\n retry: 1,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { mergeQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { opportunitiesQueries } from \"./opportunities/queries\";\nimport { earnOpportunitiesQueries } from \"./earn-opportunities/queries\";\nimport { earnRouteQueries } from \"./earn-route/queries\";\nimport { earnMembershipQueries } from \"./earn-membership/queries\";\nimport { earnDepositsQueries } from \"./earn-deposits/queries\";\nimport { productsQueries } from \"./products/queries\";\nimport { ensoBalancesQueries } from \"./enso-balances/queries\";\nimport { widgetQueries } from \"./widget/queries\";\n\n// Merged query keys for cache invalidation\nexport const queries = mergeQueryKeys(\n opportunitiesQueries,\n earnOpportunitiesQueries,\n earnRouteQueries,\n earnMembershipQueries,\n earnDepositsQueries,\n productsQueries,\n ensoBalancesQueries,\n widgetQueries\n);\n\n// Features - Earn API\nexport * from \"./earn-opportunities\";\nexport * from \"./earn-route\";\nexport * from \"./earn-membership\";\nexport * from \"./earn-deposits\";\nexport * from \"./enso-balances\";\n\n// Features\nexport * from \"./opportunities\";\nexport * from \"./products\";\nexport * from \"./balance\";\nexport * from \"./widget\";\n\n// Shared schemas\nexport * from \"./schemas/shared\";\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getOpportunities, getOpportunityById } from \"./api\";\nimport type { OpportunityFilters } from \"./schema\";\n\nexport const opportunitiesQueries = createQueryKeys(\"opportunities\", {\n // Get all opportunities (no filters)\n all: {\n queryKey: null,\n queryFn: () => getOpportunities(),\n },\n\n // Get opportunities with filters\n list: (filters?: OpportunityFilters) => ({\n queryKey: [{ filters }],\n queryFn: () => getOpportunities(filters),\n }),\n\n // Get single opportunity by ID\n byId: (id: string) => ({\n queryKey: [id],\n queryFn: () => getOpportunityById(id),\n }),\n});\n","export const API_BASE_URL = \"https://api.turtle.xyz\";\nexport const EARN_BASE_URL = \"https://earn.turtle.xyz\";\n\nexport type ApiDomain = \"api\" | \"earn\" | \"custom\";\n\nexport interface ApiClientOptions<TDomain extends ApiDomain = \"api\"> extends RequestInit {\n debug?: boolean;\n domain?: TDomain;\n baseUrl?: TDomain extends \"custom\" ? string : never;\n}\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public status: number,\n public response?: unknown\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nconst getEarnUrl = () => {\n return process.env.NEXT_PUBLIC_EARN_URL || process.env.VITE_EARN_URL || EARN_BASE_URL;\n};\n\nconst getApiUrl = () => {\n return process.env.NEXT_PUBLIC_API_URL || process.env.VITE_API_URL || API_BASE_URL;\n};\n\n/**\n * Lightweight API client with automatic JSON parsing and error handling\n * @param endpoint - API endpoint path (e.g., \"/turtle/opportunities\")\n * @param options - Fetch options + debug flag + domain selection\n * @returns Parsed JSON response as unknown (validate with Zod later)\n */\nexport async function apiClient<TDomain extends ApiDomain = \"api\">(\n endpoint: string,\n options?: ApiClientOptions<TDomain>\n): Promise<unknown> {\n const { debug, domain = \"api\", baseUrl, ...fetchOptions } = options ?? {};\n\n const resolvedBaseUrl =\n domain === \"earn\" ? getEarnUrl() : domain === \"custom\" ? baseUrl : getApiUrl();\n const url = `${resolvedBaseUrl}${endpoint}`;\n\n if (debug) {\n console.log(\"[API Request]\", {\n method: fetchOptions.method ?? \"GET\",\n url,\n headers: fetchOptions.headers,\n body: fetchOptions.body,\n });\n }\n\n try {\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n ...fetchOptions.headers,\n },\n ...fetchOptions,\n });\n\n // Parse response body\n const data = await response.json();\n\n if (debug) {\n console.log(\"[API Response]\", {\n status: response.status,\n ok: response.ok,\n data,\n });\n }\n\n if (!response.ok) {\n throw new ApiError(\n `API error: ${response.status} ${response.statusText}`,\n response.status,\n data\n );\n }\n\n return data;\n } catch (error) {\n if (debug) {\n console.error(\"[API Error]\", error);\n }\n\n // Re-throw ApiError\n if (error instanceof ApiError) {\n throw error;\n }\n\n // Wrap other errors (network, JSON parse, etc)\n throw new ApiError(error instanceof Error ? error.message : \"Unknown error\", 0, error);\n }\n}\n","import { z } from \"zod\";\n\nexport const chainSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n chainId: z.string(),\n logoUrl: z.string(),\n ecosystem: z.string(),\n status: z.string(),\n explorerUrl: z.string(),\n});\n\nexport const tokenSchema = z.object({\n id: z.string(),\n name: z.string(),\n symbol: z.string(),\n address: z.string(),\n chain: chainSchema,\n decimals: z.number(),\n logoUrl: z.string(),\n isNative: z.boolean(),\n priceUsd: z.number(),\n});\n\nexport const organizationSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().nullable(),\n landingUrl: z.string().optional().nullable(),\n iconUrl: z.string().optional().nullable(),\n organizationType: z.string().optional().nullable(),\n turtleRefCode: z.string().optional().nullable(),\n twitterHandle: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n featured: z.boolean().optional().nullable(),\n});\n\nexport const productSchema = z.object({\n id: z.string(),\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n organization: organizationSchema,\n createdAt: z.string().optional().nullable(),\n});\n\n// Vault Configuration Schema - matching backend\nexport const vaultConfigSchema = z.object({\n id: z.string().uuid().optional(),\n infraProvider: organizationSchema.optional().nullable(),\n curator: organizationSchema.optional().nullable(),\n withdrawalCooldownSecs: z.number().int().min(0).optional().nullable(),\n withdrawalContractAddress: z.string().optional().nullable(),\n withdrawalDetails: z.any().optional().nullable(),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n performanceFee: z.number().min(0).max(100).optional().nullable(),\n managementFee: z.number().min(0).max(100).optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\n// Lending Configuration Schema - matching backend\nexport const lendingConfigSchema = z.object({\n id: z.string().uuid().optional(),\n protocol: z.object({ id: z.string() }),\n marketAddress: z.string().min(1, \"Market address is required\"),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\nexport const incentiveSchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n iconUrl: z.string(),\n rewardType: z.string(),\n rewardTypeName: z.string(),\n boostPct: z.number().nullable(),\n totalCapacity: z.number().nullable(),\n maxCapacityPerLP: z.number().nullable(),\n lockup: z.string().nullable(),\n minCommitment: z.number().nullable(),\n baseYieldTarget: z.number().nullable(),\n baseYieldSource: z.string().nullable(),\n incentiveYieldTarget: z.number().nullable(),\n fdvEstimate: z.number().nullable(),\n isIncentiveYieldGuaranteed: z.boolean().nullable(),\n tokenSupplyAllocation: z.number().nullable(),\n yield: z.number().nullable(),\n});\n\n// Opportunity Type Enum\nconst opportunityTypeEnum = z.enum([\"vault\", \"lending\", \"staking\"]);\n\n// Opportunity Status Enum\nconst opportunityStatusEnum = z.enum([\"active\", \"paused\", \"deprecated\"]);\n\n// Main Opportunity Schema - matching backend API exactly\nexport const opportunitySchema = z.object({\n id: z.string().uuid().optional(),\n name: z.string(),\n shortName: z.string(),\n type: opportunityTypeEnum,\n description: z.string().optional().default(\"\"),\n curator: z.string().optional().default(\"\"),\n tvl: z.number().min(0, \"TVL must be positive\"),\n featured: z.boolean().optional().default(false),\n featuredOrder: z.number().int().optional().nullable(),\n originalConfig: z.any().optional().nullable(),\n exposures: z.array(z.string()).optional().default([]),\n status: opportunityStatusEnum.optional().default(\"active\"),\n statusReason: z.string().optional().default(\"\"),\n depositDisabled: z.boolean().optional().default(false),\n depositDisabledReason: z.string().optional().default(\"\"),\n withdrawalDisabled: z.boolean().optional().default(false),\n withdrawalDisabledReason: z.string().optional().default(\"\"),\n docsUrl: z.string().optional().nullable(),\n auditsUrl: z.string().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n\n // Relationships\n depositTokens: z.array(tokenSchema),\n baseTokens: z.union([z.null(), tokenSchema]),\n receiptToken: z.union([z.null(), tokenSchema]),\n incentives: z.array(incentiveSchema),\n products: z.array(productSchema),\n vaultConfig: vaultConfigSchema.optional().nullable(),\n lendingConfig: lendingConfigSchema.optional().nullable(),\n\n // Will be deprecated\n token: tokenSchema,\n exposure: z.array(z.string()),\n explorerUrl: z.string().nullable(),\n});\n\nexport type Chain = z.infer<typeof chainSchema>;\nexport type Token = z.infer<typeof tokenSchema>;\nexport type Organization = z.infer<typeof organizationSchema>;\nexport type Product = z.infer<typeof productSchema>;\nexport type VaultConfig = z.infer<typeof vaultConfigSchema>;\nexport type LendingConfig = z.infer<typeof lendingConfigSchema>;\nexport type Incentive = z.infer<typeof incentiveSchema>;\nexport type Opportunity = z.infer<typeof opportunitySchema>;\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\nexport const opportunityFiltersSchema = z.object({\n tokenId: z.string().uuid().optional(),\n chain: z.string().optional(),\n productId: z.string().uuid().optional(),\n});\nexport type OpportunityFilters = z.infer<typeof opportunityFiltersSchema>;\n\nexport const opportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema),\n total: z.number().optional(),\n});\n\nexport type OpportunitiesResponse = z.infer<typeof opportunitiesResponseSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport type { OpportunityFilters, OpportunitiesResponse } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\nimport { opportunitySchema } from \"../schemas/shared\";\nimport { opportunitiesResponseSchema } from \"./schema\";\n\n// GET /turtle/opportunities\nexport async function getOpportunities(\n filters?: OpportunityFilters,\n options?: { debug?: boolean }\n): Promise<OpportunitiesResponse> {\n const params = new URLSearchParams();\n\n if (filters?.tokenId) params.append(\"tokenId\", filters.tokenId);\n if (filters?.chain) params.append(\"chain\", filters.chain);\n if (filters?.productId) params.append(\"productId\", filters.productId);\n\n const queryString = params.toString();\n const endpoint = `/turtle/opportunities${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /turtle/opportunities/{id}\nexport async function getOpportunityById(\n id: string,\n options?: { debug?: boolean }\n): Promise<Opportunity> {\n const data = await apiClient(`/turtle/opportunities/${id}`, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitySchema.safeParse(data);\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunity: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnOpportunities } from \"./api\";\n\nexport const earnOpportunitiesQueries = createQueryKeys(\"earnOpportunities\", {\n all: {\n queryKey: null,\n queryFn: (context) => getEarnOpportunities(context),\n },\n});\n","import { z } from \"zod\";\nimport { chainSchema, tokenSchema } from \"../schemas/shared\";\n\n// Earn Opportunity Response Schema\nexport const earnOpportunitySchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n type: z.string(),\n estimatedApr: z.number(),\n tvl: z.number(),\n featured: z.boolean(),\n baseTokens: tokenSchema,\n depositTokens: z.array(tokenSchema).nullable(),\n receiptToken: tokenSchema,\n});\n\n// Earn Opportunities Response Schema\nexport const earnOpportunitiesResponseSchema = z.object({\n opportunities: z.array(earnOpportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type EarnOpportunity = z.infer<typeof earnOpportunitySchema>;\nexport type EarnOpportunitiesResponse = z.infer<typeof earnOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnOpportunitiesResponse } from \"./schema\";\nimport { earnOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/opportunities\nexport async function getEarnOpportunities(\n context?: QueryFunctionContext\n): Promise<EarnOpportunitiesResponse> {\n const data = await apiClient(\"/v1/opportunities/\", {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = earnOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnRoute } from \"./api\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport const earnRouteQueries = createQueryKeys(\"earnRoute\", {\n // Get earn route with specific parameters\n byParams: (params: EarnRouteParams) => ({\n queryKey: [params],\n queryFn: (context) => getEarnRoute(params, context),\n }),\n});\n","import { ethz } from \"@turtleclub/utils\";\nimport { z } from \"zod\";\n\n// Asset schemas\nexport const assetImageData = z.object({\n kind: z.literal(\"image\"),\n url: z.string(),\n alt: z.string(),\n});\n\nexport const assetERC20Data = z.object({\n kind: z.literal(\"erc20\"),\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n decimals: z.number(),\n});\n\nexport const assetData = z.discriminatedUnion(\"kind\", [assetImageData, assetERC20Data]);\n\nexport const asset = z.object({\n id: z.string().uuid(),\n name: z.string(),\n slugs: z.array(z.string()),\n tags: z.array(z.string()),\n description: z.string().nullable(),\n data: z.array(assetData),\n});\n\n// Token schema\nexport const routeToken = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\n// Router substeps\nexport const swapSubstep = z.object({\n kind: z.literal(\"swap\"),\n from: z.array(routeToken),\n to: z.array(routeToken),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const depositSubstep = z.object({\n kind: z.literal(\"deposit\"),\n vault: z.string(),\n from: z.array(routeToken),\n to: z.array(routeToken),\n amount: z.string(),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const routerSubstep = z.discriminatedUnion(\"kind\", [swapSubstep, depositSubstep]);\n\n// Transaction schema\nexport const stepTx = z.object({\n from: ethz.address(),\n to: ethz.address(),\n data: ethz.hex(),\n value: z.string(),\n gas: z.number(),\n});\n\n// Router steps\nexport const approveStep = z.object({\n kind: z.literal(\"approve\"),\n owner: z.string(),\n spender: z.string(),\n token: routeToken,\n amount: z.string(),\n tx: stepTx,\n});\n\nexport const ensoStep = z.object({\n kind: z.literal(\"enso\"),\n substeps: z.array(routerSubstep),\n tx: stepTx,\n asset: asset.nullable(),\n});\n\nexport const routerStep = z.discriminatedUnion(\"kind\", [approveStep, ensoStep]);\n\n// Earn Route Response\nexport const earnRouteResponseSchema = z.object({\n steps: z.array(routerStep),\n amount_out: z.string(),\n price_impact: z.number().nullable(),\n});\n\n// Earn Route Request Params\nexport interface EarnRouteParams {\n user: string;\n chain: number;\n slippage: number;\n token_in: string;\n token_out: string;\n amount: string;\n distributor_id: string;\n referral_code?: string;\n // @deprecated productId is not supported anymore\n id?: string;\n}\n\nexport type AssetImageData = z.infer<typeof assetImageData>;\nexport type AssetERC20Data = z.infer<typeof assetERC20Data>;\nexport type AssetData = z.infer<typeof assetData>;\nexport type Asset = z.infer<typeof asset>;\nexport type RouteToken = z.infer<typeof routeToken>;\nexport type SwapSubstep = z.infer<typeof swapSubstep>;\nexport type DepositSubstep = z.infer<typeof depositSubstep>;\nexport type RouterSubstep = z.infer<typeof routerSubstep>;\nexport type StepTx = z.infer<typeof stepTx>;\nexport type ApproveStep = z.infer<typeof approveStep>;\nexport type EnsoStep = z.infer<typeof ensoStep>;\nexport type RouterStep = z.infer<typeof routerStep>;\nexport type EarnRouteResponse = z.infer<typeof earnRouteResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnRouteResponse, EarnRouteParams } from \"./schema\";\nimport { earnRouteResponseSchema } from \"./schema\";\n\n// GET /v1/route\nexport async function getEarnRoute(\n params: EarnRouteParams,\n context?: QueryFunctionContext\n): Promise<EarnRouteResponse> {\n const searchParams = new URLSearchParams({\n user: params.user,\n chain: params.chain.toString(),\n slippage: params.slippage.toString(),\n token_in: params.token_in,\n token_out: params.token_out,\n amount: params.amount,\n distributor_id: params.distributor_id,\n ...(params.referral_code && { referral_code: params.referral_code }),\n ...(params.id && { id: params.id }),\n });\n\n const response = await apiClient(`/v1/route/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n }) as { data: unknown };\n\n const data = response.data;\n const result = earnRouteResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn route: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { checkMembership } from \"./api\";\nimport type { CheckMembershipParams } from \"./schema\";\n\nexport const earnMembershipQueries = createQueryKeys(\"earnMembership\", {\n // Check membership status\n check: (params: CheckMembershipParams) => ({\n queryKey: [params],\n queryFn: (context) => checkMembership(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Wallet Ecosystem Enum\nexport const walletEcosystemEnum = z.enum([\"evm\", \"solana\", \"ton\"]);\n\n// GET /v1/membership/ - Check Membership\nexport interface CheckMembershipParams {\n address: string;\n walletEcosystem?: \"evm\" | \"solana\" | \"ton\";\n}\n\nexport const checkMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n});\n\n// POST /v1/membership/agreement - Create Agreement\nexport const createAgreementRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: walletEcosystemEnum,\n url: z.string(),\n chainId: z.string().default(\"1\"),\n});\n\nexport const createAgreementResponseSchema = z.object({\n message: z.string(),\n nonce: z.string(),\n});\n\n// POST /v1/membership/ - Create Membership\nexport const createMembershipRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: z.string(),\n signature: z.string(),\n nonce: z.string(),\n});\n\nexport const createMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n error: z.string().optional(),\n});\n\nexport type WalletEcosystem = z.infer<typeof walletEcosystemEnum>;\nexport type CheckMembershipResponse = z.infer<typeof checkMembershipResponseSchema>;\nexport type CreateAgreementRequest = z.infer<typeof createAgreementRequestSchema>;\nexport type CreateAgreementResponse = z.infer<typeof createAgreementResponseSchema>;\nexport type CreateMembershipRequest = z.infer<typeof createMembershipRequestSchema>;\nexport type CreateMembershipResponse = z.infer<typeof createMembershipResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type {\n CheckMembershipParams,\n CheckMembershipResponse,\n CreateAgreementRequest,\n CreateAgreementResponse,\n CreateMembershipRequest,\n CreateMembershipResponse,\n} from \"./schema\";\nimport {\n checkMembershipResponseSchema,\n createAgreementResponseSchema,\n createMembershipResponseSchema,\n} from \"./schema\";\n\n// GET /v1/membership/ - Check if wallet is a member\nexport async function checkMembership(\n params: CheckMembershipParams,\n context?: QueryFunctionContext\n): Promise<CheckMembershipResponse> {\n const searchParams = new URLSearchParams({\n address: params.address,\n ...(params.walletEcosystem && { walletEcosystem: params.walletEcosystem }),\n });\n\n const data = await apiClient(`/v1/membership/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = checkMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse check membership: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/agreement - Create membership agreement\nexport async function createMembershipAgreement(\n request: CreateAgreementRequest\n): Promise<CreateAgreementResponse> {\n const data = await apiClient(\"/v1/membership/agreement\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createAgreementResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create agreement: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/ - Create membership\nexport async function createMembership(\n request: CreateMembershipRequest\n): Promise<CreateMembershipResponse> {\n const data = await apiClient(\"/v1/membership/\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create membership: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getDeposits } from \"./api\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport const earnDepositsQueries = createQueryKeys(\"earnDeposits\", {\n byParams: (params: GetDepositsParams) => ({\n queryKey: [params],\n queryFn: (context) => getDeposits(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Deposit Schema\nexport const depositSchema = z.object({\n chain: z.number().int(),\n deposited_amount_usd: z.string(),\n deposited_token_address: z.string(),\n deposited_token_decimals: z.number().int(),\n deposited_token_logo: z.string(),\n deposited_token_name: z.string(),\n deposited_token_symbol: z.string(),\n deposited_value: z.string(),\n depositor: z.string(),\n target: z.string(),\n timestamp: z.string(),\n tx_hash: z.string(),\n});\n\n// Deposits Response Schema\nexport const depositsResponseSchema = z.object({\n deposits: z.array(depositSchema).nullable(),\n});\n\n// Deposits Request Params\nexport interface GetDepositsParams {\n distributor_id: string;\n depositor?: string;\n limit?: number;\n offset?: number;\n}\n\nexport type Deposit = z.infer<typeof depositSchema>;\nexport type DepositsResponse = z.infer<typeof depositsResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetDepositsParams, DepositsResponse } from \"./schema\";\nimport { depositsResponseSchema } from \"./schema\";\n\n// GET /v1/deposit/{distributor_id}\nexport async function getDeposits(\n params: GetDepositsParams,\n context?: QueryFunctionContext\n): Promise<DepositsResponse> {\n const { distributor_id, depositor, limit, offset } = params;\n\n const searchParams = new URLSearchParams({\n ...(depositor && { depositor }),\n ...(limit && { limit: limit.toString() }),\n ...(offset && { offset: offset.toString() }),\n });\n\n const queryString = searchParams.toString();\n const endpoint = `/v1/deposit/${distributor_id}${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = depositsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse deposits: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { createProduct, deleteProduct, getProducts, updateProduct } from \"./api\";\nimport { ProductCreateInput, ProductUpdateInput } from \"./schema\";\n\nexport const productsQueries = createQueryKeys(\"products\", {\n // Get all products (no filters)\n all: {\n queryKey: null,\n queryFn: () => getProducts(),\n },\n\n // Get single product by ID\n byId: (id: string) => ({\n queryKey: [id],\n // Replace by true query then\n queryFn: async () => {\n const products = await getProducts();\n return products.products.find((product) => product.id === id);\n },\n }),\n});\n","import { z } from \"zod\";\nimport { productSchema } from \"../schemas/shared\";\nimport { organization } from \"@turtleclub/api\";\n\nexport const productsResponseSchema = z.object({\n products: z.array(productSchema),\n total: z.number().optional(),\n});\n\nexport type ProductsResponse = z.infer<typeof productsResponseSchema>;\n\nexport const productCreateInputSchema = z.object({\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n\n // Relations\n organizationId: z.string().uuid(),\n});\n\nexport type ProductCreateInput = z.infer<typeof productCreateInputSchema>;\n\nexport const productUpdateInputSchema = productCreateInputSchema.extend({\n id: z.string().uuid(),\n});\n\nexport type ProductUpdateInput = z.infer<typeof productUpdateInputSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport { Product, productSchema } from \"../schemas/shared\";\nimport {\n ProductCreateInput,\n ProductsResponse,\n productsResponseSchema,\n ProductUpdateInput,\n} from \"./schema\";\n\n// GET /admin/products\nexport async function getProducts(options?: { debug?: boolean }): Promise<ProductsResponse> {\n const params = new URLSearchParams();\n\n const queryString = params.toString();\n const endpoint = `/admin/products${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse products: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /admin/products/:id\n\n// POST /admin/products\nexport async function createProduct(\n input: ProductCreateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products`;\n\n const data = await apiClient(endpoint, {\n method: \"POST\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to create product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// PUT /admin/products/:id\nexport async function updateProduct(\n input: ProductUpdateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products/${input.id}`;\n\n const data = await apiClient(endpoint, {\n method: \"PUT\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to update product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// DELETE /admin/products/:id\nexport async function deleteProduct(id: string, options?: { debug?: boolean }): Promise<void> {\n const endpoint = `/admin/products/${id}`;\n\n const data = await apiClient(endpoint, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to delete product: ${result.error.message}`);\n }\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWalletBalances } from \"./api\";\nimport type { GetWalletBalancesParams } from \"./schemas\";\n\nexport const ensoBalancesQueries = createQueryKeys(\"ensoBalances\", {\n byParams: (params: GetWalletBalancesParams) => ({\n queryKey: [params],\n queryFn: (context) => getWalletBalances(params, context),\n }),\n});\n","import { z } from \"zod\";\n\nexport const balanceTokenSchema = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\nexport const walletBalanceSchema = z.object({\n token: balanceTokenSchema,\n amount: z.string(),\n});\n\nexport interface GetWalletBalancesParams {\n user: string;\n chain: number;\n}\n\nexport const walletBalancesResponseSchema = z.object({\n balances: z.array(walletBalanceSchema),\n});\n\nexport type BalanceToken = z.infer<typeof balanceTokenSchema>;\nexport type WalletBalance = z.infer<typeof walletBalanceSchema>;\nexport type WalletBalancesResponse = z.infer<typeof walletBalancesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetWalletBalancesParams, WalletBalancesResponse } from \"./schemas\";\nimport { walletBalancesResponseSchema } from \"./schemas\";\n\n// GET /v1/api/wallet_balances\nexport async function getWalletBalances(\n params: GetWalletBalancesParams,\n context?: QueryFunctionContext\n): Promise<WalletBalancesResponse> {\n const { user, chain } = params;\n\n const searchParams = new URLSearchParams({\n user,\n chain: chain.toString(),\n });\n\n const endpoint = `/v1/api/wallet_balances?${searchParams.toString()}`;\n\n const data = await apiClient<\"custom\">(endpoint, {\n method: \"GET\",\n domain: \"custom\",\n baseUrl: \"https://earn.turtle.vision\",\n signal: context?.signal,\n });\n\n const result = walletBalancesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse wallet balances: ${result.error.message}`);\n }\n\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWidgetOpportunities } from \"./api\";\n\nexport const widgetQueries = createQueryKeys(\"widget\", {\n opportunities: (distributorId: string) => ({\n queryKey: [distributorId],\n queryFn: (context) => getWidgetOpportunities(distributorId, context),\n }),\n});\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\n// Widget Opportunities Response Schema\nexport const widgetOpportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type WidgetOpportunitiesResponse = z.infer<typeof widgetOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { WidgetOpportunitiesResponse } from \"./schema\";\nimport { widgetOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/widget/{distributorId}/opportunities\nexport async function getWidgetOpportunities(\n distributorId: string,\n context?: QueryFunctionContext\n): Promise<WidgetOpportunitiesResponse> {\n const data = await apiClient(`/widget/${distributorId}/opportunities`, {\n method: \"GET\",\n signal: context?.signal,\n });\n\n const result = widgetOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse widget opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnOpportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\n\nexport function useEarnOpportunities() {\n return useQuery({\n ...earnOpportunitiesQueries.all,\n ...queryDefaults,\n });\n}\n","// Default TanStack Query configuration\n// Override per-query as needed\n\nexport const queryDefaults = {\n staleTime: 5 * 60 * 1000, // 5 minutes - data is fresh\n gcTime: 10 * 60 * 1000, // 10 minutes - cache garbage collection (formerly cacheTime)\n retry: 1, // Retry failed requests once\n refetchOnWindowFocus: false, // Don't refetch on tab focus\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnRouteQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport interface UseEarnRouteOptions {\n params?: EarnRouteParams;\n enabled?: boolean;\n}\n\nexport function useEarnRoute({ params, enabled = true }: UseEarnRouteOptions) {\n return useQuery({\n // Null assertion is safe because the query is enable only if params is provided\n ...earnRouteQueries.byParams(params!),\n ...queryDefaults,\n enabled: !!params && enabled,\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { earnMembershipQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { createMembershipAgreement, createMembership } from \"./api\";\nimport type {\n CheckMembershipParams,\n CreateAgreementRequest,\n CreateMembershipRequest,\n} from \"./schema\";\n\n// Query hook for checking membership\nexport interface UseCheckMembershipOptions {\n params: CheckMembershipParams;\n enabled?: boolean;\n}\n\nexport function useCheckMembership({\n params,\n enabled = true,\n}: UseCheckMembershipOptions) {\n return useQuery({\n ...earnMembershipQueries.check(params),\n ...queryDefaults,\n enabled,\n });\n}\n\n// Mutation hook for creating membership agreement\nexport function useCreateMembershipAgreement() {\n return useMutation({\n mutationFn: (request: CreateAgreementRequest) =>\n createMembershipAgreement(request),\n });\n}\n\n// Mutation hook for creating membership\nexport function useCreateMembership() {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (request: CreateMembershipRequest) => createMembership(request),\n onSuccess: (data, variables) => {\n queryClient.invalidateQueries({\n queryKey: earnMembershipQueries.check({\n address: variables.address,\n walletEcosystem: variables.walletEcosystem as \"evm\" | \"solana\" | \"ton\",\n }).queryKey,\n });\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnDepositsQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport interface UseDepositsOptions {\n params: GetDepositsParams;\n enabled?: boolean;\n}\n\nexport function useDeposits({ params, enabled = true }: UseDepositsOptions) {\n return useQuery({\n ...earnDepositsQueries.byParams(params),\n ...queryDefaults,\n enabled,\n });\n}\n","import { useEffect, useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport type { Asset } from \"@turtleclub/ui\";\nimport { ensoBalancesQueries } from \"./queries\";\nimport type { WalletBalancesResponse } from \"./schemas\";\n\ninterface MultiChainBalancesParams {\n chainIds: number[];\n address?: string;\n}\n\ninterface MultiChainBalancesResult {\n balances: Record<number, WalletBalancesResponse[\"balances\"]>;\n isLoading: boolean;\n error: Error | null;\n refetchAll: () => void;\n}\n\nexport function useMultiChainBalances({\n chainIds,\n address,\n}: MultiChainBalancesParams): MultiChainBalancesResult {\n const queries = useQueries({\n queries: chainIds.map((chainId) => ({\n ...ensoBalancesQueries.byParams({ user: address || \"\", chain: chainId }),\n enabled: !!address,\n staleTime: 60 * 1000,\n refetchInterval: 3 * 60 * 1000,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n })),\n });\n\n const isLoading = queries.some((query) => query.isLoading);\n const error = queries.find((query) => query.error)?.error || null;\n\n const refetchAll = () => {\n queries.forEach((query) => {\n query.refetch();\n });\n };\n\n // Aggregate results\n const balances = useMemo(() => {\n const balanceMap: Record<number, WalletBalancesResponse[\"balances\"]> = {};\n\n queries.forEach((query, index) => {\n const chainId = chainIds[index];\n if (query.data && chainId !== undefined) {\n balanceMap[chainId] = query.data.balances;\n }\n });\n\n return balanceMap;\n }, [queries, chainIds]);\n\n return {\n balances,\n isLoading,\n error,\n refetchAll,\n };\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport { opportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { OpportunitiesResponse, OpportunityFilters } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\n\nexport interface UseOpportunitiesOptions\n extends Omit<UseQueryOptions<OpportunitiesResponse>, \"queryKey\" | \"queryFn\"> {\n filters?: OpportunityFilters;\n}\n\nexport function useOpportunities(options?: UseOpportunitiesOptions) {\n return useQuery({\n ...opportunitiesQueries.all,\n ...queryDefaults,\n select: (data: OpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n .map((opportunity) => opportunity.receiptToken?.chain)\n .filter((chain) => chain !== undefined)\n .map((chain) => [chain.id, chain])\n );\n\n const chains = Array.from(uniqueChainsMap.values());\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n\nexport interface UseOpportunityOptions\n extends Omit<UseQueryOptions<Opportunity>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useOpportunity({ id, ...options }: UseOpportunityOptions) {\n return useQuery({\n ...opportunitiesQueries.byId(id),\n ...queryDefaults,\n select: (data: Opportunity) => {\n return {\n ...data,\n chain: data.receiptToken?.chain,\n };\n },\n });\n}\n","import {\n useMutation,\n UseMutationOptions,\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { ProductCreateInput, ProductsResponse, ProductUpdateInput } from \"./schema\";\nimport type { Product } from \"../schemas/shared\";\nimport { productsQueries } from \"./queries\";\nimport { createProduct, deleteProduct, updateProduct } from \"./api\";\n\nexport interface UseProductsOptions\n extends Omit<UseQueryOptions<ProductsResponse>, \"queryKey\" | \"queryFn\"> {}\n\nexport function useProducts(options?: UseProductsOptions) {\n return useQuery({ ...productsQueries.all, ...queryDefaults });\n}\n\nexport interface UseProductOptions extends Omit<UseQueryOptions<Product>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useProduct({ id, ...options }: UseProductOptions) {\n return useQuery({ ...productsQueries.byId(id), ...queryDefaults });\n}\n\nexport interface UseCreateProductOptions\n extends Omit<UseMutationOptions<ProductCreateInput>, \"mutationFn\"> {}\n\nexport function useCreateProduct({ ...options }: UseCreateProductOptions) {\n return useMutation({ mutationFn: createProduct });\n}\n\nexport interface UseUpdateProductOptions\n extends Omit<UseMutationOptions<ProductUpdateInput>, \"mutationFn\"> {}\n\nexport function useUpdateProduct({ ...options }: UseUpdateProductOptions) {\n return useMutation({ mutationFn: updateProduct });\n}\n\nexport interface UseDeleteProductOptions extends Omit<UseMutationOptions<string>, \"mutationFn\"> {}\n\nexport function useDeleteProduct({ ...options }: UseDeleteProductOptions) {\n return useMutation({ mutationFn: deleteProduct });\n}\n","import { useCallback, useMemo } from \"react\";\nimport { parseUnits } from \"viem\";\nimport { calculateUsdValue, checkInsufficientBalance, calculateMaxAmount } from \"@turtleclub/utils\";\n\ninterface UseTokenBalanceProps {\n token:\n | {\n balance: string;\n decimals: number;\n price?: number;\n }\n | null\n | undefined;\n amount: string | undefined;\n setAmount: (amount: string | undefined) => void;\n}\n\nexport function useTokenBalance({ token, amount, setAmount }: UseTokenBalanceProps) {\n const usdValue = useMemo(() => calculateUsdValue(amount, token?.price), [amount, token?.price]);\n\n const hasInsufficientBalance = useMemo(\n () => checkInsufficientBalance(token, amount),\n [token, amount]\n );\n\n const handleMaxClick = useCallback(() => {\n if (!token) return;\n const maxAmount = calculateMaxAmount(token.balance, token.decimals);\n setAmount(maxAmount);\n }, [token, setAmount]);\n\n const amountBigInt = useMemo(() => {\n if (!token || !amount) return undefined;\n try {\n return parseUnits(amount, token.decimals);\n } catch {\n return undefined;\n }\n }, [amount, token]);\n\n return {\n usdValue,\n hasInsufficientBalance,\n handleMaxClick,\n amountBigInt,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { widgetQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { WidgetOpportunitiesResponse } from \"./schema\";\n\nexport function useWidgetOpportunities(distributorId: string) {\n return useQuery({\n ...widgetQueries.opportunities(distributorId),\n ...queryDefaults,\n select: (data: WidgetOpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n ?.map((opportunity) => opportunity.receiptToken?.chain)\n ?.filter((chain) => chain !== undefined)\n ?.map((chain) => [chain.id, chain]) || []\n );\n\n const chains = Array.from(uniqueChainsMap.values()) || [];\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n"],"mappings":"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","names":["import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_react_query","import_api","defaultConfig","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_query_key_factory","import_zod","import_react_query","import_react_query","import_react_query","import_react_query","import_react_query","queries","import_react_query","import_react_query","import_react","import_utils","import_react_query"]}
|
package/dist/index.js
CHANGED
|
@@ -402,7 +402,7 @@ import { createQueryKeys } from "@lukemorales/query-key-factory";
|
|
|
402
402
|
|
|
403
403
|
// src/v2/lib/api-client.ts
|
|
404
404
|
var API_BASE_URL = "https://api.turtle.xyz";
|
|
405
|
-
var EARN_BASE_URL = "https://earn.turtle.
|
|
405
|
+
var EARN_BASE_URL = "https://earn.turtle.xyz";
|
|
406
406
|
var ApiError = class extends Error {
|
|
407
407
|
constructor(message, status, response) {
|
|
408
408
|
super(message);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useConfig.ts","../src/hooks/client.ts","../src/hooks/endpoints/useOrganizations.ts","../src/hooks/endpoints/useExists.ts","../src/hooks/endpoints/useIndexerTvl.ts","../src/hooks/endpoints/useOrganizationDeals.ts","../src/hooks/endpoints/useOrganizationsDeals.ts","../src/hooks/endpoints/usePrepareSignup.ts","../src/hooks/endpoints/useProjectTvl.ts","../src/hooks/endpoints/useSignup.ts","../src/hooks/endpoints/earn/useCampaigns.ts","../src/hooks/endpoints/earn/useDeals.ts","../src/hooks/endpoints/earn/useRoute.ts","../src/hooks/endpoints/earn/useWalletBalances.ts","../src/hooks/endpoints/partner/usePartnerCampaigns.ts","../src/hooks/endpoints/partner/usePartnerDeals.ts","../src/hooks/endpoints/useGeocheck.ts","../src/v2/index.ts","../src/v2/opportunities/queries.ts","../src/v2/lib/api-client.ts","../src/v2/schemas/shared.ts","../src/v2/opportunities/schema.ts","../src/v2/opportunities/api.ts","../src/v2/earn-opportunities/queries.ts","../src/v2/earn-opportunities/schema.ts","../src/v2/earn-opportunities/api.ts","../src/v2/earn-route/queries.ts","../src/v2/earn-route/schema.ts","../src/v2/earn-route/api.ts","../src/v2/earn-membership/queries.ts","../src/v2/earn-membership/schema.ts","../src/v2/earn-membership/api.ts","../src/v2/earn-deposits/queries.ts","../src/v2/earn-deposits/schema.ts","../src/v2/earn-deposits/api.ts","../src/v2/products/queries.ts","../src/v2/products/schema.ts","../src/v2/products/api.ts","../src/v2/enso-balances/queries.ts","../src/v2/enso-balances/schemas.ts","../src/v2/enso-balances/api.ts","../src/v2/widget/queries.ts","../src/v2/widget/schema.ts","../src/v2/widget/api.ts","../src/v2/earn-opportunities/hooks.ts","../src/v2/lib/query-config.ts","../src/v2/earn-route/hooks.ts","../src/v2/earn-membership/hooks.ts","../src/v2/earn-deposits/hooks.ts","../src/v2/enso-balances/hooks.ts","../src/v2/opportunities/hooks.ts","../src/v2/products/hooks.ts","../src/v2/balance/useTokenBalance.ts","../src/v2/widget/hooks.ts"],"sourcesContent":["import type { Config } from \"@turtleclub/api\";\nimport { defaultConfig } from \"@turtleclub/api\";\n\nexport function useConfig(): Config {\n // Placeholder implementation - in real app this would use TurtleProvider context\n return defaultConfig;\n}\n","import { createSyncStoragePersister } from \"@tanstack/query-sync-storage-persister\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { persistQueryClient } from \"@tanstack/react-query-persist-client\";\n\nexport const defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\n// Only persist on client side\nif (typeof window !== 'undefined') {\n const localStoragePersister = createSyncStoragePersister({\n storage: window.localStorage,\n key: \"turtle-sdk\",\n });\n\n persistQueryClient({\n queryClient: defaultQueryClient,\n persister: localStoragePersister,\n });\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organization, type OrganizationResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizations({\n config,\n queryClient,\n}: UseOrganizationsOptions = {}): UseQueryResult<OrganizationResponse | null> {\n const defaultConfig = useConfig();\n\n const query = useQuery(\n {\n queryKey: [\"organizations\"],\n queryFn: async () => {\n return await organization(config ?? defaultConfig);\n },\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, exists, type ExistsOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseExistsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useExists(\n options?: ExistsOptions,\n { config, queryClient }: UseExistsOptions = {},\n): UseQueryResult<boolean | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"exists\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await exists(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseIndexerTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useIndexerTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseIndexerTvlOptions = {}\n): UseQueryResult<\n {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[],\n Error\n> {\n const defaultConfig = useConfig();\n\n const queryResult = useQuery(\n {\n queryKey: [\"indexer-tvl\", options?.projects],\n queryFn: async () => {\n return await projectTvl(config ?? defaultConfig);\n },\n select: (data) => {\n if (!data) return [];\n const result = Object.entries(data.projects)\n .map(([key, value]) => {\n if (!options?.projects.includes(key)) return null;\n return {\n protocol: key,\n tvl: value.tvl_usd,\n assetTvl: value.asset_tvl_usd,\n debtTvl: value.debt_tvl_usd,\n };\n })\n .filter(Boolean) as {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[];\n\n return result;\n },\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n },\n queryClient ?? defaultQueryClient\n );\n\n return queryResult;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationDeals, type OrganizationDealsOptions, type OrganizationDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationDeals(\n options?: OrganizationDealsOptions,\n { config, queryClient }: UseOrganizationDealsOptions = {},\n): UseQueryResult<OrganizationDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationDeals\", options?.organizationId],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationsDeals, type OrganizationsDealsOptions, type OrganizationsDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationsDeals(\n options?: OrganizationsDealsOptions,\n { config, queryClient }: UseOrganizationsDealsOptions = {},\n): UseQueryResult<OrganizationsDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationsDeals\", options?.organizationIds],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationsDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n throwOnError: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, prepareSignup, type PrepareSignupOptions, type PrepareSignupResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UsePrepareSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePrepareSignup(\n options?: PrepareSignupOptions,\n { config, queryClient }: UsePrepareSignupOptions = {},\n): UseQueryResult<PrepareSignupResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"prepareSignup\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await prepareSignup(options, config ?? defaultConfig);\n },\n enabled,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions, type ProjectTvlResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseProjectTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useProjectTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseProjectTvlOptions = {},\n): UseQueryResult<ProjectTvlResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"projectTvl\", options?.projects],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await projectTvl(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 7 * 60 * 1000,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import {\n type QueryClient,\n useMutation,\n type UseMutationResult,\n useQuery,\n} from \"@tanstack/react-query\";\nimport { type Config, signup, type SignupOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useSignup(\n options?: Omit<SignupOptions, \"signature\">,\n { config, queryClient }: UseSignupOptions = {}\n): UseMutationResult<boolean | null, Error, string, unknown> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const mutation = useMutation(\n {\n mutationFn: async (signature: string) => {\n if (!enabled) return null;\n\n return await signup({ ...options, signature }, config ?? defaultConfig);\n },\n },\n queryClient ?? defaultQueryClient\n );\n\n return mutation;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UseEarnCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = true; // Always enabled for campaigns\n\n const query = useQuery({\n queryKey: [\n \"earn-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n return await earnCampaigns(options || {}, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnDeals, type EarnDealsOptions, type EarnDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnDeals(\n options?: EarnDealsOptions,\n { config, queryClient }: UseEarnDealsOptions = {},\n): UseQueryResult<EarnDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earn-deals\",\n options?.campaignId,\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnRoute, type EarnRouteOptions, type EarnRouteResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnRouteOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnRouteOld(\n options?: EarnRouteOptions,\n { config, queryClient }: UseEarnRouteOptions = {},\n): UseQueryResult<EarnRouteResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earnRoute\",\n options?.user,\n options?.chain,\n options?.slippage,\n options?.tokenIn,\n options?.tokenOut,\n options?.amount,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnRoute(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000, // 2 minutes - longer stale time for transaction stability\n refetchInterval: false, // Disable automatic refetch to prevent transaction state reset\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport {\n type Config,\n earnWalletBalances,\n type EarnWalletBalancesOptions,\n type EarnWalletBalancesResponse,\n} from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnWalletBalancesOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnWalletBalances(\n options?: EarnWalletBalancesOptions,\n { config, queryClient }: UseEarnWalletBalancesOptions = {}\n): UseQueryResult<EarnWalletBalancesResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery(\n {\n queryKey: [\"earnWalletBalances\", options?.chain, options?.user],\n queryFn: async () => {\n if (!enabled) return null;\n\n return await earnWalletBalances(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 30 * 1000,\n refetchInterval: 15 * 1000,\n refetchOnWindowFocus: true,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\n/**\n * Hook to fetch partner campaigns\n * Currently uses the same endpoint as earn campaigns\n */\nexport function usePartnerCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UsePartnerCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnCampaigns(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, turtleDeals, type TurtleDealsOptions, type TurtleDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePartnerDeals(\n options?: TurtleDealsOptions,\n { config, queryClient }: UsePartnerDealsOptions = {},\n): UseQueryResult<TurtleDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-deals\",\n options?.status,\n options?.protocol,\n options?.ids,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n const result = await turtleDeals(options || {}, config ?? defaultConfig);\n return result;\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, geocheck, type GeoCheckResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseGeocheckOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useGeocheck(\n { config, queryClient }: UseGeocheckOptions = {},\n): UseQueryResult<GeoCheckResponse> {\n const defaultConfig = useConfig();\n\n const query = useQuery({\n queryKey: [\"geocheck\"],\n queryFn: async () => {\n return await geocheck(config ?? defaultConfig);\n },\n staleTime: 5 * 60 * 1000, // 5 minutes\n gcTime: 10 * 60 * 1000, // 10 minutes\n refetchOnWindowFocus: false,\n retry: 1,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { mergeQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { opportunitiesQueries } from \"./opportunities/queries\";\nimport { earnOpportunitiesQueries } from \"./earn-opportunities/queries\";\nimport { earnRouteQueries } from \"./earn-route/queries\";\nimport { earnMembershipQueries } from \"./earn-membership/queries\";\nimport { earnDepositsQueries } from \"./earn-deposits/queries\";\nimport { productsQueries } from \"./products/queries\";\nimport { ensoBalancesQueries } from \"./enso-balances/queries\";\nimport { widgetQueries } from \"./widget/queries\";\n\n// Merged query keys for cache invalidation\nexport const queries = mergeQueryKeys(\n opportunitiesQueries,\n earnOpportunitiesQueries,\n earnRouteQueries,\n earnMembershipQueries,\n earnDepositsQueries,\n productsQueries,\n ensoBalancesQueries,\n widgetQueries\n);\n\n// Features - Earn API\nexport * from \"./earn-opportunities\";\nexport * from \"./earn-route\";\nexport * from \"./earn-membership\";\nexport * from \"./earn-deposits\";\nexport * from \"./enso-balances\";\n\n// Features\nexport * from \"./opportunities\";\nexport * from \"./products\";\nexport * from \"./balance\";\nexport * from \"./widget\";\n\n// Shared schemas\nexport * from \"./schemas/shared\";\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getOpportunities, getOpportunityById } from \"./api\";\nimport type { OpportunityFilters } from \"./schema\";\n\nexport const opportunitiesQueries = createQueryKeys(\"opportunities\", {\n // Get all opportunities (no filters)\n all: {\n queryKey: null,\n queryFn: () => getOpportunities(),\n },\n\n // Get opportunities with filters\n list: (filters?: OpportunityFilters) => ({\n queryKey: [{ filters }],\n queryFn: () => getOpportunities(filters),\n }),\n\n // Get single opportunity by ID\n byId: (id: string) => ({\n queryKey: [id],\n queryFn: () => getOpportunityById(id),\n }),\n});\n","export const API_BASE_URL = \"https://api.turtle.xyz\";\nexport const EARN_BASE_URL = \"https://earn.turtle.vision\";\n\nexport type ApiDomain = \"api\" | \"earn\" | \"custom\";\n\nexport interface ApiClientOptions<TDomain extends ApiDomain = \"api\"> extends RequestInit {\n debug?: boolean;\n domain?: TDomain;\n baseUrl?: TDomain extends \"custom\" ? string : never;\n}\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public status: number,\n public response?: unknown\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nconst getEarnUrl = () => {\n return process.env.NEXT_PUBLIC_EARN_URL || process.env.VITE_EARN_URL || EARN_BASE_URL;\n};\n\nconst getApiUrl = () => {\n return process.env.NEXT_PUBLIC_API_URL || process.env.VITE_API_URL || API_BASE_URL;\n};\n\n/**\n * Lightweight API client with automatic JSON parsing and error handling\n * @param endpoint - API endpoint path (e.g., \"/turtle/opportunities\")\n * @param options - Fetch options + debug flag + domain selection\n * @returns Parsed JSON response as unknown (validate with Zod later)\n */\nexport async function apiClient<TDomain extends ApiDomain = \"api\">(\n endpoint: string,\n options?: ApiClientOptions<TDomain>\n): Promise<unknown> {\n const { debug, domain = \"api\", baseUrl, ...fetchOptions } = options ?? {};\n\n const resolvedBaseUrl =\n domain === \"earn\" ? getEarnUrl() : domain === \"custom\" ? baseUrl : getApiUrl();\n const url = `${resolvedBaseUrl}${endpoint}`;\n\n if (debug) {\n console.log(\"[API Request]\", {\n method: fetchOptions.method ?? \"GET\",\n url,\n headers: fetchOptions.headers,\n body: fetchOptions.body,\n });\n }\n\n try {\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n ...fetchOptions.headers,\n },\n ...fetchOptions,\n });\n\n // Parse response body\n const data = await response.json();\n\n if (debug) {\n console.log(\"[API Response]\", {\n status: response.status,\n ok: response.ok,\n data,\n });\n }\n\n if (!response.ok) {\n throw new ApiError(\n `API error: ${response.status} ${response.statusText}`,\n response.status,\n data\n );\n }\n\n return data;\n } catch (error) {\n if (debug) {\n console.error(\"[API Error]\", error);\n }\n\n // Re-throw ApiError\n if (error instanceof ApiError) {\n throw error;\n }\n\n // Wrap other errors (network, JSON parse, etc)\n throw new ApiError(error instanceof Error ? error.message : \"Unknown error\", 0, error);\n }\n}\n","import { z } from \"zod\";\n\nexport const chainSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n chainId: z.string(),\n logoUrl: z.string(),\n ecosystem: z.string(),\n status: z.string(),\n explorerUrl: z.string(),\n});\n\nexport const tokenSchema = z.object({\n id: z.string(),\n name: z.string(),\n symbol: z.string(),\n address: z.string(),\n chain: chainSchema,\n decimals: z.number(),\n logoUrl: z.string(),\n isNative: z.boolean(),\n priceUsd: z.number(),\n});\n\nexport const organizationSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().nullable(),\n landingUrl: z.string().optional().nullable(),\n iconUrl: z.string().optional().nullable(),\n organizationType: z.string().optional().nullable(),\n turtleRefCode: z.string().optional().nullable(),\n twitterHandle: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n featured: z.boolean().optional().nullable(),\n});\n\nexport const productSchema = z.object({\n id: z.string(),\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n organization: organizationSchema,\n createdAt: z.string().optional().nullable(),\n});\n\n// Vault Configuration Schema - matching backend\nexport const vaultConfigSchema = z.object({\n id: z.string().uuid().optional(),\n infraProvider: organizationSchema.optional().nullable(),\n curator: organizationSchema.optional().nullable(),\n withdrawalCooldownSecs: z.number().int().min(0).optional().nullable(),\n withdrawalContractAddress: z.string().optional().nullable(),\n withdrawalDetails: z.any().optional().nullable(),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n performanceFee: z.number().min(0).max(100).optional().nullable(),\n managementFee: z.number().min(0).max(100).optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\n// Lending Configuration Schema - matching backend\nexport const lendingConfigSchema = z.object({\n id: z.string().uuid().optional(),\n protocol: z.object({ id: z.string() }),\n marketAddress: z.string().min(1, \"Market address is required\"),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\nexport const incentiveSchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n iconUrl: z.string(),\n rewardType: z.string(),\n rewardTypeName: z.string(),\n boostPct: z.number().nullable(),\n totalCapacity: z.number().nullable(),\n maxCapacityPerLP: z.number().nullable(),\n lockup: z.string().nullable(),\n minCommitment: z.number().nullable(),\n baseYieldTarget: z.number().nullable(),\n baseYieldSource: z.string().nullable(),\n incentiveYieldTarget: z.number().nullable(),\n fdvEstimate: z.number().nullable(),\n isIncentiveYieldGuaranteed: z.boolean().nullable(),\n tokenSupplyAllocation: z.number().nullable(),\n yield: z.number().nullable(),\n});\n\n// Opportunity Type Enum\nconst opportunityTypeEnum = z.enum([\"vault\", \"lending\", \"staking\"]);\n\n// Opportunity Status Enum\nconst opportunityStatusEnum = z.enum([\"active\", \"paused\", \"deprecated\"]);\n\n// Main Opportunity Schema - matching backend API exactly\nexport const opportunitySchema = z.object({\n id: z.string().uuid().optional(),\n name: z.string(),\n shortName: z.string(),\n type: opportunityTypeEnum,\n description: z.string().optional().default(\"\"),\n curator: z.string().optional().default(\"\"),\n tvl: z.number().min(0, \"TVL must be positive\"),\n featured: z.boolean().optional().default(false),\n featuredOrder: z.number().int().optional().nullable(),\n originalConfig: z.any().optional().nullable(),\n exposures: z.array(z.string()).optional().default([]),\n status: opportunityStatusEnum.optional().default(\"active\"),\n statusReason: z.string().optional().default(\"\"),\n depositDisabled: z.boolean().optional().default(false),\n depositDisabledReason: z.string().optional().default(\"\"),\n withdrawalDisabled: z.boolean().optional().default(false),\n withdrawalDisabledReason: z.string().optional().default(\"\"),\n docsUrl: z.string().optional().nullable(),\n auditsUrl: z.string().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n\n // Relationships\n depositTokens: z.array(tokenSchema),\n baseTokens: z.union([z.null(), tokenSchema]),\n receiptToken: z.union([z.null(), tokenSchema]),\n incentives: z.array(incentiveSchema),\n products: z.array(productSchema),\n vaultConfig: vaultConfigSchema.optional().nullable(),\n lendingConfig: lendingConfigSchema.optional().nullable(),\n\n // Will be deprecated\n token: tokenSchema,\n exposure: z.array(z.string()),\n explorerUrl: z.string().nullable(),\n});\n\nexport type Chain = z.infer<typeof chainSchema>;\nexport type Token = z.infer<typeof tokenSchema>;\nexport type Organization = z.infer<typeof organizationSchema>;\nexport type Product = z.infer<typeof productSchema>;\nexport type VaultConfig = z.infer<typeof vaultConfigSchema>;\nexport type LendingConfig = z.infer<typeof lendingConfigSchema>;\nexport type Incentive = z.infer<typeof incentiveSchema>;\nexport type Opportunity = z.infer<typeof opportunitySchema>;\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\nexport const opportunityFiltersSchema = z.object({\n tokenId: z.string().uuid().optional(),\n chain: z.string().optional(),\n productId: z.string().uuid().optional(),\n});\nexport type OpportunityFilters = z.infer<typeof opportunityFiltersSchema>;\n\nexport const opportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema),\n total: z.number().optional(),\n});\n\nexport type OpportunitiesResponse = z.infer<typeof opportunitiesResponseSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport type { OpportunityFilters, OpportunitiesResponse } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\nimport { opportunitySchema } from \"../schemas/shared\";\nimport { opportunitiesResponseSchema } from \"./schema\";\n\n// GET /turtle/opportunities\nexport async function getOpportunities(\n filters?: OpportunityFilters,\n options?: { debug?: boolean }\n): Promise<OpportunitiesResponse> {\n const params = new URLSearchParams();\n\n if (filters?.tokenId) params.append(\"tokenId\", filters.tokenId);\n if (filters?.chain) params.append(\"chain\", filters.chain);\n if (filters?.productId) params.append(\"productId\", filters.productId);\n\n const queryString = params.toString();\n const endpoint = `/turtle/opportunities${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /turtle/opportunities/{id}\nexport async function getOpportunityById(\n id: string,\n options?: { debug?: boolean }\n): Promise<Opportunity> {\n const data = await apiClient(`/turtle/opportunities/${id}`, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitySchema.safeParse(data);\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunity: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnOpportunities } from \"./api\";\n\nexport const earnOpportunitiesQueries = createQueryKeys(\"earnOpportunities\", {\n all: {\n queryKey: null,\n queryFn: (context) => getEarnOpportunities(context),\n },\n});\n","import { z } from \"zod\";\nimport { chainSchema, tokenSchema } from \"../schemas/shared\";\n\n// Earn Opportunity Response Schema\nexport const earnOpportunitySchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n type: z.string(),\n estimatedApr: z.number(),\n tvl: z.number(),\n featured: z.boolean(),\n baseTokens: tokenSchema,\n depositTokens: z.array(tokenSchema).nullable(),\n receiptToken: tokenSchema,\n});\n\n// Earn Opportunities Response Schema\nexport const earnOpportunitiesResponseSchema = z.object({\n opportunities: z.array(earnOpportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type EarnOpportunity = z.infer<typeof earnOpportunitySchema>;\nexport type EarnOpportunitiesResponse = z.infer<typeof earnOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnOpportunitiesResponse } from \"./schema\";\nimport { earnOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/opportunities\nexport async function getEarnOpportunities(\n context?: QueryFunctionContext\n): Promise<EarnOpportunitiesResponse> {\n const data = await apiClient(\"/v1/opportunities/\", {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = earnOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnRoute } from \"./api\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport const earnRouteQueries = createQueryKeys(\"earnRoute\", {\n // Get earn route with specific parameters\n byParams: (params: EarnRouteParams) => ({\n queryKey: [params],\n queryFn: (context) => getEarnRoute(params, context),\n }),\n});\n","import { ethz } from \"@turtleclub/utils\";\nimport { z } from \"zod\";\n\n// Asset schemas\nexport const assetImageData = z.object({\n kind: z.literal(\"image\"),\n url: z.string(),\n alt: z.string(),\n});\n\nexport const assetERC20Data = z.object({\n kind: z.literal(\"erc20\"),\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n decimals: z.number(),\n});\n\nexport const assetData = z.discriminatedUnion(\"kind\", [assetImageData, assetERC20Data]);\n\nexport const asset = z.object({\n id: z.string().uuid(),\n name: z.string(),\n slugs: z.array(z.string()),\n tags: z.array(z.string()),\n description: z.string().nullable(),\n data: z.array(assetData),\n});\n\n// Token schema\nexport const routeToken = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\n// Router substeps\nexport const swapSubstep = z.object({\n kind: z.literal(\"swap\"),\n from: z.array(routeToken),\n to: z.array(routeToken),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const depositSubstep = z.object({\n kind: z.literal(\"deposit\"),\n vault: z.string(),\n from: z.array(routeToken),\n to: z.array(routeToken),\n amount: z.string(),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const routerSubstep = z.discriminatedUnion(\"kind\", [swapSubstep, depositSubstep]);\n\n// Transaction schema\nexport const stepTx = z.object({\n from: ethz.address(),\n to: ethz.address(),\n data: ethz.hex(),\n value: z.string(),\n gas: z.number(),\n});\n\n// Router steps\nexport const approveStep = z.object({\n kind: z.literal(\"approve\"),\n owner: z.string(),\n spender: z.string(),\n token: routeToken,\n amount: z.string(),\n tx: stepTx,\n});\n\nexport const ensoStep = z.object({\n kind: z.literal(\"enso\"),\n substeps: z.array(routerSubstep),\n tx: stepTx,\n asset: asset.nullable(),\n});\n\nexport const routerStep = z.discriminatedUnion(\"kind\", [approveStep, ensoStep]);\n\n// Earn Route Response\nexport const earnRouteResponseSchema = z.object({\n steps: z.array(routerStep),\n amount_out: z.string(),\n price_impact: z.number().nullable(),\n});\n\n// Earn Route Request Params\nexport interface EarnRouteParams {\n user: string;\n chain: number;\n slippage: number;\n token_in: string;\n token_out: string;\n amount: string;\n distributor_id: string;\n referral_code?: string;\n // @deprecated productId is not supported anymore\n id?: string;\n}\n\nexport type AssetImageData = z.infer<typeof assetImageData>;\nexport type AssetERC20Data = z.infer<typeof assetERC20Data>;\nexport type AssetData = z.infer<typeof assetData>;\nexport type Asset = z.infer<typeof asset>;\nexport type RouteToken = z.infer<typeof routeToken>;\nexport type SwapSubstep = z.infer<typeof swapSubstep>;\nexport type DepositSubstep = z.infer<typeof depositSubstep>;\nexport type RouterSubstep = z.infer<typeof routerSubstep>;\nexport type StepTx = z.infer<typeof stepTx>;\nexport type ApproveStep = z.infer<typeof approveStep>;\nexport type EnsoStep = z.infer<typeof ensoStep>;\nexport type RouterStep = z.infer<typeof routerStep>;\nexport type EarnRouteResponse = z.infer<typeof earnRouteResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnRouteResponse, EarnRouteParams } from \"./schema\";\nimport { earnRouteResponseSchema } from \"./schema\";\n\n// GET /v1/route\nexport async function getEarnRoute(\n params: EarnRouteParams,\n context?: QueryFunctionContext\n): Promise<EarnRouteResponse> {\n const searchParams = new URLSearchParams({\n user: params.user,\n chain: params.chain.toString(),\n slippage: params.slippage.toString(),\n token_in: params.token_in,\n token_out: params.token_out,\n amount: params.amount,\n distributor_id: params.distributor_id,\n ...(params.referral_code && { referral_code: params.referral_code }),\n ...(params.id && { id: params.id }),\n });\n\n const response = await apiClient(`/v1/route/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n }) as { data: unknown };\n\n const data = response.data;\n const result = earnRouteResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn route: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { checkMembership } from \"./api\";\nimport type { CheckMembershipParams } from \"./schema\";\n\nexport const earnMembershipQueries = createQueryKeys(\"earnMembership\", {\n // Check membership status\n check: (params: CheckMembershipParams) => ({\n queryKey: [params],\n queryFn: (context) => checkMembership(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Wallet Ecosystem Enum\nexport const walletEcosystemEnum = z.enum([\"evm\", \"solana\", \"ton\"]);\n\n// GET /v1/membership/ - Check Membership\nexport interface CheckMembershipParams {\n address: string;\n walletEcosystem?: \"evm\" | \"solana\" | \"ton\";\n}\n\nexport const checkMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n});\n\n// POST /v1/membership/agreement - Create Agreement\nexport const createAgreementRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: walletEcosystemEnum,\n url: z.string(),\n chainId: z.string().default(\"1\"),\n});\n\nexport const createAgreementResponseSchema = z.object({\n message: z.string(),\n nonce: z.string(),\n});\n\n// POST /v1/membership/ - Create Membership\nexport const createMembershipRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: z.string(),\n signature: z.string(),\n nonce: z.string(),\n});\n\nexport const createMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n error: z.string().optional(),\n});\n\nexport type WalletEcosystem = z.infer<typeof walletEcosystemEnum>;\nexport type CheckMembershipResponse = z.infer<typeof checkMembershipResponseSchema>;\nexport type CreateAgreementRequest = z.infer<typeof createAgreementRequestSchema>;\nexport type CreateAgreementResponse = z.infer<typeof createAgreementResponseSchema>;\nexport type CreateMembershipRequest = z.infer<typeof createMembershipRequestSchema>;\nexport type CreateMembershipResponse = z.infer<typeof createMembershipResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type {\n CheckMembershipParams,\n CheckMembershipResponse,\n CreateAgreementRequest,\n CreateAgreementResponse,\n CreateMembershipRequest,\n CreateMembershipResponse,\n} from \"./schema\";\nimport {\n checkMembershipResponseSchema,\n createAgreementResponseSchema,\n createMembershipResponseSchema,\n} from \"./schema\";\n\n// GET /v1/membership/ - Check if wallet is a member\nexport async function checkMembership(\n params: CheckMembershipParams,\n context?: QueryFunctionContext\n): Promise<CheckMembershipResponse> {\n const searchParams = new URLSearchParams({\n address: params.address,\n ...(params.walletEcosystem && { walletEcosystem: params.walletEcosystem }),\n });\n\n const data = await apiClient(`/v1/membership/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = checkMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse check membership: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/agreement - Create membership agreement\nexport async function createMembershipAgreement(\n request: CreateAgreementRequest\n): Promise<CreateAgreementResponse> {\n const data = await apiClient(\"/v1/membership/agreement\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createAgreementResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create agreement: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/ - Create membership\nexport async function createMembership(\n request: CreateMembershipRequest\n): Promise<CreateMembershipResponse> {\n const data = await apiClient(\"/v1/membership/\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create membership: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getDeposits } from \"./api\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport const earnDepositsQueries = createQueryKeys(\"earnDeposits\", {\n byParams: (params: GetDepositsParams) => ({\n queryKey: [params],\n queryFn: (context) => getDeposits(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Deposit Schema\nexport const depositSchema = z.object({\n chain: z.number().int(),\n deposited_amount_usd: z.string(),\n deposited_token_address: z.string(),\n deposited_token_decimals: z.number().int(),\n deposited_token_logo: z.string(),\n deposited_token_name: z.string(),\n deposited_token_symbol: z.string(),\n deposited_value: z.string(),\n depositor: z.string(),\n target: z.string(),\n timestamp: z.string(),\n tx_hash: z.string(),\n});\n\n// Deposits Response Schema\nexport const depositsResponseSchema = z.object({\n deposits: z.array(depositSchema).nullable(),\n});\n\n// Deposits Request Params\nexport interface GetDepositsParams {\n distributor_id: string;\n depositor?: string;\n limit?: number;\n offset?: number;\n}\n\nexport type Deposit = z.infer<typeof depositSchema>;\nexport type DepositsResponse = z.infer<typeof depositsResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetDepositsParams, DepositsResponse } from \"./schema\";\nimport { depositsResponseSchema } from \"./schema\";\n\n// GET /v1/deposit/{distributor_id}\nexport async function getDeposits(\n params: GetDepositsParams,\n context?: QueryFunctionContext\n): Promise<DepositsResponse> {\n const { distributor_id, depositor, limit, offset } = params;\n\n const searchParams = new URLSearchParams({\n ...(depositor && { depositor }),\n ...(limit && { limit: limit.toString() }),\n ...(offset && { offset: offset.toString() }),\n });\n\n const queryString = searchParams.toString();\n const endpoint = `/v1/deposit/${distributor_id}${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = depositsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse deposits: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { createProduct, deleteProduct, getProducts, updateProduct } from \"./api\";\nimport { ProductCreateInput, ProductUpdateInput } from \"./schema\";\n\nexport const productsQueries = createQueryKeys(\"products\", {\n // Get all products (no filters)\n all: {\n queryKey: null,\n queryFn: () => getProducts(),\n },\n\n // Get single product by ID\n byId: (id: string) => ({\n queryKey: [id],\n // Replace by true query then\n queryFn: async () => {\n const products = await getProducts();\n return products.products.find((product) => product.id === id);\n },\n }),\n});\n","import { z } from \"zod\";\nimport { productSchema } from \"../schemas/shared\";\nimport { organization } from \"@turtleclub/api\";\n\nexport const productsResponseSchema = z.object({\n products: z.array(productSchema),\n total: z.number().optional(),\n});\n\nexport type ProductsResponse = z.infer<typeof productsResponseSchema>;\n\nexport const productCreateInputSchema = z.object({\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n\n // Relations\n organizationId: z.string().uuid(),\n});\n\nexport type ProductCreateInput = z.infer<typeof productCreateInputSchema>;\n\nexport const productUpdateInputSchema = productCreateInputSchema.extend({\n id: z.string().uuid(),\n});\n\nexport type ProductUpdateInput = z.infer<typeof productUpdateInputSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport { Product, productSchema } from \"../schemas/shared\";\nimport {\n ProductCreateInput,\n ProductsResponse,\n productsResponseSchema,\n ProductUpdateInput,\n} from \"./schema\";\n\n// GET /admin/products\nexport async function getProducts(options?: { debug?: boolean }): Promise<ProductsResponse> {\n const params = new URLSearchParams();\n\n const queryString = params.toString();\n const endpoint = `/admin/products${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse products: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /admin/products/:id\n\n// POST /admin/products\nexport async function createProduct(\n input: ProductCreateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products`;\n\n const data = await apiClient(endpoint, {\n method: \"POST\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to create product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// PUT /admin/products/:id\nexport async function updateProduct(\n input: ProductUpdateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products/${input.id}`;\n\n const data = await apiClient(endpoint, {\n method: \"PUT\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to update product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// DELETE /admin/products/:id\nexport async function deleteProduct(id: string, options?: { debug?: boolean }): Promise<void> {\n const endpoint = `/admin/products/${id}`;\n\n const data = await apiClient(endpoint, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to delete product: ${result.error.message}`);\n }\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWalletBalances } from \"./api\";\nimport type { GetWalletBalancesParams } from \"./schemas\";\n\nexport const ensoBalancesQueries = createQueryKeys(\"ensoBalances\", {\n byParams: (params: GetWalletBalancesParams) => ({\n queryKey: [params],\n queryFn: (context) => getWalletBalances(params, context),\n }),\n});\n","import { z } from \"zod\";\n\nexport const balanceTokenSchema = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\nexport const walletBalanceSchema = z.object({\n token: balanceTokenSchema,\n amount: z.string(),\n});\n\nexport interface GetWalletBalancesParams {\n user: string;\n chain: number;\n}\n\nexport const walletBalancesResponseSchema = z.object({\n balances: z.array(walletBalanceSchema),\n});\n\nexport type BalanceToken = z.infer<typeof balanceTokenSchema>;\nexport type WalletBalance = z.infer<typeof walletBalanceSchema>;\nexport type WalletBalancesResponse = z.infer<typeof walletBalancesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetWalletBalancesParams, WalletBalancesResponse } from \"./schemas\";\nimport { walletBalancesResponseSchema } from \"./schemas\";\n\n// GET /v1/api/wallet_balances\nexport async function getWalletBalances(\n params: GetWalletBalancesParams,\n context?: QueryFunctionContext\n): Promise<WalletBalancesResponse> {\n const { user, chain } = params;\n\n const searchParams = new URLSearchParams({\n user,\n chain: chain.toString(),\n });\n\n const endpoint = `/v1/api/wallet_balances?${searchParams.toString()}`;\n\n const data = await apiClient<\"custom\">(endpoint, {\n method: \"GET\",\n domain: \"custom\",\n baseUrl: \"https://earn.turtle.vision\",\n signal: context?.signal,\n });\n\n const result = walletBalancesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse wallet balances: ${result.error.message}`);\n }\n\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWidgetOpportunities } from \"./api\";\n\nexport const widgetQueries = createQueryKeys(\"widget\", {\n opportunities: (distributorId: string) => ({\n queryKey: [distributorId],\n queryFn: (context) => getWidgetOpportunities(distributorId, context),\n }),\n});\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\n// Widget Opportunities Response Schema\nexport const widgetOpportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type WidgetOpportunitiesResponse = z.infer<typeof widgetOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { WidgetOpportunitiesResponse } from \"./schema\";\nimport { widgetOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/widget/{distributorId}/opportunities\nexport async function getWidgetOpportunities(\n distributorId: string,\n context?: QueryFunctionContext\n): Promise<WidgetOpportunitiesResponse> {\n const data = await apiClient(`/widget/${distributorId}/opportunities`, {\n method: \"GET\",\n signal: context?.signal,\n });\n\n const result = widgetOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse widget opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnOpportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\n\nexport function useEarnOpportunities() {\n return useQuery({\n ...earnOpportunitiesQueries.all,\n ...queryDefaults,\n });\n}\n","// Default TanStack Query configuration\n// Override per-query as needed\n\nexport const queryDefaults = {\n staleTime: 5 * 60 * 1000, // 5 minutes - data is fresh\n gcTime: 10 * 60 * 1000, // 10 minutes - cache garbage collection (formerly cacheTime)\n retry: 1, // Retry failed requests once\n refetchOnWindowFocus: false, // Don't refetch on tab focus\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnRouteQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport interface UseEarnRouteOptions {\n params?: EarnRouteParams;\n enabled?: boolean;\n}\n\nexport function useEarnRoute({ params, enabled = true }: UseEarnRouteOptions) {\n return useQuery({\n // Null assertion is safe because the query is enable only if params is provided\n ...earnRouteQueries.byParams(params!),\n ...queryDefaults,\n enabled: !!params && enabled,\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { earnMembershipQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { createMembershipAgreement, createMembership } from \"./api\";\nimport type {\n CheckMembershipParams,\n CreateAgreementRequest,\n CreateMembershipRequest,\n} from \"./schema\";\n\n// Query hook for checking membership\nexport interface UseCheckMembershipOptions {\n params: CheckMembershipParams;\n enabled?: boolean;\n}\n\nexport function useCheckMembership({\n params,\n enabled = true,\n}: UseCheckMembershipOptions) {\n return useQuery({\n ...earnMembershipQueries.check(params),\n ...queryDefaults,\n enabled,\n });\n}\n\n// Mutation hook for creating membership agreement\nexport function useCreateMembershipAgreement() {\n return useMutation({\n mutationFn: (request: CreateAgreementRequest) =>\n createMembershipAgreement(request),\n });\n}\n\n// Mutation hook for creating membership\nexport function useCreateMembership() {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (request: CreateMembershipRequest) => createMembership(request),\n onSuccess: (data, variables) => {\n queryClient.invalidateQueries({\n queryKey: earnMembershipQueries.check({\n address: variables.address,\n walletEcosystem: variables.walletEcosystem as \"evm\" | \"solana\" | \"ton\",\n }).queryKey,\n });\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnDepositsQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport interface UseDepositsOptions {\n params: GetDepositsParams;\n enabled?: boolean;\n}\n\nexport function useDeposits({ params, enabled = true }: UseDepositsOptions) {\n return useQuery({\n ...earnDepositsQueries.byParams(params),\n ...queryDefaults,\n enabled,\n });\n}\n","import { useEffect, useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport type { Asset } from \"@turtleclub/ui\";\nimport { ensoBalancesQueries } from \"./queries\";\nimport type { WalletBalancesResponse } from \"./schemas\";\n\ninterface MultiChainBalancesParams {\n chainIds: number[];\n address?: string;\n}\n\ninterface MultiChainBalancesResult {\n balances: Record<number, WalletBalancesResponse[\"balances\"]>;\n isLoading: boolean;\n error: Error | null;\n refetchAll: () => void;\n}\n\nexport function useMultiChainBalances({\n chainIds,\n address,\n}: MultiChainBalancesParams): MultiChainBalancesResult {\n const queries = useQueries({\n queries: chainIds.map((chainId) => ({\n ...ensoBalancesQueries.byParams({ user: address || \"\", chain: chainId }),\n enabled: !!address,\n staleTime: 60 * 1000,\n refetchInterval: 3 * 60 * 1000,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n })),\n });\n\n const isLoading = queries.some((query) => query.isLoading);\n const error = queries.find((query) => query.error)?.error || null;\n\n const refetchAll = () => {\n queries.forEach((query) => {\n query.refetch();\n });\n };\n\n // Aggregate results\n const balances = useMemo(() => {\n const balanceMap: Record<number, WalletBalancesResponse[\"balances\"]> = {};\n\n queries.forEach((query, index) => {\n const chainId = chainIds[index];\n if (query.data && chainId !== undefined) {\n balanceMap[chainId] = query.data.balances;\n }\n });\n\n return balanceMap;\n }, [queries, chainIds]);\n\n return {\n balances,\n isLoading,\n error,\n refetchAll,\n };\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport { opportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { OpportunitiesResponse, OpportunityFilters } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\n\nexport interface UseOpportunitiesOptions\n extends Omit<UseQueryOptions<OpportunitiesResponse>, \"queryKey\" | \"queryFn\"> {\n filters?: OpportunityFilters;\n}\n\nexport function useOpportunities(options?: UseOpportunitiesOptions) {\n return useQuery({\n ...opportunitiesQueries.all,\n ...queryDefaults,\n select: (data: OpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n .map((opportunity) => opportunity.receiptToken?.chain)\n .filter((chain) => chain !== undefined)\n .map((chain) => [chain.id, chain])\n );\n\n const chains = Array.from(uniqueChainsMap.values());\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n\nexport interface UseOpportunityOptions\n extends Omit<UseQueryOptions<Opportunity>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useOpportunity({ id, ...options }: UseOpportunityOptions) {\n return useQuery({\n ...opportunitiesQueries.byId(id),\n ...queryDefaults,\n select: (data: Opportunity) => {\n return {\n ...data,\n chain: data.receiptToken?.chain,\n };\n },\n });\n}\n","import {\n useMutation,\n UseMutationOptions,\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { ProductCreateInput, ProductsResponse, ProductUpdateInput } from \"./schema\";\nimport type { Product } from \"../schemas/shared\";\nimport { productsQueries } from \"./queries\";\nimport { createProduct, deleteProduct, updateProduct } from \"./api\";\n\nexport interface UseProductsOptions\n extends Omit<UseQueryOptions<ProductsResponse>, \"queryKey\" | \"queryFn\"> {}\n\nexport function useProducts(options?: UseProductsOptions) {\n return useQuery({ ...productsQueries.all, ...queryDefaults });\n}\n\nexport interface UseProductOptions extends Omit<UseQueryOptions<Product>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useProduct({ id, ...options }: UseProductOptions) {\n return useQuery({ ...productsQueries.byId(id), ...queryDefaults });\n}\n\nexport interface UseCreateProductOptions\n extends Omit<UseMutationOptions<ProductCreateInput>, \"mutationFn\"> {}\n\nexport function useCreateProduct({ ...options }: UseCreateProductOptions) {\n return useMutation({ mutationFn: createProduct });\n}\n\nexport interface UseUpdateProductOptions\n extends Omit<UseMutationOptions<ProductUpdateInput>, \"mutationFn\"> {}\n\nexport function useUpdateProduct({ ...options }: UseUpdateProductOptions) {\n return useMutation({ mutationFn: updateProduct });\n}\n\nexport interface UseDeleteProductOptions extends Omit<UseMutationOptions<string>, \"mutationFn\"> {}\n\nexport function useDeleteProduct({ ...options }: UseDeleteProductOptions) {\n return useMutation({ mutationFn: deleteProduct });\n}\n","import { useCallback, useMemo } from \"react\";\nimport { parseUnits } from \"viem\";\nimport { calculateUsdValue, checkInsufficientBalance, calculateMaxAmount } from \"@turtleclub/utils\";\n\ninterface UseTokenBalanceProps {\n token:\n | {\n balance: string;\n decimals: number;\n price?: number;\n }\n | null\n | undefined;\n amount: string | undefined;\n setAmount: (amount: string | undefined) => void;\n}\n\nexport function useTokenBalance({ token, amount, setAmount }: UseTokenBalanceProps) {\n const usdValue = useMemo(() => calculateUsdValue(amount, token?.price), [amount, token?.price]);\n\n const hasInsufficientBalance = useMemo(\n () => checkInsufficientBalance(token, amount),\n [token, amount]\n );\n\n const handleMaxClick = useCallback(() => {\n if (!token) return;\n const maxAmount = calculateMaxAmount(token.balance, token.decimals);\n setAmount(maxAmount);\n }, [token, setAmount]);\n\n const amountBigInt = useMemo(() => {\n if (!token || !amount) return undefined;\n try {\n return parseUnits(amount, token.decimals);\n } catch {\n return undefined;\n }\n }, [amount, token]);\n\n return {\n usdValue,\n hasInsufficientBalance,\n handleMaxClick,\n amountBigInt,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { widgetQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { WidgetOpportunitiesResponse } from \"./schema\";\n\nexport function useWidgetOpportunities(distributorId: string) {\n return useQuery({\n ...widgetQueries.opportunities(distributorId),\n ...queryDefaults,\n select: (data: WidgetOpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n ?.map((opportunity) => opportunity.receiptToken?.chain)\n ?.filter((chain) => chain !== undefined)\n ?.map((chain) => [chain.id, chain]) || []\n );\n\n const chains = Array.from(uniqueChainsMap.values()) || [];\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n"],"mappings":";AACA,SAAS,qBAAqB;AAEvB,SAAS,YAAoB;AAElC,SAAO;AACT;;;ACNA,SAAS,kCAAkC;AAC3C,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AAE5B,IAAM,qBAAqB,IAAI,YAAY;AAAA,EAChD,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,sBAAsB;AAAA,IACxB;AAAA,EACF;AACF,CAAC;AAGD,IAAI,OAAO,WAAW,aAAa;AACjC,QAAM,wBAAwB,2BAA2B;AAAA,IACvD,SAAS,OAAO;AAAA,IAChB,KAAK;AAAA,EACP,CAAC;AAED,qBAAmB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,EACb,CAAC;AACH;;;ACvBA,SAA2B,gBAAqC;AAChE,SAAsB,oBAA+C;AAS9D,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AACF,IAA6B,CAAC,GAAgD;AAC5E,QAAMA,iBAAgB,UAAU;AAEhC,QAAM,QAAQ;AAAA,IACZ;AAAA,MACE,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,YAAY;AACnB,eAAO,MAAM,aAAa,UAAUA,cAAa;AAAA,MACnD;AAAA,MACA,WAAW,IAAI,KAAK;AAAA,MACpB,iBAAiB,IAAI,KAAK;AAAA,IAC5B;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;;;AC7BA,SAA2B,YAAAC,iBAAqC;AAChE,SAAsB,cAAkC;AASjD,SAAS,UACd,SACA,EAAE,QAAQ,YAAY,IAAsB,CAAC,GACb;AAChC,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,UAAS;AAAA,IACrB,UAAU,CAAC,UAAU,SAAS,IAAI;AAAA,IAClC,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAM,OAAO,SAAS,UAAUD,cAAa;AAAA,IACtD;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,iBAAiB,IAAI,KAAK;AAAA,IAC1B,sBAAsB;AAAA,EACxB,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;AChCA,SAA2B,YAAAE,iBAAqC;AAChE,SAAsB,kBAA0C;AASzD,SAAS,cACd,SACA,EAAE,QAAQ,YAAY,IAA0B,CAAC,GASjD;AACA,QAAMC,iBAAgB,UAAU;AAEhC,QAAM,cAAcC;AAAA,IAClB;AAAA,MACE,UAAU,CAAC,eAAe,SAAS,QAAQ;AAAA,MAC3C,SAAS,YAAY;AACnB,eAAO,MAAM,WAAW,UAAUD,cAAa;AAAA,MACjD;AAAA,MACA,QAAQ,CAAC,SAAS;AAChB,YAAI,CAAC,KAAM,QAAO,CAAC;AACnB,cAAM,SAAS,OAAO,QAAQ,KAAK,QAAQ,EACxC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,cAAI,CAAC,SAAS,SAAS,SAAS,GAAG,EAAG,QAAO;AAC7C,iBAAO;AAAA,YACL,UAAU;AAAA,YACV,KAAK,MAAM;AAAA,YACX,UAAU,MAAM;AAAA,YAChB,SAAS,MAAM;AAAA,UACjB;AAAA,QACF,CAAC,EACA,OAAO,OAAO;AAOjB,eAAO;AAAA,MACT;AAAA,MACA,WAAW,IAAI,KAAK;AAAA,MACpB,sBAAsB;AAAA,MACtB,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,QAAQ,KAAK,KAAK;AAAA;AAAA,IACpB;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;;;AC7DA,SAA2B,YAAAE,iBAAqC;AAChE,SAAsB,yBAAwF;AASvG,SAAS,qBACd,SACA,EAAE,QAAQ,YAAY,IAAiC,CAAC,GACN;AAClD,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,UAAS;AAAA,IACrB,UAAU,CAAC,qBAAqB,SAAS,cAAc;AAAA,IACvD,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAM,kBAAkB,SAAS,UAAUD,cAAa;AAAA,IACjE;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,iBAAiB,IAAI,KAAK;AAAA,EAC5B,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;AC/BA,SAA2B,YAAAE,iBAAqC;AAChE,SAAsB,0BAA2F;AAS1G,SAAS,sBACd,SACA,EAAE,QAAQ,YAAY,IAAkC,CAAC,GACN;AACnD,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,UAAS;AAAA,IACrB,UAAU,CAAC,sBAAsB,SAAS,eAAe;AAAA,IACzD,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAM,mBAAmB,SAAS,UAAUD,cAAa;AAAA,IAClE;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,iBAAiB,IAAI,KAAK;AAAA,IAC1B,cAAc;AAAA,EAChB,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;AChCA,SAA2B,YAAAE,iBAAqC;AAChE,SAAsB,qBAA4E;AAS3F,SAAS,iBACd,SACA,EAAE,QAAQ,YAAY,IAA6B,CAAC,GACN;AAC9C,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,UAAS;AAAA,IACrB,UAAU,CAAC,iBAAiB,SAAS,IAAI;AAAA,IACzC,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAM,cAAc,SAAS,UAAUD,cAAa;AAAA,IAC7D;AAAA,IACA;AAAA,IACA,iBAAiB,IAAI,KAAK;AAAA,EAC5B,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;AC9BA,SAA2B,YAAAE,iBAAqC;AAChE,SAAsB,cAAAC,mBAAmE;AASlF,SAAS,cACd,SACA,EAAE,QAAQ,YAAY,IAA0B,CAAC,GACN;AAC3C,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,UAAS;AAAA,IACrB,UAAU,CAAC,cAAc,SAAS,QAAQ;AAAA,IAC1C,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAMC,YAAW,SAAS,UAAUF,cAAa;AAAA,IAC1D;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,iBAAiB,IAAI,KAAK;AAAA,EAC5B,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;AC/BA;AAAA,EAEE;AAAA,OAGK;AACP,SAAsB,cAAkC;AASjD,SAAS,UACd,SACA,EAAE,QAAQ,YAAY,IAAsB,CAAC,GACc;AAC3D,QAAMG,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,WAAW;AAAA,IACf;AAAA,MACE,YAAY,OAAO,cAAsB;AACvC,YAAI,CAAC,QAAS,QAAO;AAErB,eAAO,MAAM,OAAO,EAAE,GAAG,SAAS,UAAU,GAAG,UAAUA,cAAa;AAAA,MACxE;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;;;AClCA,SAA2B,YAAAC,iBAAqC;AAChE,SAAsB,qBAA6E;AAS5F,SAAS,iBACd,SACA,EAAE,QAAQ,YAAY,IAA6B,CAAC,GACH;AACjD,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU;AAEhB,QAAM,QAAQC,UAAS;AAAA,IACrB,UAAU;AAAA,MACR;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,SAAS,YAAY;AACnB,aAAO,MAAM,cAAc,WAAW,CAAC,GAAG,UAAUD,cAAa;AAAA,IACnE;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,QAAQ,KAAK,KAAK;AAAA;AAAA,EACpB,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;ACnCA,SAA2B,YAAAE,kBAAqC;AAChE,SAAsB,iBAAgE;AAS/E,SAAS,aACd,SACA,EAAE,QAAQ,YAAY,IAAyB,CAAC,GACN;AAC1C,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,WAAS;AAAA,IACrB,UAAU;AAAA,MACR;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAM,UAAU,SAAS,UAAUD,cAAa;AAAA,IACzD;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,QAAQ,KAAK,KAAK;AAAA;AAAA,EACpB,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;ACvCA,SAA2B,YAAAE,kBAAqC;AAChE,SAAsB,iBAAgE;AAS/E,SAAS,gBACd,SACA,EAAE,QAAQ,YAAY,IAAyB,CAAC,GACN;AAC1C,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,WAAS;AAAA,IACrB,UAAU;AAAA,MACR;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAM,UAAU,SAAS,UAAUD,cAAa;AAAA,IACzD;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA;AAAA,IACpB,iBAAiB;AAAA;AAAA,IACjB,sBAAsB;AAAA,EACxB,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;ACxCA,SAA2B,YAAAE,kBAAqC;AAChE;AAAA,EAEE;AAAA,OAGK;AASA,SAAS,sBACd,SACA,EAAE,QAAQ,YAAY,IAAkC,CAAC,GACN;AACnD,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC;AAAA,IACZ;AAAA,MACE,UAAU,CAAC,sBAAsB,SAAS,OAAO,SAAS,IAAI;AAAA,MAC9D,SAAS,YAAY;AACnB,YAAI,CAAC,QAAS,QAAO;AAErB,eAAO,MAAM,mBAAmB,SAAS,UAAUD,cAAa;AAAA,MAClE;AAAA,MACA;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,sBAAsB;AAAA,IACxB;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;;;ACvCA,SAA2B,YAAAE,kBAAqC;AAChE,SAAsB,iBAAAC,sBAA6E;AAa5F,SAAS,oBACd,SACA,EAAE,QAAQ,YAAY,IAAgC,CAAC,GACN;AACjD,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,WAAS;AAAA,IACrB,UAAU;AAAA,MACR;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,aAAO,MAAMC,eAAc,SAAS,UAAUF,cAAa;AAAA,IAC7D;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,QAAQ,KAAK,KAAK;AAAA;AAAA,EACpB,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;AC1CA,SAA2B,YAAAG,kBAAqC;AAChE,SAAsB,mBAAsE;AASrF,SAAS,gBACd,SACA,EAAE,QAAQ,YAAY,IAA4B,CAAC,GACP;AAC5C,QAAMC,iBAAgB,UAAU;AAChC,QAAM,UAAU,YAAY;AAE5B,QAAM,QAAQC,WAAS;AAAA,IACrB,UAAU;AAAA,MACR;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA,IACA,SAAS,YAAY;AACnB,UAAI,CAAC;AACH,eAAO;AAET,YAAM,SAAS,MAAM,YAAY,WAAW,CAAC,GAAG,UAAUD,cAAa;AACvE,aAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA,WAAW,IAAI,KAAK;AAAA,IACpB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,QAAQ,KAAK,KAAK;AAAA;AAAA,EACpB,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;ACxCA,SAA2B,YAAAE,kBAAqC;AAChE,SAAsB,gBAAuC;AAStD,SAAS,YACd,EAAE,QAAQ,YAAY,IAAwB,CAAC,GACb;AAClC,QAAMC,iBAAgB,UAAU;AAEhC,QAAM,QAAQC,WAAS;AAAA,IACrB,UAAU,CAAC,UAAU;AAAA,IACrB,SAAS,YAAY;AACnB,aAAO,MAAM,SAAS,UAAUD,cAAa;AAAA,IAC/C;AAAA,IACA,WAAW,IAAI,KAAK;AAAA;AAAA,IACpB,QAAQ,KAAK,KAAK;AAAA;AAAA,IAClB,sBAAsB;AAAA,IACtB,OAAO;AAAA,EACT,GAAG,eAAe,kBAAkB;AAEpC,SAAO;AACT;;;AC3BA,SAAS,sBAAsB;;;ACA/B,SAAS,uBAAuB;;;ACAzB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AAUtB,IAAM,WAAN,cAAuB,MAAM;AAAA,EAClC,YACE,SACO,QACA,UACP;AACA,UAAM,OAAO;AAHN;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAM,aAAa,MAAM;AACvB,SAAO,QAAQ,IAAI,wBAAwB,QAAQ,IAAI,iBAAiB;AAC1E;AAEA,IAAM,YAAY,MAAM;AACtB,SAAO,QAAQ,IAAI,uBAAuB,QAAQ,IAAI,gBAAgB;AACxE;AAQA,eAAsB,UACpB,UACA,SACkB;AAClB,QAAM,EAAE,OAAO,SAAS,OAAO,SAAS,GAAG,aAAa,IAAI,WAAW,CAAC;AAExE,QAAM,kBACJ,WAAW,SAAS,WAAW,IAAI,WAAW,WAAW,UAAU,UAAU;AAC/E,QAAM,MAAM,GAAG,eAAe,GAAG,QAAQ;AAEzC,MAAI,OAAO;AACT,YAAQ,IAAI,iBAAiB;AAAA,MAC3B,QAAQ,aAAa,UAAU;AAAA,MAC/B;AAAA,MACA,SAAS,aAAa;AAAA,MACtB,MAAM,aAAa;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAG,aAAa;AAAA,MAClB;AAAA,MACA,GAAG;AAAA,IACL,CAAC;AAGD,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,QAAI,OAAO;AACT,cAAQ,IAAI,kBAAkB;AAAA,QAC5B,QAAQ,SAAS;AAAA,QACjB,IAAI,SAAS;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,cAAc,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,QACpD,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,OAAO;AACT,cAAQ,MAAM,eAAe,KAAK;AAAA,IACpC;AAGA,QAAI,iBAAiB,UAAU;AAC7B,YAAM;AAAA,IACR;AAGA,UAAM,IAAI,SAAS,iBAAiB,QAAQ,MAAM,UAAU,iBAAiB,GAAG,KAAK;AAAA,EACvF;AACF;;;ACjGA,SAAS,SAAS;AAEX,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EAAE,OAAO;AAAA,EAClB,SAAS,EAAE,OAAO;AAAA,EAClB,WAAW,EAAE,OAAO;AAAA,EACpB,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,EAAE,OAAO;AACxB,CAAC;AAEM,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,QAAQ,EAAE,OAAO;AAAA,EACjB,SAAS,EAAE,OAAO;AAAA,EAClB,OAAO;AAAA,EACP,UAAU,EAAE,OAAO;AAAA,EACnB,SAAS,EAAE,OAAO;AAAA,EAClB,UAAU,EAAE,QAAQ;AAAA,EACpB,UAAU,EAAE,OAAO;AACrB,CAAC;AAEM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;AAEM,IAAM,gBAAgB,EAAE,OAAO;AAAA,EACpC,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,cAAc;AAAA,EACd,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;AAGM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EAC/B,eAAe,mBAAmB,SAAS,EAAE,SAAS;AAAA,EACtD,SAAS,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAChD,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACpE,2BAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1D,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/D,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9D,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;AAGM,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EAC/B,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAAA,EACrC,eAAe,EAAE,OAAO,EAAE,IAAI,GAAG,4BAA4B;AAAA,EAC7D,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;AAEM,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAM,EAAE,OAAO;AAAA,EACf,aAAa,EAAE,OAAO;AAAA,EACtB,SAAS,EAAE,OAAO;AAAA,EAClB,YAAY,EAAE,OAAO;AAAA,EACrB,gBAAgB,EAAE,OAAO;AAAA,EACzB,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,EACrC,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,EACrC,sBAAsB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,4BAA4B,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,uBAAuB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAGD,IAAM,sBAAsB,EAAE,KAAK,CAAC,SAAS,WAAW,SAAS,CAAC;AAGlE,IAAM,wBAAwB,EAAE,KAAK,CAAC,UAAU,UAAU,YAAY,CAAC;AAGhE,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EAC/B,MAAM,EAAE,OAAO;AAAA,EACf,WAAW,EAAE,OAAO;AAAA,EACpB,MAAM;AAAA,EACN,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EAC7C,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EACzC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,sBAAsB;AAAA,EAC7C,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EAC9C,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACpD,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,QAAQ,sBAAsB,SAAS,EAAE,QAAQ,QAAQ;AAAA,EACzD,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EAC9C,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EACrD,uBAAuB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EACvD,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EACxD,0BAA0B,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EAC1D,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAG1C,eAAe,EAAE,MAAM,WAAW;AAAA,EAClC,YAAY,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;AAAA,EAC3C,cAAc,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;AAAA,EAC7C,YAAY,EAAE,MAAM,eAAe;AAAA,EACnC,UAAU,EAAE,MAAM,aAAa;AAAA,EAC/B,aAAa,kBAAkB,SAAS,EAAE,SAAS;AAAA,EACnD,eAAe,oBAAoB,SAAS,EAAE,SAAS;AAAA;AAAA,EAGvD,OAAO;AAAA,EACP,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC5B,aAAa,EAAE,OAAO,EAAE,SAAS;AACnC,CAAC;;;AChJD,SAAS,KAAAE,UAAS;AAGX,IAAM,2BAA2BC,GAAE,OAAO;AAAA,EAC/C,SAASA,GAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACpC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AACxC,CAAC;AAGM,IAAM,8BAA8BA,GAAE,OAAO;AAAA,EAClD,eAAeA,GAAE,MAAM,iBAAiB;AAAA,EACxC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;;;ACND,eAAsB,iBACpB,SACA,SACgC;AAChC,QAAM,SAAS,IAAI,gBAAgB;AAEnC,MAAI,SAAS,QAAS,QAAO,OAAO,WAAW,QAAQ,OAAO;AAC9D,MAAI,SAAS,MAAO,QAAO,OAAO,SAAS,QAAQ,KAAK;AACxD,MAAI,SAAS,UAAW,QAAO,OAAO,aAAa,QAAQ,SAAS;AAEpE,QAAM,cAAc,OAAO,SAAS;AACpC,QAAM,WAAW,wBAAwB,cAAc,IAAI,WAAW,KAAK,EAAE;AAE7E,QAAM,OAAO,MAAM,UAAU,UAAU;AAAA,IACrC,QAAQ;AAAA,IACR,OAAO,SAAS;AAAA,EAClB,CAAC;AAGD,QAAM,SAAS,4BAA4B,UAAU,IAAI;AAEzD,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,kCAAkC,OAAO,MAAM,OAAO,EAAE;AAAA,EAC1E;AACA,SAAO,OAAO;AAChB;AAGA,eAAsB,mBACpB,IACA,SACsB;AACtB,QAAM,OAAO,MAAM,UAAU,yBAAyB,EAAE,IAAI;AAAA,IAC1D,QAAQ;AAAA,IACR,OAAO,SAAS;AAAA,EAClB,CAAC;AAGD,QAAM,SAAS,kBAAkB,UAAU,IAAI;AAC/C,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,gCAAgC,OAAO,MAAM,OAAO,EAAE;AAAA,EACxE;AACA,SAAO,OAAO;AAChB;;;AJhDO,IAAM,uBAAuB,gBAAgB,iBAAiB;AAAA;AAAA,EAEnE,KAAK;AAAA,IACH,UAAU;AAAA,IACV,SAAS,MAAM,iBAAiB;AAAA,EAClC;AAAA;AAAA,EAGA,MAAM,CAAC,aAAkC;AAAA,IACvC,UAAU,CAAC,EAAE,QAAQ,CAAC;AAAA,IACtB,SAAS,MAAM,iBAAiB,OAAO;AAAA,EACzC;AAAA;AAAA,EAGA,MAAM,CAAC,QAAgB;AAAA,IACrB,UAAU,CAAC,EAAE;AAAA,IACb,SAAS,MAAM,mBAAmB,EAAE;AAAA,EACtC;AACF,CAAC;;;AKtBD,SAAS,mBAAAC,wBAAuB;;;ACAhC,SAAS,KAAAC,UAAS;AAIX,IAAM,wBAAwBC,GAAE,OAAO;AAAA,EAC5C,IAAIA,GAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAMA,GAAE,OAAO;AAAA,EACf,aAAaA,GAAE,OAAO;AAAA,EACtB,MAAMA,GAAE,OAAO;AAAA,EACf,cAAcA,GAAE,OAAO;AAAA,EACvB,KAAKA,GAAE,OAAO;AAAA,EACd,UAAUA,GAAE,QAAQ;AAAA,EACpB,YAAY;AAAA,EACZ,eAAeA,GAAE,MAAM,WAAW,EAAE,SAAS;AAAA,EAC7C,cAAc;AAChB,CAAC;AAGM,IAAM,kCAAkCA,GAAE,OAAO;AAAA,EACtD,eAAeA,GAAE,MAAM,qBAAqB,EAAE,SAAS;AAAA,EACvD,OAAOA,GAAE,OAAO,EAAE,IAAI;AACxB,CAAC;;;ACfD,eAAsB,qBACpB,SACoC;AACpC,QAAM,OAAO,MAAM,UAAU,sBAAsB;AAAA,IACjD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,SAAS,gCAAgC,UAAU,IAAI;AAE7D,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,uCAAuC,OAAO,MAAM,OAAO,EAAE;AAAA,EAC/E;AACA,SAAO,OAAO;AAChB;;;AFnBO,IAAM,2BAA2BC,iBAAgB,qBAAqB;AAAA,EAC3E,KAAK;AAAA,IACH,UAAU;AAAA,IACV,SAAS,CAAC,YAAY,qBAAqB,OAAO;AAAA,EACpD;AACF,CAAC;;;AGRD,SAAS,mBAAAC,wBAAuB;;;ACAhC,SAAS,YAAY;AACrB,SAAS,KAAAC,UAAS;AAGX,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,KAAKA,GAAE,OAAO;AAAA,EACd,KAAKA,GAAE,OAAO;AAChB,CAAC;AAEM,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,MAAMA,GAAE,QAAQ,OAAO;AAAA,EACvB,SAASA,GAAE,OAAO;AAAA,EAClB,MAAMA,GAAE,OAAO;AAAA,EACf,QAAQA,GAAE,OAAO;AAAA,EACjB,UAAUA,GAAE,OAAO;AACrB,CAAC;AAEM,IAAM,YAAYA,GAAE,mBAAmB,QAAQ,CAAC,gBAAgB,cAAc,CAAC;AAE/E,IAAM,QAAQA,GAAE,OAAO;AAAA,EAC5B,IAAIA,GAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAMA,GAAE,OAAO;AAAA,EACf,OAAOA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACzB,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACxB,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAMA,GAAE,MAAM,SAAS;AACzB,CAAC;AAGM,IAAM,aAAaA,GAAE,OAAO;AAAA,EACjC,SAASA,GAAE,OAAO;AAAA,EAClB,MAAMA,GAAE,OAAO;AAAA,EACf,QAAQA,GAAE,OAAO;AAAA,EACjB,OAAOA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACzB,UAAUA,GAAE,OAAO;AAAA,EACnB,OAAOA,GAAE,OAAO;AAAA,EAChB,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACxC,CAAC;AAGM,IAAM,cAAcA,GAAE,OAAO;AAAA,EAClC,MAAMA,GAAE,QAAQ,MAAM;AAAA,EACtB,MAAMA,GAAE,MAAM,UAAU;AAAA,EACxB,IAAIA,GAAE,MAAM,UAAU;AAAA,EACtB,UAAUA,GAAE,OAAO;AAAA,EACnB,gBAAgB,MAAM,SAAS;AAAA,EAC/B,cAAcA,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EACrC,MAAMA,GAAE,QAAQ,SAAS;AAAA,EACzB,OAAOA,GAAE,OAAO;AAAA,EAChB,MAAMA,GAAE,MAAM,UAAU;AAAA,EACxB,IAAIA,GAAE,MAAM,UAAU;AAAA,EACtB,QAAQA,GAAE,OAAO;AAAA,EACjB,UAAUA,GAAE,OAAO;AAAA,EACnB,gBAAgB,MAAM,SAAS;AAAA,EAC/B,cAAcA,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,gBAAgBA,GAAE,mBAAmB,QAAQ,CAAC,aAAa,cAAc,CAAC;AAGhF,IAAM,SAASA,GAAE,OAAO;AAAA,EAC7B,MAAM,KAAK,QAAQ;AAAA,EACnB,IAAI,KAAK,QAAQ;AAAA,EACjB,MAAM,KAAK,IAAI;AAAA,EACf,OAAOA,GAAE,OAAO;AAAA,EAChB,KAAKA,GAAE,OAAO;AAChB,CAAC;AAGM,IAAM,cAAcA,GAAE,OAAO;AAAA,EAClC,MAAMA,GAAE,QAAQ,SAAS;AAAA,EACzB,OAAOA,GAAE,OAAO;AAAA,EAChB,SAASA,GAAE,OAAO;AAAA,EAClB,OAAO;AAAA,EACP,QAAQA,GAAE,OAAO;AAAA,EACjB,IAAI;AACN,CAAC;AAEM,IAAM,WAAWA,GAAE,OAAO;AAAA,EAC/B,MAAMA,GAAE,QAAQ,MAAM;AAAA,EACtB,UAAUA,GAAE,MAAM,aAAa;AAAA,EAC/B,IAAI;AAAA,EACJ,OAAO,MAAM,SAAS;AACxB,CAAC;AAEM,IAAM,aAAaA,GAAE,mBAAmB,QAAQ,CAAC,aAAa,QAAQ,CAAC;AAGvE,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EAC9C,OAAOA,GAAE,MAAM,UAAU;AAAA,EACzB,YAAYA,GAAE,OAAO;AAAA,EACrB,cAAcA,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC;;;AC1FD,eAAsB,aACpB,QACA,SAC4B;AAC5B,QAAM,eAAe,IAAI,gBAAgB;AAAA,IACvC,MAAM,OAAO;AAAA,IACb,OAAO,OAAO,MAAM,SAAS;AAAA,IAC7B,UAAU,OAAO,SAAS,SAAS;AAAA,IACnC,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,QAAQ,OAAO;AAAA,IACf,gBAAgB,OAAO;AAAA,IACvB,GAAI,OAAO,iBAAiB,EAAE,eAAe,OAAO,cAAc;AAAA,IAClE,GAAI,OAAO,MAAM,EAAE,IAAI,OAAO,GAAG;AAAA,EACnC,CAAC;AAED,QAAM,WAAW,MAAM,UAAU,cAAc,aAAa,SAAS,CAAC,IAAI;AAAA,IACxE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,OAAO,SAAS;AACtB,QAAM,SAAS,wBAAwB,UAAU,IAAI;AAErD,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,+BAA+B,OAAO,MAAM,OAAO,EAAE;AAAA,EACvE;AACA,SAAO,OAAO;AAChB;;;AFhCO,IAAM,mBAAmBC,iBAAgB,aAAa;AAAA;AAAA,EAE3D,UAAU,CAAC,YAA6B;AAAA,IACtC,UAAU,CAAC,MAAM;AAAA,IACjB,SAAS,CAAC,YAAY,aAAa,QAAQ,OAAO;AAAA,EACpD;AACF,CAAC;;;AGVD,SAAS,mBAAAC,wBAAuB;;;ACAhC,SAAS,KAAAC,UAAS;AAGX,IAAM,sBAAsBA,GAAE,KAAK,CAAC,OAAO,UAAU,KAAK,CAAC;AAQ3D,IAAM,gCAAgCA,GAAE,OAAO;AAAA,EACpD,UAAUA,GAAE,QAAQ;AACtB,CAAC;AAGM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,SAASA,GAAE,OAAO;AAAA,EAClB,iBAAiB;AAAA,EACjB,KAAKA,GAAE,OAAO;AAAA,EACd,SAASA,GAAE,OAAO,EAAE,QAAQ,GAAG;AACjC,CAAC;AAEM,IAAM,gCAAgCA,GAAE,OAAO;AAAA,EACpD,SAASA,GAAE,OAAO;AAAA,EAClB,OAAOA,GAAE,OAAO;AAClB,CAAC;AAGM,IAAM,gCAAgCA,GAAE,OAAO;AAAA,EACpD,SAASA,GAAE,OAAO;AAAA,EAClB,iBAAiBA,GAAE,OAAO;AAAA,EAC1B,WAAWA,GAAE,OAAO;AAAA,EACpB,OAAOA,GAAE,OAAO;AAClB,CAAC;AAEM,IAAM,iCAAiCA,GAAE,OAAO;AAAA,EACrD,UAAUA,GAAE,QAAQ;AAAA,EACpB,OAAOA,GAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;;;ACtBD,eAAsB,gBACpB,QACA,SACkC;AAClC,QAAM,eAAe,IAAI,gBAAgB;AAAA,IACvC,SAAS,OAAO;AAAA,IAChB,GAAI,OAAO,mBAAmB,EAAE,iBAAiB,OAAO,gBAAgB;AAAA,EAC1E,CAAC;AAED,QAAM,OAAO,MAAM,UAAU,mBAAmB,aAAa,SAAS,CAAC,IAAI;AAAA,IACzE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,SAAS,8BAA8B,UAAU,IAAI;AAE3D,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,qCAAqC,OAAO,MAAM,OAAO,EAAE;AAAA,EAC7E;AACA,SAAO,OAAO;AAChB;AAGA,eAAsB,0BACpB,SACkC;AAClC,QAAM,OAAO,MAAM,UAAU,4BAA4B;AAAA,IACvD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,OAAO;AAAA,EAC9B,CAAC;AAED,QAAM,SAAS,8BAA8B,UAAU,IAAI;AAE3D,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,qCAAqC,OAAO,MAAM,OAAO,EAAE;AAAA,EAC7E;AACA,SAAO,OAAO;AAChB;AAGA,eAAsB,iBACpB,SACmC;AACnC,QAAM,OAAO,MAAM,UAAU,mBAAmB;AAAA,IAC9C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,OAAO;AAAA,EAC9B,CAAC;AAED,QAAM,SAAS,+BAA+B,UAAU,IAAI;AAE5D,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,sCAAsC,OAAO,MAAM,OAAO,EAAE;AAAA,EAC9E;AACA,SAAO,OAAO;AAChB;;;AFzEO,IAAM,wBAAwBC,iBAAgB,kBAAkB;AAAA;AAAA,EAErE,OAAO,CAAC,YAAmC;AAAA,IACzC,UAAU,CAAC,MAAM;AAAA,IACjB,SAAS,CAAC,YAAY,gBAAgB,QAAQ,OAAO;AAAA,EACvD;AACF,CAAC;;;AGVD,SAAS,mBAAAC,wBAAuB;;;ACAhC,SAAS,KAAAC,UAAS;AAGX,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EACpC,OAAOA,GAAE,OAAO,EAAE,IAAI;AAAA,EACtB,sBAAsBA,GAAE,OAAO;AAAA,EAC/B,yBAAyBA,GAAE,OAAO;AAAA,EAClC,0BAA0BA,GAAE,OAAO,EAAE,IAAI;AAAA,EACzC,sBAAsBA,GAAE,OAAO;AAAA,EAC/B,sBAAsBA,GAAE,OAAO;AAAA,EAC/B,wBAAwBA,GAAE,OAAO;AAAA,EACjC,iBAAiBA,GAAE,OAAO;AAAA,EAC1B,WAAWA,GAAE,OAAO;AAAA,EACpB,QAAQA,GAAE,OAAO;AAAA,EACjB,WAAWA,GAAE,OAAO;AAAA,EACpB,SAASA,GAAE,OAAO;AACpB,CAAC;AAGM,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EAC7C,UAAUA,GAAE,MAAM,aAAa,EAAE,SAAS;AAC5C,CAAC;;;ACfD,eAAsB,YACpB,QACA,SAC2B;AAC3B,QAAM,EAAE,gBAAgB,WAAW,OAAO,OAAO,IAAI;AAErD,QAAM,eAAe,IAAI,gBAAgB;AAAA,IACvC,GAAI,aAAa,EAAE,UAAU;AAAA,IAC7B,GAAI,SAAS,EAAE,OAAO,MAAM,SAAS,EAAE;AAAA,IACvC,GAAI,UAAU,EAAE,QAAQ,OAAO,SAAS,EAAE;AAAA,EAC5C,CAAC;AAED,QAAM,cAAc,aAAa,SAAS;AAC1C,QAAM,WAAW,eAAe,cAAc,GAAG,cAAc,IAAI,WAAW,KAAK,EAAE;AAErF,QAAM,OAAO,MAAM,UAAU,UAAU;AAAA,IACrC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,SAAS,uBAAuB,UAAU,IAAI;AAEpD,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,6BAA6B,OAAO,MAAM,OAAO,EAAE;AAAA,EACrE;AACA,SAAO,OAAO;AAChB;;;AF9BO,IAAM,sBAAsBC,iBAAgB,gBAAgB;AAAA,EACjE,UAAU,CAAC,YAA+B;AAAA,IACxC,UAAU,CAAC,MAAM;AAAA,IACjB,SAAS,CAAC,YAAY,YAAY,QAAQ,OAAO;AAAA,EACnD;AACF,CAAC;;;AGTD,SAAS,mBAAAC,wBAAuB;;;ACAhC,SAAS,KAAAC,UAAS;AAIX,IAAM,yBAAyBC,GAAE,OAAO;AAAA,EAC7C,UAAUA,GAAE,MAAM,aAAa;AAAA,EAC/B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAIM,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EAC/C,MAAMA,GAAE,OAAO;AAAA,EACf,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,UAAUA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,aAAaA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,YAAYA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,QAAQA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,aAAaA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAG5C,gBAAgBA,GAAE,OAAO,EAAE,KAAK;AAClC,CAAC;AAIM,IAAM,2BAA2B,yBAAyB,OAAO;AAAA,EACtE,IAAIA,GAAE,OAAO,EAAE,KAAK;AACtB,CAAC;;;ACpBD,eAAsB,YAAY,SAA0D;AAC1F,QAAM,SAAS,IAAI,gBAAgB;AAEnC,QAAM,cAAc,OAAO,SAAS;AACpC,QAAM,WAAW,kBAAkB,cAAc,IAAI,WAAW,KAAK,EAAE;AAEvE,QAAM,OAAO,MAAM,UAAU,UAAU;AAAA,IACrC,QAAQ;AAAA,IACR,OAAO,SAAS;AAAA,EAClB,CAAC;AAGD,QAAM,SAAS,uBAAuB,UAAU,IAAI;AAEpD,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,6BAA6B,OAAO,MAAM,OAAO,EAAE;AAAA,EACrE;AACA,SAAO,OAAO;AAChB;AAKA,eAAsB,cACpB,OACA,SACkB;AAClB,QAAM,WAAW;AAEjB,QAAM,OAAO,MAAM,UAAU,UAAU;AAAA,IACrC,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,KAAK;AAAA,IAC1B,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,OAAO,SAAS;AAAA,EAClB,CAAC;AAGD,QAAM,SAAS,cAAc,UAAU,IAAI;AAE3C,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,6BAA6B,OAAO,MAAM,OAAO,EAAE;AAAA,EACrE;AACA,SAAO,OAAO;AAChB;AAGA,eAAsB,cACpB,OACA,SACkB;AAClB,QAAM,WAAW,mBAAmB,MAAM,EAAE;AAE5C,QAAM,OAAO,MAAM,UAAU,UAAU;AAAA,IACrC,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,KAAK;AAAA,IAC1B,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,OAAO,SAAS;AAAA,EAClB,CAAC;AAGD,QAAM,SAAS,cAAc,UAAU,IAAI;AAE3C,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,6BAA6B,OAAO,MAAM,OAAO,EAAE;AAAA,EACrE;AACA,SAAO,OAAO;AAChB;AAGA,eAAsB,cAAc,IAAY,SAA8C;AAC5F,QAAM,WAAW,mBAAmB,EAAE;AAEtC,QAAM,OAAO,MAAM,UAAU,UAAU;AAAA,IACrC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,OAAO,SAAS;AAAA,EAClB,CAAC;AAGD,QAAM,SAAS,cAAc,UAAU,IAAI;AAE3C,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,6BAA6B,OAAO,MAAM,OAAO,EAAE;AAAA,EACrE;AACF;;;AFpGO,IAAM,kBAAkBC,iBAAgB,YAAY;AAAA;AAAA,EAEzD,KAAK;AAAA,IACH,UAAU;AAAA,IACV,SAAS,MAAM,YAAY;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,CAAC,QAAgB;AAAA,IACrB,UAAU,CAAC,EAAE;AAAA;AAAA,IAEb,SAAS,YAAY;AACnB,YAAM,WAAW,MAAM,YAAY;AACnC,aAAO,SAAS,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,EAAE;AAAA,IAC9D;AAAA,EACF;AACF,CAAC;;;AGpBD,SAAS,mBAAAC,wBAAuB;;;ACAhC,SAAS,KAAAC,UAAS;AAEX,IAAM,qBAAqBA,GAAE,OAAO;AAAA,EACzC,SAASA,GAAE,OAAO;AAAA,EAClB,MAAMA,GAAE,OAAO;AAAA,EACf,QAAQA,GAAE,OAAO;AAAA,EACjB,OAAOA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACzB,UAAUA,GAAE,OAAO;AAAA,EACnB,OAAOA,GAAE,OAAO;AAAA,EAChB,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACxC,CAAC;AAEM,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EAC1C,OAAO;AAAA,EACP,QAAQA,GAAE,OAAO;AACnB,CAAC;AAOM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,UAAUA,GAAE,MAAM,mBAAmB;AACvC,CAAC;;;AClBD,eAAsB,kBACpB,QACA,SACiC;AACjC,QAAM,EAAE,MAAM,MAAM,IAAI;AAExB,QAAM,eAAe,IAAI,gBAAgB;AAAA,IACvC;AAAA,IACA,OAAO,MAAM,SAAS;AAAA,EACxB,CAAC;AAED,QAAM,WAAW,2BAA2B,aAAa,SAAS,CAAC;AAEnE,QAAM,OAAO,MAAM,UAAoB,UAAU;AAAA,IAC/C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,SAAS,6BAA6B,UAAU,IAAI;AAE1D,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,oCAAoC,OAAO,MAAM,OAAO,EAAE;AAAA,EAC5E;AAEA,SAAO,OAAO;AAChB;;;AF9BO,IAAM,sBAAsBC,iBAAgB,gBAAgB;AAAA,EACjE,UAAU,CAAC,YAAqC;AAAA,IAC9C,UAAU,CAAC,MAAM;AAAA,IACjB,SAAS,CAAC,YAAY,kBAAkB,QAAQ,OAAO;AAAA,EACzD;AACF,CAAC;;;AGTD,SAAS,mBAAAC,wBAAuB;;;ACAhC,SAAS,KAAAC,UAAS;AAIX,IAAM,oCAAoCC,GAAE,OAAO;AAAA,EACxD,eAAeA,GAAE,MAAM,iBAAiB,EAAE,SAAS;AAAA,EACnD,OAAOA,GAAE,OAAO,EAAE,IAAI;AACxB,CAAC;;;ACDD,eAAsB,uBACpB,eACA,SACsC;AACtC,QAAM,OAAO,MAAM,UAAU,WAAW,aAAa,kBAAkB;AAAA,IACrE,QAAQ;AAAA,IACR,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,SAAS,kCAAkC,UAAU,IAAI;AAE/D,MAAI,OAAO,YAAY,OAAO;AAC5B,YAAQ,IAAI,eAAe,OAAO,KAAK;AACvC,UAAM,IAAI,MAAM,yCAAyC,OAAO,MAAM,OAAO,EAAE;AAAA,EACjF;AACA,SAAO,OAAO;AAChB;;;AFnBO,IAAM,gBAAgBC,iBAAgB,UAAU;AAAA,EACrD,eAAe,CAAC,mBAA2B;AAAA,IACzC,UAAU,CAAC,aAAa;AAAA,IACxB,SAAS,CAAC,YAAY,uBAAuB,eAAe,OAAO;AAAA,EACrE;AACF,CAAC;;;AGRD,SAAS,YAAAC,kBAAgB;;;ACGlB,IAAM,gBAAgB;AAAA,EAC3B,WAAW,IAAI,KAAK;AAAA;AAAA,EACpB,QAAQ,KAAK,KAAK;AAAA;AAAA,EAClB,OAAO;AAAA;AAAA,EACP,sBAAsB;AAAA;AACxB;;;ADJO,SAAS,uBAAuB;AACrC,SAAOC,WAAS;AAAA,IACd,GAAG,yBAAyB;AAAA,IAC5B,GAAG;AAAA,EACL,CAAC;AACH;;;AETA,SAAS,YAAAC,kBAAgB;AAUlB,SAAS,aAAa,EAAE,QAAQ,UAAU,KAAK,GAAwB;AAC5E,SAAOC,WAAS;AAAA;AAAA,IAEd,GAAG,iBAAiB,SAAS,MAAO;AAAA,IACpC,GAAG;AAAA,IACH,SAAS,CAAC,CAAC,UAAU;AAAA,EACvB,CAAC;AACH;;;ACjBA,SAAS,YAAAC,YAAU,eAAAC,cAAa,sBAAsB;AAgB/C,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,UAAU;AACZ,GAA8B;AAC5B,SAAOC,WAAS;AAAA,IACd,GAAG,sBAAsB,MAAM,MAAM;AAAA,IACrC,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAGO,SAAS,+BAA+B;AAC7C,SAAOC,aAAY;AAAA,IACjB,YAAY,CAAC,YACX,0BAA0B,OAAO;AAAA,EACrC,CAAC;AACH;AAGO,SAAS,sBAAsB;AACpC,QAAM,cAAc,eAAe;AAEnC,SAAOA,aAAY;AAAA,IACjB,YAAY,CAAC,YAAqC,iBAAiB,OAAO;AAAA,IAC1E,WAAW,CAAC,MAAM,cAAc;AAC9B,kBAAY,kBAAkB;AAAA,QAC5B,UAAU,sBAAsB,MAAM;AAAA,UACpC,SAAS,UAAU;AAAA,UACnB,iBAAiB,UAAU;AAAA,QAC7B,CAAC,EAAE;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AClDA,SAAS,YAAAC,kBAAgB;AAUlB,SAAS,YAAY,EAAE,QAAQ,UAAU,KAAK,GAAuB;AAC1E,SAAOC,WAAS;AAAA,IACd,GAAG,oBAAoB,SAAS,MAAM;AAAA,IACtC,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AChBA,SAAoB,eAAe;AACnC,SAAS,kBAAkB;AAiBpB,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AACF,GAAuD;AACrD,QAAMC,WAAU,WAAW;AAAA,IACzB,SAAS,SAAS,IAAI,CAAC,aAAa;AAAA,MAClC,GAAG,oBAAoB,SAAS,EAAE,MAAM,WAAW,IAAI,OAAO,QAAQ,CAAC;AAAA,MACvE,SAAS,CAAC,CAAC;AAAA,MACX,WAAW,KAAK;AAAA,MAChB,iBAAiB,IAAI,KAAK;AAAA,MAC1B,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,IACxB,EAAE;AAAA,EACJ,CAAC;AAED,QAAM,YAAYA,SAAQ,KAAK,CAAC,UAAU,MAAM,SAAS;AACzD,QAAM,QAAQA,SAAQ,KAAK,CAAC,UAAU,MAAM,KAAK,GAAG,SAAS;AAE7D,QAAM,aAAa,MAAM;AACvB,IAAAA,SAAQ,QAAQ,CAAC,UAAU;AACzB,YAAM,QAAQ;AAAA,IAChB,CAAC;AAAA,EACH;AAGA,QAAM,WAAW,QAAQ,MAAM;AAC7B,UAAM,aAAiE,CAAC;AAExE,IAAAA,SAAQ,QAAQ,CAAC,OAAO,UAAU;AAChC,YAAM,UAAU,SAAS,KAAK;AAC9B,UAAI,MAAM,QAAQ,YAAY,QAAW;AACvC,mBAAW,OAAO,IAAI,MAAM,KAAK;AAAA,MACnC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAACA,UAAS,QAAQ,CAAC;AAEtB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC9DA,SAAS,YAAAC,kBAA2D;AAW7D,SAAS,iBAAiB,SAAmC;AAClE,SAAOC,WAAS;AAAA,IACd,GAAG,qBAAqB;AAAA,IACxB,GAAG;AAAA,IACH,QAAQ,CAAC,SAAgC;AACvC,YAAM,kBAAkB,IAAI;AAAA,QAC1B,KAAK,cACF,IAAI,CAAC,gBAAgB,YAAY,cAAc,KAAK,EACpD,OAAO,CAAC,UAAU,UAAU,MAAS,EACrC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC;AAAA,MACrC;AAEA,YAAM,SAAS,MAAM,KAAK,gBAAgB,OAAO,CAAC;AAElD,aAAO;AAAA,QACL,GAAG;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAOO,SAAS,eAAe,EAAE,IAAI,GAAG,QAAQ,GAA0B;AACxE,SAAOA,WAAS;AAAA,IACd,GAAG,qBAAqB,KAAK,EAAE;AAAA,IAC/B,GAAG;AAAA,IACH,QAAQ,CAAC,SAAsB;AAC7B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,KAAK,cAAc;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACjDA;AAAA,EACE,eAAAC;AAAA,EAEA,YAAAC;AAAA,OAGK;AAUA,SAAS,YAAY,SAA8B;AACxD,SAAOC,WAAS,EAAE,GAAG,gBAAgB,KAAK,GAAG,cAAc,CAAC;AAC9D;AAMO,SAAS,WAAW,EAAE,IAAI,GAAG,QAAQ,GAAsB;AAChE,SAAOA,WAAS,EAAE,GAAG,gBAAgB,KAAK,EAAE,GAAG,GAAG,cAAc,CAAC;AACnE;AAKO,SAAS,iBAAiB,EAAE,GAAG,QAAQ,GAA4B;AACxE,SAAOC,aAAY,EAAE,YAAY,cAAc,CAAC;AAClD;AAKO,SAAS,iBAAiB,EAAE,GAAG,QAAQ,GAA4B;AACxE,SAAOA,aAAY,EAAE,YAAY,cAAc,CAAC;AAClD;AAIO,SAAS,iBAAiB,EAAE,GAAG,QAAQ,GAA4B;AACxE,SAAOA,aAAY,EAAE,YAAY,cAAc,CAAC;AAClD;;;AC9CA,SAAS,aAAa,WAAAC,gBAAe;AACrC,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB,0BAA0B,0BAA0B;AAezE,SAAS,gBAAgB,EAAE,OAAO,QAAQ,UAAU,GAAyB;AAClF,QAAM,WAAWA,SAAQ,MAAM,kBAAkB,QAAQ,OAAO,KAAK,GAAG,CAAC,QAAQ,OAAO,KAAK,CAAC;AAE9F,QAAM,yBAAyBA;AAAA,IAC7B,MAAM,yBAAyB,OAAO,MAAM;AAAA,IAC5C,CAAC,OAAO,MAAM;AAAA,EAChB;AAEA,QAAM,iBAAiB,YAAY,MAAM;AACvC,QAAI,CAAC,MAAO;AACZ,UAAM,YAAY,mBAAmB,MAAM,SAAS,MAAM,QAAQ;AAClE,cAAU,SAAS;AAAA,EACrB,GAAG,CAAC,OAAO,SAAS,CAAC;AAErB,QAAM,eAAeA,SAAQ,MAAM;AACjC,QAAI,CAAC,SAAS,CAAC,OAAQ,QAAO;AAC9B,QAAI;AACF,aAAO,WAAW,QAAQ,MAAM,QAAQ;AAAA,IAC1C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,QAAQ,KAAK,CAAC;AAElB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC9CA,SAAS,YAAAC,kBAAgB;AAKlB,SAAS,uBAAuB,eAAuB;AAC5D,SAAOC,WAAS;AAAA,IACd,GAAG,cAAc,cAAc,aAAa;AAAA,IAC5C,GAAG;AAAA,IACH,QAAQ,CAAC,SAAsC;AAC7C,YAAM,kBAAkB,IAAI;AAAA,QAC1B,KAAK,eACD,IAAI,CAAC,gBAAgB,YAAY,cAAc,KAAK,GACpD,OAAO,CAAC,UAAU,UAAU,MAAS,GACrC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;AAAA,MAC5C;AAEA,YAAM,SAAS,MAAM,KAAK,gBAAgB,OAAO,CAAC,KAAK,CAAC;AAExD,aAAO;AAAA,QACL,GAAG;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ApCdO,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":["defaultConfig","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","projectTvl","defaultConfig","useQuery","projectTvl","defaultConfig","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","earnCampaigns","defaultConfig","useQuery","earnCampaigns","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","z","z","createQueryKeys","z","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","z","createQueryKeys","useQuery","useQuery","useQuery","useQuery","useQuery","useMutation","useQuery","useMutation","useQuery","useQuery","queries","useQuery","useQuery","useMutation","useQuery","useQuery","useMutation","useMemo","useQuery","useQuery"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useConfig.ts","../src/hooks/client.ts","../src/hooks/endpoints/useOrganizations.ts","../src/hooks/endpoints/useExists.ts","../src/hooks/endpoints/useIndexerTvl.ts","../src/hooks/endpoints/useOrganizationDeals.ts","../src/hooks/endpoints/useOrganizationsDeals.ts","../src/hooks/endpoints/usePrepareSignup.ts","../src/hooks/endpoints/useProjectTvl.ts","../src/hooks/endpoints/useSignup.ts","../src/hooks/endpoints/earn/useCampaigns.ts","../src/hooks/endpoints/earn/useDeals.ts","../src/hooks/endpoints/earn/useRoute.ts","../src/hooks/endpoints/earn/useWalletBalances.ts","../src/hooks/endpoints/partner/usePartnerCampaigns.ts","../src/hooks/endpoints/partner/usePartnerDeals.ts","../src/hooks/endpoints/useGeocheck.ts","../src/v2/index.ts","../src/v2/opportunities/queries.ts","../src/v2/lib/api-client.ts","../src/v2/schemas/shared.ts","../src/v2/opportunities/schema.ts","../src/v2/opportunities/api.ts","../src/v2/earn-opportunities/queries.ts","../src/v2/earn-opportunities/schema.ts","../src/v2/earn-opportunities/api.ts","../src/v2/earn-route/queries.ts","../src/v2/earn-route/schema.ts","../src/v2/earn-route/api.ts","../src/v2/earn-membership/queries.ts","../src/v2/earn-membership/schema.ts","../src/v2/earn-membership/api.ts","../src/v2/earn-deposits/queries.ts","../src/v2/earn-deposits/schema.ts","../src/v2/earn-deposits/api.ts","../src/v2/products/queries.ts","../src/v2/products/schema.ts","../src/v2/products/api.ts","../src/v2/enso-balances/queries.ts","../src/v2/enso-balances/schemas.ts","../src/v2/enso-balances/api.ts","../src/v2/widget/queries.ts","../src/v2/widget/schema.ts","../src/v2/widget/api.ts","../src/v2/earn-opportunities/hooks.ts","../src/v2/lib/query-config.ts","../src/v2/earn-route/hooks.ts","../src/v2/earn-membership/hooks.ts","../src/v2/earn-deposits/hooks.ts","../src/v2/enso-balances/hooks.ts","../src/v2/opportunities/hooks.ts","../src/v2/products/hooks.ts","../src/v2/balance/useTokenBalance.ts","../src/v2/widget/hooks.ts"],"sourcesContent":["import type { Config } from \"@turtleclub/api\";\nimport { defaultConfig } from \"@turtleclub/api\";\n\nexport function useConfig(): Config {\n // Placeholder implementation - in real app this would use TurtleProvider context\n return defaultConfig;\n}\n","import { createSyncStoragePersister } from \"@tanstack/query-sync-storage-persister\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport { persistQueryClient } from \"@tanstack/react-query-persist-client\";\n\nexport const defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\n// Only persist on client side\nif (typeof window !== 'undefined') {\n const localStoragePersister = createSyncStoragePersister({\n storage: window.localStorage,\n key: \"turtle-sdk\",\n });\n\n persistQueryClient({\n queryClient: defaultQueryClient,\n persister: localStoragePersister,\n });\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organization, type OrganizationResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizations({\n config,\n queryClient,\n}: UseOrganizationsOptions = {}): UseQueryResult<OrganizationResponse | null> {\n const defaultConfig = useConfig();\n\n const query = useQuery(\n {\n queryKey: [\"organizations\"],\n queryFn: async () => {\n return await organization(config ?? defaultConfig);\n },\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, exists, type ExistsOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseExistsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useExists(\n options?: ExistsOptions,\n { config, queryClient }: UseExistsOptions = {},\n): UseQueryResult<boolean | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"exists\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await exists(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseIndexerTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useIndexerTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseIndexerTvlOptions = {}\n): UseQueryResult<\n {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[],\n Error\n> {\n const defaultConfig = useConfig();\n\n const queryResult = useQuery(\n {\n queryKey: [\"indexer-tvl\", options?.projects],\n queryFn: async () => {\n return await projectTvl(config ?? defaultConfig);\n },\n select: (data) => {\n if (!data) return [];\n const result = Object.entries(data.projects)\n .map(([key, value]) => {\n if (!options?.projects.includes(key)) return null;\n return {\n protocol: key,\n tvl: value.tvl_usd,\n assetTvl: value.asset_tvl_usd,\n debtTvl: value.debt_tvl_usd,\n };\n })\n .filter(Boolean) as {\n protocol: string;\n tvl: number;\n assetTvl: number;\n debtTvl: number;\n }[];\n\n return result;\n },\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n },\n queryClient ?? defaultQueryClient\n );\n\n return queryResult;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationDeals, type OrganizationDealsOptions, type OrganizationDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationDeals(\n options?: OrganizationDealsOptions,\n { config, queryClient }: UseOrganizationDealsOptions = {},\n): UseQueryResult<OrganizationDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationDeals\", options?.organizationId],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, organizationsDeals, type OrganizationsDealsOptions, type OrganizationsDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseOrganizationsDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useOrganizationsDeals(\n options?: OrganizationsDealsOptions,\n { config, queryClient }: UseOrganizationsDealsOptions = {},\n): UseQueryResult<OrganizationsDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"organizationsDeals\", options?.organizationIds],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await organizationsDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000,\n refetchInterval: 1 * 60 * 1000,\n throwOnError: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, prepareSignup, type PrepareSignupOptions, type PrepareSignupResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UsePrepareSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePrepareSignup(\n options?: PrepareSignupOptions,\n { config, queryClient }: UsePrepareSignupOptions = {},\n): UseQueryResult<PrepareSignupResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"prepareSignup\", options?.user],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await prepareSignup(options, config ?? defaultConfig);\n },\n enabled,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, projectTvl, type ProjectTvlOptions, type ProjectTvlResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseProjectTvlOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useProjectTvl(\n options?: ProjectTvlOptions,\n { config, queryClient }: UseProjectTvlOptions = {},\n): UseQueryResult<ProjectTvlResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\"projectTvl\", options?.projects],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await projectTvl(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 7 * 60 * 1000,\n refetchInterval: 5 * 60 * 1000,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import {\n type QueryClient,\n useMutation,\n type UseMutationResult,\n useQuery,\n} from \"@tanstack/react-query\";\nimport { type Config, signup, type SignupOptions } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseSignupOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useSignup(\n options?: Omit<SignupOptions, \"signature\">,\n { config, queryClient }: UseSignupOptions = {}\n): UseMutationResult<boolean | null, Error, string, unknown> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const mutation = useMutation(\n {\n mutationFn: async (signature: string) => {\n if (!enabled) return null;\n\n return await signup({ ...options, signature }, config ?? defaultConfig);\n },\n },\n queryClient ?? defaultQueryClient\n );\n\n return mutation;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UseEarnCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = true; // Always enabled for campaigns\n\n const query = useQuery({\n queryKey: [\n \"earn-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n return await earnCampaigns(options || {}, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnDeals, type EarnDealsOptions, type EarnDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UseEarnDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnDeals(\n options?: EarnDealsOptions,\n { config, queryClient }: UseEarnDealsOptions = {},\n): UseQueryResult<EarnDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earn-deals\",\n options?.campaignId,\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnDeals(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnRoute, type EarnRouteOptions, type EarnRouteResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnRouteOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnRouteOld(\n options?: EarnRouteOptions,\n { config, queryClient }: UseEarnRouteOptions = {},\n): UseQueryResult<EarnRouteResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"earnRoute\",\n options?.user,\n options?.chain,\n options?.slippage,\n options?.tokenIn,\n options?.tokenOut,\n options?.amount,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnRoute(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 2 * 60 * 1000, // 2 minutes - longer stale time for transaction stability\n refetchInterval: false, // Disable automatic refetch to prevent transaction state reset\n refetchOnWindowFocus: true,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport {\n type Config,\n earnWalletBalances,\n type EarnWalletBalancesOptions,\n type EarnWalletBalancesResponse,\n} from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../../client\";\nimport { useConfig } from \"../../useConfig\";\n\nexport interface UseEarnWalletBalancesOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useEarnWalletBalances(\n options?: EarnWalletBalancesOptions,\n { config, queryClient }: UseEarnWalletBalancesOptions = {}\n): UseQueryResult<EarnWalletBalancesResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery(\n {\n queryKey: [\"earnWalletBalances\", options?.chain, options?.user],\n queryFn: async () => {\n if (!enabled) return null;\n\n return await earnWalletBalances(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 30 * 1000,\n refetchInterval: 15 * 1000,\n refetchOnWindowFocus: true,\n },\n queryClient ?? defaultQueryClient\n );\n\n return query;\n}\n","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, earnCampaigns, type EarnCampaignsOptions, type EarnCampaignWithVaults } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerCampaignsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\n/**\n * Hook to fetch partner campaigns\n * Currently uses the same endpoint as earn campaigns\n */\nexport function usePartnerCampaigns(\n options?: EarnCampaignsOptions,\n { config, queryClient }: UsePartnerCampaignsOptions = {},\n): UseQueryResult<EarnCampaignWithVaults[] | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-campaigns\",\n options?.idFilter,\n options?.protocolFilter,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n return await earnCampaigns(options, config ?? defaultConfig);\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, turtleDeals, type TurtleDealsOptions, type TurtleDealsResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"@/hooks/client\";\nimport { useConfig } from \"@/hooks/useConfig\";\n\nexport interface UsePartnerDealsOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function usePartnerDeals(\n options?: TurtleDealsOptions,\n { config, queryClient }: UsePartnerDealsOptions = {},\n): UseQueryResult<TurtleDealsResponse | null> {\n const defaultConfig = useConfig();\n const enabled = options !== undefined;\n\n const query = useQuery({\n queryKey: [\n \"partner-deals\",\n options?.status,\n options?.protocol,\n options?.ids,\n ],\n queryFn: async () => {\n if (!enabled)\n return null;\n\n const result = await turtleDeals(options || {}, config ?? defaultConfig);\n return result;\n },\n enabled,\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n gcTime: 30 * 60 * 1000, // 30 minutos de cache\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}","import { type QueryClient, useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { type Config, geocheck, type GeoCheckResponse } from \"@turtleclub/api\";\nimport { defaultQueryClient } from \"../client\";\nimport { useConfig } from \"../useConfig\";\n\nexport interface UseGeocheckOptions {\n config?: Config;\n queryClient?: QueryClient;\n}\n\nexport function useGeocheck(\n { config, queryClient }: UseGeocheckOptions = {},\n): UseQueryResult<GeoCheckResponse> {\n const defaultConfig = useConfig();\n\n const query = useQuery({\n queryKey: [\"geocheck\"],\n queryFn: async () => {\n return await geocheck(config ?? defaultConfig);\n },\n staleTime: 5 * 60 * 1000, // 5 minutes\n gcTime: 10 * 60 * 1000, // 10 minutes\n refetchOnWindowFocus: false,\n retry: 1,\n }, queryClient ?? defaultQueryClient);\n\n return query;\n}\n","import { mergeQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { opportunitiesQueries } from \"./opportunities/queries\";\nimport { earnOpportunitiesQueries } from \"./earn-opportunities/queries\";\nimport { earnRouteQueries } from \"./earn-route/queries\";\nimport { earnMembershipQueries } from \"./earn-membership/queries\";\nimport { earnDepositsQueries } from \"./earn-deposits/queries\";\nimport { productsQueries } from \"./products/queries\";\nimport { ensoBalancesQueries } from \"./enso-balances/queries\";\nimport { widgetQueries } from \"./widget/queries\";\n\n// Merged query keys for cache invalidation\nexport const queries = mergeQueryKeys(\n opportunitiesQueries,\n earnOpportunitiesQueries,\n earnRouteQueries,\n earnMembershipQueries,\n earnDepositsQueries,\n productsQueries,\n ensoBalancesQueries,\n widgetQueries\n);\n\n// Features - Earn API\nexport * from \"./earn-opportunities\";\nexport * from \"./earn-route\";\nexport * from \"./earn-membership\";\nexport * from \"./earn-deposits\";\nexport * from \"./enso-balances\";\n\n// Features\nexport * from \"./opportunities\";\nexport * from \"./products\";\nexport * from \"./balance\";\nexport * from \"./widget\";\n\n// Shared schemas\nexport * from \"./schemas/shared\";\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getOpportunities, getOpportunityById } from \"./api\";\nimport type { OpportunityFilters } from \"./schema\";\n\nexport const opportunitiesQueries = createQueryKeys(\"opportunities\", {\n // Get all opportunities (no filters)\n all: {\n queryKey: null,\n queryFn: () => getOpportunities(),\n },\n\n // Get opportunities with filters\n list: (filters?: OpportunityFilters) => ({\n queryKey: [{ filters }],\n queryFn: () => getOpportunities(filters),\n }),\n\n // Get single opportunity by ID\n byId: (id: string) => ({\n queryKey: [id],\n queryFn: () => getOpportunityById(id),\n }),\n});\n","export const API_BASE_URL = \"https://api.turtle.xyz\";\nexport const EARN_BASE_URL = \"https://earn.turtle.xyz\";\n\nexport type ApiDomain = \"api\" | \"earn\" | \"custom\";\n\nexport interface ApiClientOptions<TDomain extends ApiDomain = \"api\"> extends RequestInit {\n debug?: boolean;\n domain?: TDomain;\n baseUrl?: TDomain extends \"custom\" ? string : never;\n}\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public status: number,\n public response?: unknown\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nconst getEarnUrl = () => {\n return process.env.NEXT_PUBLIC_EARN_URL || process.env.VITE_EARN_URL || EARN_BASE_URL;\n};\n\nconst getApiUrl = () => {\n return process.env.NEXT_PUBLIC_API_URL || process.env.VITE_API_URL || API_BASE_URL;\n};\n\n/**\n * Lightweight API client with automatic JSON parsing and error handling\n * @param endpoint - API endpoint path (e.g., \"/turtle/opportunities\")\n * @param options - Fetch options + debug flag + domain selection\n * @returns Parsed JSON response as unknown (validate with Zod later)\n */\nexport async function apiClient<TDomain extends ApiDomain = \"api\">(\n endpoint: string,\n options?: ApiClientOptions<TDomain>\n): Promise<unknown> {\n const { debug, domain = \"api\", baseUrl, ...fetchOptions } = options ?? {};\n\n const resolvedBaseUrl =\n domain === \"earn\" ? getEarnUrl() : domain === \"custom\" ? baseUrl : getApiUrl();\n const url = `${resolvedBaseUrl}${endpoint}`;\n\n if (debug) {\n console.log(\"[API Request]\", {\n method: fetchOptions.method ?? \"GET\",\n url,\n headers: fetchOptions.headers,\n body: fetchOptions.body,\n });\n }\n\n try {\n const response = await fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n ...fetchOptions.headers,\n },\n ...fetchOptions,\n });\n\n // Parse response body\n const data = await response.json();\n\n if (debug) {\n console.log(\"[API Response]\", {\n status: response.status,\n ok: response.ok,\n data,\n });\n }\n\n if (!response.ok) {\n throw new ApiError(\n `API error: ${response.status} ${response.statusText}`,\n response.status,\n data\n );\n }\n\n return data;\n } catch (error) {\n if (debug) {\n console.error(\"[API Error]\", error);\n }\n\n // Re-throw ApiError\n if (error instanceof ApiError) {\n throw error;\n }\n\n // Wrap other errors (network, JSON parse, etc)\n throw new ApiError(error instanceof Error ? error.message : \"Unknown error\", 0, error);\n }\n}\n","import { z } from \"zod\";\n\nexport const chainSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n chainId: z.string(),\n logoUrl: z.string(),\n ecosystem: z.string(),\n status: z.string(),\n explorerUrl: z.string(),\n});\n\nexport const tokenSchema = z.object({\n id: z.string(),\n name: z.string(),\n symbol: z.string(),\n address: z.string(),\n chain: chainSchema,\n decimals: z.number(),\n logoUrl: z.string(),\n isNative: z.boolean(),\n priceUsd: z.number(),\n});\n\nexport const organizationSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional().nullable(),\n landingUrl: z.string().optional().nullable(),\n iconUrl: z.string().optional().nullable(),\n organizationType: z.string().optional().nullable(),\n turtleRefCode: z.string().optional().nullable(),\n twitterHandle: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n featured: z.boolean().optional().nullable(),\n});\n\nexport const productSchema = z.object({\n id: z.string(),\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n organization: organizationSchema,\n createdAt: z.string().optional().nullable(),\n});\n\n// Vault Configuration Schema - matching backend\nexport const vaultConfigSchema = z.object({\n id: z.string().uuid().optional(),\n infraProvider: organizationSchema.optional().nullable(),\n curator: organizationSchema.optional().nullable(),\n withdrawalCooldownSecs: z.number().int().min(0).optional().nullable(),\n withdrawalContractAddress: z.string().optional().nullable(),\n withdrawalDetails: z.any().optional().nullable(),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n performanceFee: z.number().min(0).max(100).optional().nullable(),\n managementFee: z.number().min(0).max(100).optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\n// Lending Configuration Schema - matching backend\nexport const lendingConfigSchema = z.object({\n id: z.string().uuid().optional(),\n protocol: z.object({ id: z.string() }),\n marketAddress: z.string().min(1, \"Market address is required\"),\n depositUrl: z.string().optional().nullable(),\n providerMetadata: z.any().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n});\n\nexport const incentiveSchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n iconUrl: z.string(),\n rewardType: z.string(),\n rewardTypeName: z.string(),\n boostPct: z.number().nullable(),\n totalCapacity: z.number().nullable(),\n maxCapacityPerLP: z.number().nullable(),\n lockup: z.string().nullable(),\n minCommitment: z.number().nullable(),\n baseYieldTarget: z.number().nullable(),\n baseYieldSource: z.string().nullable(),\n incentiveYieldTarget: z.number().nullable(),\n fdvEstimate: z.number().nullable(),\n isIncentiveYieldGuaranteed: z.boolean().nullable(),\n tokenSupplyAllocation: z.number().nullable(),\n yield: z.number().nullable(),\n});\n\n// Opportunity Type Enum\nconst opportunityTypeEnum = z.enum([\"vault\", \"lending\", \"staking\"]);\n\n// Opportunity Status Enum\nconst opportunityStatusEnum = z.enum([\"active\", \"paused\", \"deprecated\"]);\n\n// Main Opportunity Schema - matching backend API exactly\nexport const opportunitySchema = z.object({\n id: z.string().uuid().optional(),\n name: z.string(),\n shortName: z.string(),\n type: opportunityTypeEnum,\n description: z.string().optional().default(\"\"),\n curator: z.string().optional().default(\"\"),\n tvl: z.number().min(0, \"TVL must be positive\"),\n featured: z.boolean().optional().default(false),\n featuredOrder: z.number().int().optional().nullable(),\n originalConfig: z.any().optional().nullable(),\n exposures: z.array(z.string()).optional().default([]),\n status: opportunityStatusEnum.optional().default(\"active\"),\n statusReason: z.string().optional().default(\"\"),\n depositDisabled: z.boolean().optional().default(false),\n depositDisabledReason: z.string().optional().default(\"\"),\n withdrawalDisabled: z.boolean().optional().default(false),\n withdrawalDisabledReason: z.string().optional().default(\"\"),\n docsUrl: z.string().optional().nullable(),\n auditsUrl: z.string().optional().nullable(),\n createdAt: z.string().datetime().optional(),\n updatedAt: z.string().datetime().optional(),\n\n // Relationships\n depositTokens: z.array(tokenSchema),\n baseTokens: z.union([z.null(), tokenSchema]),\n receiptToken: z.union([z.null(), tokenSchema]),\n incentives: z.array(incentiveSchema),\n products: z.array(productSchema),\n vaultConfig: vaultConfigSchema.optional().nullable(),\n lendingConfig: lendingConfigSchema.optional().nullable(),\n\n // Will be deprecated\n token: tokenSchema,\n exposure: z.array(z.string()),\n explorerUrl: z.string().nullable(),\n});\n\nexport type Chain = z.infer<typeof chainSchema>;\nexport type Token = z.infer<typeof tokenSchema>;\nexport type Organization = z.infer<typeof organizationSchema>;\nexport type Product = z.infer<typeof productSchema>;\nexport type VaultConfig = z.infer<typeof vaultConfigSchema>;\nexport type LendingConfig = z.infer<typeof lendingConfigSchema>;\nexport type Incentive = z.infer<typeof incentiveSchema>;\nexport type Opportunity = z.infer<typeof opportunitySchema>;\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\nexport const opportunityFiltersSchema = z.object({\n tokenId: z.string().uuid().optional(),\n chain: z.string().optional(),\n productId: z.string().uuid().optional(),\n});\nexport type OpportunityFilters = z.infer<typeof opportunityFiltersSchema>;\n\nexport const opportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema),\n total: z.number().optional(),\n});\n\nexport type OpportunitiesResponse = z.infer<typeof opportunitiesResponseSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport type { OpportunityFilters, OpportunitiesResponse } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\nimport { opportunitySchema } from \"../schemas/shared\";\nimport { opportunitiesResponseSchema } from \"./schema\";\n\n// GET /turtle/opportunities\nexport async function getOpportunities(\n filters?: OpportunityFilters,\n options?: { debug?: boolean }\n): Promise<OpportunitiesResponse> {\n const params = new URLSearchParams();\n\n if (filters?.tokenId) params.append(\"tokenId\", filters.tokenId);\n if (filters?.chain) params.append(\"chain\", filters.chain);\n if (filters?.productId) params.append(\"productId\", filters.productId);\n\n const queryString = params.toString();\n const endpoint = `/turtle/opportunities${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /turtle/opportunities/{id}\nexport async function getOpportunityById(\n id: string,\n options?: { debug?: boolean }\n): Promise<Opportunity> {\n const data = await apiClient(`/turtle/opportunities/${id}`, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = opportunitySchema.safeParse(data);\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse opportunity: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnOpportunities } from \"./api\";\n\nexport const earnOpportunitiesQueries = createQueryKeys(\"earnOpportunities\", {\n all: {\n queryKey: null,\n queryFn: (context) => getEarnOpportunities(context),\n },\n});\n","import { z } from \"zod\";\nimport { chainSchema, tokenSchema } from \"../schemas/shared\";\n\n// Earn Opportunity Response Schema\nexport const earnOpportunitySchema = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string(),\n type: z.string(),\n estimatedApr: z.number(),\n tvl: z.number(),\n featured: z.boolean(),\n baseTokens: tokenSchema,\n depositTokens: z.array(tokenSchema).nullable(),\n receiptToken: tokenSchema,\n});\n\n// Earn Opportunities Response Schema\nexport const earnOpportunitiesResponseSchema = z.object({\n opportunities: z.array(earnOpportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type EarnOpportunity = z.infer<typeof earnOpportunitySchema>;\nexport type EarnOpportunitiesResponse = z.infer<typeof earnOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnOpportunitiesResponse } from \"./schema\";\nimport { earnOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/opportunities\nexport async function getEarnOpportunities(\n context?: QueryFunctionContext\n): Promise<EarnOpportunitiesResponse> {\n const data = await apiClient(\"/v1/opportunities/\", {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = earnOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getEarnRoute } from \"./api\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport const earnRouteQueries = createQueryKeys(\"earnRoute\", {\n // Get earn route with specific parameters\n byParams: (params: EarnRouteParams) => ({\n queryKey: [params],\n queryFn: (context) => getEarnRoute(params, context),\n }),\n});\n","import { ethz } from \"@turtleclub/utils\";\nimport { z } from \"zod\";\n\n// Asset schemas\nexport const assetImageData = z.object({\n kind: z.literal(\"image\"),\n url: z.string(),\n alt: z.string(),\n});\n\nexport const assetERC20Data = z.object({\n kind: z.literal(\"erc20\"),\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n decimals: z.number(),\n});\n\nexport const assetData = z.discriminatedUnion(\"kind\", [assetImageData, assetERC20Data]);\n\nexport const asset = z.object({\n id: z.string().uuid(),\n name: z.string(),\n slugs: z.array(z.string()),\n tags: z.array(z.string()),\n description: z.string().nullable(),\n data: z.array(assetData),\n});\n\n// Token schema\nexport const routeToken = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\n// Router substeps\nexport const swapSubstep = z.object({\n kind: z.literal(\"swap\"),\n from: z.array(routeToken),\n to: z.array(routeToken),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const depositSubstep = z.object({\n kind: z.literal(\"deposit\"),\n vault: z.string(),\n from: z.array(routeToken),\n to: z.array(routeToken),\n amount: z.string(),\n protocol: z.string(),\n protocol_asset: asset.nullable(),\n price_impact: z.number().nullable(),\n});\n\nexport const routerSubstep = z.discriminatedUnion(\"kind\", [swapSubstep, depositSubstep]);\n\n// Transaction schema\nexport const stepTx = z.object({\n from: ethz.address(),\n to: ethz.address(),\n data: ethz.hex(),\n value: z.string(),\n gas: z.number(),\n});\n\n// Router steps\nexport const approveStep = z.object({\n kind: z.literal(\"approve\"),\n owner: z.string(),\n spender: z.string(),\n token: routeToken,\n amount: z.string(),\n tx: stepTx,\n});\n\nexport const ensoStep = z.object({\n kind: z.literal(\"enso\"),\n substeps: z.array(routerSubstep),\n tx: stepTx,\n asset: asset.nullable(),\n});\n\nexport const routerStep = z.discriminatedUnion(\"kind\", [approveStep, ensoStep]);\n\n// Earn Route Response\nexport const earnRouteResponseSchema = z.object({\n steps: z.array(routerStep),\n amount_out: z.string(),\n price_impact: z.number().nullable(),\n});\n\n// Earn Route Request Params\nexport interface EarnRouteParams {\n user: string;\n chain: number;\n slippage: number;\n token_in: string;\n token_out: string;\n amount: string;\n distributor_id: string;\n referral_code?: string;\n // @deprecated productId is not supported anymore\n id?: string;\n}\n\nexport type AssetImageData = z.infer<typeof assetImageData>;\nexport type AssetERC20Data = z.infer<typeof assetERC20Data>;\nexport type AssetData = z.infer<typeof assetData>;\nexport type Asset = z.infer<typeof asset>;\nexport type RouteToken = z.infer<typeof routeToken>;\nexport type SwapSubstep = z.infer<typeof swapSubstep>;\nexport type DepositSubstep = z.infer<typeof depositSubstep>;\nexport type RouterSubstep = z.infer<typeof routerSubstep>;\nexport type StepTx = z.infer<typeof stepTx>;\nexport type ApproveStep = z.infer<typeof approveStep>;\nexport type EnsoStep = z.infer<typeof ensoStep>;\nexport type RouterStep = z.infer<typeof routerStep>;\nexport type EarnRouteResponse = z.infer<typeof earnRouteResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { EarnRouteResponse, EarnRouteParams } from \"./schema\";\nimport { earnRouteResponseSchema } from \"./schema\";\n\n// GET /v1/route\nexport async function getEarnRoute(\n params: EarnRouteParams,\n context?: QueryFunctionContext\n): Promise<EarnRouteResponse> {\n const searchParams = new URLSearchParams({\n user: params.user,\n chain: params.chain.toString(),\n slippage: params.slippage.toString(),\n token_in: params.token_in,\n token_out: params.token_out,\n amount: params.amount,\n distributor_id: params.distributor_id,\n ...(params.referral_code && { referral_code: params.referral_code }),\n ...(params.id && { id: params.id }),\n });\n\n const response = await apiClient(`/v1/route/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n }) as { data: unknown };\n\n const data = response.data;\n const result = earnRouteResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse earn route: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { checkMembership } from \"./api\";\nimport type { CheckMembershipParams } from \"./schema\";\n\nexport const earnMembershipQueries = createQueryKeys(\"earnMembership\", {\n // Check membership status\n check: (params: CheckMembershipParams) => ({\n queryKey: [params],\n queryFn: (context) => checkMembership(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Wallet Ecosystem Enum\nexport const walletEcosystemEnum = z.enum([\"evm\", \"solana\", \"ton\"]);\n\n// GET /v1/membership/ - Check Membership\nexport interface CheckMembershipParams {\n address: string;\n walletEcosystem?: \"evm\" | \"solana\" | \"ton\";\n}\n\nexport const checkMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n});\n\n// POST /v1/membership/agreement - Create Agreement\nexport const createAgreementRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: walletEcosystemEnum,\n url: z.string(),\n chainId: z.string().default(\"1\"),\n});\n\nexport const createAgreementResponseSchema = z.object({\n message: z.string(),\n nonce: z.string(),\n});\n\n// POST /v1/membership/ - Create Membership\nexport const createMembershipRequestSchema = z.object({\n address: z.string(),\n walletEcosystem: z.string(),\n signature: z.string(),\n nonce: z.string(),\n});\n\nexport const createMembershipResponseSchema = z.object({\n isMember: z.boolean(),\n error: z.string().optional(),\n});\n\nexport type WalletEcosystem = z.infer<typeof walletEcosystemEnum>;\nexport type CheckMembershipResponse = z.infer<typeof checkMembershipResponseSchema>;\nexport type CreateAgreementRequest = z.infer<typeof createAgreementRequestSchema>;\nexport type CreateAgreementResponse = z.infer<typeof createAgreementResponseSchema>;\nexport type CreateMembershipRequest = z.infer<typeof createMembershipRequestSchema>;\nexport type CreateMembershipResponse = z.infer<typeof createMembershipResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type {\n CheckMembershipParams,\n CheckMembershipResponse,\n CreateAgreementRequest,\n CreateAgreementResponse,\n CreateMembershipRequest,\n CreateMembershipResponse,\n} from \"./schema\";\nimport {\n checkMembershipResponseSchema,\n createAgreementResponseSchema,\n createMembershipResponseSchema,\n} from \"./schema\";\n\n// GET /v1/membership/ - Check if wallet is a member\nexport async function checkMembership(\n params: CheckMembershipParams,\n context?: QueryFunctionContext\n): Promise<CheckMembershipResponse> {\n const searchParams = new URLSearchParams({\n address: params.address,\n ...(params.walletEcosystem && { walletEcosystem: params.walletEcosystem }),\n });\n\n const data = await apiClient(`/v1/membership/?${searchParams.toString()}`, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = checkMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse check membership: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/agreement - Create membership agreement\nexport async function createMembershipAgreement(\n request: CreateAgreementRequest\n): Promise<CreateAgreementResponse> {\n const data = await apiClient(\"/v1/membership/agreement\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createAgreementResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create agreement: ${result.error.message}`);\n }\n return result.data;\n}\n\n// POST /v1/membership/ - Create membership\nexport async function createMembership(\n request: CreateMembershipRequest\n): Promise<CreateMembershipResponse> {\n const data = await apiClient(\"/v1/membership/\", {\n method: \"POST\",\n domain: \"earn\",\n body: JSON.stringify(request),\n });\n\n const result = createMembershipResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse create membership: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getDeposits } from \"./api\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport const earnDepositsQueries = createQueryKeys(\"earnDeposits\", {\n byParams: (params: GetDepositsParams) => ({\n queryKey: [params],\n queryFn: (context) => getDeposits(params, context),\n }),\n});\n","import { z } from \"zod\";\n\n// Deposit Schema\nexport const depositSchema = z.object({\n chain: z.number().int(),\n deposited_amount_usd: z.string(),\n deposited_token_address: z.string(),\n deposited_token_decimals: z.number().int(),\n deposited_token_logo: z.string(),\n deposited_token_name: z.string(),\n deposited_token_symbol: z.string(),\n deposited_value: z.string(),\n depositor: z.string(),\n target: z.string(),\n timestamp: z.string(),\n tx_hash: z.string(),\n});\n\n// Deposits Response Schema\nexport const depositsResponseSchema = z.object({\n deposits: z.array(depositSchema).nullable(),\n});\n\n// Deposits Request Params\nexport interface GetDepositsParams {\n distributor_id: string;\n depositor?: string;\n limit?: number;\n offset?: number;\n}\n\nexport type Deposit = z.infer<typeof depositSchema>;\nexport type DepositsResponse = z.infer<typeof depositsResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetDepositsParams, DepositsResponse } from \"./schema\";\nimport { depositsResponseSchema } from \"./schema\";\n\n// GET /v1/deposit/{distributor_id}\nexport async function getDeposits(\n params: GetDepositsParams,\n context?: QueryFunctionContext\n): Promise<DepositsResponse> {\n const { distributor_id, depositor, limit, offset } = params;\n\n const searchParams = new URLSearchParams({\n ...(depositor && { depositor }),\n ...(limit && { limit: limit.toString() }),\n ...(offset && { offset: offset.toString() }),\n });\n\n const queryString = searchParams.toString();\n const endpoint = `/v1/deposit/${distributor_id}${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n domain: \"earn\",\n signal: context?.signal,\n });\n\n const result = depositsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse deposits: ${result.error.message}`);\n }\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { createProduct, deleteProduct, getProducts, updateProduct } from \"./api\";\nimport { ProductCreateInput, ProductUpdateInput } from \"./schema\";\n\nexport const productsQueries = createQueryKeys(\"products\", {\n // Get all products (no filters)\n all: {\n queryKey: null,\n queryFn: () => getProducts(),\n },\n\n // Get single product by ID\n byId: (id: string) => ({\n queryKey: [id],\n // Replace by true query then\n queryFn: async () => {\n const products = await getProducts();\n return products.products.find((product) => product.id === id);\n },\n }),\n});\n","import { z } from \"zod\";\nimport { productSchema } from \"../schemas/shared\";\nimport { organization } from \"@turtleclub/api\";\n\nexport const productsResponseSchema = z.object({\n products: z.array(productSchema),\n total: z.number().optional(),\n});\n\nexport type ProductsResponse = z.infer<typeof productsResponseSchema>;\n\nexport const productCreateInputSchema = z.object({\n name: z.string(),\n title: z.string().optional().nullable(),\n subtitle: z.string().optional().nullable(),\n description: z.string().optional().nullable(),\n logoUrl: z.string().optional().nullable(),\n productUrl: z.string().optional().nullable(),\n startedAt: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n\n // Relations\n organizationId: z.string().uuid(),\n});\n\nexport type ProductCreateInput = z.infer<typeof productCreateInputSchema>;\n\nexport const productUpdateInputSchema = productCreateInputSchema.extend({\n id: z.string().uuid(),\n});\n\nexport type ProductUpdateInput = z.infer<typeof productUpdateInputSchema>;\n","import { apiClient } from \"../lib/api-client\";\nimport { Product, productSchema } from \"../schemas/shared\";\nimport {\n ProductCreateInput,\n ProductsResponse,\n productsResponseSchema,\n ProductUpdateInput,\n} from \"./schema\";\n\n// GET /admin/products\nexport async function getProducts(options?: { debug?: boolean }): Promise<ProductsResponse> {\n const params = new URLSearchParams();\n\n const queryString = params.toString();\n const endpoint = `/admin/products${queryString ? `?${queryString}` : \"\"}`;\n\n const data = await apiClient(endpoint, {\n method: \"GET\",\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productsResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse products: ${result.error.message}`);\n }\n return result.data;\n}\n\n// GET /admin/products/:id\n\n// POST /admin/products\nexport async function createProduct(\n input: ProductCreateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products`;\n\n const data = await apiClient(endpoint, {\n method: \"POST\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to create product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// PUT /admin/products/:id\nexport async function updateProduct(\n input: ProductUpdateInput,\n options?: { debug?: boolean }\n): Promise<Product> {\n const endpoint = `/admin/products/${input.id}`;\n\n const data = await apiClient(endpoint, {\n method: \"PUT\",\n body: JSON.stringify(input),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to update product: ${result.error.message}`);\n }\n return result.data;\n}\n\n// DELETE /admin/products/:id\nexport async function deleteProduct(id: string, options?: { debug?: boolean }): Promise<void> {\n const endpoint = `/admin/products/${id}`;\n\n const data = await apiClient(endpoint, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n debug: options?.debug,\n });\n\n // Validate response with Zod\n const result = productSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to delete product: ${result.error.message}`);\n }\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWalletBalances } from \"./api\";\nimport type { GetWalletBalancesParams } from \"./schemas\";\n\nexport const ensoBalancesQueries = createQueryKeys(\"ensoBalances\", {\n byParams: (params: GetWalletBalancesParams) => ({\n queryKey: [params],\n queryFn: (context) => getWalletBalances(params, context),\n }),\n});\n","import { z } from \"zod\";\n\nexport const balanceTokenSchema = z.object({\n address: z.string(),\n name: z.string(),\n symbol: z.string(),\n logos: z.array(z.string()),\n decimals: z.number(),\n chain: z.number(),\n price: z.number().nullable().optional(),\n});\n\nexport const walletBalanceSchema = z.object({\n token: balanceTokenSchema,\n amount: z.string(),\n});\n\nexport interface GetWalletBalancesParams {\n user: string;\n chain: number;\n}\n\nexport const walletBalancesResponseSchema = z.object({\n balances: z.array(walletBalanceSchema),\n});\n\nexport type BalanceToken = z.infer<typeof balanceTokenSchema>;\nexport type WalletBalance = z.infer<typeof walletBalanceSchema>;\nexport type WalletBalancesResponse = z.infer<typeof walletBalancesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { GetWalletBalancesParams, WalletBalancesResponse } from \"./schemas\";\nimport { walletBalancesResponseSchema } from \"./schemas\";\n\n// GET /v1/api/wallet_balances\nexport async function getWalletBalances(\n params: GetWalletBalancesParams,\n context?: QueryFunctionContext\n): Promise<WalletBalancesResponse> {\n const { user, chain } = params;\n\n const searchParams = new URLSearchParams({\n user,\n chain: chain.toString(),\n });\n\n const endpoint = `/v1/api/wallet_balances?${searchParams.toString()}`;\n\n const data = await apiClient<\"custom\">(endpoint, {\n method: \"GET\",\n domain: \"custom\",\n baseUrl: \"https://earn.turtle.vision\",\n signal: context?.signal,\n });\n\n const result = walletBalancesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse wallet balances: ${result.error.message}`);\n }\n\n return result.data;\n}\n","import { createQueryKeys } from \"@lukemorales/query-key-factory\";\nimport { getWidgetOpportunities } from \"./api\";\n\nexport const widgetQueries = createQueryKeys(\"widget\", {\n opportunities: (distributorId: string) => ({\n queryKey: [distributorId],\n queryFn: (context) => getWidgetOpportunities(distributorId, context),\n }),\n});\n","import { z } from \"zod\";\nimport { opportunitySchema } from \"../schemas/shared\";\n\n// Widget Opportunities Response Schema\nexport const widgetOpportunitiesResponseSchema = z.object({\n opportunities: z.array(opportunitySchema).nullable(),\n total: z.number().int(),\n});\n\nexport type WidgetOpportunitiesResponse = z.infer<typeof widgetOpportunitiesResponseSchema>;\n","import type { QueryFunctionContext } from \"@tanstack/react-query\";\nimport { apiClient } from \"../lib/api-client\";\nimport type { WidgetOpportunitiesResponse } from \"./schema\";\nimport { widgetOpportunitiesResponseSchema } from \"./schema\";\n\n// GET /v1/widget/{distributorId}/opportunities\nexport async function getWidgetOpportunities(\n distributorId: string,\n context?: QueryFunctionContext\n): Promise<WidgetOpportunitiesResponse> {\n const data = await apiClient(`/widget/${distributorId}/opportunities`, {\n method: \"GET\",\n signal: context?.signal,\n });\n\n const result = widgetOpportunitiesResponseSchema.safeParse(data);\n\n if (result.success === false) {\n console.log(\"[ZOD ERROR]\", result.error);\n throw new Error(`Failed to parse widget opportunities: ${result.error.message}`);\n }\n return result.data;\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnOpportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\n\nexport function useEarnOpportunities() {\n return useQuery({\n ...earnOpportunitiesQueries.all,\n ...queryDefaults,\n });\n}\n","// Default TanStack Query configuration\n// Override per-query as needed\n\nexport const queryDefaults = {\n staleTime: 5 * 60 * 1000, // 5 minutes - data is fresh\n gcTime: 10 * 60 * 1000, // 10 minutes - cache garbage collection (formerly cacheTime)\n retry: 1, // Retry failed requests once\n refetchOnWindowFocus: false, // Don't refetch on tab focus\n} as const;\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnRouteQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { EarnRouteParams } from \"./schema\";\n\nexport interface UseEarnRouteOptions {\n params?: EarnRouteParams;\n enabled?: boolean;\n}\n\nexport function useEarnRoute({ params, enabled = true }: UseEarnRouteOptions) {\n return useQuery({\n // Null assertion is safe because the query is enable only if params is provided\n ...earnRouteQueries.byParams(params!),\n ...queryDefaults,\n enabled: !!params && enabled,\n });\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { earnMembershipQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { createMembershipAgreement, createMembership } from \"./api\";\nimport type {\n CheckMembershipParams,\n CreateAgreementRequest,\n CreateMembershipRequest,\n} from \"./schema\";\n\n// Query hook for checking membership\nexport interface UseCheckMembershipOptions {\n params: CheckMembershipParams;\n enabled?: boolean;\n}\n\nexport function useCheckMembership({\n params,\n enabled = true,\n}: UseCheckMembershipOptions) {\n return useQuery({\n ...earnMembershipQueries.check(params),\n ...queryDefaults,\n enabled,\n });\n}\n\n// Mutation hook for creating membership agreement\nexport function useCreateMembershipAgreement() {\n return useMutation({\n mutationFn: (request: CreateAgreementRequest) =>\n createMembershipAgreement(request),\n });\n}\n\n// Mutation hook for creating membership\nexport function useCreateMembership() {\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (request: CreateMembershipRequest) => createMembership(request),\n onSuccess: (data, variables) => {\n queryClient.invalidateQueries({\n queryKey: earnMembershipQueries.check({\n address: variables.address,\n walletEcosystem: variables.walletEcosystem as \"evm\" | \"solana\" | \"ton\",\n }).queryKey,\n });\n },\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { earnDepositsQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { GetDepositsParams } from \"./schema\";\n\nexport interface UseDepositsOptions {\n params: GetDepositsParams;\n enabled?: boolean;\n}\n\nexport function useDeposits({ params, enabled = true }: UseDepositsOptions) {\n return useQuery({\n ...earnDepositsQueries.byParams(params),\n ...queryDefaults,\n enabled,\n });\n}\n","import { useEffect, useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport type { Asset } from \"@turtleclub/ui\";\nimport { ensoBalancesQueries } from \"./queries\";\nimport type { WalletBalancesResponse } from \"./schemas\";\n\ninterface MultiChainBalancesParams {\n chainIds: number[];\n address?: string;\n}\n\ninterface MultiChainBalancesResult {\n balances: Record<number, WalletBalancesResponse[\"balances\"]>;\n isLoading: boolean;\n error: Error | null;\n refetchAll: () => void;\n}\n\nexport function useMultiChainBalances({\n chainIds,\n address,\n}: MultiChainBalancesParams): MultiChainBalancesResult {\n const queries = useQueries({\n queries: chainIds.map((chainId) => ({\n ...ensoBalancesQueries.byParams({ user: address || \"\", chain: chainId }),\n enabled: !!address,\n staleTime: 60 * 1000,\n refetchInterval: 3 * 60 * 1000,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n })),\n });\n\n const isLoading = queries.some((query) => query.isLoading);\n const error = queries.find((query) => query.error)?.error || null;\n\n const refetchAll = () => {\n queries.forEach((query) => {\n query.refetch();\n });\n };\n\n // Aggregate results\n const balances = useMemo(() => {\n const balanceMap: Record<number, WalletBalancesResponse[\"balances\"]> = {};\n\n queries.forEach((query, index) => {\n const chainId = chainIds[index];\n if (query.data && chainId !== undefined) {\n balanceMap[chainId] = query.data.balances;\n }\n });\n\n return balanceMap;\n }, [queries, chainIds]);\n\n return {\n balances,\n isLoading,\n error,\n refetchAll,\n };\n}\n","import { useQuery, type UseQueryOptions, type UseQueryResult } from \"@tanstack/react-query\";\nimport { opportunitiesQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { OpportunitiesResponse, OpportunityFilters } from \"./schema\";\nimport type { Opportunity } from \"../schemas/shared\";\n\nexport interface UseOpportunitiesOptions\n extends Omit<UseQueryOptions<OpportunitiesResponse>, \"queryKey\" | \"queryFn\"> {\n filters?: OpportunityFilters;\n}\n\nexport function useOpportunities(options?: UseOpportunitiesOptions) {\n return useQuery({\n ...opportunitiesQueries.all,\n ...queryDefaults,\n select: (data: OpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n .map((opportunity) => opportunity.receiptToken?.chain)\n .filter((chain) => chain !== undefined)\n .map((chain) => [chain.id, chain])\n );\n\n const chains = Array.from(uniqueChainsMap.values());\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n\nexport interface UseOpportunityOptions\n extends Omit<UseQueryOptions<Opportunity>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useOpportunity({ id, ...options }: UseOpportunityOptions) {\n return useQuery({\n ...opportunitiesQueries.byId(id),\n ...queryDefaults,\n select: (data: Opportunity) => {\n return {\n ...data,\n chain: data.receiptToken?.chain,\n };\n },\n });\n}\n","import {\n useMutation,\n UseMutationOptions,\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport type { ProductCreateInput, ProductsResponse, ProductUpdateInput } from \"./schema\";\nimport type { Product } from \"../schemas/shared\";\nimport { productsQueries } from \"./queries\";\nimport { createProduct, deleteProduct, updateProduct } from \"./api\";\n\nexport interface UseProductsOptions\n extends Omit<UseQueryOptions<ProductsResponse>, \"queryKey\" | \"queryFn\"> {}\n\nexport function useProducts(options?: UseProductsOptions) {\n return useQuery({ ...productsQueries.all, ...queryDefaults });\n}\n\nexport interface UseProductOptions extends Omit<UseQueryOptions<Product>, \"queryKey\" | \"queryFn\"> {\n id: string;\n}\n\nexport function useProduct({ id, ...options }: UseProductOptions) {\n return useQuery({ ...productsQueries.byId(id), ...queryDefaults });\n}\n\nexport interface UseCreateProductOptions\n extends Omit<UseMutationOptions<ProductCreateInput>, \"mutationFn\"> {}\n\nexport function useCreateProduct({ ...options }: UseCreateProductOptions) {\n return useMutation({ mutationFn: createProduct });\n}\n\nexport interface UseUpdateProductOptions\n extends Omit<UseMutationOptions<ProductUpdateInput>, \"mutationFn\"> {}\n\nexport function useUpdateProduct({ ...options }: UseUpdateProductOptions) {\n return useMutation({ mutationFn: updateProduct });\n}\n\nexport interface UseDeleteProductOptions extends Omit<UseMutationOptions<string>, \"mutationFn\"> {}\n\nexport function useDeleteProduct({ ...options }: UseDeleteProductOptions) {\n return useMutation({ mutationFn: deleteProduct });\n}\n","import { useCallback, useMemo } from \"react\";\nimport { parseUnits } from \"viem\";\nimport { calculateUsdValue, checkInsufficientBalance, calculateMaxAmount } from \"@turtleclub/utils\";\n\ninterface UseTokenBalanceProps {\n token:\n | {\n balance: string;\n decimals: number;\n price?: number;\n }\n | null\n | undefined;\n amount: string | undefined;\n setAmount: (amount: string | undefined) => void;\n}\n\nexport function useTokenBalance({ token, amount, setAmount }: UseTokenBalanceProps) {\n const usdValue = useMemo(() => calculateUsdValue(amount, token?.price), [amount, token?.price]);\n\n const hasInsufficientBalance = useMemo(\n () => checkInsufficientBalance(token, amount),\n [token, amount]\n );\n\n const handleMaxClick = useCallback(() => {\n if (!token) return;\n const maxAmount = calculateMaxAmount(token.balance, token.decimals);\n setAmount(maxAmount);\n }, [token, setAmount]);\n\n const amountBigInt = useMemo(() => {\n if (!token || !amount) return undefined;\n try {\n return parseUnits(amount, token.decimals);\n } catch {\n return undefined;\n }\n }, [amount, token]);\n\n return {\n usdValue,\n hasInsufficientBalance,\n handleMaxClick,\n amountBigInt,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { widgetQueries } from \"./queries\";\nimport { queryDefaults } from \"../lib/query-config\";\nimport { WidgetOpportunitiesResponse } from \"./schema\";\n\nexport function useWidgetOpportunities(distributorId: string) {\n return useQuery({\n ...widgetQueries.opportunities(distributorId),\n ...queryDefaults,\n select: (data: WidgetOpportunitiesResponse) => {\n const uniqueChainsMap = new Map(\n data.opportunities\n ?.map((opportunity) => opportunity.receiptToken?.chain)\n ?.filter((chain) => chain !== undefined)\n ?.map((chain) => [chain.id, chain]) || []\n );\n\n const chains = Array.from(uniqueChainsMap.values()) || [];\n\n return {\n ...data,\n chains,\n };\n },\n });\n}\n"],"mappings":"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","names":["defaultConfig","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","projectTvl","defaultConfig","useQuery","projectTvl","defaultConfig","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","useQuery","earnCampaigns","defaultConfig","useQuery","earnCampaigns","useQuery","defaultConfig","useQuery","useQuery","defaultConfig","useQuery","z","z","createQueryKeys","z","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","z","createQueryKeys","createQueryKeys","z","createQueryKeys","createQueryKeys","z","z","createQueryKeys","useQuery","useQuery","useQuery","useQuery","useQuery","useMutation","useQuery","useMutation","useQuery","useQuery","queries","useQuery","useQuery","useMutation","useQuery","useQuery","useMutation","useMemo","useQuery","useQuery"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@turtleclub/hooks",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.4.0-beta.
|
|
4
|
+
"version": "0.4.0-beta.5",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "fd04628024969bc5a79ae91e579c59b013a3cef4"
|
|
60
60
|
}
|
package/src/v2/lib/api-client.ts
CHANGED