UNPKG

@nosana/kit

Version:

Nosana KIT

107 lines 3.9 kB
import { NosanaNetwork } from '@nosana/types'; import { createIpfsClient } from '@nosana/ipfs'; 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 { createApiInstance } from './utils/createApiInstance.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; * ``` */ const createClientFromConfig = (config, network) => { 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, getWallet, }, { 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 ? config.authorization?.store ? createNosanaAuthorization(walletToAuthorizationSigner(wallet), { identifier: wallet.address.toString(), actions: config.authorization.store, }) : createNosanaAuthorization(walletToAuthorizationSigner(wallet)) : createNosanaAuthorization(); const apiDeps = { authorization, solana, nos }; const api = wallet ? createApiInstance(network, config.api, wallet, apiDeps) : createApiInstance(network, config.api, undefined, apiDeps); 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(); }, }; }; export function createNosanaClient(network = NosanaNetwork.MAINNET, customConfig) { const config = getNosanaConfig(network, customConfig); return createClientFromConfig(config, network); } //# sourceMappingURL=NosanaClient.js.map