11import { type Network , NetworksRegistry } from '@pinax/graph-networks-registry'
22
33// Networks that should use the "mono" icon variant (TODO: add this feature to web3icons?)
4- export const MONO_ICON_NETWORKS = [
4+ const MONO_ICON_NETWORKS = [
55 'arweave-mainnet' ,
66 'autonomys-taurus' ,
77 'expchain-testnet' ,
@@ -25,60 +25,83 @@ export const MONO_ICON_NETWORKS = [
2525 'zksync-era-sepolia' ,
2626]
2727
28- export const getIconVariant = ( networkId : string ) : 'mono' | 'branded' => {
29- return MONO_ICON_NETWORKS . includes ( networkId ) ? 'mono' : 'branded'
30- }
31-
32- // Support level for services
33- export const getSubgraphsSupportLevel = ( network : Network ) => {
34- const hasSubgraphs = Boolean ( network . services . subgraphs ?. length || network . services . sps ?. length )
35- if ( ! hasSubgraphs ) return 'none'
36- if ( network . issuanceRewards ) return 'full'
37- return 'basic'
38- }
39- export const getSubstreamsSupportLevel = ( network : Network ) => {
40- const substreamCount = network . services . substreams ?. length || 0
41- if ( substreamCount === 0 ) return 'none'
42- if ( substreamCount >= 2 ) return 'full'
43- return 'basic'
44- }
45- export const getFirehoseSupportLevel = ( network : Network ) => {
46- const firehoseCount = network . services . firehose ?. length || 0
47- if ( firehoseCount === 0 ) return 'none'
48- if ( firehoseCount >= 2 ) return 'full'
49- return 'basic'
50- }
51-
5228export async function getSupportedNetworks ( ) {
5329 const registry = await NetworksRegistry . fromLatestVersion ( )
5430 return registry . networks
5531 . flatMap ( ( network ) => {
56- const evm = network . caip2Id . startsWith ( 'eip155:' )
57- const subgraphs = Boolean ( network . services . subgraphs ?. length )
58- const substreams = Boolean ( network . services . substreams ?. length )
59- const firehose = Boolean ( network . services . firehose ?. length )
60- const tokenApi = Boolean ( network . services . tokenApi ?. length )
61- if ( ! subgraphs && ! substreams && ! firehose && ! tokenApi ) {
32+ const [ subgraphsSupportLevel , subgraphsProvider ] = getSubgraphsSupportLevelAndProvider ( network )
33+ const substreamsSupportLevel = getSubstreamsSupportLevel ( network )
34+ const firehoseSupportLevel = getFirehoseSupportLevel ( network )
35+ const tokenApiSupportLevel = getTokenApiSupportLevel ( network )
36+ if (
37+ subgraphsSupportLevel === 'none' &&
38+ substreamsSupportLevel === 'none' &&
39+ firehoseSupportLevel === 'none' &&
40+ tokenApiSupportLevel === 'none'
41+ ) {
6242 return [ ]
6343 }
6444 return [
6545 {
6646 ...network ,
67- evm,
68- subgraphs,
69- substreams,
70- firehose,
71- tokenApi,
72- rawNetwork : network ,
73- subgraphsSupportLevel : getSubgraphsSupportLevel ( network ) ,
74- substreamsSupportLevel : getSubstreamsSupportLevel ( network ) ,
75- firehoseSupportLevel : getFirehoseSupportLevel ( network ) ,
47+ evm : isEvm ( network ) ,
48+ iconVariant : getIconVariant ( network ) ,
49+ subgraphsSupportLevel,
50+ subgraphsProvider,
51+ substreamsSupportLevel,
52+ firehoseSupportLevel,
53+ tokenApiSupportLevel,
7654 } ,
7755 ]
7856 } )
7957 . sort ( ( a , b ) => a . fullName . localeCompare ( b . fullName ) )
8058}
8159
60+ function isEvm ( network : Network ) {
61+ return network . caip2Id . startsWith ( 'eip155:' )
62+ }
63+
64+ function getIconVariant ( network : Network ) : 'mono' | 'branded' {
65+ return MONO_ICON_NETWORKS . includes ( network . id ) ? 'mono' : 'branded'
66+ }
67+
68+ function getSubgraphsSupportLevelAndProvider ( network : Network ) : [ 'none' | 'basic' | 'full' , string | null ] {
69+ const providers = [ ...new Set ( [ ...( network . services . subgraphs || [ ] ) , ...( network . services . sps || [ ] ) ] ) ]
70+ if ( providers . length > 0 ) {
71+ let provider = providers [ 0 ] !
72+ if ( providers . some ( ( provider ) => / ^ ( ( h t t p s ? : ) ? \/ \/ ) ? a p i \. s t u d i o \. t h e g r a p h \. c o m \/ / . test ( provider ) ) ) {
73+ provider = 'Subgraph Studio'
74+ } else if ( providers . some ( ( provider ) => / ^ ( ( h t t p s ? : ) ? \/ \/ ) ? ( w w w \. ) ? s t r e a m i n g f a s t \. i o \/ / . test ( provider ) ) ) {
75+ provider = 'StreamingFast'
76+ }
77+ if ( network . issuanceRewards ) {
78+ return [ 'full' , provider ]
79+ }
80+ return [ 'basic' , provider ]
81+ }
82+ return [ 'none' , null ]
83+ }
84+
85+ function getSubstreamsSupportLevel ( network : Network ) : 'none' | 'basic' | 'full' {
86+ const providerCount = network . services . substreams ?. length || 0
87+ if ( providerCount >= 2 ) return 'full'
88+ if ( providerCount === 1 ) return 'basic'
89+ return 'none'
90+ }
91+
92+ function getFirehoseSupportLevel ( network : Network ) : 'none' | 'basic' | 'full' {
93+ const providerCount = network . services . firehose ?. length || 0
94+ if ( providerCount >= 2 ) return 'full'
95+ if ( providerCount === 1 ) return 'basic'
96+ return 'none'
97+ }
98+
99+ function getTokenApiSupportLevel ( network : Network ) : 'none' | 'full' {
100+ const providerCount = network . services . tokenApi ?. length || 0
101+ if ( providerCount >= 1 ) return 'full'
102+ return 'none'
103+ }
104+
82105export type SupportedNetwork = Awaited < ReturnType < typeof getSupportedNetworks > > [ number ]
83106
84107export async function getSupportedNetworksStaticProps ( ) {
0 commit comments