smart-multisig-engine 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -12,6 +12,8 @@ pnpm add smart-multisig-engine
12
12
 
13
13
  Peer dependencies: `@wagmi/core`, `viem`.
14
14
 
15
+ Optional peer dependencies for React hooks: `react`, `@tanstack/react-query`.
16
+
15
17
  ## Quick Start
16
18
 
17
19
  Use `submitTx` with the generic adapter interface to submit transactions to any supported multisig:
@@ -392,6 +394,196 @@ const result = await safe.waitForExecution({
392
394
  console.log("Executed:", result.transactionHash);
393
395
  ```
394
396
 
397
+ ## React Hooks
398
+
399
+ The library provides React Query hooks via a separate entry point. These hooks wrap the adapter functions and provide a familiar React Query interface.
400
+
401
+ ```bash
402
+ # Requires these peer dependencies
403
+ pnpm add react @tanstack/react-query
404
+ ```
405
+
406
+ ```typescript
407
+ import {
408
+ useSubmitTx,
409
+ useWaitForExecution,
410
+ useWaitForExecutionReceipt,
411
+ useFetchPendingTxs,
412
+ useSimulate,
413
+ useWrite,
414
+ } from "smart-multisig-engine/react";
415
+ ```
416
+
417
+ ### Hooks Overview
418
+
419
+ | Hook | Type | Description |
420
+ |------|------|-------------|
421
+ | `useSubmitTx` | Mutation | Submit a transaction through an adapter |
422
+ | `useWaitForExecution` | Query | Wait for a transaction to be executed |
423
+ | `useWaitForExecutionReceipt` | Query | Wait for execution + fetch receipt with logs |
424
+ | `useFetchPendingTxs` | Query | Fetch pending transactions for a wallet |
425
+ | `useSimulate` | Query | Simulate a contract call |
426
+ | `useWrite` | Mutation | Write a contract call |
427
+
428
+ ### `useSubmitTx`
429
+
430
+ Mutation hook for submitting transactions.
431
+
432
+ ```typescript
433
+ const { mutate, mutateAsync, isPending, isSuccess, data } = useSubmitTx();
434
+
435
+ // Submit a transaction
436
+ mutate({
437
+ adapter: "safe",
438
+ config,
439
+ walletAddress: "0xSafe...",
440
+ address: "0xContract...",
441
+ abi,
442
+ functionName: "transfer",
443
+ args: [recipient, amount],
444
+ chainId: 11155111n,
445
+ });
446
+
447
+ // Or with async/await
448
+ const { txHash } = await mutateAsync({ ... });
449
+ ```
450
+
451
+ ### `useWaitForExecution`
452
+
453
+ Query hook that waits for a Safe transaction to be executed. Maintains a stable loading state throughout polling (similar to wagmi's `useWaitForTransactionReceipt`).
454
+
455
+ ```typescript
456
+ interface UseWaitForExecutionOptions {
457
+ adapter: "safe";
458
+ txHash: string;
459
+ chainId: bigint;
460
+ txServiceUrl?: string;
461
+ apiKey?: string;
462
+ enabled?: boolean; // Default: true
463
+ pollingInterval?: number; // Default: 5000ms
464
+ timeout?: number; // Default: 120000ms (2 min)
465
+ }
466
+ ```
467
+
468
+ ```typescript
469
+ const { data, isLoading, isSuccess, isError } = useWaitForExecution({
470
+ adapter: "safe",
471
+ txHash: safeTxHash,
472
+ chainId: 11155111n,
473
+ timeout: 120000, // Fail after 2 minutes
474
+ enabled: !!safeTxHash,
475
+ });
476
+
477
+ // States are stable throughout polling:
478
+ // - isLoading = true while waiting
479
+ // - isSuccess = true once executed
480
+ // - isError = true if timeout reached
481
+
482
+ if (isSuccess) {
483
+ console.log("Executed:", data.transactionHash);
484
+ }
485
+ ```
486
+
487
+ ### `useWaitForExecutionReceipt`
488
+
489
+ Query hook that waits for execution AND fetches the full transaction receipt with logs.
490
+
491
+ ```typescript
492
+ interface UseWaitForExecutionReceiptOptions {
493
+ adapter: "safe";
494
+ txHash: string;
495
+ chainId: bigint;
496
+ config: Config; // wagmi config for fetching receipt
497
+ txServiceUrl?: string;
498
+ apiKey?: string;
499
+ enabled?: boolean; // Default: true
500
+ pollingInterval?: number; // Default: 5000ms
501
+ timeout?: number; // Default: 120000ms
502
+ confirmations?: number; // Default: 1
503
+ }
504
+ ```
505
+
506
+ ```typescript
507
+ const { data, isLoading, isSuccess } = useWaitForExecutionReceipt({
508
+ adapter: "safe",
509
+ txHash: safeTxHash,
510
+ chainId: 11155111n,
511
+ config: wagmiConfig,
512
+ confirmations: 1,
513
+ });
514
+
515
+ if (isSuccess) {
516
+ console.log("Transaction hash:", data.transactionHash);
517
+ console.log("Logs:", data.receipt.logs);
518
+ console.log("Gas used:", data.receipt.gasUsed);
519
+ }
520
+ ```
521
+
522
+ ### `useFetchPendingTxs`
523
+
524
+ Query hook for fetching pending transactions.
525
+
526
+ ```typescript
527
+ const { data: pending, isLoading } = useFetchPendingTxs({
528
+ adapter: "safe",
529
+ walletAddress: "0xSafe...",
530
+ chainId: 11155111n,
531
+ refetchInterval: 10000, // Optional: auto-refresh every 10s
532
+ });
533
+ ```
534
+
535
+ ### Full Example
536
+
537
+ ```typescript
538
+ import { useSubmitTx, useWaitForExecutionReceipt } from "smart-multisig-engine/react";
539
+
540
+ function SafeTransaction() {
541
+ const submitTx = useSubmitTx();
542
+
543
+ const { data, isLoading, isSuccess } = useWaitForExecutionReceipt({
544
+ adapter: "safe",
545
+ txHash: submitTx.data?.txHash,
546
+ chainId: 11155111n,
547
+ config: wagmiConfig,
548
+ enabled: !!submitTx.data?.txHash,
549
+ });
550
+
551
+ const handleSubmit = () => {
552
+ submitTx.mutate({
553
+ adapter: "safe",
554
+ config: wagmiConfig,
555
+ walletAddress: safeAddress,
556
+ address: contractAddress,
557
+ abi: contractAbi,
558
+ functionName: "transfer",
559
+ args: [recipient, amount],
560
+ chainId: 11155111n,
561
+ });
562
+ };
563
+
564
+ return (
565
+ <div>
566
+ <button onClick={handleSubmit} disabled={submitTx.isPending}>
567
+ {submitTx.isPending ? "Submitting..." : "Submit Transaction"}
568
+ </button>
569
+
570
+ {submitTx.isSuccess && !isSuccess && (
571
+ <p>Waiting for execution... {isLoading && "(polling)"}</p>
572
+ )}
573
+
574
+ {isSuccess && (
575
+ <div>
576
+ <p>Executed: {data.transactionHash}</p>
577
+ <p>Gas used: {data.receipt.gasUsed.toString()}</p>
578
+ </div>
579
+ )}
580
+ </div>
581
+ );
582
+ }
583
+ ```
584
+
585
+ ---
586
+
395
587
  ## Development
396
588
 
397
589
  ```bash
package/dist/react.cjs CHANGED
@@ -34,6 +34,7 @@ __export(react_exports, {
34
34
  useSimulate: () => useSimulate,
35
35
  useSubmitTx: () => useSubmitTx,
36
36
  useWaitForExecution: () => useWaitForExecution,
37
+ useWaitForExecutionReceipt: () => useWaitForExecutionReceipt,
37
38
  useWrite: () => useWrite
38
39
  });
39
40
  module.exports = __toCommonJS(react_exports);
@@ -270,11 +271,59 @@ function useWaitForExecution(options) {
270
271
  });
271
272
  }
272
273
 
273
- // src/react/use-fetch-pending-txs.ts
274
+ // src/react/use-wait-for-execution-receipt.ts
274
275
  var import_react_query3 = require("@tanstack/react-query");
