filecoin-pin
Version:
Bridge IPFS content to Filecoin Onchain Cloud using familiar tools
96 lines • 4.02 kB
JavaScript
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