@cypher-zk/sdk 0.7.3 → 0.7.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.
@@ -1,5 +1,5 @@
1
1
  import React, { ReactNode } from 'react';
2
- import { C as CypherClient, G as GlobalStateAccount, M as MarketAccount, E as EncryptedPositionAccount, R as ResolutionActionResult, A as AdminOverrideResolutionInputs, a as CancelMarketParams, b as ClaimResult, c as ClaimInputs, d as CreateMarketResult, e as CreateMarketParams, F as FinalizeResolutionInputs, f as FlagResolutionInputs, P as PlaceBetResult, g as PlaceBetInputs, h as ResolveMarketResult, i as ResolveMarketInputs, S as SubscribeOptions, j as CypherEvent } from '../client-BECBXFEY.js';
2
+ import { C as CypherClient, G as GlobalStateAccount, M as MarketAccount, E as EncryptedPositionAccount, R as ResolutionActionResult, A as AdminOverrideResolutionInputs, a as CancelMarketParams, b as ClaimResult, c as ClaimInputs, d as CreateMarketResult, e as CreateMarketParams, F as FinalizeResolutionInputs, f as FlagResolutionInputs, P as PlaceBetResult, g as PlaceBetInputs, h as ResolveMarketResult, i as ResolveMarketInputs, S as SubscribeOptions, j as CypherEvent } from '../client-C6xXOySs.js';
3
3
  import * as _tanstack_react_query from '@tanstack/react-query';
