Skip to main content

Overview

Once autosign is configured, you can enable and manage it in your application using the autoSign object from useInterwovenKit(). This guide covers how to use autosign in your code.

Accessing Autosign

The autoSign object is available via the useInterwovenKit() hook:
import { useInterwovenKit } from '@initia/interwovenkit-react'

function MyComponent() {
  const { autoSign } = useInterwovenKit()

  // Use autoSign.enable(), autoSign.disable(), etc.
}

Enabling Autosign

To enable autosign, call the enable() method. This opens a drawer where users confirm the autosign setup and select an expiration duration. The following examples show client components for enabling and disabling autosign. You can adapt this logic to your own UI or component structure.

Example: ToggleAutosignButton

import { useMutation } from '@tanstack/react-query'
import { useInterwovenKit } from '@initia/interwovenkit-react'

const chainId = 'your-chain-id'

export default function ToggleAutosignButton() {
  const { autoSign, address } = useInterwovenKit()

  const enable = useMutation({
    mutationFn: () => autoSign.enable(chainId),
    onError: (error) => console.error('Failed to enable:', error),
  })

  const disable = useMutation({
    mutationFn: () => autoSign.disable(chainId),
    onError: (error) => console.error('Failed to disable:', error),
  })

  if (!address) return null

  if (autoSign.isEnabledByChain[chainId]) {
    return (
      <button
        onClick={() => disable.mutate()}
        disabled={autoSign.isLoading || disable.isPending}
      >
        Disable Autosign
      </button>
    )
  }

  return (
    <button
      onClick={() => enable.mutate()}
      disabled={autoSign.isLoading || enable.isPending}
    >
      Enable Autosign
    </button>
  )
}

Enabling for a Specific Chain

Specify a chain ID to enable autosign for a particular chain:
await autoSign.enable('interwoven-1')

What Happens When Enabled

When autoSign.enable() is called:
1

Drawer Opens

A drawer appears asking the user to confirm autosign setup, showing which permissions will be granted.
2

Expiration Selection

The user can select an expiration duration from available defaults or use a custom duration.
3

Ghost Wallet Creation

Privy creates an embedded wallet if one does not exist. This happens automatically in the background.
4

Permission Grant

The user signs a single transaction to grant authz and feegrant permissions to the ghost wallet.
5

Activation

Autosign becomes active for the specified chain and message types. The Promise resolves on success.
The method returns a Promise that resolves when autosign is successfully enabled or rejects if the user cancels or an error occurs.

Disabling Autosign

Users can disable autosign at any time. This revokes all grants for the selected chain and prevents further automatic signing.

Checking Autosign Status

Use the isEnabledByChain property to check if autosign is active for a chain:
import { useInterwovenKit } from '@initia/interwovenkit-react'

function AutosignStatus({ chainId }: { chainId: string }) {
  const { autoSign } = useInterwovenKit()

  if (autoSign.isLoading) {
    return <span>Loading...</span>
  }

  const isEnabled = autoSign.isEnabledByChain[chainId]
  const expiration = autoSign.expiredAtByChain[chainId]

  if (!isEnabled) {
    return <span>Autosign disabled</span>
  }

  return (
    <span>
      Autosign enabled
      {expiration && ` (expires ${expiration.toLocaleString()})`}
    </span>
  )
}