@hsuite/smart-network-types - Smart Network Type Definitions

🌐 Comprehensive TypeScript type system for Smart Network ecosystem with Web3 integration and NFT standards compliance

Enterprise-grade type definitions and validation library providing robust interfaces, models, and runtime validation for network operations, membership management, operator controls, and smart node functionality with full Swagger/OpenAPI documentation support.


📚 Table of Contents


✨ Quick Start

Installation

npm install @hsuite/smart-network-types

Basic Setup

import { ISmartNetwork, SmartNetwork } from '@hsuite/smart-network-types';

// Interface-based type definitions
const networkConfig: ISmartNetwork.INetwork.IEntity = {
  membership: {
    walletId: "0x123...",
    operator: { id: "op_123", role: "VALIDATOR" },
    status: ISmartNetwork.IMembership.IStatus.ACTIVE,
    details: { /* membership details */ }
  },
  type: "operator",
  clusters: [],
  dkgId: "dkg-123456"
};

// Model-based runtime validation
const membership = new SmartNetwork.Membership.Web3.Entity(
  "0x1234567890abcdef",
  operatorEntity,
  ISmartNetwork.IMembership.IStatus.ACTIVE,
  details
);

NestJS Integration

import { SmartNetwork } from '@hsuite/smart-network-types';

@Controller('network')
export class NetworkController {
  @Post('membership')
  @ApiResponse({ type: SmartNetwork.Membership.Web3.Entity })
  async createMembership(@Body() data: any): Promise<SmartNetwork.Membership.Web3.Entity> {
    return new SmartNetwork.Membership.Web3.Entity(
      data.walletId,
      data.operator,
      data.status,
      data.details
    );
  }
}

🏗️ Architecture

Dual Namespace System

The library provides a comprehensive dual-namespace architecture:

🔧 ISmartNetwork Namespace (Interfaces)

  • Type Definitions - Pure TypeScript interfaces for type safety

  • Network Operations - Network entity and configuration interfaces

  • Membership Management - Web3 membership and lifecycle interfaces

  • Operator Controls - Role and permission management interfaces

  • Smart Node Operations - Node management and monitoring interfaces

🏛️ SmartNetwork Namespace (Models)

  • Runtime Validation - Concrete classes with built-in validation

  • Swagger Integration - Complete API documentation decorators

  • Configuration Models - System configuration and setup classes

  • NFT Compliance - ERC721/HIP412 metadata standards support

Domain Components

🌐 Network Domain

  • Entity Management - Core network participant tracking

  • Cluster Operations - Network cluster organization and status

  • Configuration - Network-wide settings and parameters

  • Fee Structures - Network fee calculation and management

👥 Membership Domain

  • Web3 Integration - Blockchain-based membership with NFT support

  • Lifecycle Management - Complete status tracking from PENDING to EXITED

  • Transaction Tracking - Full audit trail of blockchain operations

  • Metadata Management - NFT-compatible metadata with IPFS integration

Operator Domain

  • Role Management - Operator role definitions and permissions

  • Cluster Operations - Operator-cluster relationship management

  • Performance Tracking - Activity and performance metrics

  • Access Control - Permission-based operation authorization

🖥️ Smart Node Domain

  • Node Management - Smart node configuration and lifecycle

  • Performance Monitoring - Health and performance tracking

  • Resource Management - System resource allocation

  • Diagnostics - Node troubleshooting and analysis

Module Structure

src/
├── index.ts                           # Main exports and documentation
├── interfaces/                        # ISmartNetwork namespace
│   ├── smart-network.namespace.ts     # Central interface hub
│   ├── shared-types/                  # Common enums and utilities
│   ├── network/                       # Network interfaces
│   ├── membership/                    # Membership interfaces
│   ├── operator/                      # Operator interfaces
│   └── smart-node/                    # Smart node interfaces
└── models/                            # SmartNetwork namespace  
    ├── smart-network.namespace.ts     # Central model hub
    ├── network/                       # Network models
    ├── membership/                    # Membership models
    ├── operator/                      # Operator models
    └── smart-node/                    # Smart node models

