UNPKG

@nosana/kit

Version:

Nosana KIT

104 lines 3.66 kB
import { NosanaNetwork } from '@nosana/types'; import { createIpfsClient } from '@nosana/ipfs'; import { createNosanaApi } from '@nosana/api'; import { createNosanaAuthorization } from '@nosana/authorization'; import { Logger } from './logger/Logger.js'; import { getNosanaConfig } from './config/index.js'; import { createJobsProgram } from './services/programs/jobs/index.js'; import { createStakeProgram } from './services/programs/stake/index.js'; import { createMerkleDistributorProgram, } from './services/programs/merkleDistributor/index.js'; import { createSolanaService } from './services/solana/index.js'; import { createTokenService } from './services/token/index.js'; import { walletToAuthorizationSigner } from './utils/walletToAuthorizationSigner.js'; /** * Creates a new Nosana client instance. * * * @param network - The network to connect to (default: MAINNET) * @param customConfig - Optional custom configuration to override defaults * @returns A Nosana client instance with all services and programs * * @example * ```ts * import { createNosanaClient, NosanaNetwork } from '@nosana/kit'; * * const client = createNosanaClient(NosanaNetwork.MAINNET); * client.wallet = myWallet; * ``` */ export function createNosanaClient(network = NosanaNetwork.MAINNET, customConfig) { const config = getNosanaConfig(network, customConfig); const logger = Logger.getInstance({ level: config.logLevel }); // Wallet management let wallet = config.wallet; const getWallet = () => wallet; // Create Solana services const solana = createSolanaService({ logger, getWallet, }, config.solana); // Initialize TokenService with minimal dependencies const nos = createTokenService({ logger, solana, }, { tokenAddress: config.programs.nosTokenAddress, }); // Create program dependencies const programDeps = { logger, solana, nos, getWallet, }; // Initialize programs const jobs = createJobsProgram(programDeps, config.programs); const stake = createStakeProgram(programDeps, config.programs); const merkleDistributor = createMerkleDistributorProgram(programDeps, config.programs); // Initialize Nosana Modules const ipfs = createIpfsClient(config.ipfs); const createReactiveNosanaModules = () => { const authorization = wallet ? createNosanaAuthorization(walletToAuthorizationSigner(wallet)) : createNosanaAuthorization(); // Use API key if provided, otherwise fall back to wallet-based auth const api = config.api?.apiKey ? createNosanaApi(network, config.api.apiKey) : wallet ? createNosanaApi(network, { identifier: wallet.address.toString(), generate: authorization.generate, }) : undefined; return { authorization, api, }; }; let reactiveNosanaModules = createReactiveNosanaModules(); // Build and return the client return { config, logger, solana, nos, jobs, stake, merkleDistributor, ipfs, get authorization() { return reactiveNosanaModules.authorization; }, get api() { return reactiveNosanaModules.api; }, get wallet() { return wallet; }, set wallet(value) { wallet = value; reactiveNosanaModules = createReactiveNosanaModules(); }, }; } //# sourceMappingURL=NosanaClient.js.map