@@ -61,10 +61,11 @@ import {
6161} from "../../helpers/utils.js" ;
6262import { checkboxes } from "../../prompt.js" ;
6363import { ensureFluenceEnv } from "../../resolveFluenceEnv.js" ;
64+ import { getProtocolVersions } from "../chainValidators.js" ;
6465import {
6566 cidStringToCIDV1Struct ,
6667 peerIdHexStringToBase58String ,
67- peerIdToUint8Array ,
68+ peerIdBase58ToUint8Array ,
6869} from "../conversions.js" ;
6970import { ptParse } from "../currencies.js" ;
7071import { assertProviderIsRegistered } from "../providerInfo.js" ;
@@ -74,6 +75,7 @@ const OFFER_ID_PROPERTY = "offerId";
7475
7576export type OffersArgs = {
7677 [ OFFER_FLAG_NAME ] ?: string | undefined ;
78+ [ OFFER_IDS_FLAG_NAME ] ?: string | undefined ;
7779 force ?: boolean | undefined ;
7880} ;
7981
@@ -530,8 +532,110 @@ async function formatOfferInfo(
530532export async function resolveOffersFromProviderConfig (
531533 flags : OffersArgs ,
532534) : Promise < EnsureOfferConfig [ ] > {
535+ if (
536+ flags [ OFFER_FLAG_NAME ] !== undefined &&
537+ flags [ OFFER_IDS_FLAG_NAME ] !== undefined
538+ ) {
539+ commandObj . error (
540+ `You can't use both ${ color . yellow (
541+ `--${ OFFER_FLAG_NAME } ` ,
542+ ) } and ${ color . yellow (
543+ `--${ OFFER_IDS_FLAG_NAME } ` ,
544+ ) } flags at the same time. Please pick one of them`,
545+ ) ;
546+ }
547+
533548 const allOffers = await ensureOfferConfigs ( ) ;
534549
550+ if ( flags [ OFFER_IDS_FLAG_NAME ] !== undefined ) {
551+ const offerIdsFromFlags = commaSepStrToArr ( flags [ OFFER_IDS_FLAG_NAME ] ) ;
552+ const offerIdsFromFlagsSet = new Set ( offerIdsFromFlags ) ;
553+
554+ const offersDefinedLocally = allOffers . filter ( ( { offerId } ) => {
555+ return offerId !== undefined && offerIdsFromFlagsSet . has ( offerId ) ;
556+ } ) ;
557+
558+ const offersDefinedLocallySet = new Set (
559+ offersDefinedLocally . map ( ( { offerId } ) => {
560+ return offerId ;
561+ } ) ,
562+ ) ;
563+
564+ const offerIdsNotDefinedLocally = offerIdsFromFlags . filter ( ( offerId ) => {
565+ return ! offersDefinedLocallySet . has ( offerId ) ;
566+ } ) ;
567+
568+ const [ offerInfosErrors , offerInfos ] = await getOffersInfo (
569+ offerIdsNotDefinedLocally . map ( ( offerId ) => {
570+ return { offerId } ;
571+ } ) ,
572+ ) ;
573+
574+ if ( offerInfosErrors . length > 0 ) {
575+ commandObj . warn (
576+ `Wasn't able to get info about the following offers from indexer:\n\n${ offerInfosErrors
577+ . map ( ( { offerId } ) => {
578+ return offerId ;
579+ } )
580+ . join ( "\n" ) } `,
581+ ) ;
582+ }
583+
584+ const protocolVersionsFromChain = await getProtocolVersions ( ) ;
585+
586+ const offersNotDefinedLocally = await Promise . all (
587+ offerInfos . map ( async ( { offerId, offerIndexerInfo } ) => {
588+ return {
589+ offerName : `Offer ${ offerId } ` ,
590+ minPricePerCuPerEpochBigInt : await ptParse (
591+ offerIndexerInfo . pricePerEpoch ,
592+ ) ,
593+ effectorPrefixesAndHash : await Promise . all (
594+ offerIndexerInfo . effectors . map ( ( { cid } ) => {
595+ return cidStringToCIDV1Struct ( cid ) ;
596+ } ) ,
597+ ) ,
598+ effectors : offerIndexerInfo . effectors . map ( ( { cid } ) => {
599+ return cid ;
600+ } ) ,
601+ computePeersFromProviderConfig : await Promise . all (
602+ offerIndexerInfo . peers . map ( async ( { computeUnits, id } , i ) => {
603+ const peerIdBase58 = await peerIdHexStringToBase58String ( id ) ;
604+ return {
605+ name : `Peer #${ numToStr ( i ) } ` ,
606+ peerIdBase58,
607+ peerId : await peerIdBase58ToUint8Array ( peerIdBase58 ) ,
608+ unitIds : computeUnits . map ( ( { id } ) => {
609+ return new Uint8Array ( Buffer . from ( id . slice ( 2 ) , "hex" ) ) ;
610+ } ) ,
611+ owner : offerIndexerInfo . providerId ,
612+ } ;
613+ } ) ,
614+ ) ,
615+ offerId,
616+ minProtocolVersion : Number (
617+ protocolVersionsFromChain . minProtocolVersion ,
618+ ) ,
619+ maxProtocolVersion : Number (
620+ protocolVersionsFromChain . maxProtocolVersion ,
621+ ) ,
622+ } ;
623+ } ) ,
624+ ) ;
625+
626+ return offerIdsFromFlags . flatMap ( ( offerId ) => {
627+ const offer =
628+ offersDefinedLocally . find ( ( o ) => {
629+ return o . offerId === offerId ;
630+ } ) ??
631+ offersNotDefinedLocally . find ( ( o ) => {
632+ return o . offerId === offerId ;
633+ } ) ;
634+
635+ return offer === undefined ? [ ] : [ offer ] ;
636+ } ) ;
637+ }
638+
535639 if ( flags [ OFFER_FLAG_NAME ] === ALL_FLAG_VALUE ) {
536640 return allOffers ;
537641 }
@@ -630,7 +734,7 @@ async function ensureOfferConfigs() {
630734 return {
631735 name,
632736 peerIdBase58 : peerId ,
633- peerId : await peerIdToUint8Array ( peerId ) ,
737+ peerId : await peerIdBase58ToUint8Array ( peerId ) ,
634738 unitIds : times ( computeUnits ) . map ( ( ) => {
635739 return ethers . randomBytes ( 32 ) ;
636740 } ) ,
0 commit comments