4
4
  import { UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
5
5
  import { PublicKey } from '@solana/web3.js';
@@ -136,8 +136,12 @@ declare function usePlaceBet(opts?: Omit<UseMutationOptions<PlaceBetResult, Erro
136
136
  declare function useResolveMarket(opts?: Omit<UseMutationOptions<ResolveMarketResult, Error, ResolveMarketInputs>, "mutationFn">): _tanstack_react_query.UseMutationResult<ResolveMarketResult, Error, ResolveMarketInputs, unknown>;
137
137
  declare function useClaimPayout(opts?: Omit<UseMutationOptions<ClaimResult, Error, ClaimInputs>, "mutationFn">): _tanstack_react_query.UseMutationResult<ClaimResult, Error, ClaimInputs, unknown>;
138
138
  declare function useClaimRefund(opts?: Omit<UseMutationOptions<ClaimResult, Error, ClaimInputs>, "mutationFn">): _tanstack_react_query.UseMutationResult<ClaimResult, Error, ClaimInputs, unknown>;
139
- type CreateMarketInputs = Omit<CreateMarketParams, "expectedMarketId" | "acceptedMint"> & {
139
+ type CreateMarketInputs = Omit<CreateMarketParams, "expectedMarketId" | "acceptedMint" | "challengePeriod" | "bondAmount"> & {
140
140
  acceptedMint?: PublicKey;
141
+ /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */
142
+ challengePeriod?: bigint | number;
143
+ /** Defaults to MIN_CREATOR_BOND ($20 USDC). */
144
+ bondAmount?: bigint | number;
141
145
  };
142
146
  declare function useCreateMarket(opts?: Omit<UseMutationOptions<CreateMarketResult, Error, CreateMarketInputs>, "mutationFn">): _tanstack_react_query.UseMutationResult<CreateMarketResult, Error, CreateMarketInputs, unknown>;
143
147
  type CancelMarketInputs = Omit<CancelMarketParams, "acceptedMint"> & {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../react/src/CypherProvider.tsx","../../react/src/useGlobalState.ts","../../react/src/useMarket.ts","../../react/src/useUserPositions.ts","../../react/src/mutations.ts","../../react/src/useMarketEvents.ts"],"names":["useQuery"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { CypherClient } from \"../../src/client.ts\";\n\n/* -----------------------------------------------------------------------\n * Context\n * ----------------------------------------------------------------------- */\n\ninterface CypherContextValue {\n client: CypherClient;\n}\n\nconst CypherContext = createContext<CypherContextValue | null>(null);\n\n/* -----------------------------------------------------------------------\n * Provider\n * ----------------------------------------------------------------------- */\n\nexport interface CypherProviderProps {\n /**\n * A fully-constructed `CypherClient`. The provider does NOT manage\n * lifecycle — the host app creates the client (with its own connection\n * + wallet) and passes it in.\n */\n client: CypherClient;\n children: ReactNode;\n}\n\n/**\n * Provides a `CypherClient` instance to the React tree. All SDK hooks\n * read from this context — mount exactly one `<CypherProvider>` at the\n * top of your app (or the feature subtree that needs it).\n *\n * @example\n * ```tsx\n * import { CypherClient } from \"@cypher/sdk\";\n * import { CypherProvider } from \"@cypher/sdk/react\";\n *\n * const client = new CypherClient({ connection, wallet, cluster: \"devnet\" });\n *\n * function App() {\n * return (\n * <CypherProvider client={client}>\n * <MarketList />\n * </CypherProvider>\n * );\n * }\n * ```\n */\nexport function CypherProvider({ client, children }: CypherProviderProps) {\n const value = useMemo<CypherContextValue>(() => ({ client }), [client]);\n return React.createElement(CypherContext.Provider, { value }, children);\n}\n\n/* -----------------------------------------------------------------------\n * Hook\n * ----------------------------------------------------------------------- */\n\n/**\n * Returns the `CypherClient` from the nearest `<CypherProvider>`.\n * Throws if called outside the provider tree.\n */\nexport function useCypherClient(): CypherClient {\n const ctx = useContext(CypherContext);\n if (!ctx) {\n throw new Error(\n \"useCypherClient must be used within a <CypherProvider>. \" +\n \"Wrap your component tree with <CypherProvider client={client}>.\",\n );\n }\n return ctx.client;\n}\n","\"use client\";\n\nimport { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { GlobalStateAccount } from \"../../src/accounts/globalState.ts\";\n\n/** Query key factory — keeps cache keys stable across the app. */\nexport const globalStateKeys = {\n all: [\"cypher\", \"globalState\"] as const,\n};\n\n/**\n * Fetches the on-chain `GlobalState` singleton (protocol fees, admin,\n * accepted mint, market counter). Automatically cached via React Query.\n *\n * @example\n * ```tsx\n * const { data: gs, isLoading } = useGlobalState();\n * if (gs) console.log(\"Fee rate:\", gs.protocolFeeRate);\n * ```\n */\nexport function useGlobalState(\n opts?: Omit<\n UseQueryOptions<GlobalStateAccount, Error>,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n return useQuery<GlobalStateAccount, Error>({\n queryKey: globalStateKeys.all,\n queryFn: () => client.globalState.fetch({ refresh: true }),\n staleTime: 30_000, // 30s — global state changes rarely\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport type { PublicKey } from \"@solana/web3.js\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { MarketAccount } from \"../../src/accounts/market.ts\";\n\nexport const marketKeys = {\n all: [\"cypher\", \"market\"] as const,\n one: (id: bigint | number) => [\"cypher\", \"market\", String(id)] as const,\n byCreator: (creator: PublicKey) =>\n [\"cypher\", \"market\", \"creator\", creator.toBase58()] as const,\n byState: (state: number) =>\n [\"cypher\", \"market\", \"state\", state] as const,\n};\n\n/**\n * Fetch a single market by its numeric `marketId`.\n *\n * @example\n * ```tsx\n * const { data: market } = useMarket(42n);\n * ```\n */\nexport function useMarket(\n marketId: bigint | number,\n opts?: Omit<\n UseQueryOptions<MarketAccount | null, Error>,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n return useQuery<MarketAccount | null, Error>({\n queryKey: marketKeys.one(marketId),\n queryFn: () => client.markets.fetch(marketId),\n staleTime: 10_000,\n ...opts,\n });\n}\n\nexport interface UseMarketsFilter {\n creator?: PublicKey;\n state?: number;\n}\n\n/**\n * Fetch multiple markets, optionally filtered by creator or state.\n * With no filter, fetches **all** markets (expensive on large deployments).\n *\n * @example\n * ```tsx\n * const { data: active } = useMarkets({ state: MarketState.Active });\n * ```\n */\nexport function useMarkets(\n filter?: UseMarketsFilter,\n opts?: Omit<\n UseQueryOptions<\n Array<{ publicKey: PublicKey; account: MarketAccount }>,\n Error\n >,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n\n const queryKey = filter?.creator\n ? marketKeys.byCreator(filter.creator)\n : filter?.state !== undefined\n ? marketKeys.byState(filter.state)\n : marketKeys.all;\n\n const queryFn = () => {\n if (filter?.creator) return client.markets.byCreator(filter.creator);\n if (filter?.state !== undefined) return client.markets.byState(filter.state);\n return client.markets.all();\n };\n\n return useQuery({\n queryKey,\n queryFn,\n staleTime: 10_000,\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport type { PublicKey } from \"@solana/web3.js\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { EncryptedPositionAccount } from \"../../src/accounts/position.ts\";\n\nexport const positionKeys = {\n byUser: (user: PublicKey) =>\n [\"cypher\", \"position\", \"user\", user.toBase58()] as const,\n forMarket: (market: PublicKey) =>\n [\"cypher\", \"position\", \"market\", market.toBase58()] as const,\n};\n\n/**\n * Fetch all positions for a given user across all markets.\n *\n * Accepts `PublicKey | null` — when `user` is `null` the query is\n * automatically disabled so no RPC call is made and no crash occurs.\n *\n * @example\n * ```tsx\n * const { data: positions } = useUserPositions(wallet.publicKey);\n * ```\n */\nexport function useUserPositions(\n user: PublicKey | null,\n opts?: Omit<\n UseQueryOptions<\n Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>,\n Error\n >,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n return useQuery({\n queryKey: user\n ? positionKeys.byUser(user)\n : [\"cypher\", \"position\", \"user\", null],\n queryFn: () => client.positions.byUser(user!),\n staleTime: 5_000,\n enabled: !!user,\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useMutation, useQueryClient, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport { marketKeys } from \"./useMarket.ts\";\nimport { positionKeys } from \"./useUserPositions.ts\";\nimport type { PlaceBetInputs, PlaceBetResult } from \"../../src/actions/placeBet.ts\";\nimport type { ResolveMarketInputs, ResolveMarketResult } from \"../../src/actions/resolveMarket.ts\";\nimport type { ClaimInputs, ClaimResult } from \"../../src/actions/claim.ts\";\nimport type { CreateMarketResult } from \"../../src/actions/createMarket.ts\";\nimport type {\n CreateMarketParams,\n CancelMarketParams,\n} from \"../../src/instructions/market.ts\";\nimport type { PublicKey } from \"@solana/web3.js\";\nimport type { MarketAccount } from \"../../src/accounts/market.ts\";\n\n/* -----------------------------------------------------------------------\n * usePlaceBet\n * ----------------------------------------------------------------------- */\n\n/**\n * Mutation hook for the end-to-end `placeBet` action: encrypt → send →\n * await callback → refetch position. Invalidates the market + position\n * queries on success.\n *\n * @example\n * ```tsx\n * const { mutateAsync: placeBet, isPending } = usePlaceBet();\n * await placeBet({ payer: wallet.publicKey, user: wallet.publicKey, marketId: 1n, side: 0, amountUsdc: 5_000_000n });\n * ```\n */\nexport function usePlaceBet(\n opts?: Omit<UseMutationOptions<PlaceBetResult, Error, PlaceBetInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<PlaceBetResult, Error, PlaceBetInputs>({\n mutationFn: (inputs) => client.actions.placeBet(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: positionKeys.byUser(vars.user) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useResolveMarket\n * ----------------------------------------------------------------------- */\n\nexport function useResolveMarket(\n opts?: Omit<UseMutationOptions<ResolveMarketResult, Error, ResolveMarketInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolveMarketResult, Error, ResolveMarketInputs>({\n mutationFn: (inputs) => client.actions.resolveMarket(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useClaimPayout\n * ----------------------------------------------------------------------- */\n\nexport function useClaimPayout(\n opts?: Omit<UseMutationOptions<ClaimResult, Error, ClaimInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ClaimResult, Error, ClaimInputs>({\n mutationFn: (inputs) => client.actions.claimPayout(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: positionKeys.byUser(vars.user) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useClaimRefund\n * ----------------------------------------------------------------------- */\n\nexport function useClaimRefund(\n opts?: Omit<UseMutationOptions<ClaimResult, Error, ClaimInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ClaimResult, Error, ClaimInputs>({\n mutationFn: (inputs) => client.actions.claimRefund(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: positionKeys.byUser(vars.user) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useCreateMarket\n * ----------------------------------------------------------------------- */\n\ntype CreateMarketInputs = Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\"> & {\n acceptedMint?: PublicKey;\n};\n\nexport function useCreateMarket(\n opts?: Omit<UseMutationOptions<CreateMarketResult, Error, CreateMarketInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<CreateMarketResult, Error, CreateMarketInputs>({\n mutationFn: (inputs) => client.actions.createMarket(inputs),\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: marketKeys.all });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useCancelMarket\n * ----------------------------------------------------------------------- */\n\ntype CancelMarketInputs = Omit<CancelMarketParams, \"acceptedMint\"> & {\n acceptedMint?: PublicKey;\n};\n\nexport function useCancelMarket(\n opts?: Omit<\n UseMutationOptions<{ signature: string; market: MarketAccount | null }, Error, CancelMarketInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (inputs: CancelMarketInputs) => client.actions.cancelMarket(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: marketKeys.all });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * Dispute / challenge window mutation hooks (v0.2+)\n * ----------------------------------------------------------------------- */\n\nimport type {\n FlagResolutionInputs,\n FinalizeResolutionInputs,\n AdminOverrideResolutionInputs,\n ResolutionActionResult,\n} from \"../../src/actions/resolution.ts\";\n\nexport function useFlagResolution(\n opts?: Omit<\n UseMutationOptions<ResolutionActionResult, Error, FlagResolutionInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolutionActionResult, Error, FlagResolutionInputs>({\n mutationFn: (inputs) => client.actions.flagResolution(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n\nexport function useFinalizeResolution(\n opts?: Omit<\n UseMutationOptions<ResolutionActionResult, Error, FinalizeResolutionInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolutionActionResult, Error, FinalizeResolutionInputs>({\n mutationFn: (inputs) => client.actions.finalizeResolution(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n\nexport function useAdminOverrideResolution(\n opts?: Omit<\n UseMutationOptions<ResolutionActionResult, Error, AdminOverrideResolutionInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolutionActionResult, Error, AdminOverrideResolutionInputs>({\n mutationFn: (inputs) => client.actions.adminOverrideResolution(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { CypherEvent } from \"../../src/events/parser.ts\";\nimport type { EventSubscription, SubscribeOptions } from \"../../src/events/subscribe.ts\";\n\n/**\n * Subscribe to all Cypher events for the lifetime of the component.\n * Returns the latest batch of events as an ever-growing array (newest\n * last). Clear the buffer by re-mounting the component.\n *\n * @example\n * ```tsx\n * const events = useMarketEvents();\n * // events: CypherEvent[]\n * ```\n */\nexport function useMarketEvents(opts?: SubscribeOptions): CypherEvent[] {\n const client = useCypherClient();\n const [events, setEvents] = useState<CypherEvent[]>([]);\n const subRef = useRef<EventSubscription | null>(null);\n\n useEffect(() => {\n subRef.current = client.events.subscribeAll((event) => {\n setEvents((prev) => [...prev, event]);\n }, opts);\n return () => {\n subRef.current?.unsubscribe();\n subRef.current = null;\n };\n // Re-subscribe when the client identity changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client]);\n\n return events;\n}\n"]}
1
+ {"version":3,"sources":["../../react/src/CypherProvider.tsx","../../react/src/useGlobalState.ts","../../react/src/useMarket.ts","../../react/src/useUserPositions.ts","../../react/src/mutations.ts","../../react/src/useMarketEvents.ts"],"names":["useQuery"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { CypherClient } from \"../../src/client.ts\";\n\n/* -----------------------------------------------------------------------\n * Context\n * ----------------------------------------------------------------------- */\n\ninterface CypherContextValue {\n client: CypherClient;\n}\n\nconst CypherContext = createContext<CypherContextValue | null>(null);\n\n/* -----------------------------------------------------------------------\n * Provider\n * ----------------------------------------------------------------------- */\n\nexport interface CypherProviderProps {\n /**\n * A fully-constructed `CypherClient`. The provider does NOT manage\n * lifecycle — the host app creates the client (with its own connection\n * + wallet) and passes it in.\n */\n client: CypherClient;\n children: ReactNode;\n}\n\n/**\n * Provides a `CypherClient` instance to the React tree. All SDK hooks\n * read from this context — mount exactly one `<CypherProvider>` at the\n * top of your app (or the feature subtree that needs it).\n *\n * @example\n * ```tsx\n * import { CypherClient } from \"@cypher/sdk\";\n * import { CypherProvider } from \"@cypher/sdk/react\";\n *\n * const client = new CypherClient({ connection, wallet, cluster: \"devnet\" });\n *\n * function App() {\n * return (\n * <CypherProvider client={client}>\n * <MarketList />\n * </CypherProvider>\n * );\n * }\n * ```\n */\nexport function CypherProvider({ client, children }: CypherProviderProps) {\n const value = useMemo<CypherContextValue>(() => ({ client }), [client]);\n return React.createElement(CypherContext.Provider, { value }, children);\n}\n\n/* -----------------------------------------------------------------------\n * Hook\n * ----------------------------------------------------------------------- */\n\n/**\n * Returns the `CypherClient` from the nearest `<CypherProvider>`.\n * Throws if called outside the provider tree.\n */\nexport function useCypherClient(): CypherClient {\n const ctx = useContext(CypherContext);\n if (!ctx) {\n throw new Error(\n \"useCypherClient must be used within a <CypherProvider>. \" +\n \"Wrap your component tree with <CypherProvider client={client}>.\",\n );\n }\n return ctx.client;\n}\n","\"use client\";\n\nimport { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { GlobalStateAccount } from \"../../src/accounts/globalState.ts\";\n\n/** Query key factory — keeps cache keys stable across the app. */\nexport const globalStateKeys = {\n all: [\"cypher\", \"globalState\"] as const,\n};\n\n/**\n * Fetches the on-chain `GlobalState` singleton (protocol fees, admin,\n * accepted mint, market counter). Automatically cached via React Query.\n *\n * @example\n * ```tsx\n * const { data: gs, isLoading } = useGlobalState();\n * if (gs) console.log(\"Fee rate:\", gs.protocolFeeRate);\n * ```\n */\nexport function useGlobalState(\n opts?: Omit<\n UseQueryOptions<GlobalStateAccount, Error>,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n return useQuery<GlobalStateAccount, Error>({\n queryKey: globalStateKeys.all,\n queryFn: () => client.globalState.fetch({ refresh: true }),\n staleTime: 30_000, // 30s — global state changes rarely\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport type { PublicKey } from \"@solana/web3.js\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { MarketAccount } from \"../../src/accounts/market.ts\";\n\nexport const marketKeys = {\n all: [\"cypher\", \"market\"] as const,\n one: (id: bigint | number) => [\"cypher\", \"market\", String(id)] as const,\n byCreator: (creator: PublicKey) =>\n [\"cypher\", \"market\", \"creator\", creator.toBase58()] as const,\n byState: (state: number) =>\n [\"cypher\", \"market\", \"state\", state] as const,\n};\n\n/**\n * Fetch a single market by its numeric `marketId`.\n *\n * @example\n * ```tsx\n * const { data: market } = useMarket(42n);\n * ```\n */\nexport function useMarket(\n marketId: bigint | number,\n opts?: Omit<\n UseQueryOptions<MarketAccount | null, Error>,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n return useQuery<MarketAccount | null, Error>({\n queryKey: marketKeys.one(marketId),\n queryFn: () => client.markets.fetch(marketId),\n staleTime: 10_000,\n ...opts,\n });\n}\n\nexport interface UseMarketsFilter {\n creator?: PublicKey;\n state?: number;\n}\n\n/**\n * Fetch multiple markets, optionally filtered by creator or state.\n * With no filter, fetches **all** markets (expensive on large deployments).\n *\n * @example\n * ```tsx\n * const { data: active } = useMarkets({ state: MarketState.Active });\n * ```\n */\nexport function useMarkets(\n filter?: UseMarketsFilter,\n opts?: Omit<\n UseQueryOptions<\n Array<{ publicKey: PublicKey; account: MarketAccount }>,\n Error\n >,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n\n const queryKey = filter?.creator\n ? marketKeys.byCreator(filter.creator)\n : filter?.state !== undefined\n ? marketKeys.byState(filter.state)\n : marketKeys.all;\n\n const queryFn = () => {\n if (filter?.creator) return client.markets.byCreator(filter.creator);\n if (filter?.state !== undefined) return client.markets.byState(filter.state);\n return client.markets.all();\n };\n\n return useQuery({\n queryKey,\n queryFn,\n staleTime: 10_000,\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport type { PublicKey } from \"@solana/web3.js\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { EncryptedPositionAccount } from \"../../src/accounts/position.ts\";\n\nexport const positionKeys = {\n byUser: (user: PublicKey) =>\n [\"cypher\", \"position\", \"user\", user.toBase58()] as const,\n forMarket: (market: PublicKey) =>\n [\"cypher\", \"position\", \"market\", market.toBase58()] as const,\n};\n\n/**\n * Fetch all positions for a given user across all markets.\n *\n * Accepts `PublicKey | null` — when `user` is `null` the query is\n * automatically disabled so no RPC call is made and no crash occurs.\n *\n * @example\n * ```tsx\n * const { data: positions } = useUserPositions(wallet.publicKey);\n * ```\n */\nexport function useUserPositions(\n user: PublicKey | null,\n opts?: Omit<\n UseQueryOptions<\n Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>,\n Error\n >,\n \"queryKey\" | \"queryFn\"\n >,\n) {\n const client = useCypherClient();\n return useQuery({\n queryKey: user\n ? positionKeys.byUser(user)\n : [\"cypher\", \"position\", \"user\", null],\n queryFn: () => client.positions.byUser(user!),\n staleTime: 5_000,\n enabled: !!user,\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useMutation, useQueryClient, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport { marketKeys } from \"./useMarket.ts\";\nimport { positionKeys } from \"./useUserPositions.ts\";\nimport type { PlaceBetInputs, PlaceBetResult } from \"../../src/actions/placeBet.ts\";\nimport type { ResolveMarketInputs, ResolveMarketResult } from \"../../src/actions/resolveMarket.ts\";\nimport type { ClaimInputs, ClaimResult } from \"../../src/actions/claim.ts\";\nimport type { CreateMarketResult } from \"../../src/actions/createMarket.ts\";\nimport type {\n CreateMarketParams,\n CancelMarketParams,\n} from \"../../src/instructions/market.ts\";\nimport type { PublicKey } from \"@solana/web3.js\";\nimport type { MarketAccount } from \"../../src/accounts/market.ts\";\n\n/* -----------------------------------------------------------------------\n * usePlaceBet\n * ----------------------------------------------------------------------- */\n\n/**\n * Mutation hook for the end-to-end `placeBet` action: encrypt → send →\n * await callback → refetch position. Invalidates the market + position\n * queries on success.\n *\n * @example\n * ```tsx\n * const { mutateAsync: placeBet, isPending } = usePlaceBet();\n * await placeBet({ payer: wallet.publicKey, user: wallet.publicKey, marketId: 1n, side: 0, amountUsdc: 5_000_000n });\n * ```\n */\nexport function usePlaceBet(\n opts?: Omit<UseMutationOptions<PlaceBetResult, Error, PlaceBetInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<PlaceBetResult, Error, PlaceBetInputs>({\n mutationFn: (inputs) => client.actions.placeBet(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: positionKeys.byUser(vars.user) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useResolveMarket\n * ----------------------------------------------------------------------- */\n\nexport function useResolveMarket(\n opts?: Omit<UseMutationOptions<ResolveMarketResult, Error, ResolveMarketInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolveMarketResult, Error, ResolveMarketInputs>({\n mutationFn: (inputs) => client.actions.resolveMarket(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useClaimPayout\n * ----------------------------------------------------------------------- */\n\nexport function useClaimPayout(\n opts?: Omit<UseMutationOptions<ClaimResult, Error, ClaimInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ClaimResult, Error, ClaimInputs>({\n mutationFn: (inputs) => client.actions.claimPayout(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: positionKeys.byUser(vars.user) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useClaimRefund\n * ----------------------------------------------------------------------- */\n\nexport function useClaimRefund(\n opts?: Omit<UseMutationOptions<ClaimResult, Error, ClaimInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ClaimResult, Error, ClaimInputs>({\n mutationFn: (inputs) => client.actions.claimRefund(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: positionKeys.byUser(vars.user) });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useCreateMarket\n * ----------------------------------------------------------------------- */\n\ntype CreateMarketInputs = Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\" | \"bondAmount\"> & {\n acceptedMint?: PublicKey;\n /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */\n challengePeriod?: bigint | number;\n /** Defaults to MIN_CREATOR_BOND ($20 USDC). */\n bondAmount?: bigint | number;\n};\n\nexport function useCreateMarket(\n opts?: Omit<UseMutationOptions<CreateMarketResult, Error, CreateMarketInputs>, \"mutationFn\">,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<CreateMarketResult, Error, CreateMarketInputs>({\n mutationFn: (inputs) => client.actions.createMarket(inputs),\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: marketKeys.all });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * useCancelMarket\n * ----------------------------------------------------------------------- */\n\ntype CancelMarketInputs = Omit<CancelMarketParams, \"acceptedMint\"> & {\n acceptedMint?: PublicKey;\n};\n\nexport function useCancelMarket(\n opts?: Omit<\n UseMutationOptions<{ signature: string; market: MarketAccount | null }, Error, CancelMarketInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (inputs: CancelMarketInputs) => client.actions.cancelMarket(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n qc.invalidateQueries({ queryKey: marketKeys.all });\n },\n ...opts,\n });\n}\n\n/* -----------------------------------------------------------------------\n * Dispute / challenge window mutation hooks (v0.2+)\n * ----------------------------------------------------------------------- */\n\nimport type {\n FlagResolutionInputs,\n FinalizeResolutionInputs,\n AdminOverrideResolutionInputs,\n ResolutionActionResult,\n} from \"../../src/actions/resolution.ts\";\n\nexport function useFlagResolution(\n opts?: Omit<\n UseMutationOptions<ResolutionActionResult, Error, FlagResolutionInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolutionActionResult, Error, FlagResolutionInputs>({\n mutationFn: (inputs) => client.actions.flagResolution(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n\nexport function useFinalizeResolution(\n opts?: Omit<\n UseMutationOptions<ResolutionActionResult, Error, FinalizeResolutionInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolutionActionResult, Error, FinalizeResolutionInputs>({\n mutationFn: (inputs) => client.actions.finalizeResolution(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n\nexport function useAdminOverrideResolution(\n opts?: Omit<\n UseMutationOptions<ResolutionActionResult, Error, AdminOverrideResolutionInputs>,\n \"mutationFn\"\n >,\n) {\n const client = useCypherClient();\n const qc = useQueryClient();\n return useMutation<ResolutionActionResult, Error, AdminOverrideResolutionInputs>({\n mutationFn: (inputs) => client.actions.adminOverrideResolution(inputs),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: marketKeys.one(vars.marketId) });\n },\n ...opts,\n });\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { useCypherClient } from \"./CypherProvider.tsx\";\nimport type { CypherEvent } from \"../../src/events/parser.ts\";\nimport type { EventSubscription, SubscribeOptions } from \"../../src/events/subscribe.ts\";\n\n/**\n * Subscribe to all Cypher events for the lifetime of the component.\n * Returns the latest batch of events as an ever-growing array (newest\n * last). Clear the buffer by re-mounting the component.\n *\n * @example\n * ```tsx\n * const events = useMarketEvents();\n * // events: CypherEvent[]\n * ```\n */\nexport function useMarketEvents(opts?: SubscribeOptions): CypherEvent[] {\n const client = useCypherClient();\n const [events, setEvents] = useState<CypherEvent[]>([]);\n const subRef = useRef<EventSubscription | null>(null);\n\n useEffect(() => {\n subRef.current = client.events.subscribeAll((event) => {\n setEvents((prev) => [...prev, event]);\n }, opts);\n return () => {\n subRef.current?.unsubscribe();\n subRef.current = null;\n };\n // Re-subscribe when the client identity changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client]);\n\n return events;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cypher-zk/sdk",
3
- "version": "0.7.3",
3
+ "version": "0.7.5",
4
4
  "description": "TypeScript SDK for the Cypher prediction market (Arcium + Anchor on Solana)",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",