@0xslots/sdk 0.10.1 → 0.10.2
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/{chunk-VQ5PSOCE.js → chunk-PZ2PG636.js} +44 -69
- package/dist/chunk-PZ2PG636.js.map +1 -0
- package/dist/{client-BcIWQW9H.d.ts → client-pupk2FMg.d.ts} +4 -8
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +2 -15
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-VQ5PSOCE.js.map +0 -1
|
@@ -4327,7 +4327,6 @@ declare class SlotsClient {
|
|
|
4327
4327
|
private readonly _publicClient?;
|
|
4328
4328
|
private readonly walletClient?;
|
|
4329
4329
|
private readonly _factory?;
|
|
4330
|
-
private _atomicSupport;
|
|
4331
4330
|
/** Module namespaces for protocol extensions. */
|
|
4332
4331
|
readonly modules: {
|
|
4333
4332
|
metadata: MetadataModuleClient;
|
|
@@ -4537,16 +4536,13 @@ declare class SlotsClient {
|
|
|
4537
4536
|
functionName: string;
|
|
4538
4537
|
args?: any[];
|
|
4539
4538
|
}[]): Promise<Hash>;
|
|
4540
|
-
/** Check if wallet supports atomic batch calls (EIP-5792). */
|
|
4541
|
-
private supportsAtomicBatch;
|
|
4542
|
-
/** Poll EIP-5792 getCallsStatus until the batch settles, then return a tx hash. */
|
|
4543
|
-
private pollBatchReceipt;
|
|
4544
4539
|
/**
|
|
4545
|
-
*
|
|
4546
|
-
*
|
|
4547
|
-
* Otherwise: chains approve tx (if needed) then action tx.
|
|
4540
|
+
* Approve → confirm on-chain → execute call sequentially.
|
|
4541
|
+
* Skips approval if the existing allowance already covers the amount.
|
|
4548
4542
|
*/
|
|
4549
4543
|
private withAllowance;
|
|
4544
|
+
/** Poll `check` every `delayMs` until it returns a truthy value or `maxAttempts` is exhausted. */
|
|
4545
|
+
private pollUntil;
|
|
4550
4546
|
}
|
|
4551
4547
|
declare function createSlotsClient(config: SlotsClientConfig): SlotsClient;
|
|
4552
4548
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SlotsChain } from './client-
|
|
2
|
-
export { A as Account, a as AccountFieldsFragment, b as AccountFieldsFragmentDoc, c as AccountSlotsAsOccupantArgs, d as AccountSlotsAsRecipientArgs, e as AccountType, f as Account_Filter, g as Account_OrderBy, h as Aggregation_Current, i as Aggregation_Interval, B as BlockChangedFilter, j as Block_Height, k as BoughtEvent, l as BoughtEvent_Filter, m as BoughtEvent_OrderBy, n as BuyParams, C as CreateSlotParams, o as CreateSlotsParams, p as Currency, q as CurrencyFieldsFragment, r as CurrencyFieldsFragmentDoc, s as Currency_Filter, t as Currency_OrderBy, D as DepositedEvent, u as DepositedEvent_Filter, v as DepositedEvent_OrderBy, E as Exact, F as Factory, w as FactoryModulesArgs, x as Factory_Filter, y as Factory_OrderBy, G as GetAccountDocument, z as GetAccountQuery, H as GetAccountQueryVariables, I as GetAccountsDocument, J as GetAccountsQuery, K as GetAccountsQueryVariables, L as GetBoughtEventsDocument, M as GetBoughtEventsQuery, N as GetBoughtEventsQueryVariables, O as GetDepositedEventsDocument, P as GetDepositedEventsQuery, Q as GetDepositedEventsQueryVariables, R as GetFactoryDocument, T as GetFactoryQuery, U as GetFactoryQueryVariables, V as GetLiquidatedEventsDocument, W as GetLiquidatedEventsQuery, X as GetLiquidatedEventsQueryVariables, Y as GetMetadataSlotDocument, Z as GetMetadataSlotQuery, _ as GetMetadataSlotQueryVariables, $ as GetMetadataSlotsByRecipientDocument, a0 as GetMetadataSlotsByRecipientQuery, a1 as GetMetadataSlotsByRecipientQueryVariables, a2 as GetMetadataSlotsDocument, a3 as GetMetadataSlotsQuery, a4 as GetMetadataSlotsQueryVariables, a5 as GetMetadataUpdatedEventsDocument, a6 as GetMetadataUpdatedEventsQuery, a7 as GetMetadataUpdatedEventsQueryVariables, a8 as GetModulesDocument, a9 as GetModulesQuery, aa as GetModulesQueryVariables, ab as GetPriceUpdatedEventsDocument, ac as GetPriceUpdatedEventsQuery, ad as GetPriceUpdatedEventsQueryVariables, ae as GetRecentEventsDocument, af as GetRecentEventsQuery, ag as GetRecentEventsQueryVariables, ah as GetReleasedEventsDocument, ai as GetReleasedEventsQuery, aj as GetReleasedEventsQueryVariables, ak as GetSettledEventsDocument, al as GetSettledEventsQuery, am as GetSettledEventsQueryVariables, an as GetSlotActivityDocument, ao as GetSlotActivityQuery, ap as GetSlotActivityQueryVariables, aq as GetSlotDeployedEventsDocument, ar as GetSlotDeployedEventsQuery, as as GetSlotDeployedEventsQueryVariables, at as GetSlotDocument, au as GetSlotQuery, av as GetSlotQueryVariables, aw as GetSlotsByOccupantDocument, ax as GetSlotsByOccupantQuery, ay as GetSlotsByOccupantQueryVariables, az as GetSlotsByRecipientDocument, aA as GetSlotsByRecipientQuery, aB as GetSlotsByRecipientQueryVariables, aC as GetSlotsDocument, aD as GetSlotsQuery, aE as GetSlotsQueryVariables, aF as GetTaxCollectedEventsDocument, aG as GetTaxCollectedEventsQuery, aH as GetTaxCollectedEventsQueryVariables, aI as GetWithdrawnEventsDocument, aJ as GetWithdrawnEventsQuery, aK as GetWithdrawnEventsQueryVariables, aL as Incremental, aM as InputMaybe, aN as LiquidatedEvent, aO as LiquidatedEvent_Filter, aP as LiquidatedEvent_OrderBy, aQ as MakeEmpty, aR as MakeMaybe, aS as MakeOptional, aT as Maybe, aU as MetadataModuleClient, aV as MetadataSlot, aW as MetadataSlotFieldsFragment, aX as MetadataSlotFieldsFragmentDoc, aY as MetadataSlot_Filter, aZ as MetadataSlot_OrderBy, a_ as MetadataUpdatedEvent, a$ as MetadataUpdatedEvent_Filter, b0 as MetadataUpdatedEvent_OrderBy, b1 as Module, b2 as ModuleUpdateProposedEvent, b3 as ModuleUpdateProposedEvent_Filter, b4 as ModuleUpdateProposedEvent_OrderBy, b5 as Module_Filter, b6 as Module_OrderBy, b7 as NftCollection, b8 as NftCollectionTokensArgs, b9 as NftCollection_Filter, ba as NftCollection_OrderBy, bb as NftToken, bc as NftToken_Filter, bd as NftToken_OrderBy, be as OrderDirection, bf as PendingUpdateCancelledEvent, bg as PendingUpdateCancelledEvent_Filter, bh as PendingUpdateCancelledEvent_OrderBy, bi as PriceUpdatedEvent, bj as PriceUpdatedEvent_Filter, bk as PriceUpdatedEvent_OrderBy, bl as Query, bm as QueryAccountArgs, bn as QueryAccountsArgs, bo as QueryBoughtEventArgs, bp as QueryBoughtEventsArgs, bq as QueryCurrenciesArgs, br as QueryCurrencyArgs, bs as QueryDepositedEventArgs, bt as QueryDepositedEventsArgs, bu as QueryFactoriesArgs, bv as QueryFactoryArgs, bw as QueryLiquidatedEventArgs, bx as QueryLiquidatedEventsArgs, by as QueryMetadataSlotArgs, bz as QueryMetadataSlotsArgs, bA as QueryMetadataUpdatedEventArgs, bB as QueryMetadataUpdatedEventsArgs, bC as QueryModuleArgs, bD as QueryModuleUpdateProposedEventArgs, bE as QueryModuleUpdateProposedEventsArgs, bF as QueryModulesArgs, bG as QueryNftcollectionArgs, bH as QueryNftcollectionsArgs, bI as QueryNfttokenArgs, bJ as QueryNfttokensArgs, bK as QueryPendingUpdateCancelledEventArgs, bL as QueryPendingUpdateCancelledEventsArgs, bM as QueryPriceUpdatedEventArgs, bN as QueryPriceUpdatedEventsArgs, bO as QueryReleasedEventArgs, bP as QueryReleasedEventsArgs, bQ as QuerySettledEventArgs, bR as QuerySettledEventsArgs, bS as QuerySlotArgs, bT as QuerySlotDeployedEventArgs, bU as QuerySlotDeployedEventsArgs, bV as QuerySlotsArgs, bW as QueryTaxCollectedEventArgs, bX as QueryTaxCollectedEventsArgs, bY as QueryTaxUpdateProposedEventArgs, bZ as QueryTaxUpdateProposedEventsArgs, b_ as QueryWithdrawnEventArgs, b$ as QueryWithdrawnEventsArgs, c0 as Query_MetaArgs, c1 as ReleasedEvent, c2 as ReleasedEvent_Filter, c3 as ReleasedEvent_OrderBy, c4 as SUBGRAPH_URLS, c5 as Scalars, c6 as Sdk, c7 as SdkFunctionWrapper, c8 as SettledEvent, c9 as SettledEvent_Filter, ca as SettledEvent_OrderBy, cb as Slot, cc as SlotConfig, cd as SlotDeployedEvent, ce as SlotDeployedEvent_Filter, cf as SlotDeployedEvent_OrderBy, cg as SlotDepositsArgs, ch as SlotFieldsFragment, ci as SlotFieldsFragmentDoc, cj as SlotInitParams, ck as SlotLiquidationsArgs, cl as SlotMetadataUpdatesArgs, cm as SlotModuleUpdateProposalsArgs, cn as SlotPendingUpdateCancellationsArgs, co as SlotPriceUpdatesArgs, cp as SlotPurchasesArgs, cq as SlotReleasesArgs, cr as SlotSettlementsArgs, cs as SlotTaxCollectionsArgs, ct as SlotTaxUpdateProposalsArgs, cu as SlotWithdrawalsArgs, cv as Slot_Filter, cw as Slot_OrderBy, cx as SlotsClient, cy as SlotsClientConfig, cz as SubgraphMeta, cA as TaxCollectedEvent, cB as TaxCollectedEvent_Filter, cC as TaxCollectedEvent_OrderBy, cD as TaxUpdateProposedEvent, cE as TaxUpdateProposedEvent_Filter, cF as TaxUpdateProposedEvent_OrderBy, cG as WithdrawnEvent, cH as WithdrawnEvent_Filter, cI as WithdrawnEvent_OrderBy, cJ as _Block_, cK as _Meta_, cL as _SubgraphErrorPolicy_, cM as createSlotsClient, cN as getSdk } from './client-
|
|
1
|
+
import { S as SlotsChain } from './client-pupk2FMg.js';
|
|
2
|
+
export { A as Account, a as AccountFieldsFragment, b as AccountFieldsFragmentDoc, c as AccountSlotsAsOccupantArgs, d as AccountSlotsAsRecipientArgs, e as AccountType, f as Account_Filter, g as Account_OrderBy, h as Aggregation_Current, i as Aggregation_Interval, B as BlockChangedFilter, j as Block_Height, k as BoughtEvent, l as BoughtEvent_Filter, m as BoughtEvent_OrderBy, n as BuyParams, C as CreateSlotParams, o as CreateSlotsParams, p as Currency, q as CurrencyFieldsFragment, r as CurrencyFieldsFragmentDoc, s as Currency_Filter, t as Currency_OrderBy, D as DepositedEvent, u as DepositedEvent_Filter, v as DepositedEvent_OrderBy, E as Exact, F as Factory, w as FactoryModulesArgs, x as Factory_Filter, y as Factory_OrderBy, G as GetAccountDocument, z as GetAccountQuery, H as GetAccountQueryVariables, I as GetAccountsDocument, J as GetAccountsQuery, K as GetAccountsQueryVariables, L as GetBoughtEventsDocument, M as GetBoughtEventsQuery, N as GetBoughtEventsQueryVariables, O as GetDepositedEventsDocument, P as GetDepositedEventsQuery, Q as GetDepositedEventsQueryVariables, R as GetFactoryDocument, T as GetFactoryQuery, U as GetFactoryQueryVariables, V as GetLiquidatedEventsDocument, W as GetLiquidatedEventsQuery, X as GetLiquidatedEventsQueryVariables, Y as GetMetadataSlotDocument, Z as GetMetadataSlotQuery, _ as GetMetadataSlotQueryVariables, $ as GetMetadataSlotsByRecipientDocument, a0 as GetMetadataSlotsByRecipientQuery, a1 as GetMetadataSlotsByRecipientQueryVariables, a2 as GetMetadataSlotsDocument, a3 as GetMetadataSlotsQuery, a4 as GetMetadataSlotsQueryVariables, a5 as GetMetadataUpdatedEventsDocument, a6 as GetMetadataUpdatedEventsQuery, a7 as GetMetadataUpdatedEventsQueryVariables, a8 as GetModulesDocument, a9 as GetModulesQuery, aa as GetModulesQueryVariables, ab as GetPriceUpdatedEventsDocument, ac as GetPriceUpdatedEventsQuery, ad as GetPriceUpdatedEventsQueryVariables, ae as GetRecentEventsDocument, af as GetRecentEventsQuery, ag as GetRecentEventsQueryVariables, ah as GetReleasedEventsDocument, ai as GetReleasedEventsQuery, aj as GetReleasedEventsQueryVariables, ak as GetSettledEventsDocument, al as GetSettledEventsQuery, am as GetSettledEventsQueryVariables, an as GetSlotActivityDocument, ao as GetSlotActivityQuery, ap as GetSlotActivityQueryVariables, aq as GetSlotDeployedEventsDocument, ar as GetSlotDeployedEventsQuery, as as GetSlotDeployedEventsQueryVariables, at as GetSlotDocument, au as GetSlotQuery, av as GetSlotQueryVariables, aw as GetSlotsByOccupantDocument, ax as GetSlotsByOccupantQuery, ay as GetSlotsByOccupantQueryVariables, az as GetSlotsByRecipientDocument, aA as GetSlotsByRecipientQuery, aB as GetSlotsByRecipientQueryVariables, aC as GetSlotsDocument, aD as GetSlotsQuery, aE as GetSlotsQueryVariables, aF as GetTaxCollectedEventsDocument, aG as GetTaxCollectedEventsQuery, aH as GetTaxCollectedEventsQueryVariables, aI as GetWithdrawnEventsDocument, aJ as GetWithdrawnEventsQuery, aK as GetWithdrawnEventsQueryVariables, aL as Incremental, aM as InputMaybe, aN as LiquidatedEvent, aO as LiquidatedEvent_Filter, aP as LiquidatedEvent_OrderBy, aQ as MakeEmpty, aR as MakeMaybe, aS as MakeOptional, aT as Maybe, aU as MetadataModuleClient, aV as MetadataSlot, aW as MetadataSlotFieldsFragment, aX as MetadataSlotFieldsFragmentDoc, aY as MetadataSlot_Filter, aZ as MetadataSlot_OrderBy, a_ as MetadataUpdatedEvent, a$ as MetadataUpdatedEvent_Filter, b0 as MetadataUpdatedEvent_OrderBy, b1 as Module, b2 as ModuleUpdateProposedEvent, b3 as ModuleUpdateProposedEvent_Filter, b4 as ModuleUpdateProposedEvent_OrderBy, b5 as Module_Filter, b6 as Module_OrderBy, b7 as NftCollection, b8 as NftCollectionTokensArgs, b9 as NftCollection_Filter, ba as NftCollection_OrderBy, bb as NftToken, bc as NftToken_Filter, bd as NftToken_OrderBy, be as OrderDirection, bf as PendingUpdateCancelledEvent, bg as PendingUpdateCancelledEvent_Filter, bh as PendingUpdateCancelledEvent_OrderBy, bi as PriceUpdatedEvent, bj as PriceUpdatedEvent_Filter, bk as PriceUpdatedEvent_OrderBy, bl as Query, bm as QueryAccountArgs, bn as QueryAccountsArgs, bo as QueryBoughtEventArgs, bp as QueryBoughtEventsArgs, bq as QueryCurrenciesArgs, br as QueryCurrencyArgs, bs as QueryDepositedEventArgs, bt as QueryDepositedEventsArgs, bu as QueryFactoriesArgs, bv as QueryFactoryArgs, bw as QueryLiquidatedEventArgs, bx as QueryLiquidatedEventsArgs, by as QueryMetadataSlotArgs, bz as QueryMetadataSlotsArgs, bA as QueryMetadataUpdatedEventArgs, bB as QueryMetadataUpdatedEventsArgs, bC as QueryModuleArgs, bD as QueryModuleUpdateProposedEventArgs, bE as QueryModuleUpdateProposedEventsArgs, bF as QueryModulesArgs, bG as QueryNftcollectionArgs, bH as QueryNftcollectionsArgs, bI as QueryNfttokenArgs, bJ as QueryNfttokensArgs, bK as QueryPendingUpdateCancelledEventArgs, bL as QueryPendingUpdateCancelledEventsArgs, bM as QueryPriceUpdatedEventArgs, bN as QueryPriceUpdatedEventsArgs, bO as QueryReleasedEventArgs, bP as QueryReleasedEventsArgs, bQ as QuerySettledEventArgs, bR as QuerySettledEventsArgs, bS as QuerySlotArgs, bT as QuerySlotDeployedEventArgs, bU as QuerySlotDeployedEventsArgs, bV as QuerySlotsArgs, bW as QueryTaxCollectedEventArgs, bX as QueryTaxCollectedEventsArgs, bY as QueryTaxUpdateProposedEventArgs, bZ as QueryTaxUpdateProposedEventsArgs, b_ as QueryWithdrawnEventArgs, b$ as QueryWithdrawnEventsArgs, c0 as Query_MetaArgs, c1 as ReleasedEvent, c2 as ReleasedEvent_Filter, c3 as ReleasedEvent_OrderBy, c4 as SUBGRAPH_URLS, c5 as Scalars, c6 as Sdk, c7 as SdkFunctionWrapper, c8 as SettledEvent, c9 as SettledEvent_Filter, ca as SettledEvent_OrderBy, cb as Slot, cc as SlotConfig, cd as SlotDeployedEvent, ce as SlotDeployedEvent_Filter, cf as SlotDeployedEvent_OrderBy, cg as SlotDepositsArgs, ch as SlotFieldsFragment, ci as SlotFieldsFragmentDoc, cj as SlotInitParams, ck as SlotLiquidationsArgs, cl as SlotMetadataUpdatesArgs, cm as SlotModuleUpdateProposalsArgs, cn as SlotPendingUpdateCancellationsArgs, co as SlotPriceUpdatesArgs, cp as SlotPurchasesArgs, cq as SlotReleasesArgs, cr as SlotSettlementsArgs, cs as SlotTaxCollectionsArgs, ct as SlotTaxUpdateProposalsArgs, cu as SlotWithdrawalsArgs, cv as Slot_Filter, cw as Slot_OrderBy, cx as SlotsClient, cy as SlotsClientConfig, cz as SubgraphMeta, cA as TaxCollectedEvent, cB as TaxCollectedEvent_Filter, cC as TaxCollectedEvent_OrderBy, cD as TaxUpdateProposedEvent, cE as TaxUpdateProposedEvent_Filter, cF as TaxUpdateProposedEvent_OrderBy, cG as WithdrawnEvent, cH as WithdrawnEvent_Filter, cI as WithdrawnEvent_OrderBy, cJ as _Block_, cK as _Meta_, cL as _SubgraphErrorPolicy_, cM as createSlotsClient, cN as getSdk } from './client-pupk2FMg.js';
|
|
3
3
|
import { Address } from 'viem';
|
|
4
4
|
import 'graphql-request';
|
|
5
5
|
import 'graphql';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AccountFieldsFragmentDoc, CurrencyFieldsFragmentDoc, GetAccountDocument, GetAccountsDocument, GetBoughtEventsDocument, GetDepositedEventsDocument, GetFactoryDocument, GetLiquidatedEventsDocument, GetMetadataSlotDocument, GetMetadataSlotsByRecipientDocument, GetMetadataSlotsDocument, GetMetadataUpdatedEventsDocument, GetModulesDocument, GetPriceUpdatedEventsDocument, GetRecentEventsDocument, GetReleasedEventsDocument, GetSettledEventsDocument, GetSlotActivityDocument, GetSlotDeployedEventsDocument, GetSlotDocument, GetSlotsByOccupantDocument, GetSlotsByRecipientDocument, GetSlotsDocument, GetTaxCollectedEventsDocument, GetWithdrawnEventsDocument, MetadataModuleClient, MetadataSlotFieldsFragmentDoc, SUBGRAPH_URLS, SlotFieldsFragmentDoc, SlotsChain, SlotsClient, SlotsError, createSlotsClient, getSdk } from './chunk-
|
|
1
|
+
export { AccountFieldsFragmentDoc, CurrencyFieldsFragmentDoc, GetAccountDocument, GetAccountsDocument, GetBoughtEventsDocument, GetDepositedEventsDocument, GetFactoryDocument, GetLiquidatedEventsDocument, GetMetadataSlotDocument, GetMetadataSlotsByRecipientDocument, GetMetadataSlotsDocument, GetMetadataUpdatedEventsDocument, GetModulesDocument, GetPriceUpdatedEventsDocument, GetRecentEventsDocument, GetReleasedEventsDocument, GetSettledEventsDocument, GetSlotActivityDocument, GetSlotDeployedEventsDocument, GetSlotDocument, GetSlotsByOccupantDocument, GetSlotsByRecipientDocument, GetSlotsDocument, GetTaxCollectedEventsDocument, GetWithdrawnEventsDocument, MetadataModuleClient, MetadataSlotFieldsFragmentDoc, SUBGRAPH_URLS, SlotFieldsFragmentDoc, SlotsChain, SlotsClient, SlotsError, createSlotsClient, getSdk } from './chunk-PZ2PG636.js';
|
|
2
2
|
|
|
3
3
|
// src/tokens.ts
|
|
4
4
|
var CHAIN_TOKENS = {
|
package/dist/react.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as SlotsChain, cx as SlotsClient, C as CreateSlotParams, o as CreateSlotsParams, n as BuyParams } from './client-
|
|
1
|
+
import { S as SlotsChain, cx as SlotsClient, C as CreateSlotParams, o as CreateSlotsParams, n as BuyParams } from './client-pupk2FMg.js';
|
|
2
2
|
import { Hash, Address } from 'viem';
|
|
3
3
|
import 'graphql-request';
|
|
4
4
|
import 'graphql';
|
package/dist/react.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { SlotsClient } from './chunk-
|
|
1
|
+
import { SlotsClient } from './chunk-PZ2PG636.js';
|
|
2
2
|
import { slotFactoryAddress, slotAbi } from '@0xslots/contracts';
|
|
3
3
|
import { useMemo, useState, useRef, useEffect, useCallback } from 'react';
|
|
4
|
-
import { usePublicClient, useWalletClient, useWaitForTransactionReceipt, useReadContract, useReadContracts
|
|
4
|
+
import { usePublicClient, useWalletClient, useWaitForTransactionReceipt, useReadContract, useReadContracts } from 'wagmi';
|
|
5
5
|
import { erc20Abi } from 'viem';
|
|
6
|
-
import { useQueryClient } from '@tanstack/react-query';
|
|
7
6
|
|
|
8
7
|
function useSlotsClient(chainId, subgraphApiKey) {
|
|
9
8
|
const publicClient = usePublicClient({ chainId });
|
|
@@ -210,18 +209,7 @@ function parseSlotInfo(slotAddress, info, currencyMeta) {
|
|
|
210
209
|
currencyDecimals: currencyMeta?.decimals
|
|
211
210
|
};
|
|
212
211
|
}
|
|
213
|
-
function useInvalidateOnBlock(chainId) {
|
|
214
|
-
const queryClient = useQueryClient();
|
|
215
|
-
const { data: blockNumber } = useBlockNumber({ watch: true, chainId });
|
|
216
|
-
useEffect(() => {
|
|
217
|
-
if (blockNumber) {
|
|
218
|
-
queryClient.invalidateQueries({ queryKey: ["readContract"] });
|
|
219
|
-
queryClient.invalidateQueries({ queryKey: ["readContracts"] });
|
|
220
|
-
}
|
|
221
|
-
}, [blockNumber, queryClient]);
|
|
222
|
-
}
|
|
223
212
|
function useSlotOnChain(slotAddress, chainId) {
|
|
224
|
-
useInvalidateOnBlock(chainId);
|
|
225
213
|
const addr = slotAddress;
|
|
226
214
|
const {
|
|
227
215
|
data: info,
|
|
@@ -256,7 +244,6 @@ function useSlotOnChain(slotAddress, chainId) {
|
|
|
256
244
|
return { data: slot, isLoading, refetch };
|
|
257
245
|
}
|
|
258
246
|
function useSlotsOnChain(slotAddresses, chainId) {
|
|
259
|
-
useInvalidateOnBlock(chainId);
|
|
260
247
|
const contracts = slotAddresses.map((addr) => ({
|
|
261
248
|
address: addr,
|
|
262
249
|
abi: slotAbi,
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useSlotsClient.ts","../src/hooks/useSlotAction.ts","../src/hooks/useSlotOnChain.ts"],"names":["useEffect"],"mappings":"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","file":"react.js","sourcesContent":["\"use client\";\n\nimport { type SupportedChainId, slotFactoryAddress } from \"@0xslots/contracts\";\nimport { useMemo } from \"react\";\nimport { usePublicClient, useWalletClient } from \"wagmi\";\nimport { type SlotsChain, SlotsClient } from \"../client\";\n\n/**\n * React hook that creates a memoized {@link SlotsClient} from wagmi's public/wallet clients.\n *\n * @param chainId - Optional chain ID override. Defaults to the connected chain.\n * @returns A configured SlotsClient instance.\n * @throws If no public client is available or the chain has no factory address.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const client = useSlotsClient(SlotsChain.BASE);\n * // use client.getSlots(), client.buy(), etc.\n * }\n * ```\n */\nexport function useSlotsClient(chainId?: SlotsChain, subgraphApiKey?: string): SlotsClient {\n const publicClient = usePublicClient({ chainId });\n const { data: walletClient } = useWalletClient({ chainId });\n\n return useMemo(() => {\n if (!publicClient) throw new Error(\"No publicClient available\");\n const resolvedChainId = (chainId ?? publicClient.chain.id) as SlotsChain;\n const factoryAddress =\n slotFactoryAddress[resolvedChainId as SupportedChainId];\n if (!factoryAddress)\n throw new Error(`No factory address for chain ${resolvedChainId}`);\n\n return new SlotsClient({\n chainId: resolvedChainId,\n factoryAddress,\n publicClient,\n walletClient: walletClient ?? undefined,\n subgraphApiKey,\n });\n }, [chainId, publicClient, walletClient, subgraphApiKey]);\n}\n","\"use client\";\n\nimport type {\n BuyParams,\n CreateSlotParams,\n CreateSlotsParams,\n SlotsChain,\n} from \"../client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Address, Hash } from \"viem\";\nimport { useWaitForTransactionReceipt } from \"wagmi\";\nimport { useSlotsClient } from \"./useSlotsClient\";\n\nfunction extractErrorMessage(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(\"User rejected\") || message.includes(\"User denied\"))\n return \"Transaction rejected\";\n\n // viem ContractFunctionExecutionError: extract the shortMessage or reason\n const err = error as Record<string, unknown> | undefined;\n if (err && typeof err === \"object\") {\n if (typeof err.shortMessage === \"string\") return err.shortMessage;\n const cause = err.cause as Record<string, unknown> | undefined;\n if (cause && typeof cause.shortMessage === \"string\")\n return cause.shortMessage;\n if (cause && typeof cause.reason === \"string\") return cause.reason;\n }\n\n return message.split(\"\\n\")[0] || \"Transaction failed\";\n}\n\nexport interface SlotActionCallbacks {\n chainId?: SlotsChain;\n onSuccess?: (label: string, hash: Hash) => void;\n onError?: (label: string, error: string) => void;\n}\n\nexport function useSlotAction(opts?: SlotActionCallbacks) {\n const client = useSlotsClient(opts?.chainId);\n\n // --- state ---\n const [hash, setHash] = useState<Hash | undefined>();\n const [activeAction, setActiveAction] = useState<string | null>(null);\n const [isPending, setIsPending] = useState(false);\n const labelRef = useRef<string>(\"\");\n\n // --- receipt tracking ---\n const {\n isLoading: isConfirming,\n isSuccess,\n isError,\n } = useWaitForTransactionReceipt({ hash });\n\n const busy = isPending || isConfirming;\n\n // --- callback on success ---\n useEffect(() => {\n if (isSuccess && labelRef.current) {\n opts?.onSuccess?.(labelRef.current, hash!);\n setActiveAction(null);\n labelRef.current = \"\";\n }\n }, [isSuccess]);\n\n // --- callback on on-chain error ---\n useEffect(() => {\n if (isError && labelRef.current) {\n opts?.onError?.(labelRef.current, `${labelRef.current} failed on-chain`);\n setActiveAction(null);\n labelRef.current = \"\";\n }\n }, [isError]);\n\n // --- reset if everything settles with no result ---\n useEffect(() => {\n if (!isPending && !isConfirming && !isSuccess && !isError) {\n setActiveAction(null);\n }\n }, [isPending, isConfirming, isSuccess, isError]);\n\n /**\n * Execute an SDK method with shared pending/receipt tracking.\n */\n const exec = useCallback(\n async (label: string, fn: () => Promise<Hash>) => {\n labelRef.current = label;\n setActiveAction(label);\n setIsPending(true);\n setHash(undefined);\n try {\n const txHash = await fn();\n setHash(txHash);\n } catch (error) {\n console.error(`[useSlotAction] ${label} failed:`, error);\n setActiveAction(null);\n labelRef.current = \"\";\n opts?.onError?.(label, extractErrorMessage(error));\n } finally {\n setIsPending(false);\n }\n },\n [opts?.onError],\n );\n\n // ═══════════════════════════════════════════════════════════════════════════\n // Named actions — each calls one SDK method\n // ═══════════════════════════════════════════════════════════════════════════\n\n // Factory\n const createSlot = useCallback(\n (params: CreateSlotParams) =>\n exec(\"Create slot\", () => client.createSlot(params)),\n [exec, client],\n );\n const createSlots = useCallback(\n (params: CreateSlotsParams) =>\n exec(\"Create slots\", () => client.createSlots(params)),\n [exec, client],\n );\n\n // Slot interactions\n const buy = useCallback(\n (params: BuyParams) => exec(\"Buy slot\", () => client.buy(params)),\n [exec, client],\n );\n const selfAssess = useCallback(\n (slot: Address, newPrice: bigint) =>\n exec(\"Set price\", () => client.selfAssess(slot, newPrice)),\n [exec, client],\n );\n const topUp = useCallback(\n (slot: Address, amount: bigint) =>\n exec(\"Top up\", () => client.topUp(slot, amount)),\n [exec, client],\n );\n const withdraw = useCallback(\n (slot: Address, amount: bigint) =>\n exec(\"Withdraw\", () => client.withdraw(slot, amount)),\n [exec, client],\n );\n const release = useCallback(\n (slot: Address) => exec(\"Release slot\", () => client.release(slot)),\n [exec, client],\n );\n const collect = useCallback(\n (slot: Address) => exec(\"Collect tax\", () => client.collect(slot)),\n [exec, client],\n );\n const payTax = useCallback(\n (slot: Address) => exec(\"Pay tax\", () => client.collect(slot)),\n [exec, client],\n );\n const liquidate = useCallback(\n (slot: Address) => exec(\"Liquidate\", () => client.liquidate(slot)),\n [exec, client],\n );\n\n // Manager\n const proposeTaxUpdate = useCallback(\n (slot: Address, newPct: bigint) =>\n exec(\"Propose tax\", () => client.proposeTaxUpdate(slot, newPct)),\n [exec, client],\n );\n const proposeModuleUpdate = useCallback(\n (slot: Address, newModule: Address) =>\n exec(\"Propose module\", () =>\n client.proposeModuleUpdate(slot, newModule),\n ),\n [exec, client],\n );\n const cancelPendingUpdates = useCallback(\n (slot: Address) =>\n exec(\"Cancel updates\", () => client.cancelPendingUpdates(slot)),\n [exec, client],\n );\n const setLiquidationBounty = useCallback(\n (slot: Address, newBps: bigint) =>\n exec(\"Set bounty\", () => client.setLiquidationBounty(slot, newBps)),\n [exec, client],\n );\n\n // Metadata module\n const updateMetadata = useCallback(\n (moduleAddress: Address, slot: Address, uri: string) =>\n exec(\"Update metadata\", () =>\n client.modules.metadata.updateMetadata(moduleAddress, slot, uri),\n ),\n [exec, client],\n );\n\n return {\n // Actions\n createSlot,\n createSlots,\n buy,\n selfAssess,\n topUp,\n withdraw,\n release,\n collect,\n payTax,\n liquidate,\n proposeTaxUpdate,\n proposeModuleUpdate,\n cancelPendingUpdates,\n setLiquidationBounty,\n updateMetadata,\n // Executor\n exec,\n // State\n busy,\n isPending,\n isConfirming,\n isSuccess,\n activeAction,\n };\n}\n","\"use client\";\n\nimport { slotAbi } from \"@0xslots/contracts\";\nimport { type Address, erc20Abi } from \"viem\";\nimport { useReadContract, useReadContracts, useBlockNumber } from \"wagmi\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useEffect } from \"react\";\n\nexport type SlotOnChain = {\n // Identity\n id: string;\n recipient: string;\n currency: string;\n manager: string;\n mutableTax: boolean;\n mutableModule: boolean;\n // State\n occupant: string | null;\n price: bigint;\n taxPercentage: bigint;\n module: string;\n liquidationBountyBps: bigint;\n minDepositSeconds: bigint;\n // Financials\n deposit: bigint;\n collectedTax: bigint;\n taxOwed: bigint;\n secondsUntilLiquidation: bigint;\n insolvent: boolean;\n // Pending\n hasPendingTax: boolean;\n pendingTaxPercentage: bigint;\n hasPendingModule: boolean;\n pendingModule: string;\n // Currency metadata\n currencyName?: string;\n currencySymbol?: string;\n currencyDecimals?: number;\n};\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\ntype SlotInfoResult = {\n recipient: string;\n currency: string;\n manager: string;\n mutableTax: boolean;\n mutableModule: boolean;\n occupant: string;\n price: bigint;\n taxPercentage: bigint;\n module: string;\n liquidationBountyBps: bigint;\n minDepositSeconds: bigint;\n deposit: bigint;\n collectedTax: bigint;\n taxOwed: bigint;\n secondsUntilLiquidation: bigint;\n insolvent: boolean;\n hasPendingTax: boolean;\n pendingTaxPercentage: bigint;\n hasPendingModule: boolean;\n pendingModule: string;\n};\n\nfunction parseSlotInfo(\n slotAddress: string,\n info: SlotInfoResult,\n currencyMeta?: { name?: string; symbol?: string; decimals?: number },\n): SlotOnChain {\n return {\n id: slotAddress.toLowerCase(),\n recipient: info.recipient.toLowerCase(),\n currency: info.currency.toLowerCase(),\n manager: info.manager.toLowerCase(),\n mutableTax: info.mutableTax,\n mutableModule: info.mutableModule,\n occupant:\n info.occupant === ZERO_ADDRESS ? null : info.occupant.toLowerCase(),\n price: info.price,\n taxPercentage: info.taxPercentage,\n module: info.module.toLowerCase(),\n liquidationBountyBps: info.liquidationBountyBps,\n minDepositSeconds: info.minDepositSeconds,\n deposit: info.deposit,\n collectedTax: info.collectedTax,\n taxOwed: info.taxOwed,\n secondsUntilLiquidation: info.secondsUntilLiquidation,\n insolvent: info.insolvent,\n hasPendingTax: info.hasPendingTax,\n pendingTaxPercentage: info.pendingTaxPercentage,\n hasPendingModule: info.hasPendingModule,\n pendingModule: info.pendingModule.toLowerCase(),\n currencyName: currencyMeta?.name,\n currencySymbol: currencyMeta?.symbol,\n currencyDecimals: currencyMeta?.decimals,\n };\n}\n\n/**\n * Invalidate all contract reads on every new block — ensures fresh data after txs\n */\nfunction useInvalidateOnBlock(chainId: number) {\n const queryClient = useQueryClient();\n const { data: blockNumber } = useBlockNumber({ watch: true, chainId });\n useEffect(() => {\n if (blockNumber) {\n queryClient.invalidateQueries({ queryKey: [\"readContract\"] });\n queryClient.invalidateQueries({ queryKey: [\"readContracts\"] });\n }\n }, [blockNumber, queryClient]);\n}\n\n/**\n * Fetch a single slot's complete state from on-chain via getSlotInfo() + currency metadata.\n *\n * @param slotAddress - The slot contract address\n * @param chainId - The chain ID to read from\n */\nexport function useSlotOnChain(slotAddress: string, chainId: number): {\n data: SlotOnChain | null;\n isLoading: boolean;\n refetch: () => void;\n} {\n useInvalidateOnBlock(chainId);\n const addr = slotAddress as Address;\n\n const {\n data: info,\n isLoading: infoLoading,\n refetch,\n } = useReadContract({\n address: addr,\n abi: slotAbi,\n functionName: \"getSlotInfo\",\n chainId,\n query: { gcTime: 0, staleTime: 0, refetchOnMount: \"always\" },\n });\n\n // Currency metadata — only fetch when we have info (static, can cache)\n const currencyAddr = info\n ? ((info as SlotInfoResult).currency as Address)\n : undefined;\n const { data: currencyMeta, isLoading: metaLoading } = useReadContracts({\n contracts: currencyAddr\n ? [\n { address: currencyAddr, abi: erc20Abi, functionName: \"name\", chainId },\n { address: currencyAddr, abi: erc20Abi, functionName: \"symbol\", chainId },\n { address: currencyAddr, abi: erc20Abi, functionName: \"decimals\", chainId },\n ]\n : [],\n query: { enabled: !!currencyAddr, staleTime: Infinity },\n });\n\n const isLoading = infoLoading || metaLoading;\n\n const slot = info\n ? parseSlotInfo(\n slotAddress,\n info as SlotInfoResult,\n currencyMeta\n ? {\n name: currencyMeta[0]?.result as string | undefined,\n symbol: currencyMeta[1]?.result as string | undefined,\n decimals: currencyMeta[2]?.result as number | undefined,\n }\n : undefined,\n )\n : null;\n\n return { data: slot, isLoading, refetch };\n}\n\n/**\n * Fetch multiple slots' state via multicall getSlotInfo().\n *\n * @param slotAddresses - Array of slot contract addresses\n * @param chainId - The chain ID to read from\n */\nexport function useSlotsOnChain(slotAddresses: string[], chainId: number): {\n data: SlotOnChain[];\n isLoading: boolean;\n refetch: () => void;\n} {\n useInvalidateOnBlock(chainId);\n const contracts = slotAddresses.map((addr) => ({\n address: addr as Address,\n abi: slotAbi,\n functionName: \"getSlotInfo\" as const,\n chainId,\n }));\n\n const {\n data: infos,\n isLoading: infosLoading,\n refetch,\n } = useReadContracts({\n contracts,\n query: {\n enabled: slotAddresses.length > 0,\n gcTime: 0,\n staleTime: 0,\n refetchOnMount: \"always\",\n },\n });\n\n // Get unique currencies to fetch metadata\n const currencies = new Set<string>();\n if (infos) {\n for (const r of infos) {\n if (r.result)\n currencies.add(\n (r.result as SlotInfoResult).currency.toLowerCase(),\n );\n }\n }\n const currencyList = Array.from(currencies);\n\n const { data: metaResults, isLoading: metaLoading } = useReadContracts({\n contracts: currencyList.flatMap((c) => [\n { address: c as Address, abi: erc20Abi, functionName: \"name\" as const, chainId },\n { address: c as Address, abi: erc20Abi, functionName: \"symbol\" as const, chainId },\n {\n address: c as Address,\n abi: erc20Abi,\n functionName: \"decimals\" as const,\n chainId,\n },\n ]),\n query: { enabled: currencyList.length > 0 },\n });\n\n // Build currency metadata map\n const currencyMeta: Record<\n string,\n { name?: string; symbol?: string; decimals?: number }\n > = {};\n if (metaResults) {\n currencyList.forEach((c, i) => {\n currencyMeta[c] = {\n name: metaResults[i * 3]?.result as string | undefined,\n symbol: metaResults[i * 3 + 1]?.result as string | undefined,\n decimals: metaResults[i * 3 + 2]?.result as number | undefined,\n };\n });\n }\n\n const isLoading = infosLoading || metaLoading;\n\n const slots: SlotOnChain[] = [];\n if (infos) {\n for (let i = 0; i < infos.length; i++) {\n const r = infos[i];\n if (r.result) {\n const result = r.result as SlotInfoResult;\n const currency = result.currency.toLowerCase();\n slots.push(\n parseSlotInfo(slotAddresses[i], result, currencyMeta[currency]),\n );\n }\n }\n }\n\n return { data: slots, isLoading, refetch };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useSlotsClient.ts","../src/hooks/useSlotAction.ts","../src/hooks/useSlotOnChain.ts"],"names":[],"mappings":"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","file":"react.js","sourcesContent":["\"use client\";\n\nimport { type SupportedChainId, slotFactoryAddress } from \"@0xslots/contracts\";\nimport { useMemo } from \"react\";\nimport { usePublicClient, useWalletClient } from \"wagmi\";\nimport { type SlotsChain, SlotsClient } from \"../client\";\n\n/**\n * React hook that creates a memoized {@link SlotsClient} from wagmi's public/wallet clients.\n *\n * @param chainId - Optional chain ID override. Defaults to the connected chain.\n * @returns A configured SlotsClient instance.\n * @throws If no public client is available or the chain has no factory address.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const client = useSlotsClient(SlotsChain.BASE);\n * // use client.getSlots(), client.buy(), etc.\n * }\n * ```\n */\nexport function useSlotsClient(chainId?: SlotsChain, subgraphApiKey?: string): SlotsClient {\n const publicClient = usePublicClient({ chainId });\n const { data: walletClient } = useWalletClient({ chainId });\n\n return useMemo(() => {\n if (!publicClient) throw new Error(\"No publicClient available\");\n const resolvedChainId = (chainId ?? publicClient.chain.id) as SlotsChain;\n const factoryAddress =\n slotFactoryAddress[resolvedChainId as SupportedChainId];\n if (!factoryAddress)\n throw new Error(`No factory address for chain ${resolvedChainId}`);\n\n return new SlotsClient({\n chainId: resolvedChainId,\n factoryAddress,\n publicClient,\n walletClient: walletClient ?? undefined,\n subgraphApiKey,\n });\n }, [chainId, publicClient, walletClient, subgraphApiKey]);\n}\n","\"use client\";\n\nimport type {\n BuyParams,\n CreateSlotParams,\n CreateSlotsParams,\n SlotsChain,\n} from \"../client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Address, Hash } from \"viem\";\nimport { useWaitForTransactionReceipt } from \"wagmi\";\nimport { useSlotsClient } from \"./useSlotsClient\";\n\nfunction extractErrorMessage(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes(\"User rejected\") || message.includes(\"User denied\"))\n return \"Transaction rejected\";\n\n // viem ContractFunctionExecutionError: extract the shortMessage or reason\n const err = error as Record<string, unknown> | undefined;\n if (err && typeof err === \"object\") {\n if (typeof err.shortMessage === \"string\") return err.shortMessage;\n const cause = err.cause as Record<string, unknown> | undefined;\n if (cause && typeof cause.shortMessage === \"string\")\n return cause.shortMessage;\n if (cause && typeof cause.reason === \"string\") return cause.reason;\n }\n\n return message.split(\"\\n\")[0] || \"Transaction failed\";\n}\n\nexport interface SlotActionCallbacks {\n chainId?: SlotsChain;\n onSuccess?: (label: string, hash: Hash) => void;\n onError?: (label: string, error: string) => void;\n}\n\nexport function useSlotAction(opts?: SlotActionCallbacks) {\n const client = useSlotsClient(opts?.chainId);\n\n // --- state ---\n const [hash, setHash] = useState<Hash | undefined>();\n const [activeAction, setActiveAction] = useState<string | null>(null);\n const [isPending, setIsPending] = useState(false);\n const labelRef = useRef<string>(\"\");\n\n // --- receipt tracking ---\n const {\n isLoading: isConfirming,\n isSuccess,\n isError,\n } = useWaitForTransactionReceipt({ hash });\n\n const busy = isPending || isConfirming;\n\n // --- callback on success ---\n useEffect(() => {\n if (isSuccess && labelRef.current) {\n opts?.onSuccess?.(labelRef.current, hash!);\n setActiveAction(null);\n labelRef.current = \"\";\n }\n }, [isSuccess]);\n\n // --- callback on on-chain error ---\n useEffect(() => {\n if (isError && labelRef.current) {\n opts?.onError?.(labelRef.current, `${labelRef.current} failed on-chain`);\n setActiveAction(null);\n labelRef.current = \"\";\n }\n }, [isError]);\n\n // --- reset if everything settles with no result ---\n useEffect(() => {\n if (!isPending && !isConfirming && !isSuccess && !isError) {\n setActiveAction(null);\n }\n }, [isPending, isConfirming, isSuccess, isError]);\n\n /**\n * Execute an SDK method with shared pending/receipt tracking.\n */\n const exec = useCallback(\n async (label: string, fn: () => Promise<Hash>) => {\n labelRef.current = label;\n setActiveAction(label);\n setIsPending(true);\n setHash(undefined);\n try {\n const txHash = await fn();\n setHash(txHash);\n } catch (error) {\n console.error(`[useSlotAction] ${label} failed:`, error);\n setActiveAction(null);\n labelRef.current = \"\";\n opts?.onError?.(label, extractErrorMessage(error));\n } finally {\n setIsPending(false);\n }\n },\n [opts?.onError],\n );\n\n // ═══════════════════════════════════════════════════════════════════════════\n // Named actions — each calls one SDK method\n // ═══════════════════════════════════════════════════════════════════════════\n\n // Factory\n const createSlot = useCallback(\n (params: CreateSlotParams) =>\n exec(\"Create slot\", () => client.createSlot(params)),\n [exec, client],\n );\n const createSlots = useCallback(\n (params: CreateSlotsParams) =>\n exec(\"Create slots\", () => client.createSlots(params)),\n [exec, client],\n );\n\n // Slot interactions\n const buy = useCallback(\n (params: BuyParams) => exec(\"Buy slot\", () => client.buy(params)),\n [exec, client],\n );\n const selfAssess = useCallback(\n (slot: Address, newPrice: bigint) =>\n exec(\"Set price\", () => client.selfAssess(slot, newPrice)),\n [exec, client],\n );\n const topUp = useCallback(\n (slot: Address, amount: bigint) =>\n exec(\"Top up\", () => client.topUp(slot, amount)),\n [exec, client],\n );\n const withdraw = useCallback(\n (slot: Address, amount: bigint) =>\n exec(\"Withdraw\", () => client.withdraw(slot, amount)),\n [exec, client],\n );\n const release = useCallback(\n (slot: Address) => exec(\"Release slot\", () => client.release(slot)),\n [exec, client],\n );\n const collect = useCallback(\n (slot: Address) => exec(\"Collect tax\", () => client.collect(slot)),\n [exec, client],\n );\n const payTax = useCallback(\n (slot: Address) => exec(\"Pay tax\", () => client.collect(slot)),\n [exec, client],\n );\n const liquidate = useCallback(\n (slot: Address) => exec(\"Liquidate\", () => client.liquidate(slot)),\n [exec, client],\n );\n\n // Manager\n const proposeTaxUpdate = useCallback(\n (slot: Address, newPct: bigint) =>\n exec(\"Propose tax\", () => client.proposeTaxUpdate(slot, newPct)),\n [exec, client],\n );\n const proposeModuleUpdate = useCallback(\n (slot: Address, newModule: Address) =>\n exec(\"Propose module\", () =>\n client.proposeModuleUpdate(slot, newModule),\n ),\n [exec, client],\n );\n const cancelPendingUpdates = useCallback(\n (slot: Address) =>\n exec(\"Cancel updates\", () => client.cancelPendingUpdates(slot)),\n [exec, client],\n );\n const setLiquidationBounty = useCallback(\n (slot: Address, newBps: bigint) =>\n exec(\"Set bounty\", () => client.setLiquidationBounty(slot, newBps)),\n [exec, client],\n );\n\n // Metadata module\n const updateMetadata = useCallback(\n (moduleAddress: Address, slot: Address, uri: string) =>\n exec(\"Update metadata\", () =>\n client.modules.metadata.updateMetadata(moduleAddress, slot, uri),\n ),\n [exec, client],\n );\n\n return {\n // Actions\n createSlot,\n createSlots,\n buy,\n selfAssess,\n topUp,\n withdraw,\n release,\n collect,\n payTax,\n liquidate,\n proposeTaxUpdate,\n proposeModuleUpdate,\n cancelPendingUpdates,\n setLiquidationBounty,\n updateMetadata,\n // Executor\n exec,\n // State\n busy,\n isPending,\n isConfirming,\n isSuccess,\n activeAction,\n };\n}\n","\"use client\";\n\nimport { slotAbi } from \"@0xslots/contracts\";\nimport { type Address, erc20Abi } from \"viem\";\nimport { useReadContract, useReadContracts } from \"wagmi\";\n\nexport type SlotOnChain = {\n // Identity\n id: string;\n recipient: string;\n currency: string;\n manager: string;\n mutableTax: boolean;\n mutableModule: boolean;\n // State\n occupant: string | null;\n price: bigint;\n taxPercentage: bigint;\n module: string;\n liquidationBountyBps: bigint;\n minDepositSeconds: bigint;\n // Financials\n deposit: bigint;\n collectedTax: bigint;\n taxOwed: bigint;\n secondsUntilLiquidation: bigint;\n insolvent: boolean;\n // Pending\n hasPendingTax: boolean;\n pendingTaxPercentage: bigint;\n hasPendingModule: boolean;\n pendingModule: string;\n // Currency metadata\n currencyName?: string;\n currencySymbol?: string;\n currencyDecimals?: number;\n};\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\ntype SlotInfoResult = {\n recipient: string;\n currency: string;\n manager: string;\n mutableTax: boolean;\n mutableModule: boolean;\n occupant: string;\n price: bigint;\n taxPercentage: bigint;\n module: string;\n liquidationBountyBps: bigint;\n minDepositSeconds: bigint;\n deposit: bigint;\n collectedTax: bigint;\n taxOwed: bigint;\n secondsUntilLiquidation: bigint;\n insolvent: boolean;\n hasPendingTax: boolean;\n pendingTaxPercentage: bigint;\n hasPendingModule: boolean;\n pendingModule: string;\n};\n\nfunction parseSlotInfo(\n slotAddress: string,\n info: SlotInfoResult,\n currencyMeta?: { name?: string; symbol?: string; decimals?: number },\n): SlotOnChain {\n return {\n id: slotAddress.toLowerCase(),\n recipient: info.recipient.toLowerCase(),\n currency: info.currency.toLowerCase(),\n manager: info.manager.toLowerCase(),\n mutableTax: info.mutableTax,\n mutableModule: info.mutableModule,\n occupant:\n info.occupant === ZERO_ADDRESS ? null : info.occupant.toLowerCase(),\n price: info.price,\n taxPercentage: info.taxPercentage,\n module: info.module.toLowerCase(),\n liquidationBountyBps: info.liquidationBountyBps,\n minDepositSeconds: info.minDepositSeconds,\n deposit: info.deposit,\n collectedTax: info.collectedTax,\n taxOwed: info.taxOwed,\n secondsUntilLiquidation: info.secondsUntilLiquidation,\n insolvent: info.insolvent,\n hasPendingTax: info.hasPendingTax,\n pendingTaxPercentage: info.pendingTaxPercentage,\n hasPendingModule: info.hasPendingModule,\n pendingModule: info.pendingModule.toLowerCase(),\n currencyName: currencyMeta?.name,\n currencySymbol: currencyMeta?.symbol,\n currencyDecimals: currencyMeta?.decimals,\n };\n}\n\n// Block-watching removed — use refetch() for manual refresh to save RPC calls\n\n/**\n * Fetch a single slot's complete state from on-chain via getSlotInfo() + currency metadata.\n *\n * @param slotAddress - The slot contract address\n * @param chainId - The chain ID to read from\n */\nexport function useSlotOnChain(slotAddress: string, chainId: number): {\n data: SlotOnChain | null;\n isLoading: boolean;\n refetch: () => void;\n} {\n // Manual refetch only — no block watching\n const addr = slotAddress as Address;\n\n const {\n data: info,\n isLoading: infoLoading,\n refetch,\n } = useReadContract({\n address: addr,\n abi: slotAbi,\n functionName: \"getSlotInfo\",\n chainId,\n query: { gcTime: 0, staleTime: 0, refetchOnMount: \"always\" },\n });\n\n // Currency metadata — only fetch when we have info (static, can cache)\n const currencyAddr = info\n ? ((info as SlotInfoResult).currency as Address)\n : undefined;\n const { data: currencyMeta, isLoading: metaLoading } = useReadContracts({\n contracts: currencyAddr\n ? [\n { address: currencyAddr, abi: erc20Abi, functionName: \"name\", chainId },\n { address: currencyAddr, abi: erc20Abi, functionName: \"symbol\", chainId },\n { address: currencyAddr, abi: erc20Abi, functionName: \"decimals\", chainId },\n ]\n : [],\n query: { enabled: !!currencyAddr, staleTime: Infinity },\n });\n\n const isLoading = infoLoading || metaLoading;\n\n const slot = info\n ? parseSlotInfo(\n slotAddress,\n info as SlotInfoResult,\n currencyMeta\n ? {\n name: currencyMeta[0]?.result as string | undefined,\n symbol: currencyMeta[1]?.result as string | undefined,\n decimals: currencyMeta[2]?.result as number | undefined,\n }\n : undefined,\n )\n : null;\n\n return { data: slot, isLoading, refetch };\n}\n\n/**\n * Fetch multiple slots' state via multicall getSlotInfo().\n *\n * @param slotAddresses - Array of slot contract addresses\n * @param chainId - The chain ID to read from\n */\nexport function useSlotsOnChain(slotAddresses: string[], chainId: number): {\n data: SlotOnChain[];\n isLoading: boolean;\n refetch: () => void;\n} {\n // Manual refetch only — no block watching\n const contracts = slotAddresses.map((addr) => ({\n address: addr as Address,\n abi: slotAbi,\n functionName: \"getSlotInfo\" as const,\n chainId,\n }));\n\n const {\n data: infos,\n isLoading: infosLoading,\n refetch,\n } = useReadContracts({\n contracts,\n query: {\n enabled: slotAddresses.length > 0,\n gcTime: 0,\n staleTime: 0,\n refetchOnMount: \"always\",\n },\n });\n\n // Get unique currencies to fetch metadata\n const currencies = new Set<string>();\n if (infos) {\n for (const r of infos) {\n if (r.result)\n currencies.add(\n (r.result as SlotInfoResult).currency.toLowerCase(),\n );\n }\n }\n const currencyList = Array.from(currencies);\n\n const { data: metaResults, isLoading: metaLoading } = useReadContracts({\n contracts: currencyList.flatMap((c) => [\n { address: c as Address, abi: erc20Abi, functionName: \"name\" as const, chainId },\n { address: c as Address, abi: erc20Abi, functionName: \"symbol\" as const, chainId },\n {\n address: c as Address,\n abi: erc20Abi,\n functionName: \"decimals\" as const,\n chainId,\n },\n ]),\n query: { enabled: currencyList.length > 0 },\n });\n\n // Build currency metadata map\n const currencyMeta: Record<\n string,\n { name?: string; symbol?: string; decimals?: number }\n > = {};\n if (metaResults) {\n currencyList.forEach((c, i) => {\n currencyMeta[c] = {\n name: metaResults[i * 3]?.result as string | undefined,\n symbol: metaResults[i * 3 + 1]?.result as string | undefined,\n decimals: metaResults[i * 3 + 2]?.result as number | undefined,\n };\n });\n }\n\n const isLoading = infosLoading || metaLoading;\n\n const slots: SlotOnChain[] = [];\n if (infos) {\n for (let i = 0; i < infos.length; i++) {\n const r = infos[i];\n if (r.result) {\n const result = r.result as SlotInfoResult;\n const currency = result.currency.toLowerCase();\n slots.push(\n parseSlotInfo(slotAddresses[i], result, currencyMeta[currency]),\n );\n }\n }\n }\n\n return { data: slots, isLoading, refetch };\n}\n"]}
|