UNPKG

filecoin-pin

Version:

Bridge IPFS content to Filecoin Onchain Cloud using familiar tools

96 lines 4.02 kB
import pc from 'picocolors'; import { getDetailedDataSet, listDataSets } from '../core/data-set/index.js'; import { cleanupSynapseService } from '../core/synapse/index.js'; import { getCliSynapse } from '../utils/cli-auth.js'; import { cancel, createSpinner, intro, outro } from '../utils/cli-helpers.js'; import { log } from '../utils/cli-logger.js'; import { displayDataSets } from './display.js'; /** * Entry point invoked by the Commander command. * * @param dataSetIdArg - Optional dataset identifier provided on the command line * @param options - Normalised CLI options */ export async function runDataSetDetailsCommand(dataSetId, options) { intro(pc.bold(`Filecoin Onchain Cloud Data Set Details for #${dataSetId}`)); const spinner = createSpinner(); spinner.start('Connecting to Synapse...'); let synapse = null; try { synapse = await getCliSynapse(options); const network = synapse.getNetwork(); const client = synapse.getClient(); const address = await client.getAddress(); spinner.message('Fetching data set details...'); const dataSet = await getDetailedDataSet(synapse, dataSetId); spinner.stop('━━━ Data Set ━━━'); displayDataSets([dataSet], network, address); outro('Data set inspection complete'); } catch (error) { spinner.stop(`${pc.red('✗')} Failed to inspect data set`); log.line(''); log.line(`${pc.red('Error:')} ${error instanceof Error ? error.message : String(error)}`); log.flush(); cancel('Inspection failed'); process.exitCode = 1; } finally { await cleanupSynapseService(); } } export async function runDataSetListCommand(options) { intro(pc.bold('Filecoin Onchain Cloud Data Sets')); const spinner = createSpinner(); spinner.start('Connecting to Synapse...'); let synapse = null; try { // Parse and validate provider ID const providerId = options.providerId != null ? Number(options.providerId) : undefined; if (providerId != null && Number.isNaN(providerId)) { throw new Error('Invalid provider ID'); } const metadataEntries = options.dataSetMetadata ? Object.entries(options.dataSetMetadata) : []; let filter; if (providerId != null || metadataEntries.length > 0) { // TODO: synapse is supposed to be able to filter on dataset metadata, but synapse.storage.findDataSets doesn't accept metadata? How do we filter.. filter = (dataSet) => { if (providerId != null && dataSet.providerId !== providerId) { return false; } if (metadataEntries.length > 0 && !metadataEntries.every(([key, value]) => (dataSet.metadata?.[key] ?? '') === value)) { return false; } return true; }; } synapse = await getCliSynapse(options); const network = synapse.getNetwork(); const client = synapse.getClient(); const address = await client.getAddress(); spinner.message('Fetching data sets...'); const allDataSets = await listDataSets(synapse, { withProviderDetails: false, filter, }); const dataSets = options.all ? allDataSets : allDataSets.filter((dataSet) => dataSet.createdWithFilecoinPin); spinner.stop('━━━ Data Sets ━━━'); displayDataSets(dataSets, network, address); outro('Data set list complete'); } catch (error) { spinner.stop(`${pc.red('✗')} Failed to list data sets`); log.line(''); log.line(`${pc.red('Error:')} ${error instanceof Error ? error.message : String(error)}`); log.flush(); cancel('Listing failed'); process.exitCode = 1; } finally { await cleanupSynapseService(); } } //# sourceMappingURL=run.js.map