// import { getNodeAutoDialInterval } from './utils-ipfs';
import { IpfsNodeType, IpfsNode, CybIpfsNode, IpfsOptsType } from '../ipfs';
import KuboNode from './impl/kubo';
import HeliaNode from './impl/helia';
import JsIpfsNode from './impl/js-ipfs';
// import EnhancedIpfsNode from './node/enhancedNode';
import {
  CYBERNODE_SWARM_ADDR_TCP,
  CYBERNODE_SWARM_ADDR_WSS,
  CYBER_NODE_SWARM_PEER_ID,
} from '../config';
import { withCybFeatures } from './mixins/withCybFeatures';

const nodeClassMap: Record<IpfsNodeType, new () => IpfsNode> = {
  helia: HeliaNode,
  embedded: JsIpfsNode,
  external: KuboNode,
};

// eslint-disable-next-line import/no-unused-modules, import/prefer-default-export
export async function initIpfsNode(
  options: IpfsOptsType
): Promise<CybIpfsNode> {
  const { ipfsNodeType, ...restOptions } = options;

  const swarmPeerId = CYBER_NODE_SWARM_PEER_ID;

  const swarmPeerAddress =
    ipfsNodeType === 'external'
      ? CYBERNODE_SWARM_ADDR_TCP
      : CYBERNODE_SWARM_ADDR_WSS;

  const EnhancedClass = withCybFeatures(nodeClassMap[ipfsNodeType], {
    swarmPeerId,
    swarmPeerAddress,
  });

  const instance = new EnhancedClass();

  await instance.init({ url: restOptions.urlOpts });
  // TODO: REFACT
  //   instance.connMgrGracePeriod = await getNodeAutoDialInterval(instance);
  // window.ipfs = instance;

  console.log('----init', ipfsNodeType);

  await instance.reconnectToSwarm();
  return instance;
}

Synonyms

cyb/src/services/ipfs/node/factory.ts

Neighbours