@hsuite/smartnode-sdk v2.1.6
@hsuite/smartnode-sdk
A comprehensive SDK for interacting with SmartNode services and Hedera Hashgraph network functionality. This SDK provides a unified interface for managing SmartNode operations, validator interactions, and multi-ledger blockchain services through a modern NestJS-based architecture.
Installation
npm install @hsuite/smartnode-sdkFeatures
- Multi-ledger SmartNode Operations - Core functionality for network operations and status monitoring
- Validator Management - Comprehensive tools for consensus, token, and account validation topics
- Hedera Hashgraph Integration - Complete support for HCS, HTS, accounts, and transactions
- Type-safe SDK Configuration - Full TypeScript support with runtime validation
- NestJS Module Integration - Seamless integration with NestJS dependency injection
- Extensible Architecture - Modular design supporting future blockchain integrations
- Comprehensive Logging - Built-in logging with LoggerHelper integration
Dependencies
Peer Dependencies
@nestjs/common: ^10.4.2@nestjs/core: ^10.4.2@hsuite/client: ^2.1.2@hsuite/hashgraph-types: ^2.0.3@hsuite/smart-network-types: ^2.0.0@hsuite/validators-types: ^2.0.0
Dependencies
@hsuite/nestjs-swagger: ^1.0.3@hashgraph/sdk: ^2.62.0
Dev Dependencies
@compodoc/compodoc: ^1.1.23
Usage
Basic Module Integration
import { SmartNodeSdkModule } from '@hsuite/smartnode-sdk';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports: [
SmartNodeSdkModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
client: {
enabled: true,
baseUrl: configService.get('SMARTNODE_API_URL'),
ledgers: {
[ChainType.HASHGRAPH]: {
chain: ChainType.HASHGRAPH,
network: LedgerNetwork.HEDERA_TESTNET,
credentials: {
accountId: configService.get('HEDERA_ACCOUNT_ID'),
privateKey: configService.get('HEDERA_PRIVATE_KEY'),
publicKey: configService.get('HEDERA_PUBLIC_KEY')
}
}
}
}
}),
inject: [ConfigService]
})
]
})
export class AppModule {}Service Injection and Usage
import { Injectable } from '@nestjs/common';
import { SmartNodeSdkService } from '@hsuite/smartnode-sdk';
@Injectable()
export class MyService {
constructor(private readonly smartNodeSdk: SmartNodeSdkService) {}
async getNetworkStatus() {
// Get SmartNode status
const status = await this.smartNodeSdk.sdk.smartNode.general.getStatus();
// Get network information
const network = await this.smartNodeSdk.sdk.smartNode.general.getNetwork();
// Get available utilities
const utilities = await this.smartNodeSdk.sdk.smartNode.general.getUtilities();
return { status, network, utilities };
}
async manageValidators() {
// Add consensus validator
const timestamp = await this.smartNodeSdk.sdk.smartNode.validators.addConsensusValidator({
// validation parameters
});
// Read consensus validator
const validator = await this.smartNodeSdk.sdk.smartNode.validators.readConsensusValidator(timestamp);
return validator;
}
async hashgraphOperations() {
// Account operations
const accountInfo = await this.smartNodeSdk.sdk.hashgraph.accounts.getInfo('0.0.123456');
const balance = await this.smartNodeSdk.sdk.hashgraph.accounts.getQueryBalance('0.0.123456');
// Token operations
const tokenInfo = await this.smartNodeSdk.sdk.hashgraph.hts.getTokenInfo('0.0.789012');
// HCS operations
const messageId = await this.smartNodeSdk.sdk.hashgraph.hcs.submitMessage({
topicId: '0.0.111111',
message: 'Hello, SmartNode!'
});
return { accountInfo, balance, tokenInfo, messageId };
}
}SDK Structure
The SDK provides a hierarchical structure through the SmartNodeSdkService:
sdk: {
smartNode: {
general: GeneralSdk; // Core SmartNode operations
validators: ValidatorsSdk; // Validator management
},
hashgraph: {
accounts: AccountsHashgraphSdk; // Account management
transactions: TransactionsHashgraphSdk; // Transaction operations
hcs: HcsHashgraphSdk; // Hedera Consensus Service
hts: HtsHashgraphSdk; // Hedera Token Service
},
ripple: {
// Future: Ripple blockchain integration
}
}Core Services
SmartNode Services
GeneralSdk
Core SmartNode operations and network management:
getIdentifier()- Retrieve SmartNode operator entity detailsgetStatus()- Get current node operational status and health metricsgetNetwork()- Get comprehensive list of whitelisted smart-nodesgetUtilities()- Retrieve HSuite utility tokens and capabilities
ValidatorsSdk
Validator management across consensus, token, and account topics:
Consensus Validators:
addConsensusValidator(params)- Submit new consensus validatorreadConsensusValidator(timestamp)- Retrieve consensus validator data
Token Validators:
addTokenValidator(params)- Submit new token validatorreadTokenValidator(timestamp)- Retrieve token validator data
Account Validators:
addAccountValidator(params)- Submit new account validatorreadAccountValidator(timestamp)- Retrieve account validator data
Hedera Hashgraph Services
AccountsHashgraphSdk
Comprehensive account management functionality:
Account Information:
getInfo(accountId)- Retrieve detailed account informationgetKeys(accountId)- Get account public keysgetQueryBalance(accountId)- Query account balance
Account Lifecycle:
createAccount(params)- Create new Hashgraph accountupdateAccount(accountId, params)- Update account propertiesdeleteAccount(accountId, params)- Delete account and transfer funds
Transfers:
transferHbar(params)- Transfer HBAR between accountstransferToken(params)- Transfer fungible tokenstransferNftToken(params)- Transfer NFTs
Advanced Operations:
- Atomic swaps
- Allowance management
- Staking operations
TransactionsHashgraphSdk
Transaction management and execution:
- Transaction submission and status monitoring
- Transaction history and queries
- Fee estimation and optimization
HcsHashgraphSdk (Hedera Consensus Service)
Consensus service operations:
- Topic management and configuration
- Message submission and retrieval
- Subscription and monitoring capabilities
HtsHashgraphSdk (Hedera Token Service)
Comprehensive token service functionality:
Token Management:
- Token creation and configuration
- Token information queries
- Token supply management
Token Operations:
- Token transfers and approvals
- NFT minting and burning
- Token association and dissociation
Configuration
SDK Options Interface
interface ISdk.IOptions {
client: IClient.IOptions; // Client configuration from @hsuite/client-types
}Asynchronous Module Configuration
interface SmartNodeSdkModuleAsyncOptions {
imports?: Array<any>;
useClass?: Type<any>;
useFactory?: (...args: any[]) => Promise<ISdk.IOptions> | ISdk.IOptions;
inject?: any[];
}Configuration Patterns
- Factory Function Pattern (Recommended):
SmartNodeSdkModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
client: {
enabled: true,
baseUrl: configService.get('API_URL'),
ledgers: {
// ledger configurations
}
}
}),
inject: [ConfigService]
})- Factory Class Pattern:
SmartNodeSdkModule.forRootAsync({
useClass: MyConfigFactory,
imports: [ConfigModule]
})Type System
The SDK provides comprehensive TypeScript support through:
- ISdk Namespace - Interface definitions for type safety
- Sdk Namespace - Model classes with runtime validation
- Integration with @hsuite/client-types - Unified client configuration
- Swagger/OpenAPI decorators - Automatic API documentation
Architecture
src/
├── index.ts # Main exports
├── smartnode-sdk.module.ts # NestJS module configuration
├── smartnode-sdk.service.ts # Main SDK service
├── sdk-options.interface.ts # Module options interface
├── types/ # Type definitions
│ ├── interfaces/ # Interface definitions
│ │ └── sdk.namespace.ts # ISdk namespace
│ └── models/ # Model implementations
│ └── sdk.namespace.ts # Sdk namespace
├── smart-nodes/ # SmartNode services
│ ├── base.smart-node.ts # Base class for services
│ ├── general.smart-node.ts # General operations
│ └── validators.smart-node.ts # Validator management
└── hashgraph/ # Hedera Hashgraph services
├── accounts.hashgraph.ts # Account operations
├── transactions.hashgraph.ts # Transaction management
├── hcs.hashgraph.ts # Consensus service
└── hts.hashgraph.ts # Token serviceDevelopment
Documentation Generation
Generate comprehensive documentation using Compodoc:
npm run compodocCheck documentation coverage:
npm run compodoc:coverageBest Practices
- Use dependency injection - Leverage NestJS DI for service access
- Handle errors appropriately - All SDK methods include proper error handling
- Configure logging - Use built-in LoggerHelper for debugging
- Type safety - Always use provided TypeScript interfaces
- Async operations - All SDK methods return promises for async operations
Error Handling
All SDK services include comprehensive error handling:
try {
const result = await smartNodeSdk.sdk.smartNode.general.getStatus();
} catch (error) {
// Handle specific errors
console.error('SmartNode operation failed:', error.message);
}Future Roadmap
- Ripple Integration - Complete XRPL blockchain support
- IPFS Integration - Distributed storage capabilities
- Snapshot Services - Network state snapshots
- Enhanced Analytics - Advanced network metrics and monitoring
Version
Current version: 2.1.5
Changelog
See CHANGELOG.md for version history and updates.
License
This package is part of the HSuite Enterprise ecosystem.