polkadot-js/client

View on GitHub
packages/client-p2p/src/create/modules.ts

Summary

Maintainability
A
0 mins
Test Coverage
// Copyright 2017-2019 @polkadot/client-p2p authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.

import { EnvType, P2pNodes } from '../types';

import dht from 'libp2p-kad-dht';
// import mplex from 'libp2p-mplex';
// import Multicast from 'libp2p-mdns';
import Bootstrap from 'libp2p-bootstrap';
import secio from 'libp2p-secio';
import spdy from 'libp2p-spdy';
import TCP from 'libp2p-tcp';
import PeerInfo from 'peer-info';
import WS from 'libp2p-websockets';
import mplex from 'pull-mplex';
import WebRTClient from '@polkadot/client-signal/client';

// import defaults from '../defaults';

interface Config {
  discoverBoot: boolean;
  discoverStar: boolean;
  bootNodes: P2pNodes;
  nodes: P2pNodes;
  wrtc?: any;
}

export default function createModules (envType: EnvType, peerInfo: PeerInfo, { bootNodes, discoverBoot, discoverStar, nodes, wrtc }: Config): LibP2p.OptionsModules {
  const isCli = envType !== 'browser';
  const starTransports = discoverStar
    ? [new WebRTClient({ wrtc })]
    : [];
  const transport = isCli
    ? [WS, TCP]
    : [WS];
  const peerDiscovery = isCli
    ? [new Bootstrap({ list: (discoverBoot ? bootNodes : []).concat(nodes) })]
    : [];

  return {
    connEncryption: [
      secio
    ],
    streamMuxer: [
      mplex,
      spdy
    ],
    dht,
    peerDiscovery: peerDiscovery.concat(
      starTransports.map(({ discovery }): any => discovery)
    ) as any[],
    transport: transport.concat(starTransports as any[])
  };
}