🚀 DAY 4 OF LAUNCH WEEK: Introducing GitHub Actions Scanning Support.Learn more →
Socket
Book a DemoInstallSign in
Socket

@solflare-wallet/nft-sdk

Package Overview
Dependencies
Maintainers
3
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solflare-wallet/nft-sdk

# @solflare-wallet/nft-sdk

latest
npmnpm
Version
3.0.0
Version published
Weekly downloads
207
1970%
Maintainers
3
Weekly downloads
 
Created
Source

Solflare

@solflare-wallet/nft-sdk

NFT SDK used in Solflare wallet.

This SDK accepts a list of mints, triggers fetching NFT metadatas, all JSONs, Metaplex groups, and does "smart" grouping of everything else using few different rules.

Contents:

Installation

$ npm install @solflare-wallet/nft-sdk

Examples

Initialize the library

  • Use the default configuration:
import { SolflareNft } from '@solflare-wallet/nft-sdk';

const mints = [new PublicKey(mint1), new PublicKey(mint2)];
const solflare = new SolflareNft({ mints });
  • Use other configuration options:
import { SolflareNft } from '@solflare-wallet/nft-sdk';

const solflare = new SolflareNft({
  mints,
  connection: web3connection // "https://api.mainnet-beta.solana.com" will be used if ommited
});

Ways to get the data

  • SDK exposes .startFetching() method which starts fetching the data and returns a promise with all NFTs and groups. Waiting for this promise to resolve might take a lot of time for large number of NFTs, so try different method with listening for changes.
import { SolflareNft } from '@solflare-wallet/nft-sdk';

const solflare = new SolflareNft({ mints });

const response = await solflare.startFetching();

response = {
  nfts: [
    {
      id: 'mint-address-string',
      metadataAccount: MetadataAccount, // metaplex type
      updateAuthority: PublicKey,
      mint: PublicKey,
      name: 'NFT name',
      symbol: 'symbol',
      uri: 'https://uri ...',
      sellerFeeBasisPoints: 0,
      creators: Creators[], // metaplex type
      primarySaleHappened: true,
      isMutable: true,
      editionNonce: 253,
      tokenStandard: TokenStandard | null, // metaplex type
      collection: Collection | null, // metaplex type
      uses: Uses | null, // metaplex type
      metadata: JsonMetadata | null, // metaplex type, entire JSON object fetched from uri
      group: 'unique-group-identifier-address-or-slug' | null
    },
    // ...
  ],
  groups: [
    {
      id: 'unique-group-identifier-address-or-slug',
      name: 'Group name',
      image: 'uri of image used for group',
      count: 3, // number of NFTs in this group
      metaplex: true // true if grouped by verified Collection, otherwise false
    },
    // ...
  ]
}
  • Fetch all data, but listen for change events and update each NFT that received an update
import { SolflareNft, STATUS } from '@solflare-wallet/nft-sdk';

const solflare = new SolflareNft({ mints });

solflare.startFetching();

solflare.on('message', ({ status, payload }) => {
  switch (status) {
    case STATUS.GLOBAL_START:
      console.log('Started fetching.');
      break;
    case STATUS.METADATA_FINISH:
      console.log('Fetched all Metaplex metadata accounts');
      console.log('payload', payload);
      // payload = {
      //   nfts: [ { ...nftData } ],
      //   groups: []
      // }
      break;
    case STATUS.JSON_FILE_SINGLE_FINISH:
      console.log('Fetched single JSON file');
      console.log('payload', payload);
      // payload = {
      //   nft: { SINGLE NFT THAT GOT UPDATED }
      //   nfts: [...],
      //   groups: [...]
      // }
      break;
    case STATUS.JSON_FILE_SINGLE_ERROR:
      console.log('Failed to fetch JSON file');
      console.log('payload', payload);
      // payload = {
      //   nft: { SINGLE NFT THAT FAILED LOADING JSON }
      //   nfts: [...],
      //   groups: [...]
      // }
      break;
    case STATUS.JSON_FILES_FINISH:
      console.log('Everything finished loading');
      console.log('payload', payload);
      // payload = {
      //   nfts: [...],
      //   groups: [...]
      // }
      break;
    case STATUS.GLOBAL_FINISH:
      console.log('Finished fetching.');
      break;
    default:
      break;
  }
});

Compressed NFT Transactions

The SDK provides transaction builders for compressed NFT operations that return V0 transactions.

Transfer Compressed NFT

import { createTransferCompressedNftTransaction } from '@solflare-wallet/nft-sdk';
import { Connection, Keypair } from '@solana/web3.js';

const connection = new Connection('https://api.mainnet-beta.solana.com', 'confirmed');
const wallet = Keypair.generate(); // Your wallet keypair

const tx = await createTransferCompressedNftTransaction({
  assetId: 'compressed-nft-asset-id',
  walletPublicKey: wallet.publicKey,
  destinationPublicKey: recipient.publicKey,
  connection, // optional, defaults to mainnet
  addressLookupTableAccounts // optional, for additional size optimization
});

// Sign and send (V0 transactions must be pre-signed)
tx.sign([wallet]);
const signature = await connection.sendTransaction(tx);
await connection.confirmTransaction(signature);

Burn Compressed NFT

import { createBurnCompressedNftTransaction } from '@solflare-wallet/nft-sdk';
import { Connection, Keypair } from '@solana/web3.js';

const connection = new Connection('https://api.mainnet-beta.solana.com', 'confirmed');
const wallet = Keypair.generate(); // Your wallet keypair

const tx = await createBurnCompressedNftTransaction({
  assetId: 'compressed-nft-asset-id',
  walletPublicKey: wallet.publicKey,
  connection, // optional
  addressLookupTableAccounts // optional
});

// Sign and send
tx.sign([wallet]);
const signature = await connection.sendTransaction(tx);
await connection.confirmTransaction(signature);

Note: These functions return VersionedTransaction (V0 format) to support large Merkle tree proofs that exceed legacy transaction size limits. The transactions must be signed before sending, unlike legacy transactions where signers can be passed to sendTransaction().

Learn more

FAQs

Package last updated on 22 Oct 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts