@0xslots/sdk 0.10.1 → 0.11.0
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-XQG6GMWZ.js} +48 -72
- package/dist/chunk-XQG6GMWZ.js.map +1 -0
- package/dist/{client-BcIWQW9H.d.ts → client-CN0aLhHJ.d.ts} +7 -9
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +3 -19
- package/dist/react.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-VQ5PSOCE.js.map +0 -1
|
@@ -4292,6 +4292,7 @@ interface CreateSlotsParams extends CreateSlotParams {
|
|
|
4292
4292
|
}
|
|
4293
4293
|
interface BuyParams {
|
|
4294
4294
|
slot: Address;
|
|
4295
|
+
account: Address;
|
|
4295
4296
|
depositAmount: bigint;
|
|
4296
4297
|
selfAssessedPrice: bigint;
|
|
4297
4298
|
}
|
|
@@ -4327,7 +4328,6 @@ declare class SlotsClient {
|
|
|
4327
4328
|
private readonly _publicClient?;
|
|
4328
4329
|
private readonly walletClient?;
|
|
4329
4330
|
private readonly _factory?;
|
|
4330
|
-
private _atomicSupport;
|
|
4331
4331
|
/** Module namespaces for protocol extensions. */
|
|
4332
4332
|
readonly modules: {
|
|
4333
4333
|
metadata: MetadataModuleClient;
|
|
@@ -4465,7 +4465,8 @@ declare class SlotsClient {
|
|
|
4465
4465
|
*/
|
|
4466
4466
|
selfAssess(slot: Address, newPrice: bigint): Promise<Hash>;
|
|
4467
4467
|
/**
|
|
4468
|
-
* Top up deposit on a slot
|
|
4468
|
+
* Top up deposit on a slot. Anyone can pay to extend the occupant's deposit.
|
|
4469
|
+
* Handles ERC-20 approval automatically.
|
|
4469
4470
|
* @param slot - The slot contract address.
|
|
4470
4471
|
* @param amount - The amount to deposit (must be > 0).
|
|
4471
4472
|
* @returns Transaction hash.
|
|
@@ -4537,16 +4538,13 @@ declare class SlotsClient {
|
|
|
4537
4538
|
functionName: string;
|
|
4538
4539
|
args?: any[];
|
|
4539
4540
|
}[]): 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
4541
|
/**
|
|
4545
|
-
*
|
|
4546
|
-
*
|
|
4547
|
-
* Otherwise: chains approve tx (if needed) then action tx.
|
|
4542
|
+
* Approve → confirm on-chain → execute call sequentially.
|
|
4543
|
+
* Skips approval if the existing allowance already covers the amount.
|
|
4548
4544
|
*/
|
|
4549
4545
|
private withAllowance;
|
|
4546
|
+
/** Poll `check` every `delayMs` until it returns a truthy value or `maxAttempts` is exhausted. */
|
|
4547
|
+
private pollUntil;
|
|
4550
4548
|
}
|
|
4551
4549
|
declare function createSlotsClient(config: SlotsClientConfig): SlotsClient;
|
|
4552
4550
|
|
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-CN0aLhHJ.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-CN0aLhHJ.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-XQG6GMWZ.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-CN0aLhHJ.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-XQG6GMWZ.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 });
|
|
@@ -133,10 +132,7 @@ function useSlotAction(opts) {
|
|
|
133
132
|
[exec, client]
|
|
134
133
|
);
|
|
135
134
|
const proposeModuleUpdate = useCallback(
|
|
136
|
-
(slot, newModule) => exec(
|
|
137
|
-
"Propose module",
|
|
138
|
-
() => client.proposeModuleUpdate(slot, newModule)
|
|
139
|
-
),
|
|
135
|
+
(slot, newModule) => exec("Propose module", () => client.proposeModuleUpdate(slot, newModule)),
|
|
140
136
|
[exec, client]
|
|
141
137
|
);
|
|
142
138
|
const cancelPendingUpdates = useCallback(
|
|
@@ -210,18 +206,7 @@ function parseSlotInfo(slotAddress, info, currencyMeta) {
|
|
|
210
206
|
currencyDecimals: currencyMeta?.decimals
|
|
211
207
|
};
|
|
212
208
|
}
|
|
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
209
|
function useSlotOnChain(slotAddress, chainId) {
|
|
224
|
-
useInvalidateOnBlock(chainId);
|
|
225
210
|
const addr = slotAddress;
|
|
226
211
|
const {
|
|
227
212
|
data: info,
|
|
@@ -256,7 +241,6 @@ function useSlotOnChain(slotAddress, chainId) {
|
|
|
256
241
|
return { data: slot, isLoading, refetch };
|
|
257
242
|
}
|
|
258
243
|
function useSlotsOnChain(slotAddresses, chainId) {
|
|
259
|
-
useInvalidateOnBlock(chainId);
|
|
260
244
|
const contracts = slotAddresses.map((addr) => ({
|
|
261
245
|
address: addr,
|
|
262
246
|
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 { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Address, Hash } from \"viem\";\nimport { useWaitForTransactionReceipt } from \"wagmi\";\nimport type {\n BuyParams,\n CreateSlotParams,\n CreateSlotsParams,\n SlotsChain,\n} from \"../client\";\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\", () => client.proposeModuleUpdate(slot, newModule)),\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xslots/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Type-safe SDK for the 0xSlots protocol — reads (subgraph) + writes (viem)",
|
|
5
5
|
"author": "Nezz",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"graphql": "^16.9.0",
|
|
28
28
|
"graphql-request": "^7.2.2",
|
|
29
29
|
"graphql-tag": "^2.12.6",
|
|
30
|
-
"@0xslots/contracts": "0.
|
|
30
|
+
"@0xslots/contracts": "0.8.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@graphql-codegen/cli": "^5.0.4",
|