🔧 API Reference

ISmartNetwork Namespace

Core Interface Structure

namespace ISmartNetwork {
  INetwork: _INetwork;      // Network management interfaces
  IMembership: _IMembership; // Membership lifecycle interfaces
  IOperator: _IOperator;     // Operator management interfaces
  ISmartNode: _ISmartNode;   // Smart node interfaces
}

Network Interfaces

ISmartNetwork.INetwork.IEntity

  • Description: Core network entity interface

  • Properties: membership, type, clusters, dkgId

  • Usage: Network participant identification and management

ISmartNetwork.INetwork.ICluster

  • Description: Network cluster management interface

  • Properties: type, status, configuration

  • Usage: Cluster organization and status tracking

ISmartNetwork.INetwork.IConfig

  • Description: Network configuration interface

  • Properties: settings, options, utilities

  • Usage: Network-wide parameter management

Membership Interfaces

ISmartNetwork.IMembership.IStatus

enum IStatus {
  PENDING = 'pending',      // Initial state, awaiting approval
  PROCESSING = 'processing', // Being processed by system
  MINTED = 'minted',        // NFT successfully created
  DELIVERED = 'delivered',   // NFT transferred to member
  ACTIVE = 'active',        // Fully operational state
  EXITING = 'exiting',      // Graceful termination in progress
  EXITED = 'exited',        // Successfully terminated
  FAILED = 'failed',        // Operation error occurred
  BANNED = 'banned'         // Forcefully terminated
}

ISmartNetwork.IMembership.IWeb3

  • Description: Web3 membership management interface

  • Properties: entity, metadata, details, configuration

  • Usage: Blockchain-based membership operations

Operator Interfaces

ISmartNetwork.IOperator.IEntity

  • Description: Operator entity management interface

  • Properties: id, role, permissions, clusters

  • Usage: Operator identification and role management

Smart Node Interfaces

ISmartNetwork.ISmartNode.IState

  • Description: Smart node state and health interface

  • Properties: status, health, performance, resources

  • Usage: Node monitoring and diagnostics

SmartNetwork Namespace

Core Model Structure

namespace SmartNetwork {
  Network: _Network;           // Network models and configuration
  Membership: _Membership;     // Membership models with Web3 support
  Operator: _Operator;         // Operator management models
  SmartNode: _SmartNode;       // Smart node operational models
}

Network Models

SmartNetwork.Network.Entity

  • Constructor: (membership, type, clusters, dkgId)

  • Validation: Runtime validation of all parameters

  • Decorators: Complete Swagger API documentation

  • Usage: Network entity creation with validation

Membership Models

SmartNetwork.Membership.Web3.Entity

  • Constructor: (walletId, operator, status, details)

  • Validation: Wallet address format, operator structure validation

  • Features: Complete Web3 membership with NFT support

  • Decorators: Full Swagger documentation with examples

SmartNetwork.Membership.Web3.Metadata

  • Constructor: (name, description, creator, image, type, format, files, properties, attributes)

  • Standards: ERC721/HIP412 NFT metadata compliance

  • IPFS: Integrated IPFS content addressing

  • Validation: Metadata format and standard compliance

SmartNetwork.Membership.Web3.Details

  • Constructor: (transactionDetails)

  • Features: Complete transaction audit trail

  • Properties: stake, unstake, mint, burn, activate, freeze operations

  • Tracking: Full blockchain transaction tracking

Configuration Models

SmartNetwork.Membership.Config.Options

  • Constructor: (enabled, utilities, network, redis, entity)

  • Features: Comprehensive membership system configuration

  • Validation: Configuration parameter validation

  • Integration: Redis integration for caching and session management


📖 Guides

Network Entity Setup Guide

Configure network entities and cluster management for Smart Network operations. Complete setup instructions for network membership entities, operator configuration, DKG cluster integration, and blockchain-based validation systems with comprehensive monitoring and management capabilities.

Web3 Membership Guide

Implement blockchain-based memberships with NFT standards compliance. Detailed guide covering Web3 membership lifecycle management, HIP412 NFT metadata creation, staking mechanisms, minting processes, and activation workflows with complete transaction tracking and validation.

