This repository was archived by the owner on May 11, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 188
Expand file tree
/
Copy pathschema.gql
More file actions
982 lines (915 loc) · 21.2 KB
/
Copy pathschema.gql
File metadata and controls
982 lines (915 loc) · 21.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
scalar Any
# Queries
type Query {
"Returns a single space by its ID (e.g. \"ens.eth\")"
space(id: String!): Space
"Returns a list of spaces with optional filtering, ordering, and pagination"
spaces(
first: Int! = 20
skip: Int! = 0
where: SpaceWhere
orderBy: String
orderDirection: OrderDirection
): [Space]
"Returns a ranked list of spaces with aggregated metrics"
ranking(first: Int! = 20, skip: Int! = 0, where: RankingWhere): RankingObject
"Returns a single proposal by its ID"
proposal(id: String!): Proposal
"Returns a list of proposals with optional filtering, ordering, and pagination"
proposals(
first: Int! = 20
skip: Int! = 0
where: ProposalWhere
orderBy: String
orderDirection: OrderDirection
): [Proposal]
"Returns a single vote by its ID"
vote(id: String!): Vote
"Returns a list of votes with optional filtering, ordering, and pagination"
votes(
first: Int! = 20
skip: Int! = 0
where: VoteWhere
orderBy: String
orderDirection: OrderDirection
): [Vote]
"Returns a list of address aliases with optional filtering, ordering, and pagination"
aliases(
first: Int! = 20
skip: Int! = 0
where: AliasWhere
orderBy: String
orderDirection: OrderDirection
): [Alias]
"Returns the roles and permissions for a given address"
roles(where: RolesWhere!): [Role]
"Returns a list of space followers with optional filtering, ordering, and pagination"
follows(
first: Int! = 20
skip: Int! = 0
where: FollowWhere
orderBy: String
orderDirection: OrderDirection
): [Follow]
"Returns a list of proposal subscriptions with optional filtering, ordering, and pagination"
subscriptions(
first: Int! = 20
skip: Int! = 0
where: SubscriptionWhere
orderBy: String
orderDirection: OrderDirection
): [Subscription]
"Returns a list of users with optional filtering, ordering, and pagination"
users(
first: Int! = 20
skip: Int! = 0
where: UsersWhere
orderBy: String
orderDirection: OrderDirection
): [User]
"Returns a list of delegate statements with optional filtering, ordering, and pagination"
statements(
first: Int! = 20
skip: Int! = 0
where: StatementsWhere
orderBy: String
orderDirection: OrderDirection
): [Statement]
"Returns a single user by their address"
user(id: String!): User
"Returns a single delegate statement by its ID"
statement(id: String!): Statement
"Returns all available space skins"
skins: [Item]
"Returns all supported networks"
networks: [Network]
"Returns all available proposal validations"
validations: [Item]
"Returns all available plugins"
plugins: [Item]
"Returns all available voting strategies"
strategies: [StrategyItem]
"Returns a single voting strategy by its ID"
strategy(id: String!): StrategyItem
"Calculates the voting power for a voter in a space, optionally for a specific proposal"
vp(voter: String!, space: String!, proposal: String): Vp
"Returns a list of signed messages (envelopes) with optional filtering, ordering, and pagination"
messages(
first: Int! = 20
skip: Int! = 0
where: MessageWhere
orderBy: String
orderDirection: OrderDirection
): [Message]
"Returns leaderboard entries for spaces with optional filtering, ordering, and pagination"
leaderboards(
first: Int! = 20
skip: Int! = 0
where: LeaderboardsWhere
orderBy: String
orderDirection: OrderDirection
): [Leaderboard]
"Returns all available configuration options"
options: [Option]
}
input SpaceWhere {
id: String
id_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
strategy: String
plugin: String
controller: String
verified: Boolean
turbo: Boolean
domain: String
search: String
}
input RankingWhere {
search: String
category: String
network: String
strategy: String
plugin: String
}
input MessageWhere {
id: String
id_in: [String]
mci: Int
mci_in: [Int]
mci_gt: Int
mci_gte: Int
mci_lt: Int
mci_lte: Int
address: String
address_in: [String]
timestamp: Int
timestamp_in: [Int]
timestamp_gt: Int
timestamp_gte: Int
timestamp_lt: Int
timestamp_lte: Int
space: String
space_in: [String]
type: String
type_in: [String]
}
"A signed message envelope submitted to the Snapshot sequencer"
type Message {
"Message counter index, used for ordering"
mci: Int
"Unique message identifier"
id: String
"IPFS content identifier"
ipfs: String
"Address of the message sender"
address: String
"Protocol version"
version: String
"Unix timestamp of when the message was submitted"
timestamp: Int
"Space ID this message belongs to"
space: String
"Message type (e.g. proposal, vote, delete-proposal)"
type: String
"Cryptographic signature"
sig: String
"Sequencer receipt"
receipt: String
}
input ProposalWhere {
id: String
id_in: [String]
ipfs: String
ipfs_in: [String]
space: String
space_in: [String]
author: String
author_in: [String]
network: String
network_in: [String]
title_contains: String
strategies_contains: String
plugins_contains: String
validation: String
type: String
type_in: [String]
app: String
app_not: String
app_in: [String]
app_not_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
updated: Int
updated_in: [Int]
updated_gt: Int
updated_gte: Int
updated_lt: Int
updated_lte: Int
start: Int
start_in: [Int]
start_gt: Int
start_gte: Int
start_lt: Int
start_lte: Int
end: Int
end_in: [Int]
end_gt: Int
end_gte: Int
end_lt: Int
end_lte: Int
scores_state: String
scores_state_in: [String]
labels_in: [String]
state: String
space_verified: Boolean
flagged: Boolean
votes: Int
votes_gt: Int
votes_gte: Int
votes_lt: Int
votes_lte: Int
scores_total_value: Float
scores_total_value_in: [Float]
scores_total_value_gt: Float
scores_total_value_gte: Float
scores_total_value_lt: Float
scores_total_value_lte: Float
}
input VoteWhere {
id: String
id_in: [String]
ipfs: String
ipfs_in: [String]
space: String
space_in: [String]
voter: String
voter_in: [String]
proposal: String
proposal_in: [String]
reason: String
reason_not: String
reason_in: [String]
reason_not_in: [String]
app: String
app_not: String
app_in: [String]
app_not_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
vp: Float
vp_in: [Float]
vp_gt: Float
vp_gte: Float
vp_lt: Float
vp_lte: Float
vp_state: String
vp_state_in: [String]
}
input AliasWhere {
id: String
id_in: [String]
ipfs: String
ipfs_in: [String]
address: String
address_in: [String]
alias: String
alias_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
}
input RolesWhere {
address: String!
}
input FollowWhere {
id: String
id_in: [String]
ipfs: String
ipfs_in: [String]
follower: String
follower_in: [String]
space: String
space_in: [String]
network: String
network_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
}
input SubscriptionWhere {
id: String
id_in: [String]
ipfs: String
ipfs_in: [String]
address: String
address_in: [String]
space: String
space_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
}
input UsersWhere {
id: String
id_in: [String]
ipfs: String
ipfs_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
}
input StatementsWhere {
id: String
id_in: [String]
ipfs: String
ipfs_in: [String]
space: String
space_in: [String]
network: String
delegate: String
delegate_in: [String]
created: Int
created_in: [Int]
created_gt: Int
created_gte: Int
created_lt: Int
created_lte: Int
source: String
source_in: [String]
}
input LeaderboardsWhere {
space: String
space_in: [String]
space_not: String
space_not_in: [String]
user: String
user_in: [String]
user_not: String
user_not_in: [String]
proposal_count: Int
proposal_count_in: [Int]
proposal_count_not: Int
proposal_count_not_in: [Int]
proposal_count_gt: [Int]
proposal_count_gte: [Int]
proposal_count_lt: [Int]
proposal_count_lte: [Int]
vote_count: Int
vote_count_in: [Int]
vote_count_not: Int
vote_count_not_in: [Int]
vote_count_gt: [Int]
vote_count_gte: [Int]
vote_count_lt: [Int]
vote_count_lte: [Int]
}
enum OrderDirection {
asc
desc
}
# Types
"A Snapshot space (DAO or community) with its configuration and metadata"
type Space {
"Unique identifier for the space (e.g. \"ens.eth\")"
id: String!
"Display name of the space"
name: String
"Whether the space is private"
private: Boolean
"Description of the space"
about: String
"URL of the space avatar image"
avatar: String
"URL of the space cover image"
cover: String
"URL to the space terms of service"
terms: String
"Physical location of the organization"
location: String
"Website URL"
website: String
"Twitter/X handle"
twitter: String
"GitHub organization or user"
github: String
"Farcaster handle"
farcaster: String
"CoinGecko identifier"
coingecko: String
"Contact email"
email: String
"URL to the discussions forum"
discussions: String
"Discourse forum category ID"
discourseCategory: Int
"Network ID the space primarily operates on"
network: String
"Token symbol used in the space"
symbol: String
"Custom skin/theme ID"
skin: String
"Custom skin settings"
skinSettings: SkinSettings
"Custom domain for the space"
domain: String
"Voting strategies used to calculate voting power"
strategies: [Strategy]
"List of admin addresses"
admins: [String]
"List of member addresses"
members: [String]
"List of moderator addresses"
moderators: [String]
"Proposal filters configuration"
filters: SpaceFilters
"Enabled plugins configuration"
plugins: Any
"Voting configuration"
voting: SpaceVoting
"Space categories"
categories: [String]
"Proposal validation strategy"
validation: Validation
"Vote validation strategy"
voteValidation: Validation
"Delegation portal configuration"
delegationPortal: DelegationPortal
"Treasury addresses managed by the space"
treasuries: [Treasury]
"Labels that can be applied to proposals"
labels: [Label]
"Number of currently active proposals"
activeProposals: Int
"Total number of proposals"
proposalsCount: Int
"Number of proposals created in the last 24 hours"
proposalsCount1d: Int
"Number of proposals created in the last 7 days"
proposalsCount7d: Int
"Number of proposals created in the last 30 days"
proposalsCount30d: Int
"Total number of followers"
followersCount: Int
"Number of new followers in the last 7 days"
followersCount7d: Int
"Total number of votes cast"
votesCount: Int
"Number of votes cast in the last 7 days"
votesCount7d: Int
"Parent space (for sub-spaces)"
parent: Space
"Child sub-spaces"
children: [Space]
"Voting guidelines link"
guidelines: String
"Proposal template"
template: String
"Whether the space is verified"
verified: Boolean
"Whether the space has been flagged"
flagged: Boolean
"Flag reason code"
flagCode: Int
"Whether the space is hibernated (inactive)"
hibernated: Boolean
"Whether turbo mode is enabled"
turbo: Boolean
"Unix timestamp when turbo mode expires"
turboExpiration: Int
"Ranking score"
rank: Float
"Boost settings"
boost: BoostSettings
"Unix timestamp of when the space was created"
created: Int!
}
"Ranked list of spaces with aggregated metrics"
type RankingObject {
"List of ranked spaces"
items: [Space]
"Aggregated metrics for the ranking query"
metrics: Metrics
}
"Aggregated metrics for ranking queries"
type Metrics {
"Total number of spaces matching the query"
total: Int
"Breakdown of spaces by category"
categories: Any
}
"Proposal filtering configuration for a space"
type SpaceFilters {
"Minimum score required to create a proposal"
minScore: Float
"Whether only members can create proposals"
onlyMembers: Boolean
}
"Voting configuration for a space"
type SpaceVoting {
"Delay in seconds before voting starts after proposal creation"
delay: Int
"Voting period duration in seconds"
period: Int
"Default voting type (e.g. single-choice, weighted)"
type: String
"Quorum threshold"
quorum: Float
"How quorum is calculated"
quorumType: String!
"Whether votes are hidden until the voting period ends"
blind: Boolean
"Whether the abstain option is hidden"
hideAbstain: Boolean
"Privacy mode for votes (e.g. shutter)"
privacy: String
"Whether aliased voting is enabled"
aliased: Boolean
}
"proposal created on a space"
type Proposal {
"Unique proposal identifier"
id: String!
"IPFS content identifier"
ipfs: String
"Address of the proposal author"
author: String!
"Unix timestamp of when the proposal was created"
created: Int!
"Unix timestamp of the last update"
updated: Int
"The space this proposal belongs to"
space: Space
"Network ID"
network: String!
"Token symbol"
symbol: String!
"Voting type (e.g. single-choice, approval, quadratic, ranked-choice, weighted, basic)"
type: String
"Voting strategies used for this proposal"
strategies: [Strategy]!
"Proposal validation strategy"
validation: Validation
"Enabled plugins"
plugins: Any!
"Proposal title"
title: String!
"Proposal body in Markdown"
body: String
"URL to the discussion thread"
discussion: String!
"List of voting choices"
choices: [String]!
"Labels applied to this proposal"
labels: [String]!
"Unix timestamp of when voting starts"
start: Int!
"Unix timestamp of when voting ends"
end: Int!
"Quorum threshold"
quorum: Float!
"How quorum is calculated"
quorumType: String!
"Privacy mode for votes"
privacy: String
"Block number snapshot for voting power calculation"
snapshot: Int
"Current state of the proposal (active, pending, closed)"
state: String
"Direct link to the proposal"
link: String
"Application that created the proposal"
app: String
"Vote scores per choice"
scores: [Float]
"Vote scores broken down by strategy"
scores_by_strategy: Any
"Scoring state (e.g. final, pending)"
scores_state: String
"Total score across all choices"
scores_total: Float
"Unix timestamp of when scores were last updated"
scores_updated: Int
"Total monetary value of scores"
scores_total_value: Float
"Voting power value breakdown by strategy"
vp_value_by_strategy: Any
"Total number of votes"
votes: Int
"Whether the proposal has been flagged"
flagged: Boolean
"Flag reason code"
flagCode: Int
}
"A voting strategy used to calculate voting power"
type Strategy {
"Strategy identifier"
name: String!
"Network ID this strategy operates on"
network: String
"Strategy-specific parameters"
params: Any
}
"A validation strategy for proposals or votes"
type Validation {
"Validation identifier"
name: String!
"Validation-specific parameters"
params: Any
}
"Delegation portal configuration"
type DelegationPortal {
"Type of delegation"
delegationType: String!
"Delegation contract address"
delegationContract: String!
"Network of the delegation contract"
delegationNetwork: String!
"API endpoint for delegation data"
delegationApi: String!
}
"A vote cast on a proposal"
type Vote {
"Unique vote identifier"
id: String!
"IPFS content identifier"
ipfs: String
"Address of the voter"
voter: String!
"Unix timestamp of when the vote was cast"
created: Int!
"The space this vote was cast in"
space: Space!
"The proposal this vote was cast on"
proposal: Proposal
"The voter's choice (format depends on voting type)"
choice: Any!
"Additional vote metadata"
metadata: Any
"Reason provided by the voter"
reason: String
"Application used to cast the vote"
app: String
"Voting power of the voter"
vp: Float
"Voting power broken down by strategy"
vp_by_strategy: [Float]
"Voting power state (e.g. final, pending)"
vp_state: String
"Monetary value of the voting power"
vp_value: Float
}
"An address alias mapping"
type Alias {
"Unique alias identifier"
id: String!
"IPFS content identifier"
ipfs: String
"Primary address"
address: String!
"Aliased address"
alias: String!
"Unix timestamp of when the alias was created"
created: Int!
}
"Role and permissions for an address in a space"
type Role {
"Space ID"
space: String
"List of permissions granted"
permissions: [String]
}
"A follow relationship between an address and a space"
type Follow {
"Unique follow identifier"
id: String!
"IPFS content identifier"
ipfs: String
"Address of the follower"
follower: String!
"The space being followed"
space: Space!
"Network ID"
network: String!
"Unix timestamp of when the follow was created"
created: Int!
}
"A subscription to a space's proposals"
type Subscription {
"Unique subscription identifier"
id: String!
"IPFS content identifier"
ipfs: String
"Address of the subscriber"
address: String!
"The space being subscribed to"
space: Space!
"Unix timestamp of when the subscription was created"
created: Int!
}
"A Snapshot user profile"
type User {
"User address"
id: String!
"IPFS content identifier"
ipfs: String
"Display name"
name: String
"Bio or description"
about: String
"Avatar image URL"
avatar: String
"Cover image URL"
cover: String
"GitHub handle"
github: String
"Twitter/X handle"
twitter: String
"Lens handle"
lens: String
"Farcaster handle"
farcaster: String
"Unix timestamp of when the profile was created"
created: Int
"Total number of votes cast"
votesCount: Int
"Total number of proposals created"
proposalsCount: Int
"Unix timestamp of the user's most recent vote"
lastVote: Int
}
"A delegate statement"
type Statement {
"Unique statement identifier"
id: String!
"IPFS content identifier"
ipfs: String!
"Space ID this statement belongs to"
space: String!
"Network ID"
network: String
"Short bio of the delegate"
about: String
"Delegate address"
delegate: String
"Full delegate statement text"
statement: String
"Discourse forum username"
discourse: String
"Statement status"
status: String
"Source of the statement"
source: String
"Unix timestamp of when the statement was created"
created: Int!
"Unix timestamp of the last update"
updated: Int!
}
"A reusable metadata item (skin, validation, plugin)"
type Item {
"Item identifier"
id: String!
"Number of spaces using this item"
spacesCount: Int
}
"A voting strategy with full metadata"
type StrategyItem {
"Strategy identifier"
id: String!
"Display name"
name: String
"Strategy author"
author: String
"Strategy version"
version: String
"JSON schema for strategy parameters"
schema: Any
"Example configurations"
examples: [Any]
"Description of the strategy"
about: String
"Number of spaces using this strategy"
spacesCount: Int
"Number of verified spaces using this strategy"
verifiedSpacesCount: Int
"Whether voting power depend on other addresses or not"
override: Boolean
"Whether the strategy is disabled"
disabled: Boolean
}
"A treasury managed by a space"
type Treasury {
"Treasury display name"
name: String
"Treasury wallet address"
address: String
"Network ID the treasury is on"
network: String
}
"A label that can be applied to proposals"
type Label {
"Label identifier"
id: String
"Label display name"
name: String
"Label description"
description: String
"Hex color code"
color: String
}
"Boost settings for a space"
type BoostSettings {
"Whether boosting is enabled"
enabled: Boolean
"Whether bribe-based boosting is enabled"
bribeEnabled: Boolean
}
"Voting power information"
type Vp {
"Total voting power"
vp: Float
"Voting power broken down by strategy"
vp_by_strategy: [Float]
"Voting power state (e.g. final, pending)"
vp_state: String
}
"Leaderboard entry for a user in a space"
type Leaderboard {
"Space ID"
space: String
"User address"
user: String
"Number of proposals created"
proposalsCount: Int
"Number of votes cast"
votesCount: Int
"Unix timestamp of the user's most recent vote"
lastVote: Int
"Monetary value of the user's voting power"
vpValue: Float
}
"A configuration option"
type Option {
"Option name"
name: String
"Option value"
value: String
}
"Custom theme settings for a space skin"
type SkinSettings {
"Background color"
bg_color: String
"Link color"
link_color: String
"Text color"
text_color: String
"Content area color"
content_color: String
"Border color"
border_color: String
"Heading color"
heading_color: String
"Header color"
header_color: String
"Primary accent color"
primary_color: String
"Theme name (light or dark)"
theme: String
"Custom logo URL"
logo: String
}
"A blockchain network"
type Network {
"Network chain ID"
id: String!
"Network display name"
name: String!
"Whether this is a premium network"
premium: Boolean
"Number of spaces using this network"
spacesCount: Int
}