Viewing File: /home/ubuntu/walnutminds-ecom-frontend-base/node_modules/wagmi/dist/wagmi.cjs.dev.js

'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var querySyncStoragePersister = require('@tanstack/query-sync-storage-persister');
var reactQuery = require('@tanstack/react-query');
var reactQueryPersistClient = require('@tanstack/react-query-persist-client');
var core = require('@wagmi/core');
var React = require('react');
var pkg = require('use-sync-external-store/shim/index.js');
var ethers = require('ethers/lib/ethers');
var withSelector_js = require('use-sync-external-store/shim/with-selector.js');

function _interopNamespace(e) {
  if (e && e.__esModule) return e;
  var n = Object.create(null);
  if (e) {
    Object.keys(e).forEach(function (k) {
      if (k !== 'default') {
        var d = Object.getOwnPropertyDescriptor(e, k);
        Object.defineProperty(n, k, d.get ? d : {
          enumerable: true,
          get: function () { return e[k]; }
        });
      }
    });
  }
  n["default"] = e;
  return Object.freeze(n);
}

var React__namespace = /*#__PURE__*/_interopNamespace(React);
var pkg__namespace = /*#__PURE__*/_interopNamespace(pkg);

const useSyncExternalStore = pkg__namespace.useSyncExternalStore;

function isQueryKey(value) {
  return Array.isArray(value);
}

function parseQueryArgs(arg1, arg2, arg3) {
  if (!isQueryKey(arg1)) {
    return arg1;
  }

  if (typeof arg2 === 'function') {
    return { ...arg3,
      queryKey: arg1,
      queryFn: arg2
    };
  }

  return { ...arg2,
    queryKey: arg1
  };
}
function shouldThrowError(_useErrorBoundary, params) {
  // Allow useErrorBoundary function to override throwing behavior on a per-error basis
  if (typeof _useErrorBoundary === 'function') {
    return _useErrorBoundary(...params);
  }

  return !!_useErrorBoundary;
}
function trackResult(result, observer) {
  const trackedResult = {};
  Object.keys(result).forEach(key => {
    Object.defineProperty(trackedResult, key, {
      configurable: false,
      enumerable: true,
      get: () => {
        // @ts-expect-error – aware we are mutating private `trackedProps` property.
        observer.trackedProps.add(key);
        return result[key];
      }
    });
  });
  return trackedResult;
}

function useBaseQuery(options, Observer) {
  const queryClient = reactQuery.useQueryClient({
    context: options.context
  });
  const isRestoring = reactQuery.useIsRestoring();
  const errorResetBoundary = reactQuery.useQueryErrorResetBoundary();
  const defaultedOptions = queryClient.defaultQueryOptions(options); // Make sure results are optimistically set in fetching state before subscribing or updating options

  defaultedOptions._optimisticResults = isRestoring ? 'isRestoring' : 'optimistic'; // Include callbacks in batch renders

  if (defaultedOptions.onError) {
    defaultedOptions.onError = reactQuery.notifyManager.batchCalls(defaultedOptions.onError);
  }

  if (defaultedOptions.onSuccess) {
    defaultedOptions.onSuccess = reactQuery.notifyManager.batchCalls(defaultedOptions.onSuccess);
  }

  if (defaultedOptions.onSettled) {
    defaultedOptions.onSettled = reactQuery.notifyManager.batchCalls(defaultedOptions.onSettled);
  }

  if (defaultedOptions.suspense) {
    // Always set stale time when using suspense to prevent
    // fetching again when directly mounting after suspending
    if (typeof defaultedOptions.staleTime !== 'number') {
      defaultedOptions.staleTime = 1000;
    }
  }

  if (defaultedOptions.suspense || defaultedOptions.useErrorBoundary) {
    // Prevent retrying failed query if the error boundary has not been reset yet
    if (!errorResetBoundary.isReset()) {
      defaultedOptions.retryOnMount = false;
    }
  }

  const [observer] = React__namespace.useState(() => new Observer(queryClient, defaultedOptions));
  const result = observer.getOptimisticResult(defaultedOptions);
  useSyncExternalStore(React__namespace.useCallback(onStoreChange => isRestoring ? () => undefined : observer.subscribe(reactQuery.notifyManager.batchCalls(onStoreChange)), [observer, isRestoring]), () => observer.getCurrentResult(), () => observer.getCurrentResult());
  React__namespace.useEffect(() => {
    errorResetBoundary.clearReset();
  }, [errorResetBoundary]);
  React__namespace.useEffect(() => {
    // Do not notify on updates because of changes in the options because
    // these changes should already be reflected in the optimistic result.
    observer.setOptions(defaultedOptions, {
      listeners: false
    });
  }, [defaultedOptions, observer]); // Handle suspense

  if (defaultedOptions.suspense && result.isLoading && result.isFetching && !isRestoring) {
    throw observer.fetchOptimistic(defaultedOptions).then(_ref => {
      var _defaultedOptions$onS, _defaultedOptions$onS2;

      let {
        data
      } = _ref;
      (_defaultedOptions$onS = defaultedOptions.onSuccess) === null || _defaultedOptions$onS === void 0 ? void 0 : _defaultedOptions$onS.call(defaultedOptions, data);
      (_defaultedOptions$onS2 = defaultedOptions.onSettled) === null || _defaultedOptions$onS2 === void 0 ? void 0 : _defaultedOptions$onS2.call(defaultedOptions, data, null);
    }).catch(error => {
      var _defaultedOptions$onE, _defaultedOptions$onS3;

      errorResetBoundary.clearReset();
      (_defaultedOptions$onE = defaultedOptions.onError) === null || _defaultedOptions$onE === void 0 ? void 0 : _defaultedOptions$onE.call(defaultedOptions, error);
      (_defaultedOptions$onS3 = defaultedOptions.onSettled) === null || _defaultedOptions$onS3 === void 0 ? void 0 : _defaultedOptions$onS3.call(defaultedOptions, undefined, error);
    });
  } // Handle error boundary


  if (result.isError && !errorResetBoundary.isReset() && !result.isFetching && shouldThrowError(defaultedOptions.useErrorBoundary, [result.error, observer.getCurrentQuery()])) {
    throw result.error;
  }

  const status = result.status === 'loading' && result.fetchStatus === 'idle' ? 'idle' : result.status;
  const isIdle = status === 'idle';
  const isLoading = status === 'loading' && result.fetchStatus === 'fetching';
  return { ...result,
    defaultedOptions,
    isIdle,
    isLoading,
    observer,
    status
  };
}

function useInfiniteQuery(arg1, arg2, arg3) {
  const parsedOptions = parseQueryArgs(arg1, arg2, arg3);
  const baseQuery = useBaseQuery(parsedOptions, reactQuery.InfiniteQueryObserver);
  const result = {
    data: baseQuery.data,
    error: baseQuery.error,
    fetchNextPage: baseQuery.fetchNextPage,
    fetchStatus: baseQuery.fetchStatus,
    hasNextPage: baseQuery.hasNextPage,
    isError: baseQuery.isError,
    isFetched: baseQuery.isFetched,
    isFetching: baseQuery.isFetching,
    isFetchingNextPage: baseQuery.isFetchingNextPage,
    isIdle: baseQuery.isIdle,
    isLoading: baseQuery.isLoading,
    isRefetching: baseQuery.isRefetching,
    isSuccess: baseQuery.isSuccess,
    refetch: baseQuery.refetch,
    status: baseQuery.status,
    internal: {
      dataUpdatedAt: baseQuery.dataUpdatedAt,
      errorUpdatedAt: baseQuery.errorUpdatedAt,
      failureCount: baseQuery.failureCount,
      isFetchedAfterMount: baseQuery.isFetchedAfterMount,
      isLoadingError: baseQuery.isLoadingError,
      isPaused: baseQuery.isPaused,
      isPlaceholderData: baseQuery.isPlaceholderData,
      isPreviousData: baseQuery.isPreviousData,
      isRefetchError: baseQuery.isRefetchError,
      isStale: baseQuery.isStale,
      remove: baseQuery.remove
    }
  }; // Handle result property usage tracking

  return !baseQuery.defaultedOptions.notifyOnChangeProps ? trackResult(result, baseQuery.observer) : result;
}