Operator Management Guide

Set up operator roles, permissions, and cluster associations. Comprehensive guide for operator entity management including role-based access control, permission systems, cluster assignments, and network governance with complete audit trails and security controls.

Smart Node Configuration Guide

Configure and monitor smart nodes with performance tracking. Advanced configuration guide covering smart node deployment, performance monitoring, network integration, health checks, and optimization strategies for enterprise-grade blockchain operations.


🎯 Examples

Network Entity Management

import { SmartNetwork, ISmartNetwork } from '@hsuite/smart-network-types';

@Injectable()
export class NetworkEntityService {
  
  async createNetworkEntity(entityData: any) {
    try {
      // Create operator entity
      const operator = new SmartNetwork.Operator.Entity(
        entityData.operatorId,
        entityData.role,
        entityData.permissions,
        entityData.clusters
      );

      // Create membership details with transaction tracking
      const membershipDetails = new SmartNetwork.Membership.Web3.Details({
        metadata: this.createNFTMetadata(entityData.metadata),
        stake: {
          txHash: entityData.stakeTransaction,
          amount: entityData.stakeAmount
        },
        mint: {
          txHash: entityData.mintTransaction,
          tokenId: entityData.tokenId
        },
        activate: {
          txHash: entityData.activateTransaction,
          status: 'active'
        }
      });

      // Create Web3 membership
      const membership = new SmartNetwork.Membership.Web3.Entity(
        entityData.walletId,
        operator,
        ISmartNetwork.IMembership.IStatus.ACTIVE,
        membershipDetails
      );

      // Create network entity
      const networkEntity = new SmartNetwork.Network.Entity(
        membership,
        entityData.type,
        entityData.clusters,
        entityData.dkgId
      );

      return {
        success: true,
        entity: networkEntity,
        entityId: networkEntity.membership.walletId,
        status: networkEntity.membership.status,
        createdAt: new Date().toISOString()
      };
    } catch (error) {
      throw new Error(`Network entity creation failed: ${error.message}`);
    }
  }

  private createNFTMetadata(metadataConfig: any) {
    return new SmartNetwork.Membership.Web3.Metadata(
      metadataConfig.name,
      metadataConfig.description,
      metadataConfig.creator,
      metadataConfig.image,
      metadataConfig.type,
      'HIP412',  // NFT standard
      metadataConfig.files || [],
      metadataConfig.properties || {},
      metadataConfig.attributes || []
    );
  }

  async validateNetworkEntity(entity: SmartNetwork.Network.Entity): Promise<boolean> {
    // Validate membership status
    if (entity.membership.status !== ISmartNetwork.IMembership.IStatus.ACTIVE) {
      return false;
    }

    // Validate wallet address format
    const walletRegex = /^0x[a-fA-F0-9]{40}$/;
    if (!walletRegex.test(entity.membership.walletId)) {
      return false;
    }

    // Validate operator permissions
    if (!entity.membership.operator.permissions.length) {
      return false;
    }

    return true;
  }
}

Web3 Membership Lifecycle Management

import { SmartNetwork, ISmartNetwork } from '@hsuite/smart-network-types';

@Injectable()
export class MembershipLifecycleService {
  
  async initiateMembership(membershipRequest: any) {
    try {
      // Create initial membership in PENDING status
      const membership = new SmartNetwork.Membership.Web3.Entity(
        membershipRequest.walletId,
        membershipRequest.operator,
        ISmartNetwork.IMembership.IStatus.PENDING,
        null // Details will be added as operations complete
      );

      return {
        membershipId: membership.walletId,
        status: membership.status,
        nextAction: 'process_application',
        estimatedTime: '5-10 minutes'
      };
    } catch (error) {
      throw new Error(`Membership initiation failed: ${error.message}`);
    }
  }