276
+ var import_core3 = require("@wagmi/core");
277
+ function useWaitForExecutionReceipt(options) {
278
+ const {
279
+ config,
280
+ enabled = true,
281
+ pollingInterval = 5e3,
282
+ timeout = 12e4,
283
+ confirmations = 1,
284
+ ...waitOptions
285
+ } = options;
286
+ const maxAttempts = Math.ceil(timeout / pollingInterval);
287
+ return (0, import_react_query3.useQuery)({
288
+ queryKey: [
289
+ "adapter",
290
+ options.adapter,
291
+ "waitForExecutionReceipt",
292
+ options.txHash,
293
+ options.chainId.toString(),
294
+ confirmations
295
+ ],
296
+ queryFn: async () => {
297
+ const { transactionHash } = await waitForExecution2({
298
+ ...waitOptions,
299
+ pollingInterval,
300
+ maxAttempts
301
+ });
302
+ const receipt = await (0, import_core3.waitForTransactionReceipt)(config, {
303
+ hash: transactionHash,
304
+ confirmations
305
+ });
306
+ return {
307
+ transactionHash,
308
+ receipt
309
+ };
310
+ },
311
+ enabled: enabled && !!options.txHash,
312
+ refetchInterval: false,
313
+ refetchOnWindowFocus: false,
314
+ refetchOnMount: false,
315
+ refetchOnReconnect: false,
316
+ retry: false,
317
+ staleTime: Infinity,
318
+ gcTime: 1e3 * 60 * 5
319
+ });
320
+ }
321
+
322
+ // src/react/use-fetch-pending-txs.ts
323
+ var import_react_query4 = require("@tanstack/react-query");
275
324
  function useFetchPendingTxs(options) {
276
325
  const { enabled = true, refetchInterval = false, ...fetchOptions } = options;
277
- return (0, import_react_query3.useQuery)({
326
+ return (0, import_react_query4.useQuery)({
278
327
  queryKey: [
279
328
  "adapter",
280
329
  options.adapter,
@@ -289,10 +338,10 @@ function useFetchPendingTxs(options) {
289
338
  }
290
339
 
291
340
  // src/react/use-simulate.ts
292
- var import_react_query4 = require("@tanstack/react-query");
341
+ var import_react_query5 = require("@tanstack/react-query");
293
342
  function useSimulate(options) {
294
343
  const { enabled = true, ...simulateOptions } = options;
295
- return (0, import_react_query4.useQuery)({
344
+ return (0, import_react_query5.useQuery)({
296
345
  queryKey: [
297
346
  "adapter",
298
347
  options.adapter,
@@ -307,9 +356,9 @@ function useSimulate(options) {
307
356
  }
308
357
 
309
358
  // src/react/use-write.ts
310
- var import_react_query5 = require("@tanstack/react-query");
359
+ var import_react_query6 = require("@tanstack/react-query");
311
360
  function useWrite() {
312
- return (0, import_react_query5.useMutation)({
361
+ return (0, import_react_query6.useMutation)({
313
362
  mutationFn: (options) => write(options)
314
363
  });
315
364
  }
@@ -319,6 +368,7 @@ function useWrite() {
319
368
  useSimulate,
320
369
  useSubmitTx,
321
370
  useWaitForExecution,
371
+ useWaitForExecutionReceipt,
322
372
  useWrite
323
373
  });
324
374
  //# sourceMappingURL=react.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react/index.ts","../src/react/use-submit-tx.ts","../src/adapters/safe/simulate-contract-call.ts","../src/adapters/safe/write-contract-call.ts","../src/adapters/safe/fetch-pending-transactions.ts","../src/core/extract-call-data.ts","../src/core/match-pending-tx.ts","../src/adapters/safe/submit-and-find-safe-tx.ts","../src/adapters/safe/wait-for-execution.ts","../src/adapters/registry.ts","../src/adapters/index.ts","../src/react/use-wait-for-execution.ts","../src/react/use-fetch-pending-txs.ts","../src/react/use-simulate.ts","../src/react/use-write.ts"],"sourcesContent":["export * from \"./use-submit-tx.js\";\nexport * from \"./use-wait-for-execution.js\";\nexport * from \"./use-fetch-pending-txs.js\";\nexport * from \"./use-simulate.js\";\nexport * from \"./use-write.js\";\n","import { useMutation } from \"@tanstack/react-query\";\nimport { submitTx } from \"../adapters/index.js\";\nimport type { SubmitTxOptions, SubmitTxResult } from \"../adapters/types.js\";\n\nexport type UseSubmitTxOptions = Omit<SubmitTxOptions, \"config\"> & {\n config: SubmitTxOptions[\"config\"];\n};\n\nexport function useSubmitTx() {\n return useMutation<SubmitTxResult, Error, UseSubmitTxOptions>({\n mutationFn: (options) => submitTx(options),\n });\n}\n","import { simulateContract, type Config } from \"@wagmi/core\";\nimport type { ContractCallParams } from \"../../core/types.js\";\n\nexport async function simulateContractCall(\n config: Config,\n params: ContractCallParams,\n) {\n return simulateContract(config, {\n address: params.address,\n abi: params.abi,\n functionName: params.functionName,\n args: params.args as unknown[],\n value: params.value,\n chainId: params.chainId,\n account: params.account,\n });\n}\n","import { writeContract, type Config } from \"@wagmi/core\";\nimport type { Hex } from \"viem\";\n\nexport async function writeContractCall(\n config: Config,\n request: Parameters<typeof writeContract>[1],\n): Promise<Hex> {\n return writeContract(config, request);\n}\n","import SafeApiKit from \"@safe-global/api-kit\";\nimport type { SafeMultisigTransactionResponse } from \"@safe-global/types-kit\";\n\nexport interface FetchPendingTransactionsParams {\n chainId: bigint;\n safeAddress: string;\n txServiceUrl?: string;\n apiKey?: string;\n}\n\nexport async function fetchPendingTransactions(\n params: FetchPendingTransactionsParams,\n): Promise<SafeMultisigTransactionResponse[]> {\n const apiKit = new SafeApiKit({\n chainId: params.chainId,\n ...(params.txServiceUrl && { txServiceUrl: params.txServiceUrl }),\n apiKey: params.apiKey,\n });\n\n const response = await apiKit.getPendingTransactions(params.safeAddress);\n return response.results;\n}\n","import type { Abi, Address } from \"viem\";\nimport { encodeFunctionData } from \"viem\";\nimport type { EncodedCallData } from \"./types.js\";\n\nexport function extractCallData(params: {\n abi: Abi;\n functionName: string;\n args?: readonly unknown[];\n address: Address;\n value?: bigint;\n}): EncodedCallData {\n const data = encodeFunctionData({\n abi: params.abi,\n functionName: params.functionName,\n args: params.args as unknown[],\n });\n\n return {\n to: params.address,\n data,\n value: params.value ?? 0n,\n };\n}\n","import type { SafeMultisigTransactionResponse } from \"@safe-global/types-kit\";\nimport type { TxMatchCriteria } from \"./types.js\";\n\nexport function matchPendingTransaction(\n pendingTxs: SafeMultisigTransactionResponse[],\n criteria: TxMatchCriteria,\n): SafeMultisigTransactionResponse | undefined {\n return pendingTxs.find(\n (tx) =>\n tx.to.toLowerCase() === criteria.to.toLowerCase() &&\n tx.value === String(criteria.value) &&\n tx.data?.toLowerCase() === criteria.data.toLowerCase(),\n );\n}\n","import { extractCallData } from \"../../core/extract-call-data.js\";\nimport { matchPendingTransaction } from \"../../core/match-pending-tx.js\";\nimport { fetchPendingTransactions } from \"./fetch-pending-transactions.js\";\nimport { simulateContractCall } from \"./simulate-contract-call.js\";\nimport { writeContractCall } from \"./write-contract-call.js\";\nimport type {\n SubmitAndFindSafeTxOptions,\n SubmitAndFindSafeTxResult,\n} from \"./types.js\";\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function submitAndFindSafeTx(\n options: SubmitAndFindSafeTxOptions,\n): Promise<SubmitAndFindSafeTxResult> {\n const {\n config,\n safeAddress,\n txServiceUrl,\n apiKey,\n pollingInterval = 3000,\n maxAttempts = 20,\n ...callParams\n } = options;\n\n const callData = extractCallData(callParams);\n\n const simulation = await simulateContractCall(config, callParams);\n\n await writeContractCall(config, simulation.request as Parameters<typeof writeContractCall>[1]);\n\n const chainId = BigInt(callParams.chainId ?? (await getChainId(config)));\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n await delay(pollingInterval);\n\n const pendingTxs = await fetchPendingTransactions({\n chainId,\n safeAddress,\n txServiceUrl,\n apiKey,\n });\n const match = matchPendingTransaction(pendingTxs, callData);\n\n if (match) {\n return {\n safeTxHash: match.safeTxHash,\n };\n }\n }\n\n throw new Error(\n `Could not find matching Safe transaction after ${maxAttempts} attempts`,\n );\n}\n\nasync function getChainId(config: Parameters<typeof simulateContractCall>[0]): Promise<number> {\n const { getChainId: wagmiGetChainId } = await import(\"@wagmi/core\");\n return wagmiGetChainId(config);\n}\n","import SafeApiKit from \"@safe-global/api-kit\";\nimport type {\n WaitForExecutionOptions,\n WaitForExecutionResult,\n} from \"./types.js\";\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function waitForExecution(\n options: WaitForExecutionOptions,\n): Promise<WaitForExecutionResult> {\n const {\n safeTxHash,\n chainId,\n txServiceUrl,\n apiKey,\n pollingInterval = 5000,\n maxAttempts = 60,\n } = options;\n\n const apiKit = new SafeApiKit({\n chainId,\n ...(txServiceUrl && { txServiceUrl }),\n apiKey,\n });\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const tx = await apiKit.getTransaction(safeTxHash);\n\n if (tx.isExecuted && tx.transactionHash) {\n return {\n transactionHash: tx.transactionHash,\n };\n }\n\n await delay(pollingInterval);\n }\n\n throw new Error(\n `Safe transaction ${safeTxHash} was not executed after ${maxAttempts} attempts`,\n );\n}\n","import * as safe from \"./safe/index.js\";\n\nexport const adapters = {\n safe: {\n submitTx: safe.submitAndFindSafeTx,\n waitForExecution: safe.waitForExecution,\n fetchPending: safe.fetchPendingTransactions,\n simulate: safe.simulateContractCall,\n write: safe.writeContractCall,\n },\n} as const;\n\nexport type AdapterRegistry = typeof adapters;\n","import { adapters } from \"./registry.js\";\nimport type {\n AdapterType,\n SubmitTxOptions,\n SubmitTxResult,\n WaitForExecutionOptions,\n WaitForExecutionResult,\n FetchPendingOptions,\n SimulateOptions,\n WriteOptions,\n} from \"./types.js\";\n\n// Re-export types\nexport * from \"./types.js\";\n\n// Re-export Safe adapter for direct access\nexport * as safe from \"./safe/index.js\";\n\n// Generic entry functions\n\nexport async function submitTx(\n options: SubmitTxOptions,\n): Promise<SubmitTxResult> {\n const { adapter, walletAddress, ...rest } = options;\n assertAdapter(adapter);\n\n const result = await adapters[adapter].submitTx({\n safeAddress: walletAddress,\n ...rest,\n });\n\n return { txHash: result.safeTxHash };\n}\n\nexport async function waitForExecution(\n options: WaitForExecutionOptions,\n): Promise<WaitForExecutionResult> {\n const { adapter, txHash, ...rest } = options;\n assertAdapter(adapter);\n\n const result = await adapters[adapter].waitForExecution({\n safeTxHash: txHash,\n ...rest,\n });\n\n return { transactionHash: result.transactionHash };\n}\n\nexport async function fetchPendingTxs(\n options: FetchPendingOptions,\n): Promise<unknown[]> {\n const { adapter, walletAddress, ...rest } = options;\n assertAdapter(adapter);\n\n return adapters[adapter].fetchPending({\n safeAddress: walletAddress,\n ...rest,\n });\n}\n\nexport async function simulate(\n options: SimulateOptions,\n): Promise<unknown> {\n const { adapter, config, ...params } = options;\n assertAdapter(adapter);\n\n return adapters[adapter].simulate(config, params);\n}\n\nexport async function write(\n options: WriteOptions,\n): Promise<string> {\n const { adapter, config, request } = options;\n assertAdapter(adapter);\n\n return adapters[adapter].write(config, request as Parameters<typeof adapters.safe.write>[1]);\n}\n\nfunction assertAdapter(adapter: AdapterType): asserts adapter is keyof typeof adapters {\n if (!(adapter in adapters)) {\n throw new Error(`Unknown adapter: ${adapter}. Available: ${Object.keys(adapters).join(\", \")}`);\n }\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { waitForExecution } from \"../adapters/index.js\";\nimport type { WaitForExecutionOptions, WaitForExecutionResult } from \"../adapters/types.js\";\n\nexport interface UseWaitForExecutionOptions extends Omit<WaitForExecutionOptions, \"maxAttempts\"> {\n /** Enable/disable the query. Defaults to true. */\n enabled?: boolean;\n /** Polling interval in ms. Defaults to 5000. */\n pollingInterval?: number;\n /** Timeout in ms. After this duration, the query will fail. Defaults to 120000 (2 min). */\n timeout?: number;\n}\n\n/**\n * Hook to wait for a Safe transaction to be executed on-chain.\n *\n * Unlike standard polling queries, this hook maintains a stable loading state\n * throughout the polling process (similar to wagmi's useWaitForTransactionReceipt):\n * - `isLoading` = true while waiting for execution\n * - `isSuccess` = true once transaction is executed\n * - `isError` = true if timeout is reached\n */\nexport function useWaitForExecution(options: UseWaitForExecutionOptions) {\n const {\n enabled = true,\n pollingInterval = 5000,\n timeout = 120000,\n ...waitOptions\n } = options;\n\n // Calculate max attempts from timeout and polling interval\n const maxAttempts = Math.ceil(timeout / pollingInterval);\n\n return useQuery<WaitForExecutionResult, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"waitForExecution\",\n options.txHash,\n options.chainId.toString(),\n ],\n queryFn: () =>\n waitForExecution({\n ...waitOptions,\n pollingInterval,\n maxAttempts,\n }),\n enabled: enabled && !!options.txHash,\n // Don't refetch - the query handles polling internally\n refetchInterval: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n // Don't retry on error - timeout is intentional\n retry: false,\n // Keep data fresh\n staleTime: Infinity,\n // Cache result for this specific txHash\n gcTime: 1000 * 60 * 5, // 5 minutes\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { fetchPendingTxs } from \"../adapters/index.js\";\nimport type { FetchPendingOptions } from \"../adapters/types.js\";\n\nexport interface UseFetchPendingTxsOptions extends FetchPendingOptions {\n enabled?: boolean;\n refetchInterval?: number | false;\n}\n\nexport function useFetchPendingTxs(options: UseFetchPendingTxsOptions) {\n const { enabled = true, refetchInterval = false, ...fetchOptions } = options;\n\n return useQuery<unknown[], Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"pendingTxs\",\n options.walletAddress,\n options.chainId.toString(),\n ],\n queryFn: () => fetchPendingTxs(fetchOptions),\n enabled: enabled && !!options.walletAddress,\n refetchInterval,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { simulate } from \"../adapters/index.js\";\nimport type { SimulateOptions } from \"../adapters/types.js\";\n\nexport interface UseSimulateOptions extends SimulateOptions {\n enabled?: boolean;\n}\n\nexport function useSimulate(options: UseSimulateOptions) {\n const { enabled = true, ...simulateOptions } = options;\n\n return useQuery<unknown, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"simulate\",\n options.address,\n options.functionName,\n JSON.stringify(options.args),\n ],\n queryFn: () => simulate(simulateOptions),\n enabled,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { write } from \"../adapters/index.js\";\nimport type { WriteOptions } from \"../adapters/types.js\";\n\nexport function useWrite() {\n return useMutation<string, Error, WriteOptions>({\n mutationFn: (options) => write(options),\n });\n}\n"],"mappings":"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","names":["import_core","SafeApiKit","import_api_kit","delay","SafeApiKit","waitForExecution","import_react_query","waitForExecution","import_react_query","import_react_query","import_react_query"]}
1
+ {"version":3,"sources":["../src/react/index.ts","../src/react/use-submit-tx.ts","../src/adapters/safe/simulate-contract-call.ts","../src/adapters/safe/write-contract-call.ts","../src/adapters/safe/fetch-pending-transactions.ts","../src/core/extract-call-data.ts","../src/core/match-pending-tx.ts","../src/adapters/safe/submit-and-find-safe-tx.ts","../src/adapters/safe/wait-for-execution.ts","../src/adapters/registry.ts","../src/adapters/index.ts","../src/react/use-wait-for-execution.ts","../src/react/use-wait-for-execution-receipt.ts","../src/react/use-fetch-pending-txs.ts","../src/react/use-simulate.ts","../src/react/use-write.ts"],"sourcesContent":["export * from \"./use-submit-tx.js\";\nexport * from \"./use-wait-for-execution.js\";\nexport * from \"./use-wait-for-execution-receipt.js\";\nexport * from \"./use-fetch-pending-txs.js\";\nexport * from \"./use-simulate.js\";\nexport * from \"./use-write.js\";\n","import { useMutation } from \"@tanstack/react-query\";\nimport { submitTx } from \"../adapters/index.js\";\nimport type { SubmitTxOptions, SubmitTxResult } from \"../adapters/types.js\";\n\nexport type UseSubmitTxOptions = Omit<SubmitTxOptions, \"config\"> & {\n config: SubmitTxOptions[\"config\"];\n};\n\nexport function useSubmitTx() {\n return useMutation<SubmitTxResult, Error, UseSubmitTxOptions>({\n mutationFn: (options) => submitTx(options),\n });\n}\n","import { simulateContract, type Config } from \"@wagmi/core\";\nimport type { ContractCallParams } from \"../../core/types.js\";\n\nexport async function simulateContractCall(\n config: Config,\n params: ContractCallParams,\n) {\n return simulateContract(config, {\n address: params.address,\n abi: params.abi,\n functionName: params.functionName,\n args: params.args as unknown[],\n value: params.value,\n chainId: params.chainId,\n account: params.account,\n });\n}\n","import { writeContract, type Config } from \"@wagmi/core\";\nimport type { Hex } from \"viem\";\n\nexport async function writeContractCall(\n config: Config,\n request: Parameters<typeof writeContract>[1],\n): Promise<Hex> {\n return writeContract(config, request);\n}\n","import SafeApiKit from \"@safe-global/api-kit\";\nimport type { SafeMultisigTransactionResponse } from \"@safe-global/types-kit\";\n\nexport interface FetchPendingTransactionsParams {\n chainId: bigint;\n safeAddress: string;\n txServiceUrl?: string;\n apiKey?: string;\n}\n\nexport async function fetchPendingTransactions(\n params: FetchPendingTransactionsParams,\n): Promise<SafeMultisigTransactionResponse[]> {\n const apiKit = new SafeApiKit({\n chainId: params.chainId,\n ...(params.txServiceUrl && { txServiceUrl: params.txServiceUrl }),\n apiKey: params.apiKey,\n });\n\n const response = await apiKit.getPendingTransactions(params.safeAddress);\n return response.results;\n}\n","import type { Abi, Address } from \"viem\";\nimport { encodeFunctionData } from \"viem\";\nimport type { EncodedCallData } from \"./types.js\";\n\nexport function extractCallData(params: {\n abi: Abi;\n functionName: string;\n args?: readonly unknown[];\n address: Address;\n value?: bigint;\n}): EncodedCallData {\n const data = encodeFunctionData({\n abi: params.abi,\n functionName: params.functionName,\n args: params.args as unknown[],\n });\n\n return {\n to: params.address,\n data,\n value: params.value ?? 0n,\n };\n}\n","import type { SafeMultisigTransactionResponse } from \"@safe-global/types-kit\";\nimport type { TxMatchCriteria } from \"./types.js\";\n\nexport function matchPendingTransaction(\n pendingTxs: SafeMultisigTransactionResponse[],\n criteria: TxMatchCriteria,\n): SafeMultisigTransactionResponse | undefined {\n return pendingTxs.find(\n (tx) =>\n tx.to.toLowerCase() === criteria.to.toLowerCase() &&\n tx.value === String(criteria.value) &&\n tx.data?.toLowerCase() === criteria.data.toLowerCase(),\n );\n}\n","import { extractCallData } from \"../../core/extract-call-data.js\";\nimport { matchPendingTransaction } from \"../../core/match-pending-tx.js\";\nimport { fetchPendingTransactions } from \"./fetch-pending-transactions.js\";\nimport { simulateContractCall } from \"./simulate-contract-call.js\";\nimport { writeContractCall } from \"./write-contract-call.js\";\nimport type {\n SubmitAndFindSafeTxOptions,\n SubmitAndFindSafeTxResult,\n} from \"./types.js\";\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function submitAndFindSafeTx(\n options: SubmitAndFindSafeTxOptions,\n): Promise<SubmitAndFindSafeTxResult> {\n const {\n config,\n safeAddress,\n txServiceUrl,\n apiKey,\n pollingInterval = 3000,\n maxAttempts = 20,\n ...callParams\n } = options;\n\n const callData = extractCallData(callParams);\n\n const simulation = await simulateContractCall(config, callParams);\n\n await writeContractCall(config, simulation.request as Parameters<typeof writeContractCall>[1]);\n\n const chainId = BigInt(callParams.chainId ?? (await getChainId(config)));\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n await delay(pollingInterval);\n\n const pendingTxs = await fetchPendingTransactions({\n chainId,\n safeAddress,\n txServiceUrl,\n apiKey,\n });\n const match = matchPendingTransaction(pendingTxs, callData);\n\n if (match) {\n return {\n safeTxHash: match.safeTxHash,\n };\n }\n }\n\n throw new Error(\n `Could not find matching Safe transaction after ${maxAttempts} attempts`,\n );\n}\n\nasync function getChainId(config: Parameters<typeof simulateContractCall>[0]): Promise<number> {\n const { getChainId: wagmiGetChainId } = await import(\"@wagmi/core\");\n return wagmiGetChainId(config);\n}\n","import SafeApiKit from \"@safe-global/api-kit\";\nimport type {\n WaitForExecutionOptions,\n WaitForExecutionResult,\n} from \"./types.js\";\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function waitForExecution(\n options: WaitForExecutionOptions,\n): Promise<WaitForExecutionResult> {\n const {\n safeTxHash,\n chainId,\n txServiceUrl,\n apiKey,\n pollingInterval = 5000,\n maxAttempts = 60,\n } = options;\n\n const apiKit = new SafeApiKit({\n chainId,\n ...(txServiceUrl && { txServiceUrl }),\n apiKey,\n });\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const tx = await apiKit.getTransaction(safeTxHash);\n\n if (tx.isExecuted && tx.transactionHash) {\n return {\n transactionHash: tx.transactionHash,\n };\n }\n\n await delay(pollingInterval);\n }\n\n throw new Error(\n `Safe transaction ${safeTxHash} was not executed after ${maxAttempts} attempts`,\n );\n}\n","import * as safe from \"./safe/index.js\";\n\nexport const adapters = {\n safe: {\n submitTx: safe.submitAndFindSafeTx,\n waitForExecution: safe.waitForExecution,\n fetchPending: safe.fetchPendingTransactions,\n simulate: safe.simulateContractCall,\n write: safe.writeContractCall,\n },\n} as const;\n\nexport type AdapterRegistry = typeof adapters;\n","import { adapters } from \"./registry.js\";\nimport type {\n AdapterType,\n SubmitTxOptions,\n SubmitTxResult,\n WaitForExecutionOptions,\n WaitForExecutionResult,\n FetchPendingOptions,\n SimulateOptions,\n WriteOptions,\n} from \"./types.js\";\n\n// Re-export types\nexport * from \"./types.js\";\n\n// Re-export Safe adapter for direct access\nexport * as safe from \"./safe/index.js\";\n\n// Generic entry functions\n\nexport async function submitTx(\n options: SubmitTxOptions,\n): Promise<SubmitTxResult> {\n const { adapter, walletAddress, ...rest } = options;\n assertAdapter(adapter);\n\n const result = await adapters[adapter].submitTx({\n safeAddress: walletAddress,\n ...rest,\n });\n\n return { txHash: result.safeTxHash };\n}\n\nexport async function waitForExecution(\n options: WaitForExecutionOptions,\n): Promise<WaitForExecutionResult> {\n const { adapter, txHash, ...rest } = options;\n assertAdapter(adapter);\n\n const result = await adapters[adapter].waitForExecution({\n safeTxHash: txHash,\n ...rest,\n });\n\n return { transactionHash: result.transactionHash };\n}\n\nexport async function fetchPendingTxs(\n options: FetchPendingOptions,\n): Promise<unknown[]> {\n const { adapter, walletAddress, ...rest } = options;\n assertAdapter(adapter);\n\n return adapters[adapter].fetchPending({\n safeAddress: walletAddress,\n ...rest,\n });\n}\n\nexport async function simulate(\n options: SimulateOptions,\n): Promise<unknown> {\n const { adapter, config, ...params } = options;\n assertAdapter(adapter);\n\n return adapters[adapter].simulate(config, params);\n}\n\nexport async function write(\n options: WriteOptions,\n): Promise<string> {\n const { adapter, config, request } = options;\n assertAdapter(adapter);\n\n return adapters[adapter].write(config, request as Parameters<typeof adapters.safe.write>[1]);\n}\n\nfunction assertAdapter(adapter: AdapterType): asserts adapter is keyof typeof adapters {\n if (!(adapter in adapters)) {\n throw new Error(`Unknown adapter: ${adapter}. Available: ${Object.keys(adapters).join(\", \")}`);\n }\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { waitForExecution } from \"../adapters/index.js\";\nimport type { WaitForExecutionOptions, WaitForExecutionResult } from \"../adapters/types.js\";\n\nexport interface UseWaitForExecutionOptions extends Omit<WaitForExecutionOptions, \"maxAttempts\"> {\n /** Enable/disable the query. Defaults to true. */\n enabled?: boolean;\n /** Polling interval in ms. Defaults to 5000. */\n pollingInterval?: number;\n /** Timeout in ms. After this duration, the query will fail. Defaults to 120000 (2 min). */\n timeout?: number;\n}\n\n/**\n * Hook to wait for a Safe transaction to be executed on-chain.\n *\n * Unlike standard polling queries, this hook maintains a stable loading state\n * throughout the polling process (similar to wagmi's useWaitForTransactionReceipt):\n * - `isLoading` = true while waiting for execution\n * - `isSuccess` = true once transaction is executed\n * - `isError` = true if timeout is reached\n */\nexport function useWaitForExecution(options: UseWaitForExecutionOptions) {\n const {\n enabled = true,\n pollingInterval = 5000,\n timeout = 120000,\n ...waitOptions\n } = options;\n\n // Calculate max attempts from timeout and polling interval\n const maxAttempts = Math.ceil(timeout / pollingInterval);\n\n return useQuery<WaitForExecutionResult, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"waitForExecution\",\n options.txHash,\n options.chainId.toString(),\n ],\n queryFn: () =>\n waitForExecution({\n ...waitOptions,\n pollingInterval,\n maxAttempts,\n }),\n enabled: enabled && !!options.txHash,\n // Don't refetch - the query handles polling internally\n refetchInterval: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n // Don't retry on error - timeout is intentional\n retry: false,\n // Keep data fresh\n staleTime: Infinity,\n // Cache result for this specific txHash\n gcTime: 1000 * 60 * 5, // 5 minutes\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { waitForTransactionReceipt } from \"@wagmi/core\";\nimport type { Config } from \"@wagmi/core\";\nimport type { TransactionReceipt } from \"viem\";\nimport { waitForExecution } from \"../adapters/index.js\";\nimport type { WaitForExecutionOptions } from \"../adapters/types.js\";\n\nexport interface UseWaitForExecutionReceiptOptions\n extends Omit<WaitForExecutionOptions, \"maxAttempts\"> {\n /** Wagmi config for fetching the receipt. */\n config: Config;\n /** Enable/disable the query. Defaults to true. */\n enabled?: boolean;\n /** Polling interval in ms for Safe tx. Defaults to 5000. */\n pollingInterval?: number;\n /** Timeout in ms for Safe tx execution. Defaults to 120000 (2 min). */\n timeout?: number;\n /** Number of confirmations to wait for. Defaults to 1. */\n confirmations?: number;\n}\n\nexport interface WaitForExecutionReceiptResult {\n /** The on-chain transaction hash. */\n transactionHash: string;\n /** The full transaction receipt with logs. */\n receipt: TransactionReceipt;\n}\n\n/**\n * Hook to wait for a Safe transaction to be executed and return the full receipt with logs.\n *\n * Combines waiting for Safe execution with fetching the transaction receipt:\n * 1. Polls Safe Transaction Service until the tx is executed\n * 2. Fetches the on-chain transaction receipt with logs\n *\n * @example\n * ```tsx\n * const { data, isLoading, isSuccess } = useWaitForExecutionReceipt({\n * adapter: \"safe\",\n * txHash: safeTxHash,\n * chainId: 11155111n,\n * config: wagmiConfig,\n * });\n *\n * if (isSuccess) {\n * console.log(\"Logs:\", data.receipt.logs);\n * }\n * ```\n */\nexport function useWaitForExecutionReceipt(\n options: UseWaitForExecutionReceiptOptions\n) {\n const {\n config,\n enabled = true,\n pollingInterval = 5000,\n timeout = 120000,\n confirmations = 1,\n ...waitOptions\n } = options;\n\n const maxAttempts = Math.ceil(timeout / pollingInterval);\n\n return useQuery<WaitForExecutionReceiptResult, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"waitForExecutionReceipt\",\n options.txHash,\n options.chainId.toString(),\n confirmations,\n ],\n queryFn: async () => {\n // Step 1: Wait for Safe tx to be executed\n const { transactionHash } = await waitForExecution({\n ...waitOptions,\n pollingInterval,\n maxAttempts,\n });\n\n // Step 2: Get the transaction receipt with logs\n const receipt = await waitForTransactionReceipt(config, {\n hash: transactionHash as `0x${string}`,\n confirmations,\n });\n\n return {\n transactionHash,\n receipt,\n };\n },\n enabled: enabled && !!options.txHash,\n refetchInterval: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: false,\n staleTime: Infinity,\n gcTime: 1000 * 60 * 5,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { fetchPendingTxs } from \"../adapters/index.js\";\nimport type { FetchPendingOptions } from \"../adapters/types.js\";\n\nexport interface UseFetchPendingTxsOptions extends FetchPendingOptions {\n enabled?: boolean;\n refetchInterval?: number | false;\n}\n\nexport function useFetchPendingTxs(options: UseFetchPendingTxsOptions) {\n const { enabled = true, refetchInterval = false, ...fetchOptions } = options;\n\n return useQuery<unknown[], Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"pendingTxs\",\n options.walletAddress,\n options.chainId.toString(),\n ],\n queryFn: () => fetchPendingTxs(fetchOptions),\n enabled: enabled && !!options.walletAddress,\n refetchInterval,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { simulate } from \"../adapters/index.js\";\nimport type { SimulateOptions } from \"../adapters/types.js\";\n\nexport interface UseSimulateOptions extends SimulateOptions {\n enabled?: boolean;\n}\n\nexport function useSimulate(options: UseSimulateOptions) {\n const { enabled = true, ...simulateOptions } = options;\n\n return useQuery<unknown, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"simulate\",\n options.address,\n options.functionName,\n JSON.stringify(options.args),\n ],\n queryFn: () => simulate(simulateOptions),\n enabled,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { write } from \"../adapters/index.js\";\nimport type { WriteOptions } from \"../adapters/types.js\";\n\nexport function useWrite() {\n return useMutation<string, Error, WriteOptions>({\n mutationFn: (options) => write(options),\n });\n}\n"],"mappings":"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","names":["import_core","SafeApiKit","import_api_kit","delay","SafeApiKit","waitForExecution","import_react_query","waitForExecution","import_react_query","import_core","waitForExecution","import_react_query","import_react_query","import_react_query"]}
package/dist/react.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
2
  import { a as SubmitTxOptions, b as SubmitTxResult, W as WaitForExecutionOptions, c as WaitForExecutionResult, F as FetchPendingOptions, S as SimulateOptions, d as WriteOptions } from './types-BJD1jdcY.cjs';
3
- import '@wagmi/core';
4
- import 'viem';
3
+ import { Config } from '@wagmi/core';
4
+ import { TransactionReceipt } from 'viem';
5
5
 
6
6
  type UseSubmitTxOptions = Omit<SubmitTxOptions, "config"> & {
7
7
  config: SubmitTxOptions["config"];
@@ -27,6 +27,47 @@ interface UseWaitForExecutionOptions extends Omit<WaitForExecutionOptions, "maxA
27
27
  */
28
28
  declare function useWaitForExecution(options: UseWaitForExecutionOptions): _tanstack_react_query.UseQueryResult<WaitForExecutionResult, Error>;
29
29
 
30
+ interface UseWaitForExecutionReceiptOptions extends Omit<WaitForExecutionOptions, "maxAttempts"> {
31
+ /** Wagmi config for fetching the receipt. */
32
+ config: Config;
33
+ /** Enable/disable the query. Defaults to true. */
34
+ enabled?: boolean;
35
+ /** Polling interval in ms for Safe tx. Defaults to 5000. */
36
+ pollingInterval?: number;
37
+ /** Timeout in ms for Safe tx execution. Defaults to 120000 (2 min). */
38
+ timeout?: number;
39
+ /** Number of confirmations to wait for. Defaults to 1. */
40
+ confirmations?: number;
41
+ }
42
+ interface WaitForExecutionReceiptResult {
43
+ /** The on-chain transaction hash. */
44
+ transactionHash: string;
45
+ /** The full transaction receipt with logs. */
46
+ receipt: TransactionReceipt;
47
+ }
48
+ /**
49
+ * Hook to wait for a Safe transaction to be executed and return the full receipt with logs.
50
+ *
51
+ * Combines waiting for Safe execution with fetching the transaction receipt:
52
+ * 1. Polls Safe Transaction Service until the tx is executed
53
+ * 2. Fetches the on-chain transaction receipt with logs
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * const { data, isLoading, isSuccess } = useWaitForExecutionReceipt({
58
+ * adapter: "safe",
59
+ * txHash: safeTxHash,
60
+ * chainId: 11155111n,
61
+ * config: wagmiConfig,
62
+ * });
63
+ *
64
+ * if (isSuccess) {
65
+ * console.log("Logs:", data.receipt.logs);
66
+ * }
67
+ * ```
68
+ */
69
+ declare function useWaitForExecutionReceipt(options: UseWaitForExecutionReceiptOptions): _tanstack_react_query.UseQueryResult<WaitForExecutionReceiptResult, Error>;
70
+
30
71
  interface UseFetchPendingTxsOptions extends FetchPendingOptions {
31
72
  enabled?: boolean;
32
73
  refetchInterval?: number | false;
@@ -40,4 +81,4 @@ declare function useSimulate(options: UseSimulateOptions): _tanstack_react_query
40
81
 
41
82
  declare function useWrite(): _tanstack_react_query.UseMutationResult<string, Error, WriteOptions, unknown>;
42
83
 
43
- export { type UseFetchPendingTxsOptions, type UseSimulateOptions, type UseSubmitTxOptions, type UseWaitForExecutionOptions, useFetchPendingTxs, useSimulate, useSubmitTx, useWaitForExecution, useWrite };
84
+ export { type UseFetchPendingTxsOptions, type UseSimulateOptions, type UseSubmitTxOptions, type UseWaitForExecutionOptions, type UseWaitForExecutionReceiptOptions, type WaitForExecutionReceiptResult, useFetchPendingTxs, useSimulate, useSubmitTx, useWaitForExecution, useWaitForExecutionReceipt, useWrite };
package/dist/react.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _tanstack_react_query from '@tanstack/react-query';
2
2
  import { a as SubmitTxOptions, b as SubmitTxResult, W as WaitForExecutionOptions, c as WaitForExecutionResult, F as FetchPendingOptions, S as SimulateOptions, d as WriteOptions } from './types-BJD1jdcY.js';
3
- import '@wagmi/core';
4
- import 'viem';
3
+ import { Config } from '@wagmi/core';
4
+ import { TransactionReceipt } from 'viem';
5
5
 
6
6
  type UseSubmitTxOptions = Omit<SubmitTxOptions, "config"> & {
7
7
  config: SubmitTxOptions["config"];
@@ -27,6 +27,47 @@ interface UseWaitForExecutionOptions extends Omit<WaitForExecutionOptions, "maxA
27
27
  */
28
28
  declare function useWaitForExecution(options: UseWaitForExecutionOptions): _tanstack_react_query.UseQueryResult<WaitForExecutionResult, Error>;
29
29
 
30
+ interface UseWaitForExecutionReceiptOptions extends Omit<WaitForExecutionOptions, "maxAttempts"> {
31
+ /** Wagmi config for fetching the receipt. */
32
+ config: Config;
33
+ /** Enable/disable the query. Defaults to true. */
34
+ enabled?: boolean;
35
+ /** Polling interval in ms for Safe tx. Defaults to 5000. */
36
+ pollingInterval?: number;
37
+ /** Timeout in ms for Safe tx execution. Defaults to 120000 (2 min). */
38
+ timeout?: number;
39
+ /** Number of confirmations to wait for. Defaults to 1. */
40
+ confirmations?: number;
41
+ }
42
+ interface WaitForExecutionReceiptResult {
43
+ /** The on-chain transaction hash. */
44
+ transactionHash: string;
45
+ /** The full transaction receipt with logs. */
46
+ receipt: TransactionReceipt;
47
+ }
48
+ /**
49
+ * Hook to wait for a Safe transaction to be executed and return the full receipt with logs.
50
+ *
51
+ * Combines waiting for Safe execution with fetching the transaction receipt:
52
+ * 1. Polls Safe Transaction Service until the tx is executed
53
+ * 2. Fetches the on-chain transaction receipt with logs
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * const { data, isLoading, isSuccess } = useWaitForExecutionReceipt({
58
+ * adapter: "safe",
59
+ * txHash: safeTxHash,
60
+ * chainId: 11155111n,
61
+ * config: wagmiConfig,
62
+ * });
63
+ *
64
+ * if (isSuccess) {
65
+ * console.log("Logs:", data.receipt.logs);
66
+ * }
67
+ * ```
68
+ */
69
+ declare function useWaitForExecutionReceipt(options: UseWaitForExecutionReceiptOptions): _tanstack_react_query.UseQueryResult<WaitForExecutionReceiptResult, Error>;
70
+
30
71
  interface UseFetchPendingTxsOptions extends FetchPendingOptions {
31
72
  enabled?: boolean;
32
73
  refetchInterval?: number | false;
@@ -40,4 +81,4 @@ declare function useSimulate(options: UseSimulateOptions): _tanstack_react_query
40
81
 
41
82
  declare function useWrite(): _tanstack_react_query.UseMutationResult<string, Error, WriteOptions, unknown>;
42
83
 
43
- export { type UseFetchPendingTxsOptions, type UseSimulateOptions, type UseSubmitTxOptions, type UseWaitForExecutionOptions, useFetchPendingTxs, useSimulate, useSubmitTx, useWaitForExecution, useWrite };
84
+ export { type UseFetchPendingTxsOptions, type UseSimulateOptions, type UseSubmitTxOptions, type UseWaitForExecutionOptions, type UseWaitForExecutionReceiptOptions, type WaitForExecutionReceiptResult, useFetchPendingTxs, useSimulate, useSubmitTx, useWaitForExecution, useWaitForExecutionReceipt, useWrite };
package/dist/react.js CHANGED
@@ -53,11 +53,59 @@ function useWaitForExecution(options) {
53
53
  });
54
54
  }
55
55
 
56
- // src/react/use-fetch-pending-txs.ts
56
+ // src/react/use-wait-for-execution-receipt.ts
57
57
  import { useQuery as useQuery2 } from "@tanstack/react-query";
58
+ import { waitForTransactionReceipt } from "@wagmi/core";
59
+ function useWaitForExecutionReceipt(options) {
60
+ const {
61
+ config,
62
+ enabled = true,
63
+ pollingInterval = 5e3,
64
+ timeout = 12e4,
65
+ confirmations = 1,
66
+ ...waitOptions
67
+ } = options;
68
+ const maxAttempts = Math.ceil(timeout / pollingInterval);
69
+ return useQuery2({
70
+ queryKey: [
71
+ "adapter",
72
+ options.adapter,
73
+ "waitForExecutionReceipt",
74
+ options.txHash,
75
+ options.chainId.toString(),
76
+ confirmations
77
+ ],
78
+ queryFn: async () => {
79
+ const { transactionHash } = await waitForExecution({
80
+ ...waitOptions,
81
+ pollingInterval,
82
+ maxAttempts
83
+ });
84
+ const receipt = await waitForTransactionReceipt(config, {
85
+ hash: transactionHash,
86
+ confirmations
87
+ });
88
+ return {
89
+ transactionHash,
90
+ receipt
91
+ };
92
+ },
93
+ enabled: enabled && !!options.txHash,
94
+ refetchInterval: false,
95
+ refetchOnWindowFocus: false,
96
+ refetchOnMount: false,
97
+ refetchOnReconnect: false,
98
+ retry: false,
99
+ staleTime: Infinity,
100
+ gcTime: 1e3 * 60 * 5
101
+ });
102
+ }
103
+
104
+ // src/react/use-fetch-pending-txs.ts
105
+ import { useQuery as useQuery3 } from "@tanstack/react-query";
58
106
  function useFetchPendingTxs(options) {
59
107
  const { enabled = true, refetchInterval = false, ...fetchOptions } = options;
60
- return useQuery2({
108
+ return useQuery3({
61
109
  queryKey: [
62
110
  "adapter",
63
111
  options.adapter,
@@ -72,10 +120,10 @@ function useFetchPendingTxs(options) {
72
120
  }
73
121
 
74
122
  // src/react/use-simulate.ts
75
- import { useQuery as useQuery3 } from "@tanstack/react-query";
123
+ import { useQuery as useQuery4 } from "@tanstack/react-query";
76
124
  function useSimulate(options) {
77
125
  const { enabled = true, ...simulateOptions } = options;
78
- return useQuery3({
126
+ return useQuery4({
79
127
  queryKey: [
80
128
  "adapter",
81
129
  options.adapter,
@@ -101,6 +149,7 @@ export {
101
149
  useSimulate,
102
150
  useSubmitTx,
103
151
  useWaitForExecution,
152
+ useWaitForExecutionReceipt,
104
153
  useWrite
105
154
  };
106
155
  //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react/use-submit-tx.ts","../src/react/use-wait-for-execution.ts","../src/react/use-fetch-pending-txs.ts","../src/react/use-simulate.ts","../src/react/use-write.ts"],"sourcesContent":["import { useMutation } from \"@tanstack/react-query\";\nimport { submitTx } from \"../adapters/index.js\";\nimport type { SubmitTxOptions, SubmitTxResult } from \"../adapters/types.js\";\n\nexport type UseSubmitTxOptions = Omit<SubmitTxOptions, \"config\"> & {\n config: SubmitTxOptions[\"config\"];\n};\n\nexport function useSubmitTx() {\n return useMutation<SubmitTxResult, Error, UseSubmitTxOptions>({\n mutationFn: (options) => submitTx(options),\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { waitForExecution } from \"../adapters/index.js\";\nimport type { WaitForExecutionOptions, WaitForExecutionResult } from \"../adapters/types.js\";\n\nexport interface UseWaitForExecutionOptions extends Omit<WaitForExecutionOptions, \"maxAttempts\"> {\n /** Enable/disable the query. Defaults to true. */\n enabled?: boolean;\n /** Polling interval in ms. Defaults to 5000. */\n pollingInterval?: number;\n /** Timeout in ms. After this duration, the query will fail. Defaults to 120000 (2 min). */\n timeout?: number;\n}\n\n/**\n * Hook to wait for a Safe transaction to be executed on-chain.\n *\n * Unlike standard polling queries, this hook maintains a stable loading state\n * throughout the polling process (similar to wagmi's useWaitForTransactionReceipt):\n * - `isLoading` = true while waiting for execution\n * - `isSuccess` = true once transaction is executed\n * - `isError` = true if timeout is reached\n */\nexport function useWaitForExecution(options: UseWaitForExecutionOptions) {\n const {\n enabled = true,\n pollingInterval = 5000,\n timeout = 120000,\n ...waitOptions\n } = options;\n\n // Calculate max attempts from timeout and polling interval\n const maxAttempts = Math.ceil(timeout / pollingInterval);\n\n return useQuery<WaitForExecutionResult, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"waitForExecution\",\n options.txHash,\n options.chainId.toString(),\n ],\n queryFn: () =>\n waitForExecution({\n ...waitOptions,\n pollingInterval,\n maxAttempts,\n }),\n enabled: enabled && !!options.txHash,\n // Don't refetch - the query handles polling internally\n refetchInterval: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n // Don't retry on error - timeout is intentional\n retry: false,\n // Keep data fresh\n staleTime: Infinity,\n // Cache result for this specific txHash\n gcTime: 1000 * 60 * 5, // 5 minutes\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { fetchPendingTxs } from \"../adapters/index.js\";\nimport type { FetchPendingOptions } from \"../adapters/types.js\";\n\nexport interface UseFetchPendingTxsOptions extends FetchPendingOptions {\n enabled?: boolean;\n refetchInterval?: number | false;\n}\n\nexport function useFetchPendingTxs(options: UseFetchPendingTxsOptions) {\n const { enabled = true, refetchInterval = false, ...fetchOptions } = options;\n\n return useQuery<unknown[], Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"pendingTxs\",\n options.walletAddress,\n options.chainId.toString(),\n ],\n queryFn: () => fetchPendingTxs(fetchOptions),\n enabled: enabled && !!options.walletAddress,\n refetchInterval,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { simulate } from \"../adapters/index.js\";\nimport type { SimulateOptions } from \"../adapters/types.js\";\n\nexport interface UseSimulateOptions extends SimulateOptions {\n enabled?: boolean;\n}\n\nexport function useSimulate(options: UseSimulateOptions) {\n const { enabled = true, ...simulateOptions } = options;\n\n return useQuery<unknown, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"simulate\",\n options.address,\n options.functionName,\n JSON.stringify(options.args),\n ],\n queryFn: () => simulate(simulateOptions),\n enabled,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { write } from \"../adapters/index.js\";\nimport type { WriteOptions } from \"../adapters/types.js\";\n\nexport function useWrite() {\n return useMutation<string, Error, WriteOptions>({\n mutationFn: (options) => write(options),\n });\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,mBAAmB;AAQrB,SAAS,cAAc;AAC5B,SAAO,YAAuD;AAAA,IAC5D,YAAY,CAAC,YAAY,SAAS,OAAO;AAAA,EAC3C,CAAC;AACH;;;ACZA,SAAS,gBAAgB;AAsBlB,SAAS,oBAAoB,SAAqC;AACvE,QAAM;AAAA,IACJ,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,UAAU;AAAA,IACV,GAAG;AAAA,EACL,IAAI;AAGJ,QAAM,cAAc,KAAK,KAAK,UAAU,eAAe;AAEvD,SAAO,SAAwC;AAAA,IAC7C,UAAU;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,QAAQ,SAAS;AAAA,IAC3B;AAAA,IACA,SAAS,MACP,iBAAiB;AAAA,MACf,GAAG;AAAA,MACH;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,SAAS,WAAW,CAAC,CAAC,QAAQ;AAAA;AAAA,IAE9B,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA;AAAA,IAEpB,OAAO;AAAA;AAAA,IAEP,WAAW;AAAA;AAAA,IAEX,QAAQ,MAAO,KAAK;AAAA;AAAA,EACtB,CAAC;AACH;;;AC5DA,SAAS,YAAAA,iBAAgB;AASlB,SAAS,mBAAmB,SAAoC;AACrE,QAAM,EAAE,UAAU,MAAM,kBAAkB,OAAO,GAAG,aAAa,IAAI;AAErE,SAAOC,UAA2B;AAAA,IAChC,UAAU;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,QAAQ,SAAS;AAAA,IAC3B;AAAA,IACA,SAAS,MAAM,gBAAgB,YAAY;AAAA,IAC3C,SAAS,WAAW,CAAC,CAAC,QAAQ;AAAA,IAC9B;AAAA,EACF,CAAC;AACH;;;ACxBA,SAAS,YAAAC,iBAAgB;AAQlB,SAAS,YAAY,SAA6B;AACvD,QAAM,EAAE,UAAU,MAAM,GAAG,gBAAgB,IAAI;AAE/C,SAAOC,UAAyB;AAAA,IAC9B,UAAU;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,KAAK,UAAU,QAAQ,IAAI;AAAA,IAC7B;AAAA,IACA,SAAS,MAAM,SAAS,eAAe;AAAA,IACvC;AAAA,EACF,CAAC;AACH;;;ACvBA,SAAS,eAAAC,oBAAmB;AAIrB,SAAS,WAAW;AACzB,SAAOC,aAAyC;AAAA,IAC9C,YAAY,CAAC,YAAY,MAAM,OAAO;AAAA,EACxC,CAAC;AACH;","names":["useQuery","useQuery","useQuery","useQuery","useMutation","useMutation"]}
1
+ {"version":3,"sources":["../src/react/use-submit-tx.ts","../src/react/use-wait-for-execution.ts","../src/react/use-wait-for-execution-receipt.ts","../src/react/use-fetch-pending-txs.ts","../src/react/use-simulate.ts","../src/react/use-write.ts"],"sourcesContent":["import { useMutation } from \"@tanstack/react-query\";\nimport { submitTx } from \"../adapters/index.js\";\nimport type { SubmitTxOptions, SubmitTxResult } from \"../adapters/types.js\";\n\nexport type UseSubmitTxOptions = Omit<SubmitTxOptions, \"config\"> & {\n config: SubmitTxOptions[\"config\"];\n};\n\nexport function useSubmitTx() {\n return useMutation<SubmitTxResult, Error, UseSubmitTxOptions>({\n mutationFn: (options) => submitTx(options),\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { waitForExecution } from \"../adapters/index.js\";\nimport type { WaitForExecutionOptions, WaitForExecutionResult } from \"../adapters/types.js\";\n\nexport interface UseWaitForExecutionOptions extends Omit<WaitForExecutionOptions, \"maxAttempts\"> {\n /** Enable/disable the query. Defaults to true. */\n enabled?: boolean;\n /** Polling interval in ms. Defaults to 5000. */\n pollingInterval?: number;\n /** Timeout in ms. After this duration, the query will fail. Defaults to 120000 (2 min). */\n timeout?: number;\n}\n\n/**\n * Hook to wait for a Safe transaction to be executed on-chain.\n *\n * Unlike standard polling queries, this hook maintains a stable loading state\n * throughout the polling process (similar to wagmi's useWaitForTransactionReceipt):\n * - `isLoading` = true while waiting for execution\n * - `isSuccess` = true once transaction is executed\n * - `isError` = true if timeout is reached\n */\nexport function useWaitForExecution(options: UseWaitForExecutionOptions) {\n const {\n enabled = true,\n pollingInterval = 5000,\n timeout = 120000,\n ...waitOptions\n } = options;\n\n // Calculate max attempts from timeout and polling interval\n const maxAttempts = Math.ceil(timeout / pollingInterval);\n\n return useQuery<WaitForExecutionResult, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"waitForExecution\",\n options.txHash,\n options.chainId.toString(),\n ],\n queryFn: () =>\n waitForExecution({\n ...waitOptions,\n pollingInterval,\n maxAttempts,\n }),\n enabled: enabled && !!options.txHash,\n // Don't refetch - the query handles polling internally\n refetchInterval: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n // Don't retry on error - timeout is intentional\n retry: false,\n // Keep data fresh\n staleTime: Infinity,\n // Cache result for this specific txHash\n gcTime: 1000 * 60 * 5, // 5 minutes\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { waitForTransactionReceipt } from \"@wagmi/core\";\nimport type { Config } from \"@wagmi/core\";\nimport type { TransactionReceipt } from \"viem\";\nimport { waitForExecution } from \"../adapters/index.js\";\nimport type { WaitForExecutionOptions } from \"../adapters/types.js\";\n\nexport interface UseWaitForExecutionReceiptOptions\n extends Omit<WaitForExecutionOptions, \"maxAttempts\"> {\n /** Wagmi config for fetching the receipt. */\n config: Config;\n /** Enable/disable the query. Defaults to true. */\n enabled?: boolean;\n /** Polling interval in ms for Safe tx. Defaults to 5000. */\n pollingInterval?: number;\n /** Timeout in ms for Safe tx execution. Defaults to 120000 (2 min). */\n timeout?: number;\n /** Number of confirmations to wait for. Defaults to 1. */\n confirmations?: number;\n}\n\nexport interface WaitForExecutionReceiptResult {\n /** The on-chain transaction hash. */\n transactionHash: string;\n /** The full transaction receipt with logs. */\n receipt: TransactionReceipt;\n}\n\n/**\n * Hook to wait for a Safe transaction to be executed and return the full receipt with logs.\n *\n * Combines waiting for Safe execution with fetching the transaction receipt:\n * 1. Polls Safe Transaction Service until the tx is executed\n * 2. Fetches the on-chain transaction receipt with logs\n *\n * @example\n * ```tsx\n * const { data, isLoading, isSuccess } = useWaitForExecutionReceipt({\n * adapter: \"safe\",\n * txHash: safeTxHash,\n * chainId: 11155111n,\n * config: wagmiConfig,\n * });\n *\n * if (isSuccess) {\n * console.log(\"Logs:\", data.receipt.logs);\n * }\n * ```\n */\nexport function useWaitForExecutionReceipt(\n options: UseWaitForExecutionReceiptOptions\n) {\n const {\n config,\n enabled = true,\n pollingInterval = 5000,\n timeout = 120000,\n confirmations = 1,\n ...waitOptions\n } = options;\n\n const maxAttempts = Math.ceil(timeout / pollingInterval);\n\n return useQuery<WaitForExecutionReceiptResult, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"waitForExecutionReceipt\",\n options.txHash,\n options.chainId.toString(),\n confirmations,\n ],\n queryFn: async () => {\n // Step 1: Wait for Safe tx to be executed\n const { transactionHash } = await waitForExecution({\n ...waitOptions,\n pollingInterval,\n maxAttempts,\n });\n\n // Step 2: Get the transaction receipt with logs\n const receipt = await waitForTransactionReceipt(config, {\n hash: transactionHash as `0x${string}`,\n confirmations,\n });\n\n return {\n transactionHash,\n receipt,\n };\n },\n enabled: enabled && !!options.txHash,\n refetchInterval: false,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: false,\n staleTime: Infinity,\n gcTime: 1000 * 60 * 5,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { fetchPendingTxs } from \"../adapters/index.js\";\nimport type { FetchPendingOptions } from \"../adapters/types.js\";\n\nexport interface UseFetchPendingTxsOptions extends FetchPendingOptions {\n enabled?: boolean;\n refetchInterval?: number | false;\n}\n\nexport function useFetchPendingTxs(options: UseFetchPendingTxsOptions) {\n const { enabled = true, refetchInterval = false, ...fetchOptions } = options;\n\n return useQuery<unknown[], Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"pendingTxs\",\n options.walletAddress,\n options.chainId.toString(),\n ],\n queryFn: () => fetchPendingTxs(fetchOptions),\n enabled: enabled && !!options.walletAddress,\n refetchInterval,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { simulate } from \"../adapters/index.js\";\nimport type { SimulateOptions } from \"../adapters/types.js\";\n\nexport interface UseSimulateOptions extends SimulateOptions {\n enabled?: boolean;\n}\n\nexport function useSimulate(options: UseSimulateOptions) {\n const { enabled = true, ...simulateOptions } = options;\n\n return useQuery<unknown, Error>({\n queryKey: [\n \"adapter\",\n options.adapter,\n \"simulate\",\n options.address,\n options.functionName,\n JSON.stringify(options.args),\n ],\n queryFn: () => simulate(simulateOptions),\n enabled,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { write } from \"../adapters/index.js\";\nimport type { WriteOptions } from \"../adapters/types.js\";\n\nexport function useWrite() {\n return useMutation<string, Error, WriteOptions>({\n mutationFn: (options) => write(options),\n });\n}\n"],"mappings":"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","names":["useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useMutation","useMutation"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smart-multisig-engine",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",