Architecture
The SDK uses a functional architecture with factory functions for improved modularity and testability.
Structure
services/- Utility services and program interfacesSolanaService- Low-level Solana RPC operations, transactions, and PDA derivationsTokenService- Token account operations (configured for NOS token)programs/- On-chain program interfacesJobsProgram- Jobs, runs, and markets managementStakeProgram- Staking account operationsMerkleDistributorProgram- Merkle distributor and claim operations
ipfs/- IPFS integration for pinning and retrieving dataconfig/- Network configurations and defaultsutils/- Helper utilities and type conversionsgenerated_clients/- Auto-generated Solana program clients (exported as namespaces)
All components use factory functions with explicit dependency injection, making the codebase modular, testable, and maintainable.
NosanaClient
Main entry point for SDK interactions. Created using the createNosanaClient() factory function.
Properties:
config: ClientConfig- Active configurationjobs: JobsProgram- Jobs program interfacestake: StakeProgram- Staking program interfacemerkleDistributor: MerkleDistributorProgram- Merkle distributor program interfacesolana: SolanaService- General Solana utilities (RPC, transactions, PDAs)nos: TokenService- Token operations service (configured for NOS token)api: NosanaApi | undefined- Nosana API client for interacting with Nosana APIs (jobs, credits, markets)ipfs: ReturnType<typeof createIpfsClient>- IPFS operations for pinning and retrieving dataauthorization: NosanaAuthorization | Omit<NosanaAuthorization, 'generate' | 'generateHeaders'>- Authorization service for message signing and validationlogger: Logger- Logging instancewallet?: Wallet- Active wallet (if set). Set this property directly to configure the wallet.