  async processStaking(membershipId: string, stakeData: any) {
    try {
      // Update status to PROCESSING
      const updatedDetails = new SmartNetwork.Membership.Web3.Details({
        stake: {
          txHash: stakeData.transactionHash,
          amount: stakeData.amount,
          timestamp: Date.now()
        }
      });

      return {
        membershipId,
        status: ISmartNetwork.IMembership.IStatus.PROCESSING,
        stakeConfirmed: true,
        nextAction: 'mint_nft',
        transactionHash: stakeData.transactionHash
      };
    } catch (error) {
      throw new Error(`Staking process failed: ${error.message}`);
    }
  }

  async mintMembershipNFT(membershipId: string, nftData: any) {
    try {
      // Create NFT metadata
      const metadata = new SmartNetwork.Membership.Web3.Metadata(
        nftData.name,
        nftData.description,
        'SmartNetwork DAO',
        nftData.imageUrl,
        'VALIDATOR',
        'HIP412',
        nftData.additionalFiles || [],
        { tier: nftData.tier, stakeAmount: nftData.stakeAmount },
        [
          { trait_type: 'Tier', value: nftData.tier },
          { trait_type: 'Stake Amount', value: nftData.stakeAmount },
          { trait_type: 'Join Date', value: new Date().toISOString().split('T')[0] }
        ]
      );

      // Update membership details with mint information
      const updatedDetails = new SmartNetwork.Membership.Web3.Details({
        metadata,
        mint: {
          txHash: nftData.mintTransaction,
          tokenId: nftData.tokenId,
          timestamp: Date.now()
        }
      });

      return {
        membershipId,
        status: ISmartNetwork.IMembership.IStatus.MINTED,
        tokenId: nftData.tokenId,
        metadataUrl: `ipfs://${nftData.metadataCid}`,
        nextAction: 'deliver_nft'
      };
    } catch (error) {
      throw new Error(`NFT minting failed: ${error.message}`);
    }
  }

  async deliverNFT(membershipId: string, deliveryData: any) {
    try {
      return {
        membershipId,
        status: ISmartNetwork.IMembership.IStatus.DELIVERED,
        deliveryTransaction: deliveryData.transactionHash,
        nextAction: 'activate_membership'
      };
    } catch (error) {
      throw new Error(`NFT delivery failed: ${error.message}`);
    }
  }

  async activateMembership(membershipId: string, activationData: any) {
    try {
      return {
        membershipId,
        status: ISmartNetwork.IMembership.IStatus.ACTIVE,
        activationTransaction: activationData.transactionHash,
        activatedAt: new Date().toISOString(),
        privileges: ['network_participation', 'governance_voting', 'reward_distribution']
      };
    } catch (error) {
      throw new Error(`Membership activation failed: ${error.message}`);
    }
  }

  async exitMembership(membershipId: string, exitReason: string) {
    try {
      // Initiate graceful exit
      const exitDetails = {
        reason: exitReason,
        initiatedAt: Date.now(),
        status: ISmartNetwork.IMembership.IStatus.EXITING
      };

      return {
        membershipId,
        status: ISmartNetwork.IMembership.IStatus.EXITING,
        exitReason,
        estimatedCompletionTime: '24-48 hours',
        nextSteps: ['unstake_tokens', 'burn_nft', 'final_settlement']
      };
    } catch (error) {
      throw new Error(`Membership exit initiation failed: ${error.message}`);
    }
  }

  async completeMembershipExit(membershipId: string, exitData: any) {
    try {
      return {
        membershipId,
        status: ISmartNetwork.IMembership.IStatus.EXITED,
        unstakeTransaction: exitData.unstakeTransaction,
        burnTransaction: exitData.burnTransaction,
        finalSettlement: exitData.settlementAmount,
        completedAt: new Date().toISOString()
      };
    } catch (error) {
      throw new Error(`Membership exit completion failed: ${error.message}`);
    }
  }
}

Operator Management System

import { SmartNetwork, ISmartNetwork } from '@hsuite/smart-network-types';

@Injectable()
export class OperatorManagementService {
  
  async createOperator(operatorData: any) {
    try {
      const operator = new SmartNetwork.Operator.Entity(
        operatorData.id,
        operatorData.role,
        operatorData.permissions,
        operatorData.clusters
      );

      return {
        success: true,
        operatorId: operator.id,
        role: operator.role,
        permissions: operator.permissions,
        assignedClusters: operator.clusters.length,
        createdAt: new Date().toISOString()
      };
    } catch (error) {
      throw new Error(`Operator creation failed: ${error.message}`);
    }
  }

