@turnkey/viem
TypeScript icon, indicating that this package has built-in type declarations

0.6.4 • Public • Published

@turnkey/viem

npm

This package contains helpers to use Viem with Turnkey.

We provide a Turnkey Custom Account (signer) which implements the signing APIs expected by Viem clients.

If you need a lower-level, fully typed HTTP client for interacting with Turnkey API, check out @turnkey/http.

Getting started

$ npm install viem @turnkey/viem
import { createAccount } from "@turnkey/viem";
import { TurnkeyClient } from "@turnkey/http";
import { ApiKeyStamper } from "@turnkey/api-key-stamper";
import { createWalletClient, http } from "viem";
import { sepolia } from "viem/chains";

async function main() {
  // Create a Turnkey HTTP client with API key credentials
  const httpClient = new TurnkeyClient(
    {
      baseUrl: "https://api.turnkey.com",
    },
    // This uses API key credentials.
    // If you're using passkeys, use `@turnkey/webauthn-stamper` to collect webauthn signatures:
    // new WebauthnStamper({...options...})
    new ApiKeyStamper({
      apiPublicKey: "...",
      apiPrivateKey: "...",
    })
  );

  // Create the Viem custom account
  const turnkeyAccount = await createAccount({
    client: httpClient,
    organizationId: "...",
    signWith: "...",
    // optional; will be fetched from Turnkey if not provided
    ethereumAddress: "...",
  });

  // Below: standard Viem APIs are used, nothing special!

  const client = createWalletClient({
    account: turnkeyAccount,
    chain: sepolia,
    transport: http(`https://sepolia.infura.io/v3/$(YOUR_INFURA_API_KEY)`),
  });

  const transactionRequest = {
    to: "0x08d2b0a37F869FF76BACB5Bab3278E26ab7067B7" as `0x${string}`,
    value: 1000000000000000n, // 0.001 ETH
  };

  const txHash = await client.sendTransaction(transactionRequest);
  console.log(`Success! Transaction broadcast with hash ${txHash}`);
}

main().catch((error) => {
  console.error(error);
  process.exit(1);
});

Testing (Local)

See .env.example to get your local testing environment right. In order to run the tests, run an Anvil node in one shell (via pnpm anvil), and run pnpm jest in another.

See also

/@turnkey/viem/

    Package Sidebar

    Install

    npm i @turnkey/viem

    Weekly Downloads

    18,780

    Version

    0.6.4

    License

    Apache-2.0

    Unpacked Size

    80.1 kB

    Total Files

    11

    Last publish

    Collaborators

    • omkar_turnkey
    • zanetk
    • moe-dev
    • tdawson
    • zekemostov
    • jack-kearney-tkhq
    • r-n-o
    • andrewtk