function useQuery(arg1, arg2, arg3) {
  const parsedOptions = parseQueryArgs(arg1, arg2, arg3);
  const baseQuery = useBaseQuery(parsedOptions, reactQuery.QueryObserver);
  const result = {
    data: baseQuery.data,
    error: baseQuery.error,
    fetchStatus: baseQuery.fetchStatus,
    isError: baseQuery.isError,
    isFetched: baseQuery.isFetched,
    isFetching: baseQuery.isFetching,
    isIdle: baseQuery.isIdle,
    isLoading: baseQuery.isLoading,
    isRefetching: baseQuery.isRefetching,
    isSuccess: baseQuery.isSuccess,
    refetch: baseQuery.refetch,
    status: baseQuery.status,
    internal: {
      dataUpdatedAt: baseQuery.dataUpdatedAt,
      errorUpdatedAt: baseQuery.errorUpdatedAt,
      failureCount: baseQuery.failureCount,
      isFetchedAfterMount: baseQuery.isFetchedAfterMount,
      isLoadingError: baseQuery.isLoadingError,
      isPaused: baseQuery.isPaused,
      isPlaceholderData: baseQuery.isPlaceholderData,
      isPreviousData: baseQuery.isPreviousData,
      isRefetchError: baseQuery.isRefetchError,
      isStale: baseQuery.isStale,
      remove: baseQuery.remove
    }
  }; // Handle result property usage tracking

  return !baseQuery.defaultedOptions.notifyOnChangeProps ? trackResult(result, baseQuery.observer) : result;
}

