11import type { Result } from 'nimiq-validator-trustscore/types'
22import type { ValidatorJSON } from './schemas'
3- import { bundledValidatorsByNetwork } from '../generated/validators-bundle.generated'
43import { validatorSchema } from './schemas'
5- import { storeValidator } from './validators'
4+ import { getUnlistedAddresses } from './validator-listing'
5+ import { getStoredValidatorsAddress , markValidatorsAsUnlisted , storeValidator } from './validators'
66
77interface ImportValidatorsBundledOptions {
88 shouldStore ?: boolean
@@ -13,25 +13,37 @@ export async function importValidatorsBundled(nimiqNetwork?: string, options: Im
1313 return [ false , 'Nimiq network is required' , undefined ]
1414
1515 const { shouldStore = true } = options
16- const bundledValidators = bundledValidatorsByNetwork [ nimiqNetwork as keyof typeof bundledValidatorsByNetwork ]
17- if ( ! bundledValidators || bundledValidators . length === 0 )
18- return [ false , `No bundled validators found for network: ${ nimiqNetwork } ` , undefined ]
16+ const storage = useStorage ( 'assets:public' )
17+ const keys = await storage . getKeys ( `validators/${ nimiqNetwork } ` )
1918
2019 const validators : ValidatorJSON [ ] = [ ]
21- for ( const data of bundledValidators ) {
20+ for ( const key of keys ) {
21+ if ( ! key . endsWith ( '.json' ) || key . endsWith ( '.example.json' ) )
22+ continue
23+
24+ const data = await storage . getItem ( key )
2225 const parsed = validatorSchema . safeParse ( data )
2326 if ( ! parsed . success )
24- return [ false , `Invalid bundled validator data: ${ parsed . error } ` , undefined ]
27+ return [ false , `Invalid validator data at ${ key } : ${ parsed . error } ` , undefined ]
2528 validators . push ( parsed . data )
2629 }
2730
2831 if ( ! shouldStore )
2932 return [ true , undefined , validators ]
3033
31- const results = await Promise . allSettled ( validators . map ( v => storeValidator ( v . address , v , { upsert : true } ) ) )
34+ if ( validators . length === 0 )
35+ return [ false , `No bundled validators found for network: ${ nimiqNetwork } ` , undefined ]
36+
37+ const bundledAddresses = new Set ( validators . map ( v => v . address ) )
38+ const storedAddresses = await getStoredValidatorsAddress ( )
39+ const unlistedAddresses = getUnlistedAddresses ( storedAddresses , bundledAddresses )
40+
41+ const results = await Promise . allSettled ( validators . map ( v => storeValidator ( v . address , v , { upsert : true , isListed : true } ) ) )
3242 const failures = results . filter ( r => r . status === 'rejected' )
3343 if ( failures . length > 0 )
3444 return [ false , `Errors importing validators: ${ failures . map ( ( f : any ) => f . reason ) . join ( ', ' ) } ` , undefined ]
3545
46+ await markValidatorsAsUnlisted ( unlistedAddresses )
47+
3648 return [ true , undefined , validators ]
3749}
0 commit comments