  async assignOperatorToClusters(operatorId: string, clusterIds: string[]) {
    try {
      const assignments = [];

      for (const clusterId of clusterIds) {
        // Validate cluster assignment
        const assignment = {
          operatorId,
          clusterId,
          assignedAt: new Date().toISOString(),
          status: 'active',
          permissions: ['read', 'monitor', 'operate']
        };

        assignments.push(assignment);
      }

      return {
        operatorId,
        newAssignments: assignments.length,
        totalClusters: clusterIds.length,
        assignments
      };
    } catch (error) {
      throw new Error(`Cluster assignment failed: ${error.message}`);
    }
  }

  async updateOperatorPermissions(operatorId: string, newPermissions: string[]) {
    try {
      // Validate permissions
      const validPermissions = [
        'network:read', 'network:write', 'network:admin',
        'cluster:read', 'cluster:operate', 'cluster:manage',
        'node:monitor', 'node:control', 'node:configure',
        'membership:view', 'membership:approve', 'membership:revoke'
      ];

      const invalidPermissions = newPermissions.filter(
        permission => !validPermissions.includes(permission)
      );

      if (invalidPermissions.length > 0) {
        throw new Error(`Invalid permissions: ${invalidPermissions.join(', ')}`);
      }

      return {
        operatorId,
        previousPermissions: [], // Would get from existing operator
        newPermissions,
        updatedAt: new Date().toISOString(),
        effectiveImmediately: true
      };
    } catch (error) {
      throw new Error(`Permission update failed: ${error.message}`);
    }
  }

  async getOperatorPerformanceMetrics(operatorId: string, timeRange: string) {
    try {
      // Mock performance data - in real implementation, this would come from monitoring
      const metrics = {
        operatorId,
        timeRange,
        metrics: {
          uptime: '99.9%',
          averageResponseTime: '45ms',
          operationsCompleted: 1247,
          errorsEncountered: 3,
          clustersManaged: 5,
          activeMemberships: 23
        },
        performance: {
          excellent: ['uptime', 'response_time'],
          good: ['operations_completed'],
          needsAttention: ['error_rate']
        },
        generatedAt: new Date().toISOString()
      };

      return metrics;
    } catch (error) {
      throw new Error(`Performance metrics retrieval failed: ${error.message}`);
    }
  }
}

Smart Node Configuration and Monitoring

import { SmartNetwork, ISmartNetwork } from '@hsuite/smart-network-types';

@Injectable()
export class SmartNodeService {
  
  async configureSmartNode(nodeConfig: any) {
    try {
      const nodeState = {
        nodeId: nodeConfig.id,
        status: 'initializing',
        health: 'unknown',
        configuration: {
          resources: {
            cpu: nodeConfig.resources.cpu,
            memory: nodeConfig.resources.memory,
            storage: nodeConfig.resources.storage,
            network: nodeConfig.resources.network
          },
          services: {
            consensus: nodeConfig.services.consensus,
            storage: nodeConfig.services.storage,
            networking: nodeConfig.services.networking
          },
          security: {
            encryption: nodeConfig.security.encryption,
            authentication: nodeConfig.security.authentication,
            authorization: nodeConfig.security.authorization
          }
        },
        configuredAt: new Date().toISOString()
      };

      return {
        success: true,
        nodeId: nodeState.nodeId,
        configuration: nodeState.configuration,
        nextStep: 'start_services',
        estimatedStartTime: '2-3 minutes'
      };
    } catch (error) {
      throw new Error(`Smart node configuration failed: ${error.message}`);
    }
  }

