import { IpfsNode, IPFSContent } from 'src/services/ipfs/ipfs';
import { asyncIterableBatchProcessor } from 'src/utils/async/iterable';

import { mapParticleToEntity } from 'src/services/CozoDb/mapping';

import { LsResult } from 'ipfs-core-types/src/pin';

import DbApi from '../indexedDb/dbApiWrapper';

const fetchPins = async (node: IpfsNode) => {
  const pins: LsResult[] = [];
  await asyncIterableBatchProcessor(
    node.ls(),
    async (pinsBatch) => {
      // filter only root pins
      pins.push(
        ...pinsBatch.filter(
          (p) => p.type === 'direct' || p.type === 'recursive'
        )
      );
    },
    10
  );

  return pins;
};

const importParicleContent = async (particle: IPFSContent, dbApi: DbApi) => {
  try {
    const entity = mapParticleToEntity(particle);
    const result = await dbApi!.putParticles(entity);
    return result;
  } catch (e) {
    console.error('importParicleContent', e.toString(), !!dbApi);
    return false;
  }
};

export { fetchPins, importParicleContent };

Neighbours