1+ import YAML from 'yaml'
2+ import { z } from 'zod'
13import { Tab } from '@headlessui/react'
24import * as fs from 'fs'
35import type { GetServerSideProps , NextPage } from 'next'
@@ -13,27 +15,36 @@ import { StatusFilterProvider } from '../contexts/StatusFilterContext'
1315import { classNames } from '../utils/classNames'
1416import '../mappings/signers.json'
1517
18+ const keyToNameMappingSchema = z . array (
19+ z . object ( { key : z . string ( ) , name : z . string ( ) } )
20+ )
21+
22+ const readPublisherKeyToNameMapping = async ( filename : string ) => {
23+ let data = ''
24+ try {
25+ data = await fs . promises . readFile ( filename , 'utf8' )
26+ } catch {
27+ return { }
28+ }
29+
30+ const yaml = YAML . parse ( data )
31+
32+ const arr = await keyToNameMappingSchema . parseAsync ( yaml )
33+ return Object . fromEntries ( arr . map ( ( key , name ) => [ key , name ] ) )
34+ }
35+
1636export const getServerSideProps : GetServerSideProps = async ( ) => {
1737 const MAPPINGS_BASE_PATH = process . env . MAPPINGS_BASE_PATH || 'mappings'
18- const PUBLISHER_PYTHNET_MAPPING_PATH = `${ MAPPINGS_BASE_PATH } /publishers-pythnet.json`
19- const PUBLISHER_PYTHTEST_MAPPING_PATH = `${ MAPPINGS_BASE_PATH } /publishers-pythtest.json`
20-
21- const publisherKeyToNameMapping = {
22- pythnet : fs . existsSync ( PUBLISHER_PYTHNET_MAPPING_PATH )
23- ? JSON . parse (
24- (
25- await fs . promises . readFile ( PUBLISHER_PYTHNET_MAPPING_PATH )
26- ) . toString ( )
27- )
28- : { } ,
29- pythtest : fs . existsSync ( PUBLISHER_PYTHTEST_MAPPING_PATH )
30- ? JSON . parse (
31- (
32- await fs . promises . readFile ( PUBLISHER_PYTHTEST_MAPPING_PATH )
33- ) . toString ( )
34- )
35- : { } ,
36- }
38+ const PUBLISHER_PYTHNET_MAPPING_PATH = `${ MAPPINGS_BASE_PATH } /pythnet/publishers.yaml`
39+ const PUBLISHER_PYTHTEST_MAPPING_PATH = `${ MAPPINGS_BASE_PATH } /pythtest/publishers.yaml`
40+
41+ const [ pythnet , pythtest ] = await Promise . all (
42+ [ PUBLISHER_PYTHNET_MAPPING_PATH , PUBLISHER_PYTHTEST_MAPPING_PATH ] . map (
43+ ( path ) => readPublisherKeyToNameMapping ( path )
44+ )
45+ )
46+ const publisherKeyToNameMapping = { pythnet, pythtest }
47+
3748 const MULTISIG_SIGNER_MAPPING_PATH = `${ MAPPINGS_BASE_PATH } /signers.json`
3849 const multisigSignerKeyToNameMapping = fs . existsSync (
3950 MULTISIG_SIGNER_MAPPING_PATH
0 commit comments