  async monitorNodeHealth(nodeId: string) {
    try {
      // Mock health data - real implementation would gather actual metrics
      const healthMetrics = {
        nodeId,
        timestamp: new Date().toISOString(),
        status: 'operational',
        health: 'healthy',
        metrics: {
          cpu: { usage: '23%', temperature: '42°C', cores: 8 },
          memory: { usage: '67%', total: '32GB', available: '10.5GB' },
          storage: { usage: '45%', total: '1TB', available: '550GB' },
          network: { 
            latency: '12ms', 
            throughput: '850 Mbps', 
            connections: 42,
            errors: 0
          }
        },
        services: {
          consensus: { status: 'active', uptime: '99.8%', lastBlock: 1234567 },
          storage: { status: 'active', uptime: '99.9%', operations: 2341 },
          networking: { status: 'active', uptime: '99.7%', peers: 15 }
        },
        alerts: []
      };

      return healthMetrics;
    } catch (error) {
      throw new Error(`Node health monitoring failed: ${error.message}`);
    }
  }

  async performNodeDiagnostics(nodeId: string) {
    try {
      const diagnostics = {
        nodeId,
        testSuite: 'comprehensive',
        executedAt: new Date().toISOString(),
        tests: [
          {
            name: 'CPU Performance',
            status: 'passed',
            score: 95,
            details: 'All cores operating within normal parameters'
          },
          {
            name: 'Memory Integrity',
            status: 'passed', 
            score: 98,
            details: 'No memory leaks or corruption detected'
          },
          {
            name: 'Storage I/O',
            status: 'passed',
            score: 92,
            details: 'Read/write operations within expected ranges'
          },
          {
            name: 'Network Connectivity',
            status: 'warning',
            score: 85,
            details: 'Intermittent latency spikes detected on peer connections'
          },
          {
            name: 'Consensus Participation',
            status: 'passed',
            score: 97,
            details: 'Successfully participating in consensus rounds'
          }
        ],
        overallScore: 93,
        recommendations: [
          'Monitor network connectivity for consistent performance',
          'Consider upgrading network infrastructure if latency issues persist'
        ]
      };

      return diagnostics;
    } catch (error) {
      throw new Error(`Node diagnostics failed: ${error.message}`);
    }
  }

  async updateNodeConfiguration(nodeId: string, configUpdates: any) {
    try {
      const updateResult = {
        nodeId,
        updatedAt: new Date().toISOString(),
        changes: {
          previous: {}, // Would contain previous configuration
          current: configUpdates
        },
        restartRequired: false,
        status: 'configuration_updated'
      };

      // Check if restart is required based on updates
      const restartRequiredChanges = ['consensus', 'security', 'networking'];
      const requiresRestart = Object.keys(configUpdates).some(key => 
        restartRequiredChanges.includes(key)
      );

      if (requiresRestart) {
        updateResult.restartRequired = true;
        updateResult.status = 'restart_pending';
      }

      return updateResult;
    } catch (error) {
      throw new Error(`Node configuration update failed: ${error.message}`);
    }
  }
}

Configuration Management

import { SmartNetwork } from '@hsuite/smart-network-types';

@Injectable()
export class ConfigurationService {
  
  async setupMembershipConfiguration(configData: any) {
    try {
      // Create network configuration
      const networkConfig = new SmartNetwork.Membership.Config.Network({
        type: configData.network.type,
        endpoints: configData.network.endpoints
      });

      // Create entity configuration
      const entityConfig = new SmartNetwork.Membership.Config.Entity({
        tokenId: configData.entity.tokenId,
        price: configData.entity.price,
        metadata: {
          content: {
            name: configData.entity.metadata.name,
            description: configData.entity.metadata.description,
            creator: configData.entity.metadata.creator,
            type: configData.entity.metadata.type,
            format: 'HIP412',
            files: configData.entity.metadata.files || [],
            properties: configData.entity.metadata.properties || {},
            attributes: configData.entity.metadata.attributes || [],
            image: configData.entity.metadata.image
          },
          cid: configData.entity.metadata.cid
        }
      });

      // Create main configuration
      const membershipConfig = new SmartNetwork.Membership.Config.Options({
        enabled: true,
        utilities: configData.utilities || [],
        network: networkConfig,
        redis: {
          host: configData.redis.host || 'localhost',
          port: configData.redis.port || 6379,
          ttl: configData.redis.ttl || 3600,
          prefix: configData.redis.prefix || 'membership:'
        },
        entity: entityConfig
      });

      return {
        success: true,
        configuration: membershipConfig,
        features: {
          web3Integration: true,
          nftSupport: true,
          redisCache: true,
          utilities: membershipConfig.utilities.length
        },
        configuredAt: new Date().toISOString()
      };
    } catch (error) {
      throw new Error(`Membership configuration setup failed: ${error.message}`);
    }
  }

