@nosana/kit
Version:
Nosana KIT
64 lines (63 loc) • 2.13 kB
TypeScript
import { Address, Instruction, TransactionSigner } from '@solana/kit';
import { Logger } from '../../logger/Logger.js';
export interface TokenAccount {
pubkey: Address;
owner: Address;
mint: Address;
amount: bigint;
decimals: number;
}
export interface TokenAccountWithBalance extends TokenAccount {
uiAmount: number;
}
import type { SolanaService } from '../solana/index.js';
/**
* Dependencies for TokenService
*/
export interface TokenServiceDeps {
logger: Logger;
solana: SolanaService;
}
/**
* Config for TokenService
*/
export interface TokenServiceConfig {
tokenAddress: Address;
}
/**
* TokenService interface
*/
export interface TokenService {
getAllTokenHolders(options?: {
includeZeroBalance?: boolean;
excludePdaAccounts?: boolean;
}): Promise<TokenAccountWithBalance[]>;
getTokenAccountForAddress(owner: string | Address): Promise<TokenAccountWithBalance | null>;
getBalance(owner: string | Address): Promise<number>;
/**
* Get the associated token account address for a given owner.
*
* @param owner The owner address
* @returns The associated token account address
*/
getATA(owner: Address | string): Promise<Address>;
/**
* Get instruction(s) to transfer SPL tokens from one address to another.
* May return 1 or 2 instructions depending on whether the recipient's associated token account needs to be created.
*
* @param params Transfer parameters
* @param params.to Recipient address
* @param params.amount Amount in token base units (number or bigint)
* @param params.from Optional sender TransactionSigner. If not provided, uses wallet from client.
* @returns Array of instructions (create ATA instruction if needed, then transfer instruction)
*/
transfer(params: {
to: Address | string;
amount: number | bigint;
from?: TransactionSigner;
}): Promise<Instruction[]>;
}
/**
* Creates a TokenService instance.
*/
export declare function createTokenService(deps: TokenServiceDeps, config: TokenServiceConfig): TokenService;