1
+ import YAML from 'yaml'
2
+ import { z } from 'zod'
1
3
import { Tab } from '@headlessui/react'
2
4
import * as fs from 'fs'
3
5
import type { GetServerSideProps , NextPage } from 'next'
@@ -13,27 +15,36 @@ import { StatusFilterProvider } from '../contexts/StatusFilterContext'
13
15
import { classNames } from '../utils/classNames'
14
16
import '../mappings/signers.json'
15
17
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
+
16
36
export const getServerSideProps : GetServerSideProps = async ( ) => {
17
37
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
+
37
48
const MULTISIG_SIGNER_MAPPING_PATH = `${ MAPPINGS_BASE_PATH } /signers.json`
38
49
const multisigSignerKeyToNameMapping = fs . existsSync (
39
50
MULTISIG_SIGNER_MAPPING_PATH
0 commit comments