Skip to main content

Lit Client

The LitClient integrates with Lit Protocol v8 (Naga network) to execute off-chain rule evaluations and produce signed attestations.

Usage

import { LitClient } from "@policykit/sdk";

const lit = new LitClient({
  network: "naga",
  litActionCID: "QmLitActionCID...",
});

// Connect to the Lit network
await lit.connect();

// Request attestation for a transaction
const attestation = await lit.requestAttestation({
  policyCID: "QmPolicyCID...",
  target: "0xUniswapRouter",
  value: parseEther("1"),
  data: "0x38ed1739...",
  chainId: 84532,
});

console.log(attestation.signature);
console.log(attestation.deadline);

// Disconnect when done
await lit.disconnect();

Constructor

new LitClient(config: LitConfig)

LitConfig

OptionTypeRequiredDescription
network"naga"YesLit Protocol network
litActionCIDstringYesCID of the deployed Lit Action
pkpPublicKeystringNoPKP public key (auto-provisioned if not set)
debugbooleanNoEnable debug logging

Methods

connect()

Connect to the Lit Protocol network. Must be called before any other method.
await lit.connect();
Returns: Promise<void>

disconnect()

Disconnect from the Lit Protocol network. Should be called when done.
await lit.disconnect();
Returns: Promise<void>

requestAttestation(params)

Execute the Lit Action to evaluate Tier 3 rules and produce a signed attestation.
const attestation = await lit.requestAttestation({
  policyCID: "QmPolicyCID",
  target: "0x...",
  value: parseEther("1"),
  data: "0x...",
  chainId: 84532,
});
ParameterTypeDescription
params.policyCIDstringIPFS CID of the policy
params.targetAddressTransaction target address
params.valuebigintTransaction ETH value
params.dataHexTransaction calldata
params.chainIdnumberChain ID for the transaction
Returns: Promise<Attestation>
interface Attestation {
  signature: Hex;       // EIP-712 signature from PKP
  deadline: number;     // Expiration unix timestamp
  nonce: bigint;        // Attestation nonce
  pkpAddress: Address;  // Address of the signing PKP
}
The Lit Action performs the following:
  1. Fetches the policy from IPFS
  2. Evaluates all Tier 3 rules against the transaction
  3. If all rules pass, threshold-signs an EIP-712 PolicyApproval
  4. Returns the signature and metadata

isConnected()

Check if the client is connected to the Lit network.
const connected = lit.isConnected();
Returns: boolean

Attestation Format

The attestation uses the EIP-712 typed data standard:
const EIP712_TYPES = {
  PolicyApproval: [
    { name: "account", type: "address" },
    { name: "target", type: "address" },
    { name: "value", type: "uint256" },
    { name: "data", type: "bytes" },
    { name: "policyCID", type: "bytes32" },
    { name: "nonce", type: "uint256" },
    { name: "deadline", type: "uint256" },
  ],
};

Error Handling

ErrorDescription
LitConnectionErrorFailed to connect to Lit network
LitActionErrorLit Action execution failed
LitAttestationErrorAttestation signing failed
LitTimeoutErrorLit Action exceeded timeout

Lit Protocol Requirements

To use Tier 3 rules, you need:
  1. Lit Action deployed to IPFS — Install @policykit/lit-actions and upload the pre-built bundle at build/policyEvaluator.action.js to IPFS to get the CID
  2. PKP (Programmable Key Pair) — Provisioned through Lit Protocol
  3. Capacity Credits — To pay for Lit network usage
pnpm add @policykit/lit-actions
The @policykit/lit-actions package includes the pre-built action bundle ready for IPFS upload, as well as the source rule implementations in src/rules/ that you can use as reference for custom rules.
The LitClient requires peer dependencies: @lit-protocol/lit-client, @lit-protocol/networks, and @lit-protocol/auth. Install them separately.