IPFSNode.fromContainer constructor

IPFSNode.fromContainer(
  1. ServiceContainer _container
)

Creates an IPFSNode from a pre-configured service container.

Throws NodeInitializationError if required services are missing.

Implementation

IPFSNode.fromContainer(this._container) : _logger = Logger('IPFSNode') {
  _logger.debug('Creating IPFS Node from container');

  // Validate required services
  _validateRequiredServices();

  // Initialize managers with constructor injection
  _contentManager = ContentManager(
    datastoreHandler: _container.get<DatastoreHandler>(),
    newContentController: _newContentController,
    blockStore: _container.get<BlockStore>(),
    bitswapHandler: _container.isRegistered(BitswapHandler)
        ? _container.get<BitswapHandler>()
        : null,
    denylistService: _container.isRegistered<DenylistService>()
        ? _container.get<DenylistService>()
        : null,
  );

  _networkManager = NetworkManager(
    networkHandler: _container.isRegistered<NetworkHandler>()
        ? _container.get<NetworkHandler>()
        : null,
    datastoreHandler: _container.get<DatastoreHandler>(),
    dhtHandler: _container.isRegistered<DHTHandler>()
        ? _container.get<DHTHandler>()
        : null,
    contentRoutingHandler: _container.isRegistered(ContentRoutingHandler)
        ? _container.get<ContentRoutingHandler>()
        : null,
    bitswapHandler: _container.isRegistered(BitswapHandler)
        ? _container.get<BitswapHandler>()
        : null,
  );

  _protocolManager = ProtocolManager(
    pubSubHandler: _container.isRegistered(PubSubHandler)
        ? _container.get<PubSubHandler>()
        : null,
    dhtHandler: _container.isRegistered<DHTHandler>()
        ? _container.get<DHTHandler>()
        : null,
    contentRoutingHandler: _container.isRegistered(ContentRoutingHandler)
        ? _container.get<ContentRoutingHandler>()
        : null,
  );

  _mfsManager = MFSManager(
    _container.get<BlockStore>(),
    _container.get<DatastoreHandler>().datastore,
    denylistService: _container.isRegistered<DenylistService>()
        ? _container.get<DenylistService>()
        : null,
  );

  // Wire up the periodic reprovider when DHT and config are available.
  if (_container.isRegistered<DHTHandler>() &&
      _container.isRegistered<IPFSConfig>()) {
    _reprovider = Reprovider(
      config: _container.get<IPFSConfig>().dht,
      dhtHandler: _container.get<DHTHandler>(),
      pinManager: _container.get<BlockStore>().pinManager,
      mfsManager: _mfsManager,
      metrics: _container.isRegistered<MetricsCollector>()
          ? _container.get<MetricsCollector>()
          : null,
    );
  }

  _pluginManager = PluginManager(this);

  _lifecycleManager = _container.isRegistered<LifecycleManager>()
      ? _container.get<LifecycleManager>()
      : LifecycleManager();

  // Register services for lifecycle management
  _lifecycleManager.register(_container.get<BlockStore>());
  _lifecycleManager.register(_contentManager);
  _lifecycleManager.register(_networkManager);
  _lifecycleManager.register(_protocolManager);
  if (_reprovider != null) {
    _lifecycleManager.register(_reprovider!);
  }
  if (_container.isRegistered<DenylistService>()) {
    _lifecycleManager.register(_container.get<DenylistService>());
  }

  // Set back-references for handlers that need the IPFSNode instance
  if (_container.isRegistered<NetworkHandler>()) {
    _container.get<NetworkHandler>().setIpfsNode(this);
  }
}