  async setupNetworkConfiguration(networkData: any) {
    try {
      const networkSettings = new SmartNetwork.NetworkConfig.Settings({
        protocol: networkData.protocol || 'v2',
        chainId: networkData.chainId || 1,
        consensus: networkData.consensus || 'PoS'
      });

      const networkOptions = new SmartNetwork.NetworkConfig.Options({
        enabled: true,
        settings: networkSettings,
        endpoints: networkData.endpoints || []
      });

      return {
        success: true,
        settings: networkSettings,
        options: networkOptions,
        endpoints: networkData.endpoints.length,
        configuredAt: new Date().toISOString()
      };
    } catch (error) {
      throw new Error(`Network configuration setup failed: ${error.message}`);
    }
  }

  validateConfiguration(config: any): { isValid: boolean; errors: string[] } {
    const errors = [];

    // Validate network configuration
    if (!config.network || !config.network.endpoints || !config.network.endpoints.length) {
      errors.push('Network endpoints are required');
    }

    // Validate membership configuration
    if (config.membership && !config.membership.tokenId) {
      errors.push('Membership token ID is required');
    }

    // Validate Redis configuration
    if (config.redis && (!config.redis.host || !config.redis.port)) {
      errors.push('Redis host and port are required');
    }

    return {
      isValid: errors.length === 0,
      errors
    };
  }
}

Type-Safe Development Patterns

import { ISmartNetwork, SmartNetwork } from '@hsuite/smart-network-types';

@Injectable()
export class TypeSafeDevelopmentService {
  
  // Interface-first development for type safety
  processNetworkData(network: ISmartNetwork.INetwork.IEntity): void {
    // Type-safe operations with intellisense support
    if (network.membership.status === ISmartNetwork.IMembership.IStatus.ACTIVE) {
      this.handleActiveNetwork(network);
    }
  }

  // Model-based validation for runtime safety
  createValidatedMembership(data: any): SmartNetwork.Membership.Web3.Entity {
    try {
      return new SmartNetwork.Membership.Web3.Entity(
        data.walletId,
        data.operator,
        data.status,
        data.details
      );
    } catch (error) {
      // Descriptive validation errors
      throw new Error(`Membership validation failed: ${error.message}`);
    }
  }

  // Comprehensive error handling
  async handleMembershipOperation(
    operation: 'create' | 'update' | 'delete',
    data: any
  ): Promise<{ success: boolean; result?: any; error?: string }> {
    try {
      switch (operation) {
        case 'create':
          const membership = this.createValidatedMembership(data);
          return { success: true, result: membership };
        
        case 'update':
          // Update logic with validation
          return { success: true, result: 'updated' };
        
        case 'delete':
          // Delete logic with validation
          return { success: true, result: 'deleted' };
        
        default:
          throw new Error(`Unsupported operation: ${operation}`);
      }
    } catch (error) {
      return { 
        success: false, 
        error: error.message 
      };
    }
  }

