1
1
import { type Network , NetworksRegistry } from '@pinax/graph-networks-registry'
2
2
3
3
// 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 = [
5
5
'arweave-mainnet' ,
6
6
'autonomys-taurus' ,
7
7
'expchain-testnet' ,
@@ -25,60 +25,83 @@ export const MONO_ICON_NETWORKS = [
25
25
'zksync-era-sepolia' ,
26
26
]
27
27
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
-
52
28
export async function getSupportedNetworks ( ) {
53
29
const registry = await NetworksRegistry . fromLatestVersion ( )
54
30
return registry . networks
55
31
. 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
+ ) {
62
42
return [ ]
63
43
}
64
44
return [
65
45
{
66
46
...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,
76
54
} ,
77
55
]
78
56
} )
79
57
. sort ( ( a , b ) => a . fullName . localeCompare ( b . fullName ) )
80
58
}
81
59
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
+
82
105
export type SupportedNetwork = Awaited < ReturnType < typeof getSupportedNetworks > > [ number ]
83
106
84
107
export async function getSupportedNetworksStaticProps ( ) {
0 commit comments