sns-cnft-backoffice-sdk
v1.2.0
Published
Backoffice SDK for cNFT Core Candy Machine operations
Downloads
17
Maintainers
Readme
PNFT Backoffice SDK
Backoffice SDK for PNFT Core Candy Machine operations. This SDK provides instruction generation without signing, allowing backoffice applications to integrate with Core Candy Machine functionality.
Features
- fetchCCM: Fetch Core Candy Machine information
- checkUserCcmInfo: Check user's mint count and eligibility
- airdropToUser: Generate airdrop instructions for admin operations
- TypeScript Support: Full type definitions included
- No Signing: Returns instructions only, no transaction signing
Installation
npm install @pnft/backoffice-sdkUsage
Basic Setup
import { createBackofficeSDK, SDKConfig } from '@pnft/backoffice-sdk';
const config: SDKConfig = {
rpcUrl: 'https://api.devnet.solana.com',
candyMachineAddress: 'YOUR_CANDY_MACHINE_ADDRESS',
collectionAddress: 'YOUR_COLLECTION_ADDRESS'
};
const sdk = createBackofficeSDK(config);Fetch Candy Machine Information
// Get Candy Machine details
const ccmInfo = await sdk.fetchCCM();
console.log('Items Available:', ccmInfo.itemsAvailable);
console.log('Items Minted:', ccmInfo.itemsMinted);
console.log('Items Remaining:', ccmInfo.itemsRemaining);Check User Mint Information
// Check user's mint status
const userPubkey = 'USER_PUBLIC_KEY';
const userInfo = await sdk.checkUserCcmInfo(userPubkey, 'admin'); // Optional group label
console.log('Minted Count:', userInfo.mintedCount);
console.log('Max Mintable:', userInfo.maxMintable);
console.log('Remaining Mints:', userInfo.remainingMints);Check Mint Eligibility
// Check if user can mint
const eligibility = await sdk.checkMintEligibility(userPubkey, 'admin');
if (eligibility.isEligible) {
console.log('User can mint!');
} else {
console.log('Cannot mint:', eligibility.reason);
}Generate Airdrop Instructions
// Generate airdrop instructions (no signing)
// Note: All signers must be created by the calling application
const airdropParams = {
candyMachineAddress: 'YOUR_CANDY_MACHINE_ADDRESS',
recipientAddress: 'RECIPIENT_PUBLIC_KEY',
collectionAddress: 'YOUR_COLLECTION_ADDRESS',
groupLabel: 'admin', // Required
candyGuardAddress: 'CANDY_GUARD_ADDRESS',
authorityPubkey: 'AUTHORITY_PUBLIC_KEY',
adminSigner: adminSignerObject, // Created by calling app
botSigner: botSignerObject // Created by calling app
};
const result = await sdk.airdropToUser(airdropParams);
// result.instructions contains the instructions to execute
// result.signers contains the signers needed
// result.metadata contains additional information
console.log('Instructions:', result.instructions);
console.log('Signers:', result.signers);
console.log('Asset Address:', result.metadata.assetAddress);API Reference
BackofficeSDK Class
Constructor
new BackofficeSDK(config: SDKConfig)Methods
fetchCCM(): Promise<CandyMachineInfo>
Fetches Core Candy Machine information from the blockchain.
Returns:
address: Candy Machine addressauthority: Authority public keycollection: Collection address (if set)itemsAvailable: Total items availableitemsMinted: Number of items minteditemsRemaining: Number of items remainingisMutable: Whether the machine is mutable
checkUserCcmInfo(userPubkey: string, groupLabel?: string): Promise<UserMintInfo>
Checks user's mint information and limits.
Parameters:
userPubkey: User's public keygroupLabel: Optional group label for group-based limits
Returns:
userPubkey: User's public keymintedCount: Number of NFTs minted by usermaxMintable: Maximum number user can mintremainingMints: Remaining mints availablegroupLabel: Group label used
airdropToUser(params: AirdropParams): Promise<InstructionResult>
Generates airdrop instructions without signing.
Parameters:
candyMachineAddress: Candy Machine addressrecipientAddress: Recipient's public keycollectionAddress: Collection addressgroupLabel: Optional group label
Returns:
instructions: Array of instructions to executesigners: Array of signers neededmetadata: Additional metadata including asset address
Types
SDKConfig
interface SDKConfig {
rpcUrl: string;
candyMachineAddress: string;
collectionAddress: string;
}CandyMachineInfo
interface CandyMachineInfo {
address: string;
authority: string;
collection?: string;
itemsAvailable: number;
itemsMinted: number;
itemsRemaining: number;
isMutable: boolean;
configLineSettings?: any;
guards?: any;
groups?: any[];
}UserMintInfo
interface UserMintInfo {
userPubkey: string;
mintedCount: number;
maxMintable: number;
remainingMints: number;
groupLabel?: string;
}AirdropParams
interface AirdropParams {
candyMachineAddress: string;
recipientAddress: string;
groupLabel: string; // Required
collectionAddress: string;
candyGuardAddress: string;
authorityPubkey: string;
adminSigner: any; // Signer object created by calling app
botSigner: any; // Signer object created by calling app
}InstructionResult
interface InstructionResult {
instructions: any[];
signers: any[];
metadata?: any;
}Error Handling
The SDK throws descriptive errors for common issues:
Failed to fetch Candy Machine: Candy Machine not found or invalidCandy Guard not found: No Candy Guard associated with the machineFailed to check user mint info: Error retrieving user informationFailed to generate airdrop instructions: Error creating instructions
Development
Building
npm run buildDevelopment Mode
npm run devPublishing
npm run prepublishOnly
npm publishLicense
MIT