function useProvider() {
  let {
    chainId
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return withSelector_js.useSyncExternalStoreWithSelector(cb => core.watchProvider({
    chainId
  }, cb), () => core.getProvider({
    chainId
  }), () => core.getProvider({
    chainId
  }), x => x, (a, b) => a.network.chainId === b.network.chainId);
}

function useWebSocketProvider() {
  let {
    chainId
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return withSelector_js.useSyncExternalStoreWithSelector(cb => core.watchWebSocketProvider({
    chainId
  }, cb), () => core.getWebSocketProvider({
    chainId
  }), () => core.getWebSocketProvider({
    chainId
  }), x => x, (a, b) => (a === null || a === void 0 ? void 0 : a.network.chainId) === (b === null || b === void 0 ? void 0 : b.network.chainId));
}

function useChainId() {
  let {
    chainId
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const provider = useProvider({
    chainId
  });
  return provider.network.chainId;
}

function useForceUpdate() {
  const [, forceUpdate] = React__namespace.useReducer(x => x + 1, 0);
  return forceUpdate;
}

const queryKey$f = _ref => {
  let {
    chainId
  } = _ref;
  return [{
    entity: 'blockNumber',
    chainId
  }];
};

const queryFn$f = _ref2 => {
  let {
    queryKey: [{
      chainId
    }]
  } = _ref2;
  return core.fetchBlockNumber({
    chainId
  });
};

function useBlockNumber() {
  let {
    cacheTime = 0,
    chainId: chainId_,
    enabled = true,
    staleTime,
    suspense,
    watch = false,
    onBlock,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  const provider = useProvider();
  const webSocketProvider = useWebSocketProvider();
  const queryClient = reactQuery.useQueryClient();
  React__namespace.useEffect(() => {
    if (!watch && !onBlock) return;

    const listener = blockNumber => {
      // Just to be safe in case the provider implementation
      // calls the event callback after .off() has been called
      if (watch) queryClient.setQueryData(queryKey$f({
        chainId
      }), blockNumber);
      if (onBlock) onBlock(blockNumber);
    };

    const provider_ = webSocketProvider !== null && webSocketProvider !== void 0 ? webSocketProvider : provider;
    provider_.on('block', listener);
    return () => {
      provider_.off('block', listener);
    };
  }, [chainId, onBlock, provider, queryClient, watch, webSocketProvider]);
  return useQuery(queryKey$f({
    chainId
  }), queryFn$f, {
    cacheTime,
    enabled,
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey$e = _ref => {
  let {
    chainId,
    formatUnits
  } = _ref;
  return [{
    entity: 'feeData',
    chainId,
    formatUnits
  }];
};

const queryFn$e = _ref2 => {
  let {
    queryKey: [{
      chainId,
      formatUnits
    }]
  } = _ref2;
  return core.fetchFeeData({
    chainId,
    formatUnits
  });
};

function useFeeData() {
  let {
    cacheTime,
    chainId: chainId_,
    enabled = true,
    formatUnits = 'wei',
    staleTime,
    suspense,
    watch,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  const feeDataQuery = useQuery(queryKey$e({
    chainId,
    formatUnits
  }), queryFn$e, {
    cacheTime,
    enabled,
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
  const {
    data: blockNumber
  } = useBlockNumber({
    watch
  });
  React__namespace.useEffect(() => {
    if (!enabled) return;
    if (!watch) return;
    if (!blockNumber) return;
    feeDataQuery.refetch(); // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [blockNumber]);
  return feeDataQuery;
}

function useInvalidateOnBlock(_ref) {
  let {
    enabled,
    queryKey
  } = _ref;
  const queryClient = reactQuery.useQueryClient();
  useBlockNumber({
    onBlock: enabled ? () => queryClient.invalidateQueries(queryKey) : undefined
  });
}

const isPlainObject = obj => typeof obj === 'object' && !Array.isArray(obj);

function useSyncExternalStoreWithTracked(subscribe, getSnapshot) {
  let getServerSnapshot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getSnapshot;
  let isEqual = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : (a, b) => core.deepEqual(a, b);
  const trackedKeys = React__namespace.useRef([]);
  const result = withSelector_js.useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, x => x, (a, b) => {
    if (isPlainObject(a) && isPlainObject(b)) {
      for (const key of trackedKeys.current) {
        const equal = isEqual(a[key], b[key]);
        if (!equal) return false;
      }

      return true;
    }

    return isEqual(a, b);
  });

  if (isPlainObject(result)) {
    const trackedResult = { ...result
    };
    Object.defineProperties(trackedResult, Object.entries(trackedResult).reduce((res, _ref) => {
      let [key, value] = _ref;
      return { ...res,
        [key]: {
          configurable: false,
          enumerable: true,
          get: () => {
            if (!trackedKeys.current.includes(key)) {
              trackedKeys.current.push(key);
            }

            return value;
          }
        }
      };
    }, {}));
    return trackedResult;
  }

  return result;
}

const queryKey$d = () => [{
  entity: 'signer'
}];

const queryFn$d = () => core.fetchSigner();

function useSigner() {
  let {
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const signerQuery = useQuery(queryKey$d(), queryFn$d, {
    cacheTime: 0,
    staleTime: 0,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
  const queryClient = reactQuery.useQueryClient();
  React__namespace.useEffect(() => {
    const unwatch = core.watchSigner(signer => queryClient.setQueryData(queryKey$d(), signer));
    return unwatch;
  }, [queryClient]);
  return signerQuery;
}

const findAndReplace = (cacheRef, _ref) => {
  let {
    find,
    replace
  } = _ref;

  if (cacheRef && find(cacheRef)) {
    return replace(cacheRef);
  }

  if (typeof cacheRef !== 'object') {
    return cacheRef;
  }

  if (Array.isArray(cacheRef)) {
    return cacheRef.map(item => findAndReplace(item, {
      find,
      replace
    }));
  }

  if (cacheRef instanceof Object) {
    return Object.entries(cacheRef).reduce((curr, _ref2) => {
      let [key, value] = _ref2;
      return { ...curr,
        [key]: findAndReplace(value, {
          find,
          replace
        })
      };
    }, {});
  }

  return cacheRef;
};

function deserialize(cachedString) {
  const cache = JSON.parse(cachedString);
  const deserializedCacheWithBigNumbers = findAndReplace(cache, {
    find: data => data.type === 'BigNumber',
    replace: data => ethers.BigNumber.from(data.hex)
  });
  return deserializedCacheWithBigNumbers;
}

/**
 * @function getReferenceKey
 *
 * @description
 * get the reference key for the circular value
 *
 * @param keys the keys to build the reference key from
 * @param cutoff the maximum number of keys to include
 * @returns the reference key
 */
function getReferenceKey(keys, cutoff) {
  return keys.slice(0, cutoff).join('.') || '.';
}
/**
 * @function getCutoff
 *
 * @description
 * faster `Array.prototype.indexOf` implementation build for slicing / splicing
 *
 * @param array the array to match the value in
 * @param value the value to match
 * @returns the matching index, or -1
 */


function getCutoff(array, value) {
  const {
    length
  } = array;

  for (let index = 0; index < length; ++index) {
    if (array[index] === value) {
      return index + 1;
    }
  }

  return 0;
}

/**
 * @function createReplacer
 *
 * @description
 * create a replacer method that handles circular values
 *
 * @param [replacer] a custom replacer to use for non-circular values
 * @param [circularReplacer] a custom replacer to use for circular methods
 * @returns the value to stringify
 */
function createReplacer(replacer, circularReplacer) {
  const hasReplacer = typeof replacer === 'function';
  const hasCircularReplacer = typeof circularReplacer === 'function';
  const cache = [];
  const keys = [];
  return function replace(key, value) {
    if (typeof value === 'object') {
      if (cache.length) {
        const thisCutoff = getCutoff(cache, this);

        if (thisCutoff === 0) {
          cache[cache.length] = this;
        } else {
          cache.splice(thisCutoff);
          keys.splice(thisCutoff);
        }

        keys[keys.length] = key;
        const valueCutoff = getCutoff(cache, value);

        if (valueCutoff !== 0) {
          return hasCircularReplacer ? circularReplacer.call(this, key, value, getReferenceKey(keys, valueCutoff)) : "[ref=".concat(getReferenceKey(keys, valueCutoff), "]");
        }
      } else {
        cache[0] = value;
        keys[0] = key;
      }
    }

    return hasReplacer ? replacer.call(this, key, value) : value;
  };
}
/**
 * @function stringify
 *
 * @description
 * stringifier that handles circular values
 * Forked from https://github.com/planttheidea/fast-stringify
 *
 * @param value to stringify
 * @param [replacer] a custom replacer function for handling standard values
 * @param [indent] the number of spaces to indent the output by
 * @param [circularReplacer] a custom replacer function for handling circular values
 * @returns the stringified output
 */


function serialize(value, replacer, indent, circularReplacer) {
  return JSON.stringify(value, createReplacer(replacer, circularReplacer), indent !== null && indent !== void 0 ? indent : undefined);
}

function createClient(_ref) {
  let {
    queryClient = new reactQuery.QueryClient({
      defaultOptions: {
        queries: {
          cacheTime: 1000 * 60 * 60 * 24,
          // 24 hours
          networkMode: 'offlineFirst',
          refetchOnWindowFocus: false,
          retry: 0
        },
        mutations: {
          networkMode: 'offlineFirst'
        }
      }
    }),
    persister = typeof window !== 'undefined' ? querySyncStoragePersister.createSyncStoragePersister({
      key: 'wagmi.cache',
      storage: window.localStorage,
      serialize,
      deserialize
    }) : undefined,
    ...config
  } = _ref;
  const client = core.createClient(config);
  if (persister) reactQueryPersistClient.persistQueryClient({
    queryClient,
    persister,
    dehydrateOptions: {
      shouldDehydrateQuery: query => query.cacheTime !== 0 && query.queryHash !== JSON.stringify(queryKey$d())
    }
  });
  return Object.assign(client, {
    queryClient
  });
}

const Context = /*#__PURE__*/React__namespace.createContext(undefined);
function WagmiConfig(_ref) {
  let {
    children,
    client
  } = _ref;
  return /*#__PURE__*/React__namespace.createElement(Context.Provider, {
    value: client
  }, /*#__PURE__*/React__namespace.createElement(reactQuery.QueryClientProvider, {
    client: client.queryClient
  }, children));
}
function useClient() {
  const client = React__namespace.useContext(Context);
  if (!client) throw new Error(['`useClient` must be used within `WagmiConfig`.\n', 'Read more: https://wagmi.sh/docs/WagmiConfig'].join('\n'));
  return client;
}

function useAccount() {
  let {
    onConnect,
    onDisconnect
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const account = useSyncExternalStoreWithTracked(core.watchAccount, core.getAccount);
  const {
    subscribe
  } = useClient();
  React__namespace.useEffect(() => {
    // No need to subscribe if these callbacks aren't defined
    if (!onConnect && !onDisconnect) return; // Trigger update when status changes

    const unsubscribe = subscribe(state => state.status, (status, prevStatus) => {
      if (!!onConnect && status === 'connected') {
        const {
          address,
          connector
        } = core.getAccount();
        onConnect({
          address,
          connector,
          isReconnected: prevStatus === 'reconnecting'
        });
      }

      if (!!onDisconnect && prevStatus !== 'connecting' && status === 'disconnected') onDisconnect();
    });
    return unsubscribe;
  }, [onConnect, onDisconnect, subscribe]);
  return account;
}

const queryKey$c = _ref => {
  let {
    addressOrName,
    chainId,
    formatUnits,
    token
  } = _ref;
  return [{
    entity: 'balance',
    addressOrName,
    chainId,
    formatUnits,
    token
  }];
};

const queryFn$c = _ref2 => {
  let {
    queryKey: [{
      addressOrName,
      chainId,
      formatUnits,
      token
    }]
  } = _ref2;
  if (!addressOrName) throw new Error('address is required');
  return core.fetchBalance({
    addressOrName,
    chainId,
    formatUnits,
    token
  });
};

function useBalance() {
  let {
    addressOrName,
    cacheTime,
    chainId: chainId_,
    enabled = true,
    formatUnits,
    staleTime,
    suspense,
    token,
    watch,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  const balanceQuery = useQuery(queryKey$c({
    addressOrName,
    chainId,
    formatUnits,
    token
  }), queryFn$c, {
    cacheTime,
    enabled: Boolean(enabled && addressOrName),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
  const {
    data: blockNumber
  } = useBlockNumber({
    watch
  });
  React__namespace.useEffect(() => {
    if (!enabled) return;
    if (!watch) return;
    if (!blockNumber) return;
    if (!addressOrName) return;
    balanceQuery.refetch(); // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [blockNumber]);
  return balanceQuery;
}

const mutationKey$8 = args => [{
  entity: 'connect',
  ...args
}];

const mutationFn$7 = args => {
  const {
    connector,
    chainId
  } = args;
  if (!connector) throw new Error('connector is required');
  return core.connect({
    connector,
    chainId
  });
};

function useConnect() {
  let {
    chainId,
    connector,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const client = useClient();
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey$8({
    connector,
    chainId
  }), mutationFn$7, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const connect = React__namespace.useCallback(args => {
    var _args$chainId, _args$connector;

    return mutate({
      chainId: (_args$chainId = args === null || args === void 0 ? void 0 : args.chainId) !== null && _args$chainId !== void 0 ? _args$chainId : chainId,
      connector: (_args$connector = args === null || args === void 0 ? void 0 : args.connector) !== null && _args$connector !== void 0 ? _args$connector : connector
    });
  }, [chainId, connector, mutate]);
  const connectAsync = React__namespace.useCallback(args => {
    var _args$chainId2, _args$connector2;

    return mutateAsync({
      chainId: (_args$chainId2 = args === null || args === void 0 ? void 0 : args.chainId) !== null && _args$chainId2 !== void 0 ? _args$chainId2 : chainId,
      connector: (_args$connector2 = args === null || args === void 0 ? void 0 : args.connector) !== null && _args$connector2 !== void 0 ? _args$connector2 : connector
    });
  }, [chainId, connector, mutateAsync]);
  return {
    connect,
    connectAsync,
    connectors: client.connectors,
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    pendingConnector: variables === null || variables === void 0 ? void 0 : variables.connector,
    reset,
    status,
    variables
  };
}

const mutationKey$7 = [{
  entity: 'disconnect'
}];

const mutationFn$6 = () => core.disconnect();

function useDisconnect() {
  let {
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const {
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate: disconnect,
    mutateAsync: disconnectAsync,
    reset,
    status
  } = reactQuery.useMutation(mutationKey$7, mutationFn$6, { ...(onError ? {
      onError(error, _variables, context) {
        onError(error, context);
      }

    } : {}),
    onMutate,
    ...(onSettled ? {
      onSettled(_data, error, _variables, context) {
        onSettled(error, context);
      }

    } : {}),
    ...(onSuccess ? {
      onSuccess(_data, _variables, context) {
        onSuccess(context);
      }

    } : {})
  });
  return {
    disconnect,
    disconnectAsync,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    reset,
    status
  };
}

function useNetwork() {
  return useSyncExternalStoreWithTracked(core.watchNetwork, core.getNetwork);
}

const mutationKey$6 = args => [{
  entity: 'signMessage',
  ...args
}];

const mutationFn$5 = args => {
  const {
    message
  } = args;
  if (!message) throw new Error('message is required');
  return core.signMessage({
    message
  });
};

function useSignMessage() {
  let {
    message,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey$6({
    message
  }), mutationFn$5, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const signMessage = React__namespace.useCallback(args => mutate(args || {
    message
  }), [message, mutate]);
  const signMessageAsync = React__namespace.useCallback(args => mutateAsync(args || {
    message
  }), [message, mutateAsync]);
  return {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    reset,
    signMessage,
    signMessageAsync,
    status,
    variables
  };
}

const mutationKey$5 = args => [{
  entity: 'signTypedData',
  ...args
}];

const mutationFn$4 = args => {
  const {
    domain,
    types,
    value
  } = args;
  if (!domain || !types || !value) throw new Error('domain, types, and value are all required');
  return core.signTypedData({
    domain,
    types,
    value
  });
};

function useSignTypedData() {
  let {
    domain,
    types,
    value,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey$5({
    domain,
    types,
    value
  }), mutationFn$4, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const signTypedData = React__namespace.useCallback(args => mutate(args || {
    domain,
    types,
    value
  }), [domain, types, value, mutate]);
  const signTypedDataAsync = React__namespace.useCallback(args => mutateAsync(args || {
    domain,
    types,
    value
  }), [domain, types, value, mutateAsync]);
  return {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    reset,
    signTypedData,
    signTypedDataAsync,
    status,
    variables
  };
}

const mutationKey$4 = args => [{
  entity: 'switchNetwork',
  ...args
}];

const mutationFn$3 = args => {
  const {
    chainId
  } = args;
  if (!chainId) throw new Error('chainId is required');
  return core.switchNetwork({
    chainId
  });
};

function useSwitchNetwork() {
  var _client$connector, _client$chains;

  let {
    chainId,
    throwForSwitchChainNotSupported,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const client = useClient();
  const forceUpdate = useForceUpdate();
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey$4({
    chainId
  }), mutationFn$3, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const switchNetwork_ = React__namespace.useCallback(chainId_ => mutate({
    chainId: chainId_ !== null && chainId_ !== void 0 ? chainId_ : chainId
  }), [chainId, mutate]);
  const switchNetworkAsync_ = React__namespace.useCallback(chainId_ => mutateAsync({
    chainId: chainId_ !== null && chainId_ !== void 0 ? chainId_ : chainId
  }), [chainId, mutateAsync]); // Trigger update when connector changes since not all connectors support chain switching

  React__namespace.useEffect(() => {
    const unwatch = client.subscribe(_ref => {
      let {
        chains,
        connector
      } = _ref;
      return {
        chains,
        connector
      };
    }, forceUpdate);
    return unwatch;
  }, [client, forceUpdate]);
  let switchNetwork;
  let switchNetworkAsync;
  const supportsSwitchChain = !!((_client$connector = client.connector) !== null && _client$connector !== void 0 && _client$connector.switchChain);

  if (throwForSwitchChainNotSupported || supportsSwitchChain) {
    switchNetwork = switchNetwork_;
    switchNetworkAsync = switchNetworkAsync_;
  }

  return {
    chains: (_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [],
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    pendingChainId: variables === null || variables === void 0 ? void 0 : variables.chainId,
    reset,
    status,
    switchNetwork,
    switchNetworkAsync,
    variables
  };
}

const useContract = _ref => {
  let {
    addressOrName,
    contractInterface,
    signerOrProvider
  } = _ref;
  return React__namespace.useMemo(() => {
    return core.getContract({
      addressOrName,
      contractInterface,
      signerOrProvider
    });
  }, [addressOrName, contractInterface, signerOrProvider]);
};

const useContractEvent = _ref => {
  var _ref2;

  let {
    addressOrName,
    chainId,
    contractInterface,
    listener,
    eventName,
    signerOrProvider,
    once
  } = _ref;
  const provider = useProvider({
    chainId
  });
  const webSocketProvider = useWebSocketProvider({
    chainId
  });
  const contract = useContract({
    addressOrName,
    contractInterface,
    signerOrProvider: (_ref2 = webSocketProvider !== null && webSocketProvider !== void 0 ? webSocketProvider : provider) !== null && _ref2 !== void 0 ? _ref2 : signerOrProvider
  });
  const listenerRef = React__namespace.useRef(listener);
  listenerRef.current = listener;
  React__namespace.useEffect(() => {
    const handler = function () {
      for (var _len = arguments.length, event = new Array(_len), _key = 0; _key < _len; _key++) {
        event[_key] = arguments[_key];
      }

      return listenerRef.current(event);
    };

    const contract_ = contract;
    if (once) contract_.once(eventName, handler);else contract_.on(eventName, handler);
    return () => {
      contract_.off(eventName, handler);
    }; // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [contract, eventName]);
};

const paginatedIndexesConfig = (fn, _ref) => {
  let {
    perPage,
    start,
    direction
  } = _ref;
  return {
    getNextPageParam: (lastPage, pages) => (lastPage === null || lastPage === void 0 ? void 0 : lastPage.length) === perPage ? pages.length : undefined,
    contracts: function () {
      let page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
      return [...Array(perPage).keys()].map(index => {
        return direction === 'increment' ? start + index + page * perPage : start - index - page * perPage;
      }).filter(index => index >= 0).map(fn);
    }
  };
};
const queryKey$b = _ref2 => {
  let [{
    cacheKey,
    overrides
  }] = _ref2;
  return [{
    entity: 'readContractsInfinite',
    cacheKey,
    overrides
  }];
};

const queryFn$b = _ref3 => {
  let {
    contracts
  } = _ref3;
  return _ref4 => {
    let {
      queryKey: [{
        overrides
      }],
      pageParam
    } = _ref4;
    return core.readContracts({
      contracts: contracts(pageParam || undefined),
      overrides
    });
  };
};

function useContractInfiniteReads(_ref5) {
  let {
    cacheKey,
    cacheTime,
    contracts,
    enabled: enabled_ = true,
    getNextPageParam,
    isDataEqual = core.deepEqual,
    keepPreviousData,
    onError,
    onSettled,
    onSuccess,
    overrides,
    select,
    staleTime,
    suspense
  } = _ref5;
  const queryKey_ = React__namespace.useMemo(() => queryKey$b([{
    cacheKey,
    overrides
  }]), [cacheKey, overrides]);
  const enabled = React__namespace.useMemo(() => {
    const enabled = Boolean(enabled_ && contracts);
    return enabled;
  }, [contracts, enabled_]);
  return useInfiniteQuery(queryKey_, queryFn$b({
    contracts
  }), {
    cacheTime,
    enabled,
    getNextPageParam,
    isDataEqual,
    keepPreviousData,
    select,
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey$a = _ref => {
  let [{
    addressOrName,
    args,
    chainId,
    functionName,
    overrides
  }, {
    blockNumber
  }] = _ref;
  return [{
    entity: 'readContract',
    addressOrName,
    args,
    blockNumber,
    chainId,
    functionName,
    overrides
  }];
};

const queryFn$a = _ref2 => {
  let {
    contractInterface
  } = _ref2;
  return async _ref3 => {
    var _await$readContract;

    let {
      queryKey: [{
        addressOrName,
        args,
        chainId,
        functionName,
        overrides
      }]
    } = _ref3;
    return (_await$readContract = await core.readContract({
      addressOrName,
      args,
      chainId,
      contractInterface,
      functionName,
      overrides
    })) !== null && _await$readContract !== void 0 ? _await$readContract : null;
  };
};

function useContractRead(_ref4) {
  let {
    addressOrName,
    contractInterface,
    functionName,
    args,
    chainId: chainId_,
    overrides,
    cacheOnBlock = false,
    cacheTime,
    enabled: enabled_ = true,
    isDataEqual = core.deepEqual,
    select,
    staleTime,
    suspense,
    watch,
    onError,
    onSettled,
    onSuccess
  } = _ref4;
  const chainId = useChainId({
    chainId: chainId_
  });
  const {
    data: blockNumber
  } = useBlockNumber({
    enabled: watch || cacheOnBlock,
    watch
  });
  const queryKey_ = React__namespace.useMemo(() => queryKey$a([{
    addressOrName,
    args,
    chainId,
    functionName,
    overrides
  }, {
    blockNumber: cacheOnBlock ? blockNumber : undefined
  }]), [addressOrName, args, blockNumber, cacheOnBlock, chainId, functionName, overrides]);
  const enabled = React__namespace.useMemo(() => {
    let enabled = Boolean(enabled_ && addressOrName && functionName);
    if (cacheOnBlock) enabled = Boolean(enabled && blockNumber);
    return enabled;
  }, [addressOrName, blockNumber, cacheOnBlock, enabled_, functionName]);
  useInvalidateOnBlock({
    enabled: watch && !cacheOnBlock,
    queryKey: queryKey_
  });
  return useQuery(queryKey_, queryFn$a({
    contractInterface
  }), {
    cacheTime,
    enabled,
    isDataEqual,
    select: data => {
      const result = core.parseContractResult({
        contractInterface,
        data,
        functionName
      });
      return select ? select(result) : result;
    },
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey$9 = _ref => {
  let [{
    allowFailure,
    contracts,
    overrides
  }, {
    blockNumber,
    chainId
  }] = _ref;
  return [{
    entity: 'readContracts',
    allowFailure,
    blockNumber,
    chainId,
    contracts: contracts.map(_ref2 => {
      let {
        addressOrName,
        args,
        chainId,
        functionName
      } = _ref2;
      return {
        addressOrName,
        args,
        chainId,
        functionName
      };
    }),
    overrides
  }];
};

const queryFn$9 = _ref3 => {
  let {
    contractInterfaces
  } = _ref3;
  return _ref4 => {
    let {
      queryKey: [{
        allowFailure,
        contracts: contracts_,
        overrides
      }]
    } = _ref4;
    const contracts = contracts_.map((contract, i) => ({ ...contract,
      contractInterface: contractInterfaces[i]
    }));
    return core.readContracts({
      allowFailure,
      contracts,
      overrides
    });
  };
};

function useContractReads(_ref5) {
  let {
    allowFailure = true,
    cacheOnBlock = false,
    cacheTime,
    contracts,
    overrides,
    enabled: enabled_ = true,
    isDataEqual = core.deepEqual,
    keepPreviousData,
    onError,
    onSettled,
    onSuccess,
    select,
    staleTime,
    suspense,
    watch
  } = _ref5;
  const {
    data: blockNumber
  } = useBlockNumber({
    enabled: watch || cacheOnBlock,
    watch
  });
  const chainId = useChainId();
  const queryKey_ = React__namespace.useMemo(() => queryKey$9([{
    allowFailure,
    contracts,
    overrides
  }, {
    blockNumber: cacheOnBlock ? blockNumber : undefined,
    chainId
  }]), [allowFailure, blockNumber, cacheOnBlock, chainId, contracts, overrides]);
  const contractInterfaces = contracts.map(_ref6 => {
    let {
      contractInterface
    } = _ref6;
    return contractInterface;
  });
  const enabled = React__namespace.useMemo(() => {
    let enabled = Boolean(enabled_ && contracts.length > 0);
    if (cacheOnBlock) enabled = Boolean(enabled && blockNumber);
    return enabled;
  }, [blockNumber, cacheOnBlock, contracts, enabled_]);
  useInvalidateOnBlock({
    enabled: watch && !cacheOnBlock,
    queryKey: queryKey_
  });
  return useQuery(queryKey_, queryFn$9({
    contractInterfaces
  }), {
    cacheTime,
    enabled,
    isDataEqual,
    keepPreviousData,
    staleTime,
    select: data => {
      const result = data.map((data, i) => {
        var _contracts$i, _contracts$i2;

        return contracts[i] ? core.parseContractResult({
          contractInterface: (_contracts$i = contracts[i]) === null || _contracts$i === void 0 ? void 0 : _contracts$i.contractInterface,
          functionName: (_contracts$i2 = contracts[i]) === null || _contracts$i2 === void 0 ? void 0 : _contracts$i2.functionName,
          data
        }) : data;
      });
      return select ? select(result) : result;
    },
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const mutationKey$3 = _ref => {
  let [{
    addressOrName,
    args,
    chainId,
    contractInterface,
    functionName,
    overrides,
    request
  }] = _ref;
  return [{
    entity: 'writeContract',
    addressOrName,
    args,
    chainId,
    contractInterface,
    functionName,
    overrides,
    request
  }];
};

const mutationFn$2 = _ref2 => {
  let {
    addressOrName,
    args,
    chainId,
    contractInterface,
    functionName,
    mode,
    overrides,
    request
  } = _ref2;
  return core.writeContract({
    addressOrName,
    args,
    chainId,
    contractInterface,
    functionName,
    mode,
    overrides,
    request
  });
};
/**
 * @description Hook for calling an ethers Contract [write](https://docs.ethers.io/v5/api/contract/contract/#Contract--write)
 * method.
 *
 * It is highly recommended to pair this with the [`usePrepareContractWrite` hook](/docs/prepare-hooks/usePrepareContractWrite)
 * to [avoid UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
 *
 * @example
 * import { useContractWrite, usePrepareContractWrite } from 'wagmi'
 *
 * const { config } = usePrepareContractWrite({
 *  addressOrName: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
 *  contractInterface: wagmigotchiABI,
 *  functionName: 'feed',
 * })
 * const { data, isLoading, isSuccess, write } = useContractWrite(config)
 *
 */


function useContractWrite(_ref3) {
  let {
    addressOrName,
    args,
    chainId,
    contractInterface,
    functionName,
    mode,
    overrides,
    request,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = _ref3;
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey$3([{
    addressOrName,
    contractInterface,
    functionName,
    args,
    chainId,
    mode,
    overrides,
    request
  }]), mutationFn$2, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const write = React__namespace.useCallback(overrideConfig => {
    var _overrideConfig$reckl, _overrideConfig$reckl2;

    return mutate({
      addressOrName,
      args: (_overrideConfig$reckl = overrideConfig === null || overrideConfig === void 0 ? void 0 : overrideConfig.recklesslySetUnpreparedArgs) !== null && _overrideConfig$reckl !== void 0 ? _overrideConfig$reckl : args,
      chainId,
      contractInterface,
      functionName,
      mode: overrideConfig ? 'recklesslyUnprepared' : mode,
      overrides: (_overrideConfig$reckl2 = overrideConfig === null || overrideConfig === void 0 ? void 0 : overrideConfig.recklesslySetUnpreparedOverrides) !== null && _overrideConfig$reckl2 !== void 0 ? _overrideConfig$reckl2 : overrides,
      request
    });
  }, [addressOrName, args, chainId, contractInterface, functionName, mode, mutate, overrides, request]);
  const writeAsync = React__namespace.useCallback(overrideConfig => {
    var _overrideConfig$reckl3, _overrideConfig$reckl4;

    return mutateAsync({
      addressOrName,
      args: (_overrideConfig$reckl3 = overrideConfig === null || overrideConfig === void 0 ? void 0 : overrideConfig.recklesslySetUnpreparedArgs) !== null && _overrideConfig$reckl3 !== void 0 ? _overrideConfig$reckl3 : args,
      chainId,
      contractInterface,
      functionName,
      mode: overrideConfig ? 'recklesslyUnprepared' : mode,
      overrides: (_overrideConfig$reckl4 = overrideConfig === null || overrideConfig === void 0 ? void 0 : overrideConfig.recklesslySetUnpreparedOverrides) !== null && _overrideConfig$reckl4 !== void 0 ? _overrideConfig$reckl4 : overrides,
      request
    });
  }, [addressOrName, args, chainId, contractInterface, functionName, mode, mutateAsync, overrides, request]);
  return {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    reset,
    status,
    variables,
    write: mode === 'prepared' && !request ? undefined : write,
    writeAsync: mode === 'prepared' && !request ? undefined : writeAsync
  };
}

const mutationKey$2 = _ref => {
  let [{
    addressOrName,
    args,
    chainId,
    contractInterface,
    overrides
  }] = _ref;
  return [{
    entity: 'writeContract',
    addressOrName,
    args,
    chainId,
    contractInterface,
    overrides
  }];
};
/** @deprecated */

function useDeprecatedContractWrite(_ref2) {
  let {
    addressOrName,
    args,
    chainId,
    contractInterface,
    functionName,
    overrides,
    signerOrProvider,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = _ref2;
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey$2([{
    addressOrName,
    args,
    chainId,
    contractInterface,
    functionName,
    overrides
  }]), _ref3 => {
    let {
      args,
      overrides
    } = _ref3;
    return core.deprecatedWriteContract({
      addressOrName,
      args,
      chainId,
      contractInterface,
      functionName,
      overrides,
      signerOrProvider
    });
  }, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const write = React__namespace.useCallback(overrideConfig => mutate({
    addressOrName,
    chainId,
    contractInterface,
    functionName,
    signerOrProvider,
    ...(overrideConfig || {
      args,
      overrides
    })
  }), [addressOrName, args, chainId, contractInterface, functionName, mutate, overrides, signerOrProvider]);
  const writeAsync = React__namespace.useCallback(overrideConfig => mutateAsync({
    addressOrName,
    chainId,
    contractInterface,
    functionName,
    signerOrProvider,
    ...(overrideConfig || {
      args,
      overrides
    })
  }), [addressOrName, args, chainId, contractInterface, functionName, mutateAsync, overrides, signerOrProvider]);
  return {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    reset,
    status,
    variables,
    write,
    writeAsync
  };
}

const queryKey$8 = (_ref, _ref2) => {
  let {
    args,
    addressOrName,
    functionName,
    overrides
  } = _ref;
  let {
    chainId,
    signerAddress
  } = _ref2;
  return [{
    entity: 'prepareContractTransaction',
    addressOrName,
    args,
    chainId,
    functionName,
    overrides,
    signerAddress
  }];
};

const queryFn$8 = _ref3 => {
  let {
    contractInterface,
    signer
  } = _ref3;
  return _ref4 => {
    let {
      queryKey: [{
        args,
        addressOrName,
        functionName,
        overrides
      }]
    } = _ref4;
    return core.prepareWriteContract({
      args,
      addressOrName,
      contractInterface,
      functionName,
      overrides,
      signer
    });
  };
};
/**
 * @description Hook for preparing a contract write to be sent via [`useContractWrite`](/docs/hooks/useContractWrite).
 *
 * Eagerly fetches the parameters required for sending a contract write transaction such as the gas estimate.
 *
 * @example
 * import { useContractWrite, usePrepareContractWrite } from 'wagmi'
 *
 * const { config } = usePrepareContractWrite({
 *  addressOrName: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
 *  contractInterface: wagmigotchiABI,
 *  functionName: 'feed',
 * })
 * const { data, isLoading, isSuccess, write } = useContractWrite(config)
 *
 */


function usePrepareContractWrite(_ref5) {
  let {
    addressOrName,
    contractInterface,
    functionName,
    args,
    overrides,
    cacheTime,
    enabled = true,
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  } = _ref5;
  const chainId = useChainId();
  const {
    data: signer
  } = useSigner();
  const prepareContractWriteQuery = useQuery(queryKey$8({
    addressOrName,
    functionName,
    args,
    overrides
  }, {
    chainId,
    signerAddress: signer === null || signer === void 0 ? void 0 : signer._address
  }), queryFn$8({
    contractInterface,
    signer
  }), {
    cacheTime,
    enabled: Boolean(enabled && signer),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
  return Object.assign(prepareContractWriteQuery, {
    config: {
      addressOrName,
      args,
      contractInterface,
      overrides,
      functionName,
      request: undefined,
      mode: 'prepared',
      ...prepareContractWriteQuery.data
    }
  });
}

const queryKey$7 = _ref => {
  let {
    address,
    chainId,
    formatUnits
  } = _ref;
  return [{
    entity: 'token',
    address,
    chainId,
    formatUnits
  }];
};

const queryFn$7 = _ref2 => {
  let {
    queryKey: [{
      address,
      chainId,
      formatUnits
    }]
  } = _ref2;
  if (!address) throw new Error('address is required');
  return core.fetchToken({
    address,
    chainId,
    formatUnits
  });
};

function useToken() {
  let {
    address,
    chainId: chainId_,
    formatUnits = 'ether',
    cacheTime,
    enabled = true,
    staleTime = 1000 * 60 * 60 * 24,
    // 24 hours
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  return useQuery(queryKey$7({
    address,
    chainId,
    formatUnits
  }), queryFn$7, {
    cacheTime,
    enabled: Boolean(enabled && address),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey$6 = _ref => {
  let {
    chainId,
    name
  } = _ref;
  return [{
    entity: 'ensAddress',
    chainId,
    name
  }];
};

const queryFn$6 = _ref2 => {
  let {
    queryKey: [{
      chainId,
      name
    }]
  } = _ref2;
  if (!name) throw new Error('name is required');
  return core.fetchEnsAddress({
    chainId,
    name
  });
};

function useEnsAddress() {
  let {
    cacheTime,
    chainId: chainId_,
    enabled = true,
    name,
    staleTime = 1000 * 60 * 60 * 24,
    // 24 hours
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  return useQuery(queryKey$6({
    chainId,
    name
  }), queryFn$6, {
    cacheTime,
    enabled: Boolean(enabled && chainId && name),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey$5 = _ref => {
  let {
    addressOrName,
    chainId
  } = _ref;
  return [{
    entity: 'ensAvatar',
    addressOrName,
    chainId
  }];
};

const queryFn$5 = _ref2 => {
  let {
    queryKey: [{
      addressOrName,
      chainId
    }]
  } = _ref2;
  if (!addressOrName) throw new Error('addressOrName is required');
  return core.fetchEnsAvatar({
    addressOrName,
    chainId
  });
};

function useEnsAvatar() {
  let {
    addressOrName,
    cacheTime,
    chainId: chainId_,
    enabled = true,
    staleTime = 1000 * 60 * 60 * 24,
    // 24 hours
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  return useQuery(queryKey$5({
    addressOrName,
    chainId
  }), queryFn$5, {
    cacheTime,
    enabled: Boolean(enabled && addressOrName && chainId),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey$4 = _ref => {
  let {
    address,
    chainId
  } = _ref;
  return [{
    entity: 'ensName',
    address,
    chainId
  }];
};

const queryFn$4 = _ref2 => {
  let {
    queryKey: [{
      address,
      chainId
    }]
  } = _ref2;
  if (!address) throw new Error('address is required');
  return core.fetchEnsName({
    address,
    chainId
  });
};

function useEnsName() {
  let {
    address,
    cacheTime,
    chainId: chainId_,
    enabled = true,
    staleTime = 1000 * 60 * 60 * 24,
    // 24 hours
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  return useQuery(queryKey$4({
    address,
    chainId
  }), queryFn$4, {
    cacheTime,
    enabled: Boolean(enabled && address && chainId),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey$3 = _ref => {
  let {
    chainId,
    name
  } = _ref;
  return [{
    entity: 'ensResolver',
    chainId,
    name
  }];
};

const queryFn$3 = _ref2 => {
  let {
    queryKey: [{
      chainId,
      name
    }]
  } = _ref2;
  if (!name) throw new Error('name is required');
  return core.fetchEnsResolver({
    chainId,
    name
  });
};

function useEnsResolver() {
  let {
    cacheTime,
    chainId: chainId_,
    enabled = true,
    name,
    staleTime = 1000 * 60 * 60 * 24,
    // 24 hours
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  return useQuery(queryKey$3({
    chainId,
    name
  }), queryFn$3, {
    cacheTime,
    enabled: Boolean(enabled && chainId && name),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const mutationKey$1 = args => [{
  entity: 'sendTransaction',
  ...args
}];

const mutationFn$1 = args => {
  const {
    chainId,
    request
  } = args;
  if (!request) throw new Error('request is required');
  return core.deprecatedSendTransaction({
    chainId,
    request
  });
};
/** @deprecated */


function useDeprecatedSendTransaction() {
  let {
    chainId,
    request,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey$1({
    chainId,
    request
  }), mutationFn$1, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const sendTransaction = React__namespace.useCallback(args => mutate({
    chainId,
    request,
    ...(args !== null && args !== void 0 ? args : {})
  }), [chainId, mutate, request]);
  const sendTransactionAsync = React__namespace.useCallback(args => mutateAsync({
    chainId,
    request,
    ...(args !== null && args !== void 0 ? args : {})
  }), [chainId, mutateAsync, request]);
  return {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    reset,
    sendTransaction,
    sendTransactionAsync,
    status,
    variables
  };
}

const queryKey$2 = _ref => {
  let {
    chainId,
    request
  } = _ref;
  return [{
    entity: 'prepareSendTransaction',
    chainId,
    request
  }];
};

const queryFn$2 = _ref2 => {
  let {
    queryKey: [{
      request
    }]
  } = _ref2;
  if (!request.to) throw new Error('request.to is required');
  return core.prepareSendTransaction({
    request: { ...request,
      to: request.to
    }
  });
};
/**
 * @description Hook for preparing a transaction to be sent via [`useSendTransaction`](/docs/hooks/useSendTransaction).
 *
 * Eagerly fetches the parameters required for sending a transaction such as the gas estimate and resolving an ENS address (if required).
 *
 * @example
 * import { useSendTransaction, usePrepareSendTransaction } from 'wagmi'
 *
 * const config = usePrepareSendTransaction({
 *   to: 'moxey.eth',
 *   value: parseEther('1'),
 * })
 * const result = useSendTransaction(config)
 */


function usePrepareSendTransaction(_ref3) {
  let {
    request,
    cacheTime,
    enabled = true,
    staleTime = 1000 * 60 * 60 * 24,
    // 24 hours
    suspense,
    onError,
    onSettled,
    onSuccess
  } = _ref3;
  const chainId = useChainId();
  const provider = useProvider();
  const prepareSendTransactionQuery = useQuery(queryKey$2({
    request,
    chainId
  }), queryFn$2, {
    cacheTime,
    enabled: Boolean(enabled && provider && request.to),
    isDataEqual: core.deepEqual,
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
  return Object.assign(prepareSendTransactionQuery, {
    config: {
      request: undefined,
      mode: 'prepared',
      ...prepareSendTransactionQuery.data
    }
  });
}

const mutationKey = args => [{
  entity: 'sendTransaction',
  ...args
}];

const mutationFn = _ref => {
  let {
    chainId,
    mode,
    request
  } = _ref;
  return core.sendTransaction({
    chainId,
    mode,
    request
  });
};
/**
 * @description Hook for sending a transaction.
 *
 * It is recommended to pair this with the [`usePrepareSendTransaction` hook](/docs/prepare-hooks/usePrepareSendTransaction)
 * to [avoid UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
 *
 * @example
 * import { useSendTransaction, usePrepareSendTransaction } from 'wagmi'
 *
 * const config = usePrepareSendTransaction({
 *   request: {
 *     to: 'moxey.eth',
 *     value: parseEther('1'),
 *   }
 * })
 * const result = useSendTransaction(config)
 */


function useSendTransaction(_ref2) {
  let {
    chainId,
    mode,
    request,
    onError,
    onMutate,
    onSettled,
    onSuccess
  } = _ref2;
  const {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    mutate,
    mutateAsync,
    reset,
    status,
    variables
  } = reactQuery.useMutation(mutationKey({
    chainId,
    mode,
    request
  }), mutationFn, {
    onError,
    onMutate,
    onSettled,
    onSuccess
  });
  const sendTransaction = React__namespace.useCallback(args => {
    var _args$recklesslySetUn;

    return mutate({
      chainId,
      mode,
      request: (_args$recklesslySetUn = args === null || args === void 0 ? void 0 : args.recklesslySetUnpreparedRequest) !== null && _args$recklesslySetUn !== void 0 ? _args$recklesslySetUn : request
    });
  }, [chainId, mode, mutate, request]);
  const sendTransactionAsync = React__namespace.useCallback(args => {
    var _args$recklesslySetUn2;

    return mutateAsync({
      chainId,
      mode,
      request: (_args$recklesslySetUn2 = args === null || args === void 0 ? void 0 : args.recklesslySetUnpreparedRequest) !== null && _args$recklesslySetUn2 !== void 0 ? _args$recklesslySetUn2 : request
    });
  }, [chainId, mode, mutateAsync, request]);
  return {
    data,
    error,
    isError,
    isIdle,
    isLoading,
    isSuccess,
    reset,
    sendTransaction: mode === 'prepared' && !request ? undefined : sendTransaction,
    sendTransactionAsync: mode === 'prepared' && !request ? undefined : sendTransactionAsync,
    status,
    variables
  };
}

const queryKey$1 = _ref => {
  let {
    chainId,
    hash
  } = _ref;
  return [{
    entity: 'transaction',
    chainId,
    hash
  }];
};

const queryFn$1 = _ref2 => {
  let {
    queryKey: [{
      chainId,
      hash
    }]
  } = _ref2;
  if (!hash) throw new Error('hash is required');
  return core.fetchTransaction({
    chainId,
    hash
  });
};
/**
 * @description Fetches transaction for hash
 *
 * @example
 * import { useTransaction } from 'wagmi'
 *
 * const result = useTransaction({
 *  chainId: 1,
 *  hash: '0x...',
 * })
 */


function useTransaction() {
  let {
    cacheTime = 0,
    chainId: chainId_,
    enabled = true,
    hash,
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  return useQuery(queryKey$1({
    chainId,
    hash
  }), queryFn$1, {
    cacheTime,
    enabled: Boolean(enabled && hash),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

const queryKey = _ref => {
  let {
    confirmations,
    chainId,
    hash,
    timeout,
    wait
  } = _ref;
  return [{
    entity: 'waitForTransaction',
    confirmations,
    chainId,
    hash,
    timeout,
    wait
  }];
};

const queryFn = _ref2 => {
  let {
    queryKey: [{
      chainId,
      confirmations,
      hash,
      timeout,
      wait
    }]
  } = _ref2;
  return core.waitForTransaction({
    chainId,
    confirmations,
    hash,
    timeout,
    wait
  });
};

function useWaitForTransaction() {
  let {
    chainId: chainId_,
    confirmations,
    hash,
    timeout,
    wait,
    cacheTime,
    enabled = true,
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  const chainId = useChainId({
    chainId: chainId_
  });
  return useQuery(queryKey({
    chainId,
    confirmations,
    hash,
    timeout,
    wait
  }), queryFn, {
    cacheTime,
    enabled: Boolean(enabled && (hash || wait)),
    staleTime,
    suspense,
    onError,
    onSettled,
    onSuccess
  });
}

Object.defineProperty(exports, 'AddChainError', {
  enumerable: true,
  get: function () { return core.AddChainError; }
});
Object.defineProperty(exports, 'ChainDoesNotSupportMulticallError', {
  enumerable: true,
  get: function () { return core.ChainDoesNotSupportMulticallError; }
});
Object.defineProperty(exports, 'ChainMismatchError', {
  enumerable: true,
  get: function () { return core.ChainMismatchError; }
});
Object.defineProperty(exports, 'ChainNotConfiguredError', {
  enumerable: true,
  get: function () { return core.ChainNotConfiguredError; }
});
Object.defineProperty(exports, 'Client', {
  enumerable: true,
  get: function () { return core.Client; }
});
Object.defineProperty(exports, 'Connector', {
  enumerable: true,
  get: function () { return core.Connector; }
});
Object.defineProperty(exports, 'ConnectorAlreadyConnectedError', {
  enumerable: true,
  get: function () { return core.ConnectorAlreadyConnectedError; }
});
Object.defineProperty(exports, 'ConnectorNotFoundError', {
  enumerable: true,
  get: function () { return core.ConnectorNotFoundError; }
});
Object.defineProperty(exports, 'ContractMethodDoesNotExistError', {
  enumerable: true,
  get: function () { return core.ContractMethodDoesNotExistError; }
});
Object.defineProperty(exports, 'ContractMethodNoResultError', {
  enumerable: true,
  get: function () { return core.ContractMethodNoResultError; }
});
Object.defineProperty(exports, 'ContractMethodRevertedError', {
  enumerable: true,
  get: function () { return core.ContractMethodRevertedError; }
});
Object.defineProperty(exports, 'ContractResultDecodeError', {
  enumerable: true,
  get: function () { return core.ContractResultDecodeError; }
});
Object.defineProperty(exports, 'ProviderChainsNotFound', {
  enumerable: true,
  get: function () { return core.ProviderChainsNotFound; }
});
Object.defineProperty(exports, 'ProviderRpcError', {
  enumerable: true,
  get: function () { return core.ProviderRpcError; }
});
Object.defineProperty(exports, 'ResourceUnavailableError', {
  enumerable: true,
  get: function () { return core.ResourceUnavailableError; }
});
Object.defineProperty(exports, 'RpcError', {
  enumerable: true,
  get: function () { return core.RpcError; }
});
Object.defineProperty(exports, 'SwitchChainError', {
  enumerable: true,
  get: function () { return core.SwitchChainError; }
});
Object.defineProperty(exports, 'SwitchChainNotSupportedError', {
  enumerable: true,
  get: function () { return core.SwitchChainNotSupportedError; }
});
Object.defineProperty(exports, 'UserRejectedRequestError', {
  enumerable: true,
  get: function () { return core.UserRejectedRequestError; }
});
Object.defineProperty(exports, 'alchemyRpcUrls', {
  enumerable: true,
  get: function () { return core.alchemyRpcUrls; }
});
Object.defineProperty(exports, 'allChains', {
  enumerable: true,
  get: function () { return core.allChains; }
});
Object.defineProperty(exports, 'chain', {
  enumerable: true,
  get: function () { return core.chain; }
});
Object.defineProperty(exports, 'chainId', {
  enumerable: true,
  get: function () { return core.chainId; }
});
Object.defineProperty(exports, 'configureChains', {
  enumerable: true,
  get: function () { return core.configureChains; }
});
Object.defineProperty(exports, 'createStorage', {
  enumerable: true,
  get: function () { return core.createStorage; }
});
Object.defineProperty(exports, 'deepEqual', {
  enumerable: true,
  get: function () { return core.deepEqual; }
});
Object.defineProperty(exports, 'defaultChains', {
  enumerable: true,
  get: function () { return core.defaultChains; }
});
Object.defineProperty(exports, 'defaultL2Chains', {
  enumerable: true,
  get: function () { return core.defaultL2Chains; }
});
Object.defineProperty(exports, 'erc20ABI', {
  enumerable: true,
  get: function () { return core.erc20ABI; }
});
Object.defineProperty(exports, 'erc721ABI', {
  enumerable: true,
  get: function () { return core.erc721ABI; }
});
Object.defineProperty(exports, 'etherscanBlockExplorers', {
  enumerable: true,
  get: function () { return core.etherscanBlockExplorers; }
});
Object.defineProperty(exports, 'infuraRpcUrls', {
  enumerable: true,
  get: function () { return core.infuraRpcUrls; }
});
Object.defineProperty(exports, 'publicRpcUrls', {
  enumerable: true,
  get: function () { return core.publicRpcUrls; }
});
Object.defineProperty(exports, 'readContracts', {
  enumerable: true,
  get: function () { return core.readContracts; }
});
exports.Context = Context;
exports.WagmiConfig = WagmiConfig;
exports.createClient = createClient;
exports.deserialize = deserialize;
exports.paginatedIndexesConfig = paginatedIndexesConfig;
exports.serialize = serialize;
exports.useAccount = useAccount;
exports.useBalance = useBalance;
exports.useBlockNumber = useBlockNumber;
exports.useClient = useClient;
exports.useConnect = useConnect;
exports.useContract = useContract;
exports.useContractEvent = useContractEvent;
exports.useContractInfiniteReads = useContractInfiniteReads;
exports.useContractRead = useContractRead;
exports.useContractReads = useContractReads;
exports.useContractWrite = useContractWrite;
exports.useDeprecatedContractWrite = useDeprecatedContractWrite;
exports.useDeprecatedSendTransaction = useDeprecatedSendTransaction;
exports.useDisconnect = useDisconnect;
exports.useEnsAddress = useEnsAddress;
exports.useEnsAvatar = useEnsAvatar;
exports.useEnsName = useEnsName;
exports.useEnsResolver = useEnsResolver;
exports.useFeeData = useFeeData;
exports.useInfiniteQuery = useInfiniteQuery;
exports.useNetwork = useNetwork;
exports.usePrepareContractWrite = usePrepareContractWrite;
exports.usePrepareSendTransaction = usePrepareSendTransaction;
exports.useProvider = useProvider;
exports.useQuery = useQuery;
exports.useSendTransaction = useSendTransaction;
exports.useSignMessage = useSignMessage;
exports.useSignTypedData = useSignTypedData;
exports.useSigner = useSigner;
exports.useSwitchNetwork = useSwitchNetwork;
exports.useToken = useToken;
exports.useTransaction = useTransaction;
exports.useWaitForTransaction = useWaitForTransaction;
exports.useWebSocketProvider = useWebSocketProvider;
Back to Directory File Manager