  // Status lifecycle management
  getNextValidStatuses(currentStatus: ISmartNetwork.IMembership.IStatus): ISmartNetwork.IMembership.IStatus[] {
    const transitions = {
      [ISmartNetwork.IMembership.IStatus.PENDING]: [
        ISmartNetwork.IMembership.IStatus.PROCESSING,
        ISmartNetwork.IMembership.IStatus.FAILED
      ],
      [ISmartNetwork.IMembership.IStatus.PROCESSING]: [
        ISmartNetwork.IMembership.IStatus.MINTED,
        ISmartNetwork.IMembership.IStatus.FAILED
      ],
      [ISmartNetwork.IMembership.IStatus.MINTED]: [
        ISmartNetwork.IMembership.IStatus.DELIVERED,
        ISmartNetwork.IMembership.IStatus.FAILED
      ],
      [ISmartNetwork.IMembership.IStatus.DELIVERED]: [
        ISmartNetwork.IMembership.IStatus.ACTIVE,
        ISmartNetwork.IMembership.IStatus.FAILED
      ],
      [ISmartNetwork.IMembership.IStatus.ACTIVE]: [
        ISmartNetwork.IMembership.IStatus.EXITING,
        ISmartNetwork.IMembership.IStatus.BANNED
      ],
      [ISmartNetwork.IMembership.IStatus.EXITING]: [
        ISmartNetwork.IMembership.IStatus.EXITED,
        ISmartNetwork.IMembership.IStatus.FAILED
      ]
    };

    return transitions[currentStatus] || [];
  }
}

🔗 Integration

Required Dependencies

{
  "@nestjs/common": "^10.4.2",
  "@nestjs/core": "^10.4.2",
  "@hsuite/nestjs-swagger": "^1.0.3",
  "@hsuite/did-sdk-js": "^1.0.3",
  "@hsuite/vc-sl-sdk-js": "^1.0.3",
  "@compodoc/compodoc": "^1.1.23"
}

TypeScript Configuration

{
  "compilerOptions": {
    "declaration": true,
    "outDir": "../../dist/libs/smart-network-types",
    "types": ["node"],
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

Module Integration

import { Module } from '@nestjs/common';
import { SmartNetwork, ISmartNetwork } from '@hsuite/smart-network-types';

@Module({
  providers: [
    NetworkEntityService,
    MembershipLifecycleService,
    OperatorManagementService,
    SmartNodeService
  ],
  exports: [
    NetworkEntityService,
    MembershipLifecycleService,
    OperatorManagementService,
    SmartNodeService
  ]
})
export class SmartNetworkModule {}

Documentation Generation

# Generate comprehensive documentation
npm run compodoc

# Generate documentation with coverage report
npm run compodoc:coverage

Integration with HSuite Ecosystem

// Complete integration with other HSuite modules
import { SmartNetwork, ISmartNetwork } from '@hsuite/smart-network-types';
import { AuthModule } from '@hsuite/auth';
import { ValidatorsModule } from '@hsuite/validators';
import { HashgraphModule } from '@hsuite/hashgraph';

@Module({
  imports: [
    AuthModule,
    ValidatorsModule,
    HashgraphModule
  ]
})
export class SmartNetworkEcosystemModule {}

@Injectable()
export class IntegratedSmartNetworkService {
  constructor(
    private authService: AuthService,
    private validatorsService: ValidatorsService,
    private hashgraphService: HashgraphService
  ) {}

  async createSecureNetworkEntity(
    entityData: any,
    session: IAuth.ICredentials.IWeb3.IEntity
  ): Promise<SmartNetwork.Network.Entity> {
    // 1. Validate permissions
    const hasPermission = await this.authService.validatePermission(
      session,
      'network:entity:create'
    );

    if (!hasPermission) {
      throw new Error('Insufficient permissions for network entity creation');
    }

    // 2. Validate with network validators
    const validationResult = await this.validatorsService.validateNetworkEntity(entityData);
    
    if (!validationResult.isValid) {
      throw new Error(`Validation failed: ${validationResult.errors.join(', ')}`);
    }

    // 3. Create entity with type safety
    const networkEntity = new SmartNetwork.Network.Entity(
      entityData.membership,
      entityData.type,
      entityData.clusters,
      entityData.dkgId
    );

    return networkEntity;
  }
}

🌐 Enterprise Type System: Comprehensive TypeScript definitions with runtime validation and Web3 integration for Smart Network operations.

👥 NFT-Compliant Memberships: Full ERC721/HIP412 standards support with IPFS metadata and complete transaction tracking.

⚡ Developer Experience: Type-safe development with comprehensive documentation, validation, and seamless NestJS integration.


Built with ❤️ by the HbarSuite Team Copyright © 2024 HbarSuite. All rights reserved.

Last updated