UNPKG

filecoin-pin

Version:

Bridge IPFS content to Filecoin Onchain Cloud using familiar tools

68 lines 3.09 kB
/** * List Data Sets * * Functions for listing and summarizing datasets with optional provider enrichment. * * @module core/data-set/list-data-sets */ import { WarmStorageService } from '@filoz/synapse-sdk'; import { SPRegistryService } from '@filoz/synapse-sdk/sp-registry'; import { DEFAULT_DATA_SET_METADATA } from '../synapse/constants.js'; /** * List all datasets for an address with optional provider enrichment * * Example usage: * ```typescript * const synapse = await Synapse.create({ privateKey, rpcURL }) * const datasets = await listDataSets(synapse) * * for (const ds of datasets) { * console.log(`Dataset ${ds.dataSetId}: ${ds.currentPieceCount} pieces`) * if (ds.provider) { * console.log(` Provider: ${ds.provider.name}`) * } * } * ``` * * @param synapse - Initialized Synapse instance * @param options - Optional configuration * @returns Array of dataset summaries */ export async function listDataSets(synapse, options) { const logger = options?.logger; const address = options?.address ?? (await synapse.getClient().getAddress()); const withProviderDetails = options?.withProviderDetails ?? false; const filter = options?.filter; // Step 1: Find data sets const dataSets = await synapse.storage.findDataSets(address); const filteredDataSets = filter ? dataSets.filter(filter) : dataSets; // Step 2: Collect unique provider IDs from data sets const uniqueProviderIds = withProviderDetails ? Array.from(new Set(filteredDataSets.map((ds) => ds.providerId))) : []; // Step 3: Fetch provider info for the specific provider IDs using sp-registry let providerMap = new Map(); if (uniqueProviderIds.length > 0) { try { const warmStorageService = await WarmStorageService.create(synapse.getProvider(), synapse.getWarmStorageAddress()); const serviceProviderRegistryAddress = await warmStorageService.getServiceProviderRegistryAddress(); const spRegistry = new SPRegistryService(synapse.getProvider(), serviceProviderRegistryAddress); const providers = await spRegistry.getProviders(uniqueProviderIds); providerMap = new Map(providers.map((provider) => [provider.id, provider])); } catch (error) { logger?.warn({ error }, 'Failed to fetch provider info from sp-registry for provider enrichment'); } } // Map SDK datasets to our summary format (spread all fields, add dataSetId alias, provider, and filecoin-pin creation flag) return filteredDataSets.map((ds) => { // Check if this dataset was created by filecoin-pin by looking for our DEFAULT_DATA_SET_METADATA fields const createdWithFilecoinPin = Object.entries(DEFAULT_DATA_SET_METADATA).every(([key, value]) => ds.metadata[key] === value); const summary = { ...ds, dataSetId: ds.pdpVerifierDataSetId, provider: providerMap.get(ds.providerId), createdWithFilecoinPin, }; return summary; }); } //# sourceMappingURL=list-data-sets.js.map