@symbiosis-lab/moss-plugin-matters 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +18 -0
  3. package/assets/icon.svg +1 -0
  4. package/assets/manifest.json +36 -0
  5. package/codegen.ts +26 -0
  6. package/e2e/moss-cli.test.ts +338 -0
  7. package/features/api/fetch-articles.feature +39 -0
  8. package/features/auth/wallet-auth.feature +27 -0
  9. package/features/download/retry-logic.feature +36 -0
  10. package/features/download/self-correcting.feature +83 -0
  11. package/features/download/worker-pool.feature +29 -0
  12. package/features/social/fetch-social-data.feature +40 -0
  13. package/features/steps/api.steps.ts +180 -0
  14. package/features/steps/download.steps.ts +423 -0
  15. package/features/steps/incremental-sync.steps.ts +105 -0
  16. package/features/steps/self-correcting.steps.ts +575 -0
  17. package/features/steps/social.steps.ts +257 -0
  18. package/features/steps/syndication.steps.ts +264 -0
  19. package/features/steps/wallet-auth.steps.ts +185 -0
  20. package/features/sync/article-sync.feature +49 -0
  21. package/features/sync/homepage-grid.feature +43 -0
  22. package/features/sync/incremental-sync.feature +28 -0
  23. package/features/syndication/create-draft.feature +35 -0
  24. package/package.json +58 -0
  25. package/src/__generated__/schema.graphql +4289 -0
  26. package/src/__generated__/types.ts +5355 -0
  27. package/src/__tests__/api.test.ts +678 -0
  28. package/src/__tests__/auth-route.test.ts +38 -0
  29. package/src/__tests__/auth-routing.test.ts +462 -0
  30. package/src/__tests__/auto-detect.test.ts +412 -0
  31. package/src/__tests__/binding-guard.test.ts +256 -0
  32. package/src/__tests__/config.test.ts +212 -0
  33. package/src/__tests__/converter.test.ts +289 -0
  34. package/src/__tests__/credential.test.ts +332 -0
  35. package/src/__tests__/domain.test.ts +341 -0
  36. package/src/__tests__/downloader.test.ts +679 -0
  37. package/src/__tests__/folder-detection.test.ts +289 -0
  38. package/src/__tests__/force-fresh-login.test.ts +236 -0
  39. package/src/__tests__/main.test.ts +2437 -0
  40. package/src/__tests__/progress.test.ts +93 -0
  41. package/src/__tests__/session.test.ts +375 -0
  42. package/src/__tests__/social-integration.test.ts +386 -0
  43. package/src/__tests__/social-sync-logic.test.ts +107 -0
  44. package/src/__tests__/social.test.ts +788 -0
  45. package/src/__tests__/sync.test.ts +1273 -0
  46. package/src/__tests__/syndication-toast-law.test.ts +649 -0
  47. package/src/__tests__/syndication.test.ts +125 -0
  48. package/src/__tests__/test-profile-escape.test.ts +209 -0
  49. package/src/__tests__/url-detect.test.ts +79 -0
  50. package/src/__tests__/utils.test.ts +226 -0
  51. package/src/api.ts +1366 -0
  52. package/src/auth-route.ts +38 -0
  53. package/src/config.ts +80 -0
  54. package/src/converter.ts +305 -0
  55. package/src/credential.ts +329 -0
  56. package/src/domain.ts +183 -0
  57. package/src/downloader.ts +761 -0
  58. package/src/main.ts +2092 -0
  59. package/src/progress.ts +89 -0
  60. package/src/queries/user.graphql +85 -0
  61. package/src/queries/viewer.graphql +104 -0
  62. package/src/social.ts +413 -0
  63. package/src/sync.ts +818 -0
  64. package/src/types.ts +477 -0
  65. package/src/url-detect.ts +49 -0
  66. package/src/utils.ts +305 -0
  67. package/test-fixtures/syndication-test-site/input/index.md +8 -0
  68. package/test-fixtures/syndication-test-site/input/posts/rich-test-article.md +90 -0
  69. package/test-helpers/TEST_ACCOUNT.md +151 -0
  70. package/test-helpers/api-client.ts +252 -0
  71. package/test-helpers/fixtures/articles.ts +147 -0
  72. package/test-helpers/wallet-auth.ts +305 -0
  73. package/test-setup/e2e.ts +93 -0
  74. package/tsconfig.json +23 -0
  75. package/vitest.config.ts +39 -0
@@ -0,0 +1,4289 @@
1
+ directive @auth(group: String, mode: String!) on FIELD_DEFINITION
2
+
3
+ directive @cacheControl(inheritMaxAge: Boolean, maxAge: Int, scope: CacheControlScope) on FIELD_DEFINITION | INTERFACE | OBJECT | UNION
4
+
5
+ directive @complexity(multipliers: [String!], value: Int!) on FIELD_DEFINITION
6
+
7
+ directive @constraint(contains: String, endsWith: String, exclusiveMax: Float, exclusiveMin: Float, format: String, max: Float, maxItems: Int, maxLength: Int, min: Float, minItems: Int, minLength: Int, multipleOf: Float, notContains: String, pattern: String, startsWith: String, uniqueTypeName: String) on ARGUMENT_DEFINITION | FIELD_DEFINITION | INPUT_FIELD_DEFINITION
8
+
9
+ directive @logCache(identifier: String = "id", type: String!) on FIELD_DEFINITION
10
+
11
+ directive @objectCache(maxAge: Int = 1000) on FIELD_DEFINITION
12
+
13
+ directive @privateCache(strict: Boolean! = false) on FIELD_DEFINITION
14
+
15
+ directive @purgeCache(identifier: String = "id", type: String!) on FIELD_DEFINITION
16
+
17
+ """Rate limit within a given period of time, in seconds"""
18
+ directive @rateLimit(ip: Boolean, limit: Int!, period: Int!) on FIELD_DEFINITION
19
+
20
+ type AdStatus {
21
+ """
22
+ Whether this article is labeled as ad by human, null for not labeled yet.
23
+ """
24
+ isAd: Boolean
25
+ }
26
+
27
+ input AddCollectionsArticlesInput {
28
+ articles: [ID!]!
29
+ collections: [ID!]!
30
+ }
31
+
32
+ input AddCreditInput {
33
+ amount: amount_Float_NotNull_exclusiveMin_0!
34
+ }
35
+
36
+ type AddCreditResult {
37
+ """The client secret of this PaymentIntent."""
38
+ client_secret: String!
39
+ transaction: Transaction!
40
+ }
41
+
42
+ input AddCurationChannelArticlesInput {
43
+ articles: [ID!]!
44
+ channel: ID!
45
+ }
46
+
47
+ type Announcement {
48
+ channels: [AnnouncementChannel!]!
49
+ content(input: TranslationArgs): String
50
+ cover: String
51
+ createdAt: DateTime!
52
+ expiredAt: DateTime
53
+ id: ID!
54
+ link(input: TranslationArgs): String
55
+ order: Int!
56
+ title(input: TranslationArgs): String
57
+ translations: [TranslatedAnnouncement!] @deprecated(reason: "Use title, content, link with TranslationArgs instead")
58
+ type: AnnouncementType!
59
+ updatedAt: DateTime!
60
+ visible: Boolean!
61
+ }
62
+
63
+ type AnnouncementChannel {
64
+ channel: Channel!
65
+ order: Int!
66
+ visible: Boolean!
67
+ }
68
+
69
+ input AnnouncementChannelInput {
70
+ channel: ID!
71
+ order: Int!
72
+ visible: Boolean!
73
+ }
74
+
75
+ enum AnnouncementType {
76
+ community
77
+ product
78
+ seminar
79
+ }
80
+
81
+ input AnnouncementsInput {
82
+ channel: IdentityInput
83
+ id: ID
84
+ visible: Boolean
85
+ }
86
+
87
+ input ApplyCampaignInput {
88
+ id: ID!
89
+ }
90
+
91
+ input AppreciateArticleInput {
92
+ amount: amount_Int_NotNull_min_1!
93
+ id: ID!
94
+ superLike: Boolean
95
+ token: String
96
+ }
97
+
98
+ type Appreciation {
99
+ amount: Int!
100
+ content: String!
101
+
102
+ """Timestamp of appreciation."""
103
+ createdAt: DateTime!
104
+ purpose: AppreciationPurpose!
105
+
106
+ """Recipient of appreciation."""
107
+ recipient: User!
108
+
109
+ """Sender of appreciation."""
110
+ sender: User
111
+
112
+ """Object that appreciation is meant for."""
113
+ target: Article
114
+ }
115
+
116
+ type AppreciationConnection implements Connection {
117
+ edges: [AppreciationEdge!]
118
+ pageInfo: PageInfo!
119
+ totalCount: Int!
120
+ }
121
+
122
+ type AppreciationEdge {
123
+ cursor: String!
124
+ node: Appreciation!
125
+ }
126
+
127
+ enum AppreciationPurpose {
128
+ appreciate
129
+ appreciateComment
130
+ appreciateSubsidy
131
+ firstPost
132
+ invitationAccepted
133
+ joinByInvitation
134
+ joinByTask
135
+ systemSubsidy
136
+ }
137
+
138
+ """
139
+ This type contains metadata, content, hash and related data of an article. If you
140
+ want information about article's comments. Please check Comment type.
141
+ """
142
+ type Article implements Node & PinnableWork {
143
+ """Access related fields on circle"""
144
+ access: ArticleAccess!
145
+
146
+ """Number represents how many times per user can appreciate this article."""
147
+ appreciateLeft: Int!
148
+
149
+ """Limit the nuhmber of appreciate per user."""
150
+ appreciateLimit: Int!
151
+
152
+ """Appreciations history of this article."""
153
+ appreciationsReceived(input: ConnectionArgs!): AppreciationConnection!
154
+
155
+ """Total number of appreciations recieved of this article."""
156
+ appreciationsReceivedTotal: Int!
157
+
158
+ """
159
+ List of assets are belonged to this article (Only the author can access currently).
160
+ """
161
+ assets: [Asset!]!
162
+
163
+ """Author of this article."""
164
+ author: User!
165
+
166
+ """Available translation languages."""
167
+ availableTranslations: [UserLanguage!]
168
+
169
+ """The number of users who bookmarked this article."""
170
+ bookmarkCount: Int!
171
+ bookmarked: Boolean!
172
+
173
+ """Associated campaigns"""
174
+ campaigns: [ArticleCampaign!]!
175
+
176
+ """Whether readers can comment"""
177
+ canComment: Boolean!
178
+
179
+ """This value determines if current viewer can SuperLike or not."""
180
+ canSuperLike: Boolean!
181
+
182
+ """Classifications status"""
183
+ classification: ArticleClassification!
184
+
185
+ """List of articles added into this article's connections."""
186
+ collection(input: ConnectionArgs!): ArticleConnection! @deprecated(reason: "Use connections instead")
187
+
188
+ """Collections of this article."""
189
+ collections(input: ConnectionArgs!): CollectionConnection!
190
+
191
+ """The counting number of comments."""
192
+ commentCount: Int!
193
+
194
+ """List of comments of this article."""
195
+ comments(input: CommentsInput!): CommentConnection!
196
+
197
+ """List of articles which added this article into their connections."""
198
+ connectedBy(input: ConnectionArgs!): ArticleConnection!
199
+ connections(input: ConnectionArgs!): ArticleConnection!
200
+
201
+ """Content (HTML) of this article."""
202
+ content: String!
203
+
204
+ """Different foramts of content."""
205
+ contents: ArticleContents!
206
+
207
+ """Article cover's link, set by author"""
208
+ cover: String
209
+
210
+ """Time of this article was created."""
211
+ createdAt: DateTime!
212
+
213
+ """IPFS hash of this article."""
214
+ dataHash: String!
215
+
216
+ """Cover link that is displayed on the article page"""
217
+ displayCover: String
218
+
219
+ """Whether current viewer has donated to this article"""
220
+ donated: Boolean!
221
+
222
+ """Total number of donation recieved of this article."""
223
+ donationCount: Int!
224
+
225
+ """Donations of this article, grouped by sender"""
226
+ donations(input: ConnectionArgs!): ArticleDonationConnection!
227
+
228
+ """List of featured comments of this article."""
229
+ featuredComments(input: FeaturedCommentsInput!): CommentConnection!
230
+
231
+ """This value determines if current viewer has appreciated or not."""
232
+ hasAppreciate: Boolean!
233
+
234
+ """Unique ID of this article"""
235
+ id: ID!
236
+
237
+ """Whether the first line of paragraph should be indented"""
238
+ indentFirstLine: Boolean!
239
+
240
+ """The iscnId if published to ISCN"""
241
+ iscnId: String
242
+
243
+ """Original language of content"""
244
+ language: String
245
+
246
+ """License Type"""
247
+ license: ArticleLicenseType!
248
+
249
+ """Media hash, composed of cid encoding, of this article."""
250
+ mediaHash: String!
251
+
252
+ """Whether this article is noindex"""
253
+ noindex: Boolean!
254
+ oss: ArticleOSS!
255
+
256
+ """The number determines how many comments can be set as pinned comment."""
257
+ pinCommentLeft: Int!
258
+
259
+ """The number determines how many pinned comments can be set."""
260
+ pinCommentLimit: Int!
261
+
262
+ """
263
+ This value determines if this article is an author selected article or not.
264
+ """
265
+ pinned: Boolean!
266
+
267
+ """List of pinned comments."""
268
+ pinnedComments: [Comment!]
269
+
270
+ """Cumulative reading time in seconds"""
271
+ readTime: Float!
272
+
273
+ """Total number of readers of this article."""
274
+ readerCount: Int!
275
+
276
+ """Related articles to this article."""
277
+ relatedArticles(input: ConnectionArgs!): ArticleConnection!
278
+
279
+ """Donation-related articles to this article."""
280
+ relatedDonationArticles(input: RelatedDonationArticlesInput!): ArticleConnection!
281
+ remark: String
282
+
283
+ """Creator message after support"""
284
+ replyToDonator: String
285
+
286
+ """Creator message asking for support"""
287
+ requestForDonation: String
288
+
289
+ """The counting number of this article."""
290
+ responseCount: Int!
291
+
292
+ """List of responses of a article."""
293
+ responses(input: ResponsesInput!): ResponseConnection!
294
+
295
+ """Time of this article was revised."""
296
+ revisedAt: DateTime
297
+
298
+ """Revision Count"""
299
+ revisionCount: Int!
300
+
301
+ """Whether content is marked as sensitive by admin"""
302
+ sensitiveByAdmin: Boolean!
303
+
304
+ """whether content is marked as sensitive by author"""
305
+ sensitiveByAuthor: Boolean!
306
+
307
+ """Short hash for shorter url addressing"""
308
+ shortHash: String!
309
+
310
+ """Slugified article title."""
311
+ slug: String!
312
+
313
+ """State of this article."""
314
+ state: ArticleState!
315
+
316
+ """This value determines if current Viewer has bookmarked of not."""
317
+ subscribed: Boolean! @deprecated(reason: "Use bookmarked instead")
318
+
319
+ """A short summary for this article."""
320
+ summary: String!
321
+
322
+ """This value determines if the summary is customized or not."""
323
+ summaryCustomized: Boolean!
324
+
325
+ """Tags attached to this article."""
326
+ tags: [Tag!]
327
+
328
+ """Article title."""
329
+ title: String!
330
+
331
+ """Transactions history of this article."""
332
+ transactionsReceivedBy(input: TransactionsReceivedByArgs!): UserConnection!
333
+
334
+ """Translation of article title and content."""
335
+ translation(input: ArticleTranslationInput): ArticleTranslation
336
+
337
+ """History versions"""
338
+ versions(input: ArticleVersionsInput!): ArticleVersionsConnection!
339
+
340
+ """Word count of this article."""
341
+ wordCount: Int
342
+ }
343
+
344
+ type ArticleAccess {
345
+ circle: Circle
346
+ secret: String
347
+ type: ArticleAccessType!
348
+ }
349
+
350
+ """Enums for types of article access"""
351
+ enum ArticleAccessType {
352
+ paywall
353
+ public
354
+ }
355
+
356
+ type ArticleArticleNotice implements Notice {
357
+ """List of notice actors."""
358
+ actors: [User!]
359
+ article: Article!
360
+
361
+ """Time of this notice was created."""
362
+ createdAt: DateTime!
363
+
364
+ """Unique ID of this notice."""
365
+ id: ID!
366
+ target: Article!
367
+ type: ArticleArticleNoticeType!
368
+
369
+ """The value determines if the notice is unread or not."""
370
+ unread: Boolean!
371
+ }
372
+
373
+ enum ArticleArticleNoticeType {
374
+ ArticleNewCollected
375
+ }
376
+
377
+ type ArticleCampaign {
378
+ campaign: Campaign!
379
+ stage: CampaignStage
380
+ }
381
+
382
+ input ArticleCampaignInput {
383
+ campaign: ID!
384
+ stage: ID
385
+ }
386
+
387
+ type ArticleClassification {
388
+ topicChannel: TopicChannelClassification!
389
+ }
390
+
391
+ type ArticleConnection implements Connection {
392
+ edges: [ArticleEdge!]
393
+ pageInfo: PageInfo!
394
+ totalCount: Int!
395
+ }
396
+
397
+ type ArticleContents {
398
+ """HTML content of this article."""
399
+ html: String!
400
+
401
+ """Markdown content of this article."""
402
+ markdown: String!
403
+ }
404
+
405
+ type ArticleDonation {
406
+ id: ID!
407
+ sender: User
408
+ }
409
+
410
+ type ArticleDonationConnection {
411
+ edges: [ArticleDonationEdge!]
412
+ pageInfo: PageInfo!
413
+ totalCount: Int!
414
+ }
415
+
416
+ type ArticleDonationEdge {
417
+ cursor: String!
418
+ node: ArticleDonation!
419
+ }
420
+
421
+ type ArticleEdge {
422
+ cursor: String!
423
+ node: Article!
424
+ }
425
+
426
+ input ArticleInput {
427
+ mediaHash: String
428
+ shortHash: String
429
+ }
430
+
431
+ """Enums for types of article license"""
432
+ enum ArticleLicenseType {
433
+ arr
434
+ cc_0
435
+ cc_by_nc_nd_2
436
+ cc_by_nc_nd_4
437
+ }
438
+
439
+ type ArticleNotice implements Notice {
440
+ """List of notice actors."""
441
+ actors: [User!]
442
+
443
+ """Time of this notice was created."""
444
+ createdAt: DateTime!
445
+ entities: [Node!]!
446
+
447
+ """Unique ID of this notice."""
448
+ id: ID!
449
+ target: Article!
450
+ type: ArticleNoticeType!
451
+
452
+ """The value determines if the notice is unread or not."""
453
+ unread: Boolean!
454
+ }
455
+
456
+ enum ArticleNoticeType {
457
+ ArticleMentionedYou
458
+ ArticleNewAppreciation
459
+ ArticleNewSubscriber
460
+ ArticlePublished
461
+ CircleNewArticle
462
+ RevisedArticleNotPublished
463
+ RevisedArticlePublished
464
+ ScheduledArticlePublished
465
+ TopicChannelFeedbackAccepted
466
+ }
467
+
468
+ type ArticleOSS {
469
+ adStatus: AdStatus!
470
+ boost: Float!
471
+ inRecommendHottest: Boolean!
472
+ inRecommendIcymi: Boolean!
473
+ inRecommendNewest: Boolean!
474
+ inSearch: Boolean!
475
+ pinHistory: [PinHistory]!
476
+ score: Float!
477
+ spamStatus: SpamStatus!
478
+ topicChannels: [ArticleTopicChannel!] @deprecated(reason: "Use classification.topicChannel.channels instead")
479
+ }
480
+
481
+ type ArticleRecommendationActivity {
482
+ """Recommended articles"""
483
+ nodes: [Article!]
484
+
485
+ """The source type of recommendation"""
486
+ source: ArticleRecommendationActivitySource
487
+ }
488
+
489
+ enum ArticleRecommendationActivitySource {
490
+ ReadArticlesTags
491
+ UserDonation
492
+ }
493
+
494
+ """Enums for an article state."""
495
+ enum ArticleState {
496
+ active
497
+ archived
498
+ banned
499
+ }
500
+
501
+ type ArticleTopicChannel {
502
+ """Whether this article is filtered out by anti-flood in this channel"""
503
+ antiFlooded: Boolean!
504
+ channel: TopicChannel!
505
+
506
+ """Datetime when this article is classified"""
507
+ classicfiedAt: DateTime!
508
+
509
+ """Whether this article channel is enabled"""
510
+ enabled: Boolean!
511
+
512
+ """Whether this article is labeled by human, null for not labeled yet. """
513
+ isLabeled: Boolean!
514
+
515
+ """Whether this article is pinned"""
516
+ pinned: Boolean!
517
+
518
+ """Confident score by machine"""
519
+ score: Float
520
+ }
521
+
522
+ type ArticleTranslation {
523
+ content: String
524
+ language: String
525
+ model: TranslationModel
526
+ summary: String
527
+ title: String
528
+ }
529
+
530
+ input ArticleTranslationInput {
531
+ language: UserLanguage!
532
+ model: TranslationModel
533
+ }
534
+
535
+ type ArticleVersion implements Node {
536
+ contents: ArticleContents!
537
+ createdAt: DateTime!
538
+ dataHash: String
539
+ description: String
540
+ id: ID!
541
+ mediaHash: String
542
+ summary: String!
543
+ title: String!
544
+ translation(input: ArticleTranslationInput): ArticleTranslation
545
+ }
546
+
547
+ type ArticleVersionEdge {
548
+ cursor: String!
549
+ node: ArticleVersion!
550
+ }
551
+
552
+ type ArticleVersionsConnection implements Connection {
553
+ edges: [ArticleVersionEdge]!
554
+ pageInfo: PageInfo!
555
+ totalCount: Int!
556
+ }
557
+
558
+ input ArticleVersionsInput {
559
+ after: String
560
+ first: first_Int_min_0
561
+ }
562
+
563
+ enum ArticlesSort {
564
+ mostAppreciations
565
+ mostBookmarks
566
+ mostComments
567
+ mostDonations
568
+ mostReadTime
569
+ newest
570
+ }
571
+
572
+ """This type contains type, link and related data of an asset."""
573
+ type Asset {
574
+ """Time of this asset was created."""
575
+ createdAt: DateTime!
576
+ draft: Boolean
577
+
578
+ """Unique ID of this Asset."""
579
+ id: ID!
580
+
581
+ """Link of this asset."""
582
+ path: String!
583
+
584
+ """Types of this asset."""
585
+ type: AssetType!
586
+ uploadURL: String
587
+ }
588
+
589
+ """Enums for asset types."""
590
+ enum AssetType {
591
+ announcementCover
592
+ avatar
593
+ campaignCover
594
+ circleAvatar
595
+ circleCover
596
+ collectionCover
597
+ cover
598
+ embed
599
+ embedaudio
600
+ moment
601
+ oauthClientAvatar
602
+ profileCover
603
+ tagCover
604
+ }
605
+
606
+ type AuthResult {
607
+ auth: Boolean!
608
+ token: String
609
+ type: AuthResultType!
610
+ user: User
611
+ }
612
+
613
+ enum AuthResultType {
614
+ LinkAccount
615
+ Login
616
+ Signup
617
+ }
618
+
619
+ enum AuthorsType {
620
+ active
621
+ appreciated
622
+ default
623
+ trendy
624
+ }
625
+
626
+ type Badge {
627
+ type: BadgeType!
628
+ }
629
+
630
+ enum BadgeType {
631
+ architect
632
+ golden_motor
633
+ grand_slam
634
+ nomad1
635
+ nomad2
636
+ nomad3
637
+ nomad4
638
+ seed
639
+ }
640
+
641
+ input BadgedUsersInput {
642
+ after: String
643
+ first: first_Int_min_0
644
+ type: BadgeType
645
+ }
646
+
647
+ type Balance {
648
+ HKD: Float!
649
+ }
650
+
651
+ input BanCampaignArticlesInput {
652
+ articles: [ID!]!
653
+ campaign: ID!
654
+ }
655
+
656
+ type BlockchainTransaction {
657
+ chain: Chain!
658
+ txHash: String!
659
+ }
660
+
661
+ type BlockedSearchKeyword {
662
+ """Time of this search keyword was created."""
663
+ createdAt: DateTime!
664
+
665
+ """Unique ID of bloked search keyword."""
666
+ id: ID!
667
+
668
+ """Types of this search keyword."""
669
+ searchKey: String!
670
+ }
671
+
672
+ enum BoostTypes {
673
+ Article
674
+ Campaign
675
+ Tag
676
+ User
677
+ }
678
+
679
+ enum CacheControlScope {
680
+ PRIVATE
681
+ PUBLIC
682
+ }
683
+
684
+ interface Campaign {
685
+ id: ID!
686
+ name: String!
687
+ shortHash: String!
688
+ state: CampaignState!
689
+ }
690
+
691
+ type CampaignApplication {
692
+ createdAt: DateTime!
693
+ state: CampaignApplicationState!
694
+ }
695
+
696
+ enum CampaignApplicationState {
697
+ pending
698
+ rejected
699
+ succeeded
700
+ }
701
+
702
+ type CampaignArticleConnection implements Connection {
703
+ edges: [CampaignArticleEdge!]!
704
+ pageInfo: PageInfo!
705
+ totalCount: Int!
706
+ }
707
+
708
+ type CampaignArticleEdge {
709
+ announcement: Boolean!
710
+ cursor: String!
711
+ featured: Boolean!
712
+ node: Article!
713
+ }
714
+
715
+ type CampaignArticleNotice implements Notice {
716
+ """List of notice actors."""
717
+ actors: [User!]
718
+ article: Article!
719
+
720
+ """Time of this notice was created."""
721
+ createdAt: DateTime!
722
+
723
+ """Unique ID of this notice."""
724
+ id: ID!
725
+ target: Campaign!
726
+ type: CampaignArticleNoticeType!
727
+
728
+ """The value determines if the notice is unread or not."""
729
+ unread: Boolean!
730
+ }
731
+
732
+ enum CampaignArticleNoticeType {
733
+ CampaignArticleFeatured
734
+ }
735
+
736
+ input CampaignArticlesFilter {
737
+ featured: Boolean
738
+ stage: ID
739
+ }
740
+
741
+ input CampaignArticlesInput {
742
+ after: String
743
+ filter: CampaignArticlesFilter
744
+ first: Int
745
+ }
746
+
747
+ type CampaignConnection implements Connection {
748
+ edges: [CampaignEdge!]
749
+ pageInfo: PageInfo!
750
+ totalCount: Int!
751
+ }
752
+
753
+ type CampaignEdge {
754
+ cursor: String!
755
+ node: Campaign!
756
+ }
757
+
758
+ input CampaignInput {
759
+ shortHash: String!
760
+ }
761
+
762
+ type CampaignOSS {
763
+ boost: Float!
764
+ exclusive: Boolean!
765
+ managers: [User!]!
766
+ }
767
+
768
+ type CampaignParticipantConnection implements Connection {
769
+ edges: [CampaignParticipantEdge!]
770
+ pageInfo: PageInfo!
771
+ totalCount: Int!
772
+ }
773
+
774
+ type CampaignParticipantEdge {
775
+ application: CampaignApplication
776
+ cursor: String!
777
+ node: User!
778
+ }
779
+
780
+ input CampaignParticipantsInput {
781
+ after: String
782
+ first: Int
783
+
784
+ """return all state participants"""
785
+ oss: Boolean = false
786
+ }
787
+
788
+ type CampaignStage {
789
+ description(input: TranslationArgs): String!
790
+ id: ID!
791
+ name(input: TranslationArgs): String!
792
+ period: DatetimeRange
793
+ }
794
+
795
+ input CampaignStageInput {
796
+ description: [TranslationInput!]
797
+ name: [TranslationInput!]!
798
+ period: DatetimeRangeInput
799
+ }
800
+
801
+ enum CampaignState {
802
+ active
803
+ archived
804
+ finished
805
+ pending
806
+ }
807
+
808
+ input CampaignsFilter {
809
+ excludes: [ID!]
810
+ sort: CampaignsFilterSort
811
+ state: CampaignsFilterState
812
+ }
813
+
814
+ enum CampaignsFilterSort {
815
+ writingPeriod
816
+ }
817
+
818
+ enum CampaignsFilterState {
819
+ active
820
+ finished
821
+ }
822
+
823
+ input CampaignsInput {
824
+ after: String
825
+ filter: CampaignsFilter
826
+ first: Int
827
+
828
+ """return pending and archived campaigns"""
829
+ oss: Boolean = false
830
+ }
831
+
832
+ enum Chain {
833
+ Optimism
834
+ Polygon
835
+ }
836
+
837
+ interface Channel {
838
+ id: ID!
839
+ navbarTitle(input: TranslationArgs): String!
840
+ shortHash: String!
841
+ }
842
+
843
+ type ChannelArticleConnection implements Connection {
844
+ edges: [ChannelArticleEdge!]
845
+ pageInfo: PageInfo!
846
+ totalCount: Int!
847
+ }
848
+
849
+ type ChannelArticleEdge {
850
+ cursor: String!
851
+ node: Article!
852
+ pinned: Boolean!
853
+ }
854
+
855
+ input ChannelArticlesFilter {
856
+ datetimeRange: DatetimeRangeInput
857
+ searchKey: String
858
+ }
859
+
860
+ input ChannelArticlesInput {
861
+ after: String
862
+ filter: ChannelArticlesFilter
863
+ first: Int
864
+ oss: Boolean = false
865
+ sort: ArticlesSort
866
+ }
867
+
868
+ input ChannelInput {
869
+ shortHash: String!
870
+ }
871
+
872
+ input ChannelsInput {
873
+ """return all channels if true, only active channels by default"""
874
+ oss: Boolean = false
875
+ }
876
+
877
+ type Circle implements Node {
878
+ """Analytics dashboard."""
879
+ analytics: CircleAnalytics!
880
+
881
+ """Circle avatar's link."""
882
+ avatar: String @deprecated(reason: "No longer in use")
883
+
884
+ """Comments broadcasted by Circle owner."""
885
+ broadcast(input: CommentsInput!): CommentConnection!
886
+
887
+ """Circle cover's link."""
888
+ cover: String @deprecated(reason: "No longer in use")
889
+
890
+ """Created time."""
891
+ createdAt: DateTime! @deprecated(reason: "No longer in use")
892
+
893
+ """A short description of this Circle."""
894
+ description: String
895
+
896
+ """Comments made by Circle member."""
897
+ discussion(input: CommentsInput!): CommentConnection!
898
+
899
+ """Discussion (include replies) count of this circle."""
900
+ discussionCount: Int!
901
+
902
+ """Discussion (exclude replies) count of this circle."""
903
+ discussionThreadCount: Int!
904
+
905
+ """Human readable name of this Circle."""
906
+ displayName: String! @deprecated(reason: "No longer in use")
907
+
908
+ """List of Circle follower."""
909
+ followers(input: ConnectionArgs!): UserConnection! @deprecated(reason: "No longer in use")
910
+
911
+ """Unique ID."""
912
+ id: ID!
913
+
914
+ """Invitation used by current viewer."""
915
+ invitedBy: Invitation
916
+
917
+ """Invitations belonged to this Circle."""
918
+ invites: Invites!
919
+
920
+ """This value determines if current viewer is following Circle or not."""
921
+ isFollower: Boolean! @deprecated(reason: "No longer in use")
922
+
923
+ """This value determines if current viewer is Member or not."""
924
+ isMember: Boolean! @deprecated(reason: "No longer in use")
925
+
926
+ """List of Circle member."""
927
+ members(input: ConnectionArgs!): MemberConnection! @deprecated(reason: "No longer in use")
928
+
929
+ """Slugified name of this Circle."""
930
+ name: String! @deprecated(reason: "No longer in use")
931
+
932
+ """Circle owner."""
933
+ owner: User!
934
+
935
+ """Pinned comments broadcasted by Circle owner."""
936
+ pinnedBroadcast: [Comment!]
937
+
938
+ """Prices offered by this Circle."""
939
+ prices: [Price!]
940
+
941
+ """State of this Circle."""
942
+ state: CircleState! @deprecated(reason: "No longer in use")
943
+
944
+ """Updated time."""
945
+ updatedAt: DateTime! @deprecated(reason: "No longer in use")
946
+
947
+ """List of works belong to this Circle."""
948
+ works(input: ConnectionArgs!): ArticleConnection! @deprecated(reason: "No longer in use")
949
+ }
950
+
951
+ type CircleAnalytics {
952
+ content: CircleContentAnalytics!
953
+ follower: CircleFollowerAnalytics!
954
+ income: CircleIncomeAnalytics!
955
+ subscriber: CircleSubscriberAnalytics!
956
+ }
957
+
958
+ type CircleConnection implements Connection {
959
+ edges: [CircleEdge!]
960
+ pageInfo: PageInfo!
961
+ totalCount: Int!
962
+ }
963
+
964
+ type CircleContentAnalytics {
965
+ paywall: [CircleContentAnalyticsDatum!]
966
+ public: [CircleContentAnalyticsDatum!]
967
+ }
968
+
969
+ type CircleContentAnalyticsDatum {
970
+ node: Article!
971
+ readCount: Int!
972
+ }
973
+
974
+ type CircleEdge {
975
+ cursor: String!
976
+ node: Circle!
977
+ }
978
+
979
+ type CircleFollowerAnalytics {
980
+ """current follower count"""
981
+ current: Int!
982
+
983
+ """the percentage of follower count in reader count of circle articles"""
984
+ followerPercentage: Float!
985
+
986
+ """subscriber count history of last 4 months"""
987
+ history: [MonthlyDatum!]!
988
+ }
989
+
990
+ type CircleIncomeAnalytics {
991
+ """income history of last 4 months"""
992
+ history: [MonthlyDatum!]!
993
+
994
+ """income of next month"""
995
+ nextMonth: Float!
996
+
997
+ """income of this month"""
998
+ thisMonth: Float!
999
+
1000
+ """total income of all time"""
1001
+ total: Float!
1002
+ }
1003
+
1004
+ input CircleInput {
1005
+ """Slugified name of a Circle."""
1006
+ name: String!
1007
+ }
1008
+
1009
+ type CircleNotice implements Notice {
1010
+ """List of notice actors."""
1011
+ actors: [User!]
1012
+
1013
+ """Optional discussion/broadcast comments for bundled notices"""
1014
+ comments: [Comment!]
1015
+
1016
+ """Time of this notice was created."""
1017
+ createdAt: DateTime!
1018
+
1019
+ """Unique ID of this notice."""
1020
+ id: ID!
1021
+
1022
+ """Optional mention comments for bundled notices"""
1023
+ mentions: [Comment!]
1024
+
1025
+ """Optional discussion/broadcast replies for bundled notices"""
1026
+ replies: [Comment!]
1027
+ target: Circle!
1028
+ type: CircleNoticeType!
1029
+
1030
+ """The value determines if the notice is unread or not."""
1031
+ unread: Boolean!
1032
+ }
1033
+
1034
+ enum CircleNoticeType {
1035
+ CircleInvitation
1036
+ CircleNewBroadcastComments
1037
+ CircleNewDiscussionComments
1038
+ CircleNewFollower
1039
+ CircleNewSubscriber
1040
+ CircleNewUnsubscriber
1041
+ }
1042
+
1043
+ type CircleRecommendationActivity {
1044
+ """Recommended circles"""
1045
+ nodes: [Circle!]
1046
+
1047
+ """The source type of recommendation"""
1048
+ source: CircleRecommendationActivitySource
1049
+ }
1050
+
1051
+ enum CircleRecommendationActivitySource {
1052
+ UserSubscription
1053
+ }
1054
+
1055
+ enum CircleState {
1056
+ active
1057
+ archived
1058
+ }
1059
+
1060
+ type CircleSubscriberAnalytics {
1061
+ """current invitee count"""
1062
+ currentInvitee: Int!
1063
+
1064
+ """current subscriber count"""
1065
+ currentSubscriber: Int!
1066
+
1067
+ """invitee count history of last 4 months"""
1068
+ inviteeHistory: [MonthlyDatum!]!
1069
+
1070
+ """subscriber count history of last 4 months"""
1071
+ subscriberHistory: [MonthlyDatum!]!
1072
+ }
1073
+
1074
+ input ClaimLogbooksInput {
1075
+ ethAddress: String!
1076
+
1077
+ """nonce from generateSigningMessage"""
1078
+ nonce: String!
1079
+
1080
+ """sign'ed by wallet"""
1081
+ signature: String!
1082
+
1083
+ """the message being sign'ed, including nonce"""
1084
+ signedMessage: String!
1085
+ }
1086
+
1087
+ type ClaimLogbooksResult {
1088
+ ids: [ID!]
1089
+ txHash: String!
1090
+ }
1091
+
1092
+ input ClassifyArticlesChannelsInput {
1093
+ ids: [ID!]!
1094
+ }
1095
+
1096
+ input ClearReadHistoryInput {
1097
+ id: ID
1098
+ }
1099
+
1100
+ type Collection implements Node & PinnableWork {
1101
+ articles(input: CollectionArticlesInput!): ArticleConnection!
1102
+ author: User!
1103
+
1104
+ """Check if the collection contains the article"""
1105
+ contains(input: NodeInput!): Boolean!
1106
+ cover: String
1107
+ description: String
1108
+ id: ID!
1109
+ likeCount: Int!
1110
+
1111
+ """whether current user has liked it"""
1112
+ liked: Boolean!
1113
+ pinned: Boolean!
1114
+ title: String!
1115
+ updatedAt: DateTime!
1116
+ }
1117
+
1118
+ input CollectionArticlesInput {
1119
+ after: String
1120
+ before: String
1121
+ first: first_Int_min_0
1122
+ includeAfter: Boolean! = false
1123
+ includeBefore: Boolean! = false
1124
+ last: last_Int_min_0
1125
+ reversed: Boolean! = true
1126
+ }
1127
+
1128
+ type CollectionConnection implements Connection {
1129
+ edges: [CollectionEdge!]
1130
+ pageInfo: PageInfo!
1131
+ totalCount: Int!
1132
+ }
1133
+
1134
+ type CollectionEdge {
1135
+ cursor: String!
1136
+ node: Collection!
1137
+ }
1138
+
1139
+ type CollectionNotice implements Notice {
1140
+ """List of notice actors."""
1141
+ actors: [User!]
1142
+
1143
+ """Time of this notice was created."""
1144
+ createdAt: DateTime!
1145
+
1146
+ """Unique ID of this notice."""
1147
+ id: ID!
1148
+ target: Collection!
1149
+
1150
+ """The value determines if the notice is unread or not."""
1151
+ unread: Boolean!
1152
+ }
1153
+
1154
+ enum Color {
1155
+ brown
1156
+ gray
1157
+ green
1158
+ orange
1159
+ pink
1160
+ purple
1161
+ red
1162
+ yellow
1163
+ }
1164
+
1165
+ """
1166
+ This type contains content, author, descendant comments and related data of a comment.
1167
+ """
1168
+ type Comment implements Node {
1169
+ """Author of this comment."""
1170
+ author: User!
1171
+
1172
+ """Descendant comments of this comment."""
1173
+ comments(input: CommentCommentsInput!): CommentConnection!
1174
+
1175
+ """Content of this comment."""
1176
+ content: String
1177
+
1178
+ """Time of this comment was created."""
1179
+ createdAt: DateTime!
1180
+
1181
+ """The counting number of downvotes."""
1182
+ downvotes: Int! @deprecated(reason: "No longer in use in querying")
1183
+
1184
+ """This value determines this comment is from article donator or not."""
1185
+ fromDonator: Boolean!
1186
+
1187
+ """Unique ID of this comment."""
1188
+ id: ID!
1189
+
1190
+ """The value determines current user's vote."""
1191
+ myVote: Vote
1192
+
1193
+ """Current comment belongs to which Node."""
1194
+ node: Node!
1195
+
1196
+ """Parent comment of this comment."""
1197
+ parentComment: Comment
1198
+
1199
+ """This value determines this comment is pinned or not."""
1200
+ pinned: Boolean!
1201
+ remark: String
1202
+
1203
+ """A Comment that this comment replied to."""
1204
+ replyTo: Comment
1205
+ spamStatus: SpamStatus!
1206
+
1207
+ """State of this comment."""
1208
+ state: CommentState!
1209
+ type: CommentType!
1210
+
1211
+ """The counting number of upvotes."""
1212
+ upvotes: Int!
1213
+ }
1214
+
1215
+ type CommentCommentNotice implements Notice {
1216
+ """List of notice actors."""
1217
+ actors: [User!]
1218
+ comment: Comment!
1219
+
1220
+ """Time of this notice was created."""
1221
+ createdAt: DateTime!
1222
+
1223
+ """Unique ID of this notice."""
1224
+ id: ID!
1225
+ target: Comment!
1226
+ type: CommentCommentNoticeType!
1227
+
1228
+ """The value determines if the notice is unread or not."""
1229
+ unread: Boolean!
1230
+ }
1231
+
1232
+ enum CommentCommentNoticeType {
1233
+ CommentNewReply
1234
+ }
1235
+
1236
+ input CommentCommentsInput {
1237
+ after: String
1238
+ author: ID
1239
+ first: first_Int_min_0
1240
+ sort: CommentSort
1241
+ }
1242
+
1243
+ type CommentConnection implements Connection {
1244
+ edges: [CommentEdge!]
1245
+ pageInfo: PageInfo!
1246
+ totalCount: Int!
1247
+ }
1248
+
1249
+ type CommentEdge {
1250
+ cursor: String!
1251
+ node: Comment!
1252
+ }
1253
+
1254
+ input CommentInput {
1255
+ articleId: ID
1256
+ circleId: ID
1257
+ content: String!
1258
+ mentions: [ID!]
1259
+ momentId: ID
1260
+ parentId: ID
1261
+ replyTo: ID
1262
+ type: CommentType!
1263
+ }
1264
+
1265
+ type CommentNotice implements Notice {
1266
+ """List of notice actors."""
1267
+ actors: [User!]
1268
+
1269
+ """Time of this notice was created."""
1270
+ createdAt: DateTime!
1271
+
1272
+ """Unique ID of this notice."""
1273
+ id: ID!
1274
+ target: Comment!
1275
+ type: CommentNoticeType!
1276
+
1277
+ """The value determines if the notice is unread or not."""
1278
+ unread: Boolean!
1279
+ }
1280
+
1281
+ enum CommentNoticeType {
1282
+ ArticleNewComment
1283
+ CircleNewBroadcast
1284
+ CommentLiked
1285
+ CommentMentionedYou
1286
+ CommentPinned
1287
+ MomentNewComment
1288
+ SubscribedArticleNewComment
1289
+ }
1290
+
1291
+ """Enums for sorting comments by time."""
1292
+ enum CommentSort {
1293
+ newest
1294
+ oldest
1295
+ }
1296
+
1297
+ """Enums for comment state."""
1298
+ enum CommentState {
1299
+ active
1300
+ archived
1301
+ banned
1302
+ collapsed
1303
+ }
1304
+
1305
+ enum CommentType {
1306
+ article
1307
+ circleBroadcast
1308
+ circleDiscussion
1309
+ moment
1310
+ }
1311
+
1312
+ input CommentsFilter {
1313
+ author: ID
1314
+ parentComment: ID
1315
+ state: CommentState
1316
+ }
1317
+
1318
+ input CommentsInput {
1319
+ after: String
1320
+ before: String
1321
+ filter: CommentsFilter
1322
+ first: first_Int_min_0
1323
+ includeAfter: Boolean
1324
+ includeBefore: Boolean
1325
+ sort: CommentSort
1326
+ }
1327
+
1328
+ input ConfirmVerificationCodeInput {
1329
+ code: String!
1330
+ email: email_String_NotNull_format_email!
1331
+ type: VerificationCodeType!
1332
+ }
1333
+
1334
+ input ConnectStripeAccountInput {
1335
+ country: StripeAccountCountry!
1336
+ }
1337
+
1338
+ type ConnectStripeAccountResult {
1339
+ redirectUrl: String!
1340
+ }
1341
+
1342
+ interface Connection {
1343
+ pageInfo: PageInfo!
1344
+ totalCount: Int!
1345
+ }
1346
+
1347
+ input ConnectionArgs {
1348
+ after: String
1349
+ filter: FilterInput
1350
+ first: first_Int_min_0
1351
+ oss: Boolean
1352
+ }
1353
+
1354
+ type CryptoWallet {
1355
+ address: String!
1356
+
1357
+ """ does this address own any Travelogger NFTs? this value is cached at most 1day, and refreshed at next `nfts` query
1358
+ """
1359
+ hasNFTs: Boolean!
1360
+ id: ID!
1361
+
1362
+ """NFT assets owned by this wallet address"""
1363
+ nfts: [NFTAsset!]
1364
+ }
1365
+
1366
+ enum CryptoWalletSignaturePurpose {
1367
+ airdrop
1368
+ connect
1369
+ login
1370
+ signup
1371
+ }
1372
+
1373
+ type CurationChannel implements Channel & Node {
1374
+ """both activePeriod and state determine if the channel is active"""
1375
+ activePeriod: DatetimeRange!
1376
+ articles(input: ChannelArticlesInput!): ChannelArticleConnection!
1377
+ color: Color!
1378
+ id: ID!
1379
+ name(input: TranslationArgs): String!
1380
+ navbarTitle(input: TranslationArgs): String!
1381
+ note(input: TranslationArgs): String
1382
+ pinAmount: Int!
1383
+ shortHash: String!
1384
+ showRecommendation: Boolean!
1385
+ state: CurationChannelState!
1386
+ }
1387
+
1388
+ enum CurationChannelState {
1389
+ archived
1390
+ editing
1391
+ published
1392
+ }
1393
+
1394
+ """
1395
+ A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.
1396
+ """
1397
+ scalar DateTime
1398
+
1399
+ type DatetimeRange {
1400
+ end: DateTime
1401
+ start: DateTime!
1402
+ }
1403
+
1404
+ input DatetimeRangeInput {
1405
+ end: DateTime
1406
+ start: DateTime!
1407
+ }
1408
+
1409
+ input DeleteAnnouncementsInput {
1410
+ ids: [ID!]
1411
+ }
1412
+
1413
+ input DeleteCollectionArticlesInput {
1414
+ articles: [ID!]!
1415
+ collection: ID!
1416
+ }
1417
+
1418
+ input DeleteCollectionsInput {
1419
+ ids: [ID!]!
1420
+ }
1421
+
1422
+ input DeleteCommentInput {
1423
+ id: ID!
1424
+ }
1425
+
1426
+ input DeleteCurationChannelArticlesInput {
1427
+ articles: [ID!]!
1428
+ channel: ID!
1429
+ }
1430
+
1431
+ input DeleteDraftInput {
1432
+ id: ID!
1433
+ }
1434
+
1435
+ input DeleteMomentInput {
1436
+ id: ID!
1437
+ }
1438
+
1439
+ input DeleteTagsInput {
1440
+ ids: [ID!]!
1441
+ }
1442
+
1443
+ input DirectImageUploadInput {
1444
+ draft: Boolean
1445
+ entityId: ID
1446
+ entityType: EntityType!
1447
+ mime: String
1448
+ type: AssetType!
1449
+ url: url_String_format_uri
1450
+ }
1451
+
1452
+ union Donator = CryptoWallet | User
1453
+
1454
+ """
1455
+ This type contains content, collections, assets and related data of a draft.
1456
+ """
1457
+ type Draft implements Node {
1458
+ """Access related fields on circle"""
1459
+ access: DraftAccess!
1460
+
1461
+ """Published article"""
1462
+ article: Article
1463
+
1464
+ """List of assets are belonged to this draft."""
1465
+ assets: [Asset!]!
1466
+
1467
+ """Associated campaigns"""
1468
+ campaigns: [ArticleCampaign!]!
1469
+
1470
+ """Whether readers can comment"""
1471
+ canComment: Boolean!
1472
+ collection(input: ConnectionArgs!): ArticleConnection! @deprecated(reason: "Use connections instead")
1473
+
1474
+ """Collections of this draft."""
1475
+ collections(input: ConnectionArgs!): CollectionConnection!
1476
+
1477
+ """Connection articles of this draft."""
1478
+ connections(input: ConnectionArgs!): ArticleConnection!
1479
+
1480
+ """Content (HTML) of this draft."""
1481
+ content: String
1482
+
1483
+ """Draft's cover link."""
1484
+ cover: String
1485
+
1486
+ """Time of this draft was created."""
1487
+ createdAt: DateTime!
1488
+
1489
+ """Unique ID of this draft."""
1490
+ id: ID!
1491
+
1492
+ """Whether the first line of paragraph should be indented"""
1493
+ indentFirstLine: Boolean!
1494
+
1495
+ """Whether publish to ISCN"""
1496
+ iscnPublish: Boolean
1497
+
1498
+ """License Type"""
1499
+ license: ArticleLicenseType!
1500
+
1501
+ """Media hash, composed of cid encoding, of this draft."""
1502
+ mediaHash: String
1503
+
1504
+ """Scheduled publish date of the article."""
1505
+ publishAt: DateTime
1506
+
1507
+ """State of draft during publihsing."""
1508
+ publishState: PublishState!
1509
+
1510
+ """Creator message after support"""
1511
+ replyToDonator: String
1512
+
1513
+ """Creator message asking for support"""
1514
+ requestForDonation: String
1515
+
1516
+ """Whether content is marked as sensitive by author"""
1517
+ sensitiveByAuthor: Boolean!
1518
+
1519
+ """Slugified draft title."""
1520
+ slug: String!
1521
+
1522
+ """Summary of this draft."""
1523
+ summary: String
1524
+
1525
+ """This value determines if the summary is customized or not."""
1526
+ summaryCustomized: Boolean!
1527
+
1528
+ """Tags are attached to this draft."""
1529
+ tags: [String!]
1530
+
1531
+ """Draft title."""
1532
+ title: String
1533
+
1534
+ """Last time of this draft was upadted."""
1535
+ updatedAt: DateTime!
1536
+
1537
+ """The counting number of words in this draft."""
1538
+ wordCount: Int!
1539
+ }
1540
+
1541
+ type DraftAccess {
1542
+ circle: Circle
1543
+ type: ArticleAccessType!
1544
+ }
1545
+
1546
+ type DraftConnection implements Connection {
1547
+ edges: [DraftEdge!]
1548
+ pageInfo: PageInfo!
1549
+ totalCount: Int!
1550
+ }
1551
+
1552
+ type DraftEdge {
1553
+ cursor: String!
1554
+ node: Draft!
1555
+ }
1556
+
1557
+ input EditArticleInput {
1558
+ accessType: ArticleAccessType
1559
+
1560
+ """which campaigns to attach"""
1561
+ campaigns: [ArticleCampaignInput!]
1562
+
1563
+ """whether readers can comment"""
1564
+ canComment: Boolean
1565
+ circle: ID
1566
+
1567
+ """Deprecated, use connections instead"""
1568
+ collection: [ID!]
1569
+ collections: [ID!]
1570
+ connections: [ID!]
1571
+ content: String
1572
+ cover: ID
1573
+
1574
+ """revision description"""
1575
+ description: description_String_maxLength_140
1576
+ id: ID!
1577
+ indentFirstLine: Boolean
1578
+
1579
+ """whether publish to ISCN"""
1580
+ iscnPublish: Boolean
1581
+ license: ArticleLicenseType
1582
+ pinned: Boolean
1583
+ replyToDonator: replyToDonator_String_maxLength_140
1584
+ requestForDonation: requestForDonation_String_maxLength_140
1585
+ sensitive: Boolean
1586
+ state: ArticleState
1587
+ summary: String
1588
+ tags: [String!]
1589
+ title: String
1590
+ }
1591
+
1592
+ input EmailLoginInput {
1593
+ email: String!
1594
+
1595
+ """used in register"""
1596
+ language: UserLanguage
1597
+ passwordOrCode: String!
1598
+ referralCode: String
1599
+ }
1600
+
1601
+ enum EntityType {
1602
+ announcement
1603
+ article
1604
+ campaign
1605
+ circle
1606
+ collection
1607
+ draft
1608
+ moment
1609
+ tag
1610
+ user
1611
+ }
1612
+
1613
+ type ExchangeRate {
1614
+ from: TransactionCurrency!
1615
+ rate: Float!
1616
+ to: QuoteCurrency!
1617
+
1618
+ """Last updated time from currency convertor APIs"""
1619
+ updatedAt: DateTime!
1620
+ }
1621
+
1622
+ input ExchangeRatesInput {
1623
+ from: TransactionCurrency
1624
+ to: QuoteCurrency
1625
+ }
1626
+
1627
+ type Feature {
1628
+ enabled: Boolean!
1629
+ name: FeatureName!
1630
+ value: Float
1631
+ }
1632
+
1633
+ enum FeatureFlag {
1634
+ admin
1635
+ off
1636
+ on
1637
+ seeding
1638
+ }
1639
+
1640
+ enum FeatureName {
1641
+ add_credit
1642
+ article_channel
1643
+ circle_interact
1644
+ circle_management
1645
+ fingerprint
1646
+ payment
1647
+ payout
1648
+ spam_detection
1649
+ tag_adoption
1650
+ verify_appreciate
1651
+ }
1652
+
1653
+ input FeaturedCommentsInput {
1654
+ after: String
1655
+ first: first_Int_min_0
1656
+ sort: CommentSort
1657
+ }
1658
+
1659
+ input FeaturedTagsInput {
1660
+ """ tagIds """
1661
+ ids: [ID!]!
1662
+ }
1663
+
1664
+ input FilterInput {
1665
+ inRangeEnd: DateTime
1666
+ inRangeStart: DateTime
1667
+
1668
+ """Used in User Articles filter, by tags or by time range, or both"""
1669
+ tagIds: [ID!]
1670
+ }
1671
+
1672
+ type Following {
1673
+ circles(input: ConnectionArgs!): CircleConnection!
1674
+ users(input: ConnectionArgs!): UserConnection!
1675
+ }
1676
+
1677
+ union FollowingActivity = ArticleRecommendationActivity | CircleRecommendationActivity | UserAddArticleTagActivity | UserBroadcastCircleActivity | UserCreateCircleActivity | UserPostMomentActivity | UserPublishArticleActivity | UserRecommendationActivity
1678
+
1679
+ type FollowingActivityConnection implements Connection {
1680
+ edges: [FollowingActivityEdge!]
1681
+ pageInfo: PageInfo!
1682
+ totalCount: Int!
1683
+ }
1684
+
1685
+ type FollowingActivityEdge {
1686
+ cursor: String!
1687
+ node: FollowingActivity!
1688
+ }
1689
+
1690
+ input FrequentSearchInput {
1691
+ first: first_Int_min_0
1692
+ key: String
1693
+ }
1694
+
1695
+ input GenerateSigningMessageInput {
1696
+ address: String!
1697
+ purpose: SigningMessagePurpose
1698
+ }
1699
+
1700
+ enum GrantType {
1701
+ authorization_code
1702
+ refresh_token
1703
+ }
1704
+
1705
+ type IcymiTopic implements Node {
1706
+ archivedAt: DateTime
1707
+ articles: [Article!]!
1708
+ id: ID!
1709
+ note(input: TranslationArgs): String
1710
+ pinAmount: Int!
1711
+ publishedAt: DateTime
1712
+ state: IcymiTopicState!
1713
+ title(input: TranslationArgs): String!
1714
+ }
1715
+
1716
+ type IcymiTopicConnection implements Connection {
1717
+ edges: [IcymiTopicEdge!]!
1718
+ pageInfo: PageInfo!
1719
+ totalCount: Int!
1720
+ }
1721
+
1722
+ type IcymiTopicEdge {
1723
+ cursor: String!
1724
+ node: IcymiTopic!
1725
+ }
1726
+
1727
+ enum IcymiTopicState {
1728
+ archived
1729
+ editing
1730
+ published
1731
+ }
1732
+
1733
+ input IdentityInput {
1734
+ id: ID
1735
+ shortHash: String
1736
+ }
1737
+
1738
+ type Invitation {
1739
+ """Accepted time."""
1740
+ acceptedAt: DateTime
1741
+
1742
+ """Invitation of current Circle."""
1743
+ circle: Circle!
1744
+
1745
+ """Created time."""
1746
+ createdAt: DateTime!
1747
+
1748
+ """Free period of this invitation."""
1749
+ freePeriod: Int!
1750
+
1751
+ """Unique ID."""
1752
+ id: ID!
1753
+
1754
+ """Target person of this invitation."""
1755
+ invitee: Invitee!
1756
+
1757
+ """Creator of this invitation."""
1758
+ inviter: User!
1759
+
1760
+ """Sent time."""
1761
+ sentAt: DateTime!
1762
+
1763
+ """Determine it's specific state."""
1764
+ state: InvitationState!
1765
+ }
1766
+
1767
+ type InvitationConnection implements Connection {
1768
+ edges: [InvitationEdge!]
1769
+ pageInfo: PageInfo!
1770
+ totalCount: Int!
1771
+ }
1772
+
1773
+ type InvitationEdge {
1774
+ cursor: String!
1775
+ node: Invitation!
1776
+ }
1777
+
1778
+ enum InvitationState {
1779
+ accepted
1780
+ pending
1781
+ transfer_failed
1782
+ transfer_succeeded
1783
+ }
1784
+
1785
+ input InviteCircleInput {
1786
+ circleId: ID!
1787
+ freePeriod: freePeriod_Int_NotNull_exclusiveMin_0!
1788
+ invitees: [InviteCircleInvitee!]!
1789
+ }
1790
+
1791
+ input InviteCircleInvitee {
1792
+ email: String
1793
+ id: ID
1794
+ }
1795
+
1796
+ union Invitee = Person | User
1797
+
1798
+ type Invites {
1799
+ """Accepted invitation list"""
1800
+ accepted(input: ConnectionArgs!): InvitationConnection!
1801
+
1802
+ """Pending invitation list"""
1803
+ pending(input: ConnectionArgs!): InvitationConnection!
1804
+ }
1805
+
1806
+ input KeywordInput {
1807
+ keyword: String!
1808
+ }
1809
+
1810
+ input KeywordsInput {
1811
+ keywords: [String!]
1812
+ }
1813
+
1814
+ input LikeCollectionInput {
1815
+ id: ID!
1816
+ }
1817
+
1818
+ input LikeMomentInput {
1819
+ id: ID!
1820
+ }
1821
+
1822
+ type Liker {
1823
+ """Whether liker is a civic liker"""
1824
+ civicLiker: Boolean!
1825
+
1826
+ """Liker ID of LikeCoin"""
1827
+ likerId: String
1828
+
1829
+ """Total LIKE left in wallet."""
1830
+ total: Float!
1831
+ }
1832
+
1833
+ input LogRecordInput {
1834
+ type: LogRecordTypes!
1835
+ }
1836
+
1837
+ enum LogRecordTypes {
1838
+ ReadFolloweeArticles
1839
+ ReadFollowingFeed
1840
+ ReadResponseInfoPopUp
1841
+ }
1842
+
1843
+ type Member {
1844
+ """Price chosen by user when joining a Circle."""
1845
+ price: Price!
1846
+
1847
+ """User who join to a Circle."""
1848
+ user: User!
1849
+ }
1850
+
1851
+ type MemberConnection implements Connection {
1852
+ edges: [MemberEdge!]
1853
+ pageInfo: PageInfo!
1854
+ totalCount: Int!
1855
+ }
1856
+
1857
+ type MemberEdge {
1858
+ cursor: String!
1859
+ node: Member!
1860
+ }
1861
+
1862
+ input MergeTagsInput {
1863
+ content: String!
1864
+ ids: [ID!]!
1865
+ }
1866
+
1867
+ input MigrationInput {
1868
+ files: [Upload]!
1869
+ type: MigrationType
1870
+ }
1871
+
1872
+ enum MigrationType {
1873
+ medium
1874
+ }
1875
+
1876
+ type Moment implements Node {
1877
+ articles: [Article!]!
1878
+ assets: [Asset!]!
1879
+ author: User!
1880
+ commentCount: Int!
1881
+ commentedFollowees: [User!]!
1882
+ comments(input: CommentsInput!): CommentConnection!
1883
+ content: String
1884
+ createdAt: DateTime!
1885
+ id: ID!
1886
+ likeCount: Int!
1887
+
1888
+ """whether current user has liked it"""
1889
+ liked: Boolean!
1890
+ shortHash: String!
1891
+ spamStatus: SpamStatus!
1892
+ state: MomentState!
1893
+ tags: [Tag]!
1894
+ }
1895
+
1896
+ type MomentConnection implements Connection {
1897
+ edges: [MomentEdge!]
1898
+ pageInfo: PageInfo!
1899
+ totalCount: Int!
1900
+ }
1901
+
1902
+ type MomentEdge {
1903
+ cursor: String!
1904
+ node: Moment!
1905
+ }
1906
+
1907
+ input MomentInput {
1908
+ shortHash: String!
1909
+ }
1910
+
1911
+ type MomentNotice implements Notice {
1912
+ """List of notice actors."""
1913
+ actors: [User!]
1914
+
1915
+ """Time of this notice was created."""
1916
+ createdAt: DateTime!
1917
+
1918
+ """Unique ID of this notice."""
1919
+ id: ID!
1920
+ target: Moment!
1921
+ type: MomentNoticeType!
1922
+
1923
+ """The value determines if the notice is unread or not."""
1924
+ unread: Boolean!
1925
+ }
1926
+
1927
+ enum MomentNoticeType {
1928
+ MomentLiked
1929
+ MomentMentionedYou
1930
+ }
1931
+
1932
+ enum MomentState {
1933
+ active
1934
+ archived
1935
+ }
1936
+
1937
+ type MonthlyDatum {
1938
+ date: DateTime!
1939
+ value: Float!
1940
+ }
1941
+
1942
+ type Mutation {
1943
+ """Add blocked search keyword to blocked_search_word db"""
1944
+ addBlockedSearchKeyword(input: KeywordInput!): BlockedSearchKeyword!
1945
+
1946
+ """Add articles to the begining of the collections."""
1947
+ addCollectionsArticles(input: AddCollectionsArticlesInput!): [Collection!]!
1948
+
1949
+ """Add Credit to User Wallet"""
1950
+ addCredit(input: AddCreditInput!): AddCreditResult!
1951
+ addCurationChannelArticles(input: AddCurationChannelArticlesInput!): CurationChannel!
1952
+
1953
+ """Add a social login to current user."""
1954
+ addSocialLogin(input: SocialLoginInput!): User!
1955
+
1956
+ """Add a wallet login to current user."""
1957
+ addWalletLogin(input: WalletLoginInput!): User!
1958
+ applyCampaign(input: ApplyCampaignInput!): Campaign!
1959
+
1960
+ """Appreciate an article."""
1961
+ appreciateArticle(input: AppreciateArticleInput!): Article!
1962
+ banCampaignArticles(input: BanCampaignArticlesInput!): Campaign!
1963
+
1964
+ """Let Traveloggers owner claims a Logbook, returns transaction hash"""
1965
+ claimLogbooks(input: ClaimLogbooksInput!): ClaimLogbooksResult!
1966
+ classifyArticlesChannels(input: ClassifyArticlesChannelsInput!): Boolean!
1967
+
1968
+ """Clear read history for user."""
1969
+ clearReadHistory(input: ClearReadHistoryInput!): User!
1970
+
1971
+ """Clear search history for user."""
1972
+ clearSearchHistory: Boolean
1973
+
1974
+ """Confirm verification code from email."""
1975
+ confirmVerificationCode(input: ConfirmVerificationCodeInput!): ID!
1976
+
1977
+ """Create Stripe Connect account for Payout"""
1978
+ connectStripeAccount(input: ConnectStripeAccountInput!): ConnectStripeAccountResult!
1979
+ deleteAnnouncements(input: DeleteAnnouncementsInput!): Boolean!
1980
+
1981
+ """Delete blocked search keywords from search_history db"""
1982
+ deleteBlockedSearchKeywords(input: KeywordsInput!): Boolean
1983
+
1984
+ """Remove articles from the collection."""
1985
+ deleteCollectionArticles(input: DeleteCollectionArticlesInput!): Collection!
1986
+ deleteCollections(input: DeleteCollectionsInput!): Boolean!
1987
+
1988
+ """Remove a comment."""
1989
+ deleteComment(input: DeleteCommentInput!): Comment!
1990
+ deleteCurationChannelArticles(input: DeleteCurationChannelArticlesInput!): CurationChannel!
1991
+
1992
+ """Remove a draft."""
1993
+ deleteDraft(input: DeleteDraftInput!): Boolean
1994
+ deleteMoment(input: DeleteMomentInput!): Moment!
1995
+ deleteTags(input: DeleteTagsInput!): Boolean
1996
+ directImageUpload(input: DirectImageUploadInput!): Asset!
1997
+
1998
+ """Edit an article."""
1999
+ editArticle(input: EditArticleInput!): Article!
2000
+
2001
+ """Login user."""
2002
+ emailLogin(input: EmailLoginInput!): AuthResult!
2003
+
2004
+ """Get signing message."""
2005
+ generateSigningMessage(input: GenerateSigningMessageInput!): SigningMessageResult!
2006
+
2007
+ """Invite others to join circle"""
2008
+ invite(input: InviteCircleInput!): [Invitation!]
2009
+ likeCollection(input: LikeCollectionInput!): Collection!
2010
+ likeMoment(input: LikeMomentInput!): Moment!
2011
+
2012
+ """Add specific user behavior record."""
2013
+ logRecord(input: LogRecordInput!): Boolean
2014
+
2015
+ """Mark all received notices as read."""
2016
+ markAllNoticesAsRead: Boolean
2017
+ mergeTags(input: MergeTagsInput!): Tag!
2018
+
2019
+ """Migrate articles from other service provider."""
2020
+ migration(input: MigrationInput!): Boolean
2021
+
2022
+ """Pay to another user or article"""
2023
+ payTo(input: PayToInput!): PayToResult!
2024
+
2025
+ """Payout to user"""
2026
+ payout(input: PayoutInput!): Transaction!
2027
+
2028
+ """Pin a comment."""
2029
+ pinComment(input: PinCommentInput!): Comment!
2030
+
2031
+ """Publish an article onto IPFS."""
2032
+ publishArticle(input: PublishArticleInput!): Draft!
2033
+ putAnnouncement(input: PutAnnouncementInput!): Announcement!
2034
+
2035
+ """Create or update a Circle."""
2036
+ putCircle(input: PutCircleInput!): Circle!
2037
+
2038
+ """Add or remove Circle's articles"""
2039
+ putCircleArticles(input: PutCircleArticlesInput!): Circle! @deprecated(reason: "No longer in use")
2040
+ putCollection(input: PutCollectionInput!): Collection!
2041
+
2042
+ """Publish or update a comment."""
2043
+ putComment(input: PutCommentInput!): Comment!
2044
+ putCurationChannel(input: PutCurationChannelInput!): CurationChannel!
2045
+
2046
+ """Create or update a draft."""
2047
+ putDraft(input: PutDraftInput!): Draft!
2048
+
2049
+ """update tags for showing on profile page"""
2050
+ putFeaturedTags(input: FeaturedTagsInput!): [Tag!]
2051
+ putIcymiTopic(input: PutIcymiTopicInput!): IcymiTopic
2052
+ putMoment(input: PutMomentInput!): Moment!
2053
+
2054
+ """Create or Update an OAuth Client, used in OSS."""
2055
+ putOAuthClient(input: PutOAuthClientInput!): OAuthClient
2056
+ putRemark(input: PutRemarkInput!): String
2057
+ putRestrictedUsers(input: PutRestrictedUsersInput!): [User!]!
2058
+ putSkippedListItem(input: PutSkippedListItemInput!): [SkippedListItem!]
2059
+ putTagChannel(input: PutTagChannelInput!): Tag!
2060
+ putTopicChannel(input: PutTopicChannelInput!): TopicChannel!
2061
+ putUserFeatureFlags(input: PutUserFeatureFlagsInput!): [User!]!
2062
+ putWritingChallenge(input: PutWritingChallengeInput!): WritingChallenge!
2063
+
2064
+ """Read an article."""
2065
+ readArticle(input: ReadArticleInput!): Article!
2066
+
2067
+ """Remove a social login from current user."""
2068
+ removeSocialLogin(input: RemoveSocialLoginInput!): User!
2069
+
2070
+ """Remove a wallet login from current user."""
2071
+ removeWalletLogin: User!
2072
+ renameTag(input: RenameTagInput!): Tag!
2073
+ reorderChannels(input: ReorderChannelsInput!): Boolean!
2074
+
2075
+ """Reorder articles in the collection."""
2076
+ reorderCollectionArticles(input: ReorderCollectionArticlesInput!): Collection!
2077
+
2078
+ """Reset Liker ID"""
2079
+ resetLikerId(input: ResetLikerIdInput!): User!
2080
+
2081
+ """Reset user or payment password."""
2082
+ resetPassword(input: ResetPasswordInput!): Boolean
2083
+ reviewTopicChannelFeedback(input: ReviewTopicChannelFeedbackInput!): TopicChannelFeedback!
2084
+ sendCampaignAnnouncement(input: SendCampaignAnnouncementInput!): Boolean
2085
+
2086
+ """Send verification code for email."""
2087
+ sendVerificationCode(input: SendVerificationCodeInput!): Boolean
2088
+ setAdStatus(input: SetAdStatusInput!): Article!
2089
+ setArticleTopicChannels(input: SetArticleTopicChannelsInput!): Article!
2090
+ setBoost(input: SetBoostInput!): Node!
2091
+
2092
+ """Set user currency preference."""
2093
+ setCurrency(input: SetCurrencyInput!): User!
2094
+
2095
+ """Set user email."""
2096
+ setEmail(input: SetEmailInput!): User!
2097
+ setFeature(input: SetFeatureInput!): Feature!
2098
+
2099
+ """Set user email login password."""
2100
+ setPassword(input: SetPasswordInput!): User!
2101
+ setSpamStatus(input: SetSpamStatusInput!): Writing!
2102
+
2103
+ """Set user name."""
2104
+ setUserName(input: SetUserNameInput!): User!
2105
+
2106
+ """Upload a single file."""
2107
+ singleFileUpload(input: SingleFileUploadInput!): Asset!
2108
+
2109
+ """Login/Signup via social accounts."""
2110
+ socialLogin(input: SocialLoginInput!): AuthResult!
2111
+
2112
+ """Submit inappropriate content report"""
2113
+ submitReport(input: SubmitReportInput!): Report!
2114
+
2115
+ """Feedback on topic channel classification"""
2116
+ submitTopicChannelFeedback(input: SubmitTopicChannelFeedbackInput!): TopicChannelFeedback!
2117
+
2118
+ """Subscribe a Circle."""
2119
+ subscribeCircle(input: SubscribeCircleInput!): SubscribeCircleResult!
2120
+ toggleArticleRecommend(input: ToggleRecommendInput!): Article!
2121
+
2122
+ """Block or Unblock a given user."""
2123
+ toggleBlockUser(input: ToggleItemInput!): User!
2124
+ toggleBookmarkArticle(input: ToggleItemInput!): Article!
2125
+ toggleBookmarkTag(input: ToggleItemInput!): Tag!
2126
+
2127
+ """Follow or unfollow a Circle."""
2128
+ toggleFollowCircle(input: ToggleItemInput!): Circle! @deprecated(reason: "No longer in use")
2129
+
2130
+ """Bookmark or unbookmark tag."""
2131
+ toggleFollowTag(input: ToggleItemInput!): Tag! @deprecated(reason: "Use toggleBookmarkTag instead")
2132
+
2133
+ """Follow or Unfollow current user."""
2134
+ toggleFollowUser(input: ToggleItemInput!): User!
2135
+ togglePinChannelArticles(input: TogglePinChannelArticlesInput!): [Channel!]!
2136
+
2137
+ """Pin or Unpin a comment."""
2138
+ togglePinComment(input: ToggleItemInput!): Comment!
2139
+ toggleSeedingUsers(input: ToggleSeedingUsersInput!): [User]!
2140
+
2141
+ """Bookmark or unbookmark article"""
2142
+ toggleSubscribeArticle(input: ToggleItemInput!): Article! @deprecated(reason: "Use toggleBookmarkArticle instead")
2143
+ toggleUsersBadge(input: ToggleUsersBadgeInput!): [User]!
2144
+ toggleWritingChallengeFeaturedArticles(input: ToggleWritingChallengeFeaturedArticlesInput!): Campaign!
2145
+ unbindLikerId(input: UnbindLikerIdInput!): User!
2146
+ unlikeCollection(input: UnlikeCollectionInput!): Collection!
2147
+ unlikeMoment(input: UnlikeMomentInput!): Moment!
2148
+
2149
+ """Unpin a comment."""
2150
+ unpinComment(input: UnpinCommentInput!): Comment!
2151
+
2152
+ """Unsubscribe a Circle."""
2153
+ unsubscribeCircle(input: UnsubscribeCircleInput!): Circle!
2154
+
2155
+ """Unvote a comment."""
2156
+ unvoteComment(input: UnvoteCommentInput!): Comment!
2157
+ updateArticleSensitive(input: UpdateArticleSensitiveInput!): Article!
2158
+ updateArticleState(input: UpdateArticleStateInput!): Article!
2159
+ updateCampaignApplicationState(input: UpdateCampaignApplicationStateInput!): Campaign!
2160
+
2161
+ """Update a comments' state."""
2162
+ updateCommentsState(input: UpdateCommentsStateInput!): [Comment!]!
2163
+
2164
+ """Update user notification settings."""
2165
+ updateNotificationSetting(input: UpdateNotificationSettingInput!): User!
2166
+
2167
+ """Update referralCode of a user, used in OSS."""
2168
+ updateUserExtra(input: UpdateUserExtraInput!): User!
2169
+
2170
+ """Update user information."""
2171
+ updateUserInfo(input: UpdateUserInfoInput!): User!
2172
+
2173
+ """Update state of a user, used in OSS."""
2174
+ updateUserRole(input: UpdateUserRoleInput!): User!
2175
+
2176
+ """Update state of a user, used in OSS."""
2177
+ updateUserState(input: UpdateUserStateInput!): [User!]
2178
+
2179
+ """Logout user."""
2180
+ userLogout: Boolean!
2181
+
2182
+ """Verify user email."""
2183
+ verifyEmail(input: VerifyEmailInput!): AuthResult!
2184
+
2185
+ """Upvote or downvote a comment."""
2186
+ voteComment(input: VoteCommentInput!): Comment!
2187
+
2188
+ """Login/Signup via a wallet."""
2189
+ walletLogin(input: WalletLoginInput!): AuthResult!
2190
+
2191
+ """Withdraw locked ERC20/native token from donation vault"""
2192
+ withdrawLockedTokens: WithdrawLockedTokensResult!
2193
+ }
2194
+
2195
+ """ NFT Asset """
2196
+ type NFTAsset {
2197
+ collectionName: String!
2198
+
2199
+ """imageOriginalUrl: String!"""
2200
+ contractAddress: String!
2201
+ description: String
2202
+ id: ID!
2203
+ imagePreviewUrl: String
2204
+ imageUrl: String!
2205
+ name: String!
2206
+ }
2207
+
2208
+ interface Node {
2209
+ id: ID!
2210
+ }
2211
+
2212
+ input NodeInput {
2213
+ id: ID!
2214
+ }
2215
+
2216
+ input NodesInput {
2217
+ ids: [ID!]!
2218
+ }
2219
+
2220
+ """This interface contains common fields of a notice."""
2221
+ interface Notice {
2222
+ """Time of this notice was created."""
2223
+ createdAt: DateTime!
2224
+
2225
+ """Unique ID of this notice."""
2226
+ id: ID!
2227
+
2228
+ """The value determines if the notice is unread or not."""
2229
+ unread: Boolean!
2230
+ }
2231
+
2232
+ type NoticeConnection implements Connection {
2233
+ edges: [NoticeEdge!]
2234
+ pageInfo: PageInfo!
2235
+ totalCount: Int!
2236
+ }
2237
+
2238
+ type NoticeEdge {
2239
+ cursor: String!
2240
+ node: Notice!
2241
+ }
2242
+
2243
+ type NotificationSetting {
2244
+ articleNewAppreciation: Boolean!
2245
+ articleNewCollected: Boolean!
2246
+ articleNewComment: Boolean!
2247
+ articleNewSubscription: Boolean!
2248
+ circleMemberNewBroadcastReply: Boolean!
2249
+ circleMemberNewDiscussion: Boolean!
2250
+ circleMemberNewDiscussionReply: Boolean!
2251
+ circleNewFollower: Boolean!
2252
+
2253
+ """for circle owners"""
2254
+ circleNewSubscriber: Boolean!
2255
+ circleNewUnsubscriber: Boolean!
2256
+ email: Boolean!
2257
+
2258
+ """for circle members & followers"""
2259
+ inCircleNewArticle: Boolean!
2260
+ inCircleNewBroadcast: Boolean!
2261
+ inCircleNewBroadcastReply: Boolean!
2262
+ inCircleNewDiscussion: Boolean!
2263
+ inCircleNewDiscussionReply: Boolean!
2264
+ mention: Boolean!
2265
+ newComment: Boolean!
2266
+ newLike: Boolean!
2267
+ userNewFollower: Boolean!
2268
+ }
2269
+
2270
+ enum NotificationSettingType {
2271
+ articleNewAppreciation
2272
+ articleNewCollected
2273
+ articleNewComment
2274
+ articleNewSubscription
2275
+ circleMemberBroadcast
2276
+ circleMemberNewBroadcastReply
2277
+ circleMemberNewDiscussion
2278
+ circleMemberNewDiscussionReply
2279
+ circleNewDiscussion
2280
+ circleNewFollower
2281
+
2282
+ """for circle owners"""
2283
+ circleNewSubscriber
2284
+ circleNewUnsubscriber
2285
+ email
2286
+
2287
+ """for circle members"""
2288
+ inCircleNewArticle
2289
+ inCircleNewBroadcast
2290
+ inCircleNewBroadcastReply
2291
+ inCircleNewDiscussion
2292
+ inCircleNewDiscussionReply
2293
+ mention
2294
+ newComment
2295
+ newLike
2296
+ userNewFollower
2297
+ }
2298
+
2299
+ type OAuthClient {
2300
+ """URL for oauth client's avatar."""
2301
+ avatar: String
2302
+
2303
+ """Creation Date"""
2304
+ createdAt: DateTime!
2305
+
2306
+ """App Description"""
2307
+ description: String
2308
+
2309
+ """Grant Types"""
2310
+ grantTypes: [GrantType!]
2311
+
2312
+ """Unique Client ID of this OAuth Client."""
2313
+ id: ID!
2314
+
2315
+ """App name"""
2316
+ name: String!
2317
+
2318
+ """Redirect URIs"""
2319
+ redirectURIs: [String!]
2320
+
2321
+ """Scopes"""
2322
+ scope: [String!]
2323
+
2324
+ """Client secret"""
2325
+ secret: String!
2326
+
2327
+ """Linked Developer Account"""
2328
+ user: User
2329
+
2330
+ """URL for oauth client's official website"""
2331
+ website: String
2332
+ }
2333
+
2334
+ type OAuthClientConnection implements Connection {
2335
+ edges: [OAuthClientEdge!]
2336
+ pageInfo: PageInfo!
2337
+ totalCount: Int!
2338
+ }
2339
+
2340
+ type OAuthClientEdge {
2341
+ cursor: String!
2342
+ node: OAuthClient!
2343
+ }
2344
+
2345
+ input OAuthClientInput {
2346
+ id: ID!
2347
+ }
2348
+
2349
+ type OSS {
2350
+ articles(input: OSSArticlesInput!): ArticleConnection!
2351
+ badgedUsers(input: BadgedUsersInput!): UserConnection!
2352
+ comments(input: ConnectionArgs!): CommentConnection!
2353
+ icymiTopics(input: ConnectionArgs!): IcymiTopicConnection!
2354
+ moments(input: ConnectionArgs!): MomentConnection!
2355
+ oauthClients(input: ConnectionArgs!): OAuthClientConnection!
2356
+ reports(input: ConnectionArgs!): ReportConnection!
2357
+ restrictedUsers(input: ConnectionArgs!): UserConnection!
2358
+ seedingUsers(input: ConnectionArgs!): UserConnection!
2359
+ skippedListItems(input: SkippedListItemsInput!): SkippedListItemsConnection!
2360
+ tags(input: TagsInput!): TagConnection!
2361
+ topicChannelFeedbacks(input: TopicChannelFeedbacksInput!): TopicChannelFeedbackConnection!
2362
+ users(input: ConnectionArgs!): UserConnection!
2363
+ }
2364
+
2365
+ input OSSArticlesFilterInput {
2366
+ datetimeRange: DatetimeRangeInput
2367
+ isSpam: Boolean
2368
+ searchKey: String
2369
+ }
2370
+
2371
+ input OSSArticlesInput {
2372
+ after: String
2373
+ filter: OSSArticlesFilterInput
2374
+ first: first_Int_min_0
2375
+ sort: ArticlesSort = newest
2376
+ }
2377
+
2378
+ input Oauth1CredentialInput {
2379
+ oauthToken: String!
2380
+ oauthVerifier: String!
2381
+ }
2382
+
2383
+ """This type contains system-wise info and settings."""
2384
+ type Official {
2385
+ """Announcements"""
2386
+ announcements(input: AnnouncementsInput!): [Announcement!]
2387
+
2388
+ """Feature flag"""
2389
+ features: [Feature!]!
2390
+ }
2391
+
2392
+ """The notice type contains info about official announcement."""
2393
+ type OfficialAnnouncementNotice implements Notice {
2394
+ """Time of this notice was created."""
2395
+ createdAt: DateTime!
2396
+
2397
+ """Unique ID of this notice."""
2398
+ id: ID!
2399
+
2400
+ """The link to a specific page if provided."""
2401
+ link: String
2402
+
2403
+ """The message content."""
2404
+ message: String!
2405
+
2406
+ """The value determines if the notice is unread or not."""
2407
+ unread: Boolean!
2408
+ }
2409
+
2410
+ type PageInfo {
2411
+ endCursor: String
2412
+ hasNextPage: Boolean!
2413
+ hasPreviousPage: Boolean!
2414
+ startCursor: String
2415
+ }
2416
+
2417
+ input PayToInput {
2418
+ amount: amount_Float_NotNull_exclusiveMin_0!
2419
+
2420
+ """for ERC20/native token payment"""
2421
+ chain: Chain
2422
+ currency: TransactionCurrency!
2423
+ id: ID
2424
+
2425
+ """for HKD payment"""
2426
+ password: String
2427
+ purpose: TransactionPurpose!
2428
+ recipientId: ID!
2429
+ targetId: ID
2430
+ txHash: String
2431
+ }
2432
+
2433
+ type PayToResult {
2434
+ """Only available when paying with LIKE."""
2435
+ redirectUrl: String
2436
+ transaction: Transaction!
2437
+ }
2438
+
2439
+ input PayoutInput {
2440
+ amount: amount_Float_NotNull_exclusiveMin_0!
2441
+ password: String!
2442
+ }
2443
+
2444
+ type Person {
2445
+ email: email_String_NotNull_format_email!
2446
+ }
2447
+
2448
+ input PinCommentInput {
2449
+ id: ID!
2450
+ }
2451
+
2452
+ type PinHistory {
2453
+ """Which feed (IcymiTopic / Channel) the article was pinned"""
2454
+ feed: Node!
2455
+ pinnedAt: DateTime!
2456
+ }
2457
+
2458
+ interface PinnableWork {
2459
+ cover: String
2460
+ id: ID!
2461
+ pinned: Boolean!
2462
+ title: String!
2463
+ }
2464
+
2465
+ type Price {
2466
+ """Amount of Price."""
2467
+ amount: Float!
2468
+
2469
+ """Current Price belongs to whcih Circle."""
2470
+ circle: Circle!
2471
+
2472
+ """Created time."""
2473
+ createdAt: DateTime! @deprecated(reason: "No longer in use")
2474
+
2475
+ """Currency of Price."""
2476
+ currency: TransactionCurrency!
2477
+
2478
+ """Unique ID."""
2479
+ id: ID!
2480
+
2481
+ """State of Price."""
2482
+ state: PriceState!
2483
+
2484
+ """Updated time."""
2485
+ updatedAt: DateTime! @deprecated(reason: "No longer in use")
2486
+ }
2487
+
2488
+ enum PriceState {
2489
+ active
2490
+ archived
2491
+ }
2492
+
2493
+ input PublishArticleInput {
2494
+ id: ID!
2495
+
2496
+ """whether publish to ISCN"""
2497
+ iscnPublish: Boolean
2498
+
2499
+ """Scheduled publish date of the article."""
2500
+ publishAt: DateTime
2501
+ }
2502
+
2503
+ """Enums for publishing state."""
2504
+ enum PublishState {
2505
+ error
2506
+ pending
2507
+ published
2508
+ unpublished
2509
+ }
2510
+
2511
+ input PutAnnouncementInput {
2512
+ channels: [AnnouncementChannelInput!]
2513
+ content: [TranslationInput!]
2514
+ cover: String
2515
+ expiredAt: DateTime
2516
+ id: ID
2517
+ link: [TranslationInput!]
2518
+ order: Int
2519
+ title: [TranslationInput!]
2520
+ type: AnnouncementType
2521
+ visible: Boolean
2522
+ }
2523
+
2524
+ input PutCircleArticlesInput {
2525
+ """Access Type, `public` or `paywall` only."""
2526
+ accessType: ArticleAccessType!
2527
+
2528
+ """Article Ids"""
2529
+ articles: [ID!]
2530
+
2531
+ """Circle ID"""
2532
+ id: ID!
2533
+ license: ArticleLicenseType
2534
+
2535
+ """Action Type"""
2536
+ type: PutCircleArticlesType!
2537
+ }
2538
+
2539
+ enum PutCircleArticlesType {
2540
+ add
2541
+ remove
2542
+ }
2543
+
2544
+ input PutCircleInput {
2545
+ """Circle's subscription fee."""
2546
+ amount: amount_Float_exclusiveMin_0
2547
+
2548
+ """Unique ID of a Circle's avatar."""
2549
+ avatar: ID
2550
+
2551
+ """Unique ID of a Circle's cover."""
2552
+ cover: ID
2553
+
2554
+ """A short description of this Circle."""
2555
+ description: String
2556
+
2557
+ """Human readable name of this Circle."""
2558
+ displayName: String
2559
+
2560
+ """Unique ID."""
2561
+ id: ID
2562
+
2563
+ """Slugified name of a Circle."""
2564
+ name: String
2565
+ }
2566
+
2567
+ input PutCollectionInput {
2568
+ cover: ID
2569
+ description: String
2570
+ id: ID
2571
+ pinned: Boolean
2572
+ title: String
2573
+ }
2574
+
2575
+ input PutCommentInput {
2576
+ comment: CommentInput!
2577
+ id: ID
2578
+ }
2579
+
2580
+ input PutCurationChannelInput {
2581
+ activePeriod: DatetimeRangeInput
2582
+ color: Color
2583
+ id: ID
2584
+ name: [TranslationInput!]
2585
+ navbarTitle: [TranslationInput!]
2586
+ note: [TranslationInput!]
2587
+ pinAmount: Int
2588
+ showRecommendation: Boolean
2589
+ state: CurationChannelState
2590
+ }
2591
+
2592
+ input PutDraftInput {
2593
+ accessType: ArticleAccessType
2594
+
2595
+ """Which campaigns to attach"""
2596
+ campaigns: [ArticleCampaignInput!]
2597
+
2598
+ """Whether readers can comment"""
2599
+ canComment: Boolean
2600
+ circle: ID
2601
+
2602
+ """Deprecated, use connections instead"""
2603
+ collection: [ID]
2604
+
2605
+ """Add article to these collections when published"""
2606
+ collections: [ID!]
2607
+ connections: [ID!]
2608
+ content: String
2609
+ cover: ID
2610
+ id: ID
2611
+ indentFirstLine: Boolean
2612
+
2613
+ """Whether publish to ISCN"""
2614
+ iscnPublish: Boolean
2615
+
2616
+ """Last known update timestamp for version conflict detection"""
2617
+ lastUpdatedAt: DateTime
2618
+ license: ArticleLicenseType
2619
+ replyToDonator: replyToDonator_String_maxLength_140
2620
+ requestForDonation: requestForDonation_String_maxLength_140
2621
+ sensitive: Boolean
2622
+ summary: String
2623
+ tags: [String!]
2624
+ title: String
2625
+ }
2626
+
2627
+ input PutIcymiTopicInput {
2628
+ articles: [ID!]
2629
+ id: ID
2630
+ note: [TranslationInput!]
2631
+ pinAmount: Int
2632
+ state: IcymiTopicState
2633
+ title: [TranslationInput!]
2634
+ }
2635
+
2636
+ input PutMomentInput {
2637
+ articles: [ID!]
2638
+ assets: [ID!]
2639
+ content: String!
2640
+ tags: [String!]
2641
+ }
2642
+
2643
+ input PutOAuthClientInput {
2644
+ avatar: ID
2645
+ description: String
2646
+ grantTypes: [GrantType!]
2647
+ id: ID
2648
+ name: String
2649
+ redirectURIs: [String!]
2650
+ scope: [String!]
2651
+ secret: String
2652
+ user: ID
2653
+ website: website_String_format_uri
2654
+ }
2655
+
2656
+ input PutRemarkInput {
2657
+ id: ID!
2658
+ remark: String!
2659
+ type: RemarkTypes!
2660
+ }
2661
+
2662
+ input PutRestrictedUsersInput {
2663
+ ids: [ID!]!
2664
+ restrictions: [UserRestrictionType!]!
2665
+ }
2666
+
2667
+ input PutSkippedListItemInput {
2668
+ archived: Boolean
2669
+ id: ID
2670
+ type: SkippedListItemType
2671
+ value: String
2672
+ }
2673
+
2674
+ input PutTagChannelInput {
2675
+ enabled: Boolean
2676
+ id: ID!
2677
+ navbarTitle: [TranslationInput!]
2678
+ }
2679
+
2680
+ input PutTopicChannelInput {
2681
+ enabled: Boolean
2682
+ id: ID
2683
+ name: [TranslationInput!]
2684
+ navbarTitle: [TranslationInput!]
2685
+ note: [TranslationInput!]
2686
+ providerId: String
2687
+ subChannels: [ID!]
2688
+ }
2689
+
2690
+ input PutUserFeatureFlagsInput {
2691
+ flags: [UserFeatureFlagType!]!
2692
+ ids: [ID!]!
2693
+ }
2694
+
2695
+ input PutWritingChallengeInput {
2696
+ announcements: [ID!]
2697
+ applicationPeriod: DatetimeRangeInput
2698
+ channelEnabled: Boolean
2699
+ cover: ID
2700
+ description: [TranslationInput!]
2701
+
2702
+ """exclude articles of this campaign in topic channels and newest"""
2703
+ exclusive: Boolean
2704
+ featuredDescription: [TranslationInput!]
2705
+ id: ID
2706
+ link: String
2707
+ managers: [ID!]
2708
+ name: [TranslationInput!]
2709
+ navbarTitle: [TranslationInput!]
2710
+ newStages: [CampaignStageInput!]
2711
+ organizers: [ID!]
2712
+ showAd: Boolean
2713
+ showOther: Boolean
2714
+ stages: [CampaignStageInput!]
2715
+ state: CampaignState
2716
+ writingPeriod: DatetimeRangeInput
2717
+ }
2718
+
2719
+ type Query {
2720
+ article(input: ArticleInput!): Article
2721
+ campaign(input: CampaignInput!): Campaign
2722
+ campaignOrganizers(input: ConnectionArgs!): UserConnection!
2723
+ campaigns(input: CampaignsInput!): CampaignConnection!
2724
+ channel(input: ChannelInput!): Channel
2725
+ channels(input: ChannelsInput): [Channel!]!
2726
+ circle(input: CircleInput!): Circle
2727
+ exchangeRates(input: ExchangeRatesInput): [ExchangeRate!]
2728
+ frequentSearch(input: FrequentSearchInput!): [String!]
2729
+ moment(input: MomentInput!): Moment
2730
+ node(input: NodeInput!): Node
2731
+ nodes(input: NodesInput!): [Node!]
2732
+ oauthClient(input: OAuthClientInput!): OAuthClient
2733
+ oauthRequestToken: String
2734
+ official: Official!
2735
+ oss: OSS!
2736
+ search(input: SearchInput!): SearchResultConnection!
2737
+ user(input: UserInput!): User
2738
+ viewer: User
2739
+ }
2740
+
2741
+ enum QuoteCurrency {
2742
+ HKD
2743
+ TWD
2744
+ USD
2745
+ }
2746
+
2747
+ input ReadArticleInput {
2748
+ id: ID!
2749
+ }
2750
+
2751
+ type ReadHistory {
2752
+ article: Article!
2753
+ readAt: DateTime!
2754
+ }
2755
+
2756
+ type ReadHistoryConnection implements Connection {
2757
+ edges: [ReadHistoryEdge!]
2758
+ pageInfo: PageInfo!
2759
+ totalCount: Int!
2760
+ }
2761
+
2762
+ type ReadHistoryEdge {
2763
+ cursor: String!
2764
+ node: ReadHistory!
2765
+ }
2766
+
2767
+ type RecentSearchConnection implements Connection {
2768
+ edges: [RecentSearchEdge!]
2769
+ pageInfo: PageInfo!
2770
+ totalCount: Int!
2771
+ }
2772
+
2773
+ type RecentSearchEdge {
2774
+ cursor: String!
2775
+ node: String!
2776
+ }
2777
+
2778
+ input RecommendFilterInput {
2779
+ channel: IdentityInput
2780
+
2781
+ """filter out followed users"""
2782
+ followed: Boolean
2783
+
2784
+ """index of list, min: 0, max: 49"""
2785
+ random: random_Int_min_0_max_49
2786
+ }
2787
+
2788
+ input RecommendInput {
2789
+ after: String
2790
+ filter: RecommendFilterInput
2791
+ first: first_Int_min_0
2792
+ newAlgo: Boolean
2793
+ oss: Boolean
2794
+ }
2795
+
2796
+ """Enums for types of recommend articles."""
2797
+ enum RecommendTypes {
2798
+ hottest
2799
+ icymi
2800
+ newest
2801
+ search
2802
+ }
2803
+
2804
+ type Recommendation {
2805
+ """Global user list, sort by activities in recent 6 month."""
2806
+ authors(input: RecommendInput!): UserConnection!
2807
+
2808
+ """Activities based on user's following, sort by creation time."""
2809
+ following(input: RecommendationFollowingInput!): FollowingActivityConnection!
2810
+
2811
+ """Global articles sort by latest activity time."""
2812
+ hottest(input: RecommendInput!): ArticleConnection!
2813
+
2814
+ """'In case you missed it' recommendation."""
2815
+ icymi(input: ConnectionArgs!): ArticleConnection!
2816
+
2817
+ """'In case you missed it' topic."""
2818
+ icymiTopic: IcymiTopic
2819
+
2820
+ """Global articles sort by publish time."""
2821
+ newest(input: RecommendationNewestInput!): ArticleConnection!
2822
+
2823
+ """Global tag list, sort by activities in recent 14 days."""
2824
+ tags(input: RecommendInput!): TagConnection!
2825
+ }
2826
+
2827
+ input RecommendationFollowingFilterInput {
2828
+ type: RecommendationFollowingFilterType
2829
+ }
2830
+
2831
+ enum RecommendationFollowingFilterType {
2832
+ article
2833
+ }
2834
+
2835
+ input RecommendationFollowingInput {
2836
+ after: String
2837
+ filter: RecommendationFollowingFilterInput
2838
+ first: Int
2839
+ }
2840
+
2841
+ input RecommendationNewestInput {
2842
+ after: String
2843
+ excludeChannelArticles: Boolean
2844
+ filter: FilterInput
2845
+ first: first_Int_min_0
2846
+ oss: Boolean
2847
+ }
2848
+
2849
+ input RefreshIPNSFeedInput {
2850
+ """refresh how many recent articles, default to 50"""
2851
+ numArticles: Int = 50
2852
+ userName: String!
2853
+ }
2854
+
2855
+ input RelatedDonationArticlesInput {
2856
+ after: String
2857
+ first: first_Int_min_0
2858
+ oss: Boolean
2859
+
2860
+ """index of article list, min: 0, max: 49"""
2861
+ random: random_Int_min_0_max_49
2862
+ }
2863
+
2864
+ enum RemarkTypes {
2865
+ Article
2866
+ Comment
2867
+ Feedback
2868
+ Report
2869
+ Tag
2870
+ User
2871
+ }
2872
+
2873
+ input RemoveSocialLoginInput {
2874
+ type: SocialAccountType!
2875
+ }
2876
+
2877
+ input RenameTagInput {
2878
+ content: String!
2879
+ id: ID!
2880
+ }
2881
+
2882
+ input ReorderChannelsInput {
2883
+ ids: [ID!]!
2884
+ }
2885
+
2886
+ input ReorderCollectionArticlesInput {
2887
+ collection: ID!
2888
+ moves: [ReorderMoveInput!]!
2889
+ }
2890
+
2891
+ input ReorderMoveInput {
2892
+ item: ID!
2893
+
2894
+ """
2895
+ The new position move to. To move item to the beginning of the list, set to 0. To the end of the list, set to the length of the list - 1.
2896
+ """
2897
+ newPosition: Int!
2898
+ }
2899
+
2900
+ type Report implements Node {
2901
+ createdAt: DateTime!
2902
+ id: ID!
2903
+ reason: ReportReason!
2904
+ reporter: User!
2905
+ target: Node!
2906
+ }
2907
+
2908
+ type ReportConnection implements Connection {
2909
+ edges: [ReportEdge!]
2910
+ pageInfo: PageInfo!
2911
+ totalCount: Int!
2912
+ }
2913
+
2914
+ type ReportEdge {
2915
+ cursor: String!
2916
+ node: Report!
2917
+ }
2918
+
2919
+ enum ReportReason {
2920
+ discrimination_insult_hatred
2921
+ illegal_advertising
2922
+ other
2923
+ pornography_involving_minors
2924
+ tort
2925
+ }
2926
+
2927
+ input ResetLikerIdInput {
2928
+ id: ID!
2929
+ }
2930
+
2931
+ input ResetPasswordInput {
2932
+ codeId: ID!
2933
+ password: String!
2934
+ type: ResetPasswordType
2935
+ }
2936
+
2937
+ enum ResetPasswordType {
2938
+ account
2939
+ payment
2940
+ }
2941
+
2942
+ union Response = Article | Comment
2943
+
2944
+ type ResponseConnection implements Connection {
2945
+ edges: [ResponseEdge!]
2946
+ pageInfo: PageInfo!
2947
+ totalCount: Int!
2948
+ }
2949
+
2950
+ type ResponseEdge {
2951
+ cursor: String!
2952
+ node: Response!
2953
+ }
2954
+
2955
+ """Enums for sorting responses."""
2956
+ enum ResponseSort {
2957
+ newest
2958
+ oldest
2959
+ }
2960
+
2961
+ input ResponsesInput {
2962
+ after: String
2963
+ articleOnly: Boolean
2964
+ before: String
2965
+ first: first_Int_min_0
2966
+ includeAfter: Boolean
2967
+ includeBefore: Boolean
2968
+ sort: ResponseSort
2969
+ }
2970
+
2971
+ input ReviewTopicChannelFeedbackInput {
2972
+ action: TopicChannelFeedbackAction!
2973
+ feedback: ID!
2974
+ }
2975
+
2976
+ """Enums for user roles."""
2977
+ enum Role {
2978
+ admin
2979
+ user
2980
+ vistor
2981
+ }
2982
+
2983
+ enum SearchAPIVersion {
2984
+ v20230301
2985
+ v20230601
2986
+ }
2987
+
2988
+ enum SearchExclude {
2989
+ blocked
2990
+ }
2991
+
2992
+ input SearchFilter {
2993
+ authorId: ID
2994
+ }
2995
+
2996
+ input SearchInput {
2997
+ after: String
2998
+
2999
+ """specific condition for rule data out"""
3000
+ exclude: SearchExclude
3001
+
3002
+ """extra query filter for searching"""
3003
+ filter: SearchFilter
3004
+ first: first_Int_min_0
3005
+
3006
+ """should include tags used by author"""
3007
+ includeAuthorTags: Boolean
3008
+
3009
+ """search keyword"""
3010
+ key: String!
3011
+ oss: Boolean
3012
+ quicksearch: Boolean
3013
+
3014
+ """whether this search operation should be recorded in search history"""
3015
+ record: Boolean
3016
+
3017
+ """types of search target"""
3018
+ type: SearchTypes!
3019
+ }
3020
+
3021
+ type SearchResultConnection implements Connection {
3022
+ edges: [SearchResultEdge!]
3023
+ pageInfo: PageInfo!
3024
+ totalCount: Int!
3025
+ }
3026
+
3027
+ type SearchResultEdge {
3028
+ cursor: String!
3029
+ node: Node!
3030
+ }
3031
+
3032
+ enum SearchTypes {
3033
+ Article
3034
+ Tag
3035
+ User
3036
+ }
3037
+
3038
+ input SendCampaignAnnouncementInput {
3039
+ announcement: [TranslationInput!]!
3040
+ campaign: ID!
3041
+ link: link_String_NotNull_format_uri!
3042
+ password: String!
3043
+ }
3044
+
3045
+ input SendVerificationCodeInput {
3046
+ email: email_String_NotNull_format_email!
3047
+
3048
+ """email content language"""
3049
+ language: UserLanguage
3050
+
3051
+ """
3052
+ Redirect URL embedded in the verification email,
3053
+ use code instead if not provided.
3054
+ """
3055
+ redirectUrl: redirectUrl_String_format_uri
3056
+ token: String
3057
+ type: VerificationCodeType!
3058
+ }
3059
+
3060
+ input SetAdStatusInput {
3061
+ id: ID!
3062
+ isAd: Boolean!
3063
+ }
3064
+
3065
+ input SetArticleTopicChannelsInput {
3066
+ channels: [ID!]!
3067
+ id: ID!
3068
+ }
3069
+
3070
+ input SetBoostInput {
3071
+ boost: boost_Float_NotNull_min_0!
3072
+ id: ID!
3073
+ type: BoostTypes!
3074
+ }
3075
+
3076
+ input SetCurrencyInput {
3077
+ currency: QuoteCurrency
3078
+ }
3079
+
3080
+ input SetEmailInput {
3081
+ email: String!
3082
+ }
3083
+
3084
+ input SetFeatureInput {
3085
+ flag: FeatureFlag!
3086
+ name: FeatureName!
3087
+ value: Float
3088
+ }
3089
+
3090
+ input SetPasswordInput {
3091
+ password: String!
3092
+ }
3093
+
3094
+ input SetSpamStatusInput {
3095
+ id: ID!
3096
+ isSpam: Boolean!
3097
+ }
3098
+
3099
+ input SetUserNameInput {
3100
+ userName: String!
3101
+ }
3102
+
3103
+ enum SigningMessagePurpose {
3104
+ airdrop
3105
+ claimLogbook
3106
+ connect
3107
+ login
3108
+ signup
3109
+ }
3110
+
3111
+ type SigningMessageResult {
3112
+ createdAt: DateTime!
3113
+ expiredAt: DateTime!
3114
+ nonce: String!
3115
+ purpose: SigningMessagePurpose!
3116
+ signingMessage: String!
3117
+ }
3118
+
3119
+ input SingleFileUploadInput {
3120
+ draft: Boolean
3121
+ entityId: ID
3122
+ entityType: EntityType!
3123
+ file: Upload
3124
+ type: AssetType!
3125
+ url: url_String_format_uri
3126
+ }
3127
+
3128
+ type SkippedListItem {
3129
+ archived: Boolean!
3130
+ createdAt: DateTime!
3131
+ id: ID!
3132
+ type: SkippedListItemType!
3133
+ updatedAt: DateTime!
3134
+ uuid: ID!
3135
+ value: String!
3136
+ }
3137
+
3138
+ type SkippedListItemEdge {
3139
+ cursor: String!
3140
+ node: SkippedListItem
3141
+ }
3142
+
3143
+ enum SkippedListItemType {
3144
+ agent_hash
3145
+ domain
3146
+ email
3147
+ }
3148
+
3149
+ type SkippedListItemsConnection implements Connection {
3150
+ edges: [SkippedListItemEdge!]
3151
+ pageInfo: PageInfo!
3152
+ totalCount: Int!
3153
+ }
3154
+
3155
+ input SkippedListItemsInput {
3156
+ after: String
3157
+ first: first_Int_min_0
3158
+ type: SkippedListItemType
3159
+ }
3160
+
3161
+ type SocialAccount {
3162
+ email: String
3163
+ type: SocialAccountType!
3164
+ userName: String
3165
+ }
3166
+
3167
+ enum SocialAccountType {
3168
+ Facebook
3169
+ Google
3170
+ Twitter
3171
+ }
3172
+
3173
+ input SocialLoginInput {
3174
+ authorizationCode: String
3175
+
3176
+ """OAuth2 PKCE code_verifier for Facebook and Twitter"""
3177
+ codeVerifier: String
3178
+
3179
+ """used in register"""
3180
+ language: UserLanguage
3181
+
3182
+ """OIDC nonce for Google"""
3183
+ nonce: String
3184
+
3185
+ """oauth token/verifier in OAuth1.0a for Twitter"""
3186
+ oauth1Credential: Oauth1CredentialInput
3187
+ referralCode: String
3188
+ type: SocialAccountType!
3189
+ }
3190
+
3191
+ type SpamStatus {
3192
+ """
3193
+ Whether this work is labeled as spam by human, null for not labeled yet.
3194
+ """
3195
+ isSpam: Boolean
3196
+
3197
+ """Spam confident score by machine, null for not checked yet. """
3198
+ score: Float
3199
+ }
3200
+
3201
+ type StripeAccount {
3202
+ id: ID!
3203
+ loginUrl: String!
3204
+ }
3205
+
3206
+ enum StripeAccountCountry {
3207
+ Australia
3208
+ Austria
3209
+ Belgium
3210
+ Bulgaria
3211
+ Canada
3212
+ Cyprus
3213
+ Denmark
3214
+ Estonia
3215
+ Finland
3216
+ France
3217
+ Germany
3218
+ Greece
3219
+ HongKong
3220
+ Ireland
3221
+ Italy
3222
+ Latvia
3223
+ Lithuania
3224
+ Luxembourg
3225
+ Malta
3226
+ Netherlands
3227
+ NewZealand
3228
+ Norway
3229
+ Poland
3230
+ Portugal
3231
+ Romania
3232
+ Singapore
3233
+ Slovakia
3234
+ Slovenia
3235
+ Spain
3236
+ Sweden
3237
+ UnitedKingdom
3238
+ UnitedStates
3239
+ }
3240
+
3241
+ input SubmitReportInput {
3242
+ reason: ReportReason!
3243
+ targetId: ID!
3244
+ }
3245
+
3246
+ input SubmitTopicChannelFeedbackInput {
3247
+ article: ID!
3248
+ channels: [ID!]
3249
+ type: TopicChannelFeedbackType!
3250
+ }
3251
+
3252
+ input SubscribeCircleInput {
3253
+ """Unique ID."""
3254
+ id: ID!
3255
+
3256
+ """Wallet password."""
3257
+ password: String
3258
+ }
3259
+
3260
+ type SubscribeCircleResult {
3261
+ circle: Circle!
3262
+
3263
+ """client secret for SetupIntent."""
3264
+ client_secret: String
3265
+ }
3266
+
3267
+ """This type contains content, count and related data of an article tag."""
3268
+ type Tag implements Channel & Node {
3269
+ """List of articles were attached with this tag."""
3270
+ articles(input: TagArticlesInput!): ChannelArticleConnection!
3271
+
3272
+ """Whether this tag is enabled as a channel"""
3273
+ channelEnabled: Boolean!
3274
+
3275
+ """Content of this tag."""
3276
+ content: String!
3277
+
3278
+ """Time of this tag was created."""
3279
+ createdAt: DateTime!
3280
+ deleted: Boolean!
3281
+
3282
+ """Unique id of this tag."""
3283
+ id: ID!
3284
+
3285
+ """This value determines if current viewer is following or not."""
3286
+ isFollower: Boolean
3287
+
3288
+ """Navbar title for this tag channel"""
3289
+ navbarTitle(input: TranslationArgs): String!
3290
+
3291
+ """Counts of this tag."""
3292
+ numArticles: Int!
3293
+ numAuthors: Int!
3294
+ numMoments: Int!
3295
+ oss: TagOSS!
3296
+
3297
+ """Tags recommended based on relations to current tag."""
3298
+ recommended(input: RecommendInput!): TagConnection!
3299
+
3300
+ """Authors recommended based on relations to current tag."""
3301
+ recommendedAuthors(input: ConnectionArgs!): UserConnection!
3302
+ remark: String
3303
+
3304
+ """Short hash for shorter url addressing"""
3305
+ shortHash: String!
3306
+
3307
+ """Articles and moments were attached with this tag."""
3308
+ writings(input: WritingInput!): TagWritingConnection!
3309
+ }
3310
+
3311
+ input TagArticlesInput {
3312
+ after: String
3313
+ first: first_Int_min_0
3314
+ oss: Boolean
3315
+ sortBy: TagArticlesSortBy = byCreatedAtDesc
3316
+ }
3317
+
3318
+ enum TagArticlesSortBy {
3319
+ byCreatedAtDesc
3320
+ byHottestDesc
3321
+ }
3322
+
3323
+ type TagConnection implements Connection {
3324
+ edges: [TagEdge!]
3325
+ pageInfo: PageInfo!
3326
+ totalCount: Int!
3327
+ }
3328
+
3329
+ type TagEdge {
3330
+ cursor: String!
3331
+ node: Tag!
3332
+ }
3333
+
3334
+ type TagOSS {
3335
+ boost: Float!
3336
+ score: Float!
3337
+ }
3338
+
3339
+ type TagWritingConnection implements Connection {
3340
+ edges: [TagWritingEdge!]
3341
+ pageInfo: PageInfo!
3342
+ totalCount: Int!
3343
+ }
3344
+
3345
+ type TagWritingEdge {
3346
+ cursor: String!
3347
+ node: Writing!
3348
+ pinned: Boolean!
3349
+ }
3350
+
3351
+ input TagsInput {
3352
+ after: String
3353
+ first: first_Int_min_0
3354
+ sort: TagsSort
3355
+ }
3356
+
3357
+ """Enums for sorting tags."""
3358
+ enum TagsSort {
3359
+ hottest
3360
+ newest
3361
+ oldest
3362
+ }
3363
+
3364
+ input ToggleCircleMemberInput {
3365
+ """Toggle value."""
3366
+ enabled: Boolean!
3367
+
3368
+ """Unique ID."""
3369
+ id: ID!
3370
+
3371
+ """Unique ID of target user."""
3372
+ targetId: ID!
3373
+ }
3374
+
3375
+ """Common input to toggle single item for `toggleXXX` mutations"""
3376
+ input ToggleItemInput {
3377
+ enabled: Boolean
3378
+ id: ID!
3379
+ }
3380
+
3381
+ input TogglePinChannelArticlesInput {
3382
+ articles: [ID!]!
3383
+
3384
+ """id of TopicChannel or CurationChannel"""
3385
+ channels: [ID!]!
3386
+ pinned: Boolean!
3387
+ }
3388
+
3389
+ input ToggleRecommendInput {
3390
+ enabled: Boolean!
3391
+ id: ID!
3392
+ type: RecommendTypes
3393
+ }
3394
+
3395
+ input ToggleSeedingUsersInput {
3396
+ enabled: Boolean!
3397
+ ids: [ID!]
3398
+ }
3399
+
3400
+ input ToggleUsersBadgeInput {
3401
+ enabled: Boolean!
3402
+ ids: [ID!]!
3403
+ type: BadgeType!
3404
+ }
3405
+
3406
+ input ToggleWritingChallengeFeaturedArticlesInput {
3407
+ articles: [ID!]!
3408
+ campaign: ID!
3409
+ enabled: Boolean!
3410
+ }
3411
+
3412
+ type TopDonatorConnection implements Connection {
3413
+ edges: [TopDonatorEdge!]
3414
+ pageInfo: PageInfo!
3415
+ totalCount: Int!
3416
+ }
3417
+
3418
+ type TopDonatorEdge {
3419
+ cursor: String!
3420
+ donationCount: Int!
3421
+ node: Donator!
3422
+ }
3423
+
3424
+ input TopDonatorFilter {
3425
+ inRangeEnd: DateTime
3426
+ inRangeStart: DateTime
3427
+ }
3428
+
3429
+ input TopDonatorInput {
3430
+ after: String
3431
+ filter: TopDonatorFilter
3432
+ first: Int
3433
+ }
3434
+
3435
+ type TopicChannel implements Channel & Node {
3436
+ articles(input: ChannelArticlesInput!): ChannelArticleConnection!
3437
+ enabled: Boolean!
3438
+ id: ID!
3439
+ name(input: TranslationArgs): String!
3440
+ navbarTitle(input: TranslationArgs): String!
3441
+ note(input: TranslationArgs): String
3442
+ parent: TopicChannel
3443
+ providerId: String
3444
+ shortHash: String!
3445
+ }
3446
+
3447
+ type TopicChannelClassification {
3448
+ """
3449
+ Which channels this article is in, null for not classified, empty for not in any channel
3450
+ """
3451
+ channels: [ArticleTopicChannel!]
3452
+
3453
+ """whether user enable channel classification"""
3454
+ enabled: Boolean!
3455
+
3456
+ """Feedback from author"""
3457
+ feedback: TopicChannelFeedback
3458
+ }
3459
+
3460
+ type TopicChannelFeedback {
3461
+ article: Article!
3462
+
3463
+ """Which channels author want to be in, empty for no channels"""
3464
+ channels: [TopicChannel!]
3465
+ createdAt: DateTime!
3466
+ id: ID!
3467
+ state: TopicChannelFeedbackState
3468
+ type: TopicChannelFeedbackType!
3469
+ }
3470
+
3471
+ enum TopicChannelFeedbackAction {
3472
+ accept
3473
+ reject
3474
+ }
3475
+
3476
+ type TopicChannelFeedbackConnection implements Connection {
3477
+ edges: [TopicChannelFeedbackEdge!]!
3478
+ pageInfo: PageInfo!
3479
+ totalCount: Int!
3480
+ }
3481
+
3482
+ type TopicChannelFeedbackEdge {
3483
+ cursor: String!
3484
+ node: TopicChannelFeedback!
3485
+ }
3486
+
3487
+ enum TopicChannelFeedbackState {
3488
+ accepted
3489
+ pending
3490
+ rejected
3491
+ resolved
3492
+ }
3493
+
3494
+ enum TopicChannelFeedbackType {
3495
+ negative
3496
+ positive
3497
+ }
3498
+
3499
+ input TopicChannelFeedbacksFilterInput {
3500
+ spam: Boolean
3501
+ state: TopicChannelFeedbackState
3502
+ type: TopicChannelFeedbackType
3503
+ }
3504
+
3505
+ input TopicChannelFeedbacksInput {
3506
+ after: String
3507
+ filter: TopicChannelFeedbacksFilterInput
3508
+ first: first_Int_NotNull_min_0!
3509
+ }
3510
+
3511
+ type Transaction {
3512
+ amount: Float!
3513
+
3514
+ """blockchain transaction info of ERC20/native token payment transaction"""
3515
+ blockchainTx: BlockchainTransaction
3516
+
3517
+ """Timestamp of transaction."""
3518
+ createdAt: DateTime!
3519
+ currency: TransactionCurrency!
3520
+ fee: Float!
3521
+ id: ID!
3522
+
3523
+ """Message for end user, including reason of failure."""
3524
+ message: String
3525
+ purpose: TransactionPurpose!
3526
+
3527
+ """Recipient of transaction."""
3528
+ recipient: User
3529
+
3530
+ """Sender of transaction."""
3531
+ sender: User
3532
+ state: TransactionState!
3533
+
3534
+ """Related target article or transaction."""
3535
+ target: TransactionTarget
3536
+ }
3537
+
3538
+ type TransactionConnection implements Connection {
3539
+ edges: [TransactionEdge!]
3540
+ pageInfo: PageInfo!
3541
+ totalCount: Int!
3542
+ }
3543
+
3544
+ enum TransactionCurrency {
3545
+ HKD
3546
+ LIKE
3547
+ USDT
3548
+ }
3549
+
3550
+ type TransactionEdge {
3551
+ cursor: String!
3552
+ node: Transaction!
3553
+ }
3554
+
3555
+ type TransactionNotice implements Notice {
3556
+ """List of notice actors."""
3557
+ actors: [User!]
3558
+
3559
+ """Time of this notice was created."""
3560
+ createdAt: DateTime!
3561
+
3562
+ """Unique ID of this notice."""
3563
+ id: ID!
3564
+ target: Transaction!
3565
+ type: TransactionNoticeType!
3566
+
3567
+ """The value determines if the notice is unread or not."""
3568
+ unread: Boolean!
3569
+ }
3570
+
3571
+ enum TransactionNoticeType {
3572
+ PaymentReceivedDonation
3573
+ WithdrewLockedTokens
3574
+ }
3575
+
3576
+ enum TransactionPurpose {
3577
+ addCredit
3578
+ curationVaultWithdrawal
3579
+ dispute
3580
+ donation
3581
+ payout
3582
+ payoutReversal
3583
+ refund
3584
+ subscriptionSplit
3585
+ }
3586
+
3587
+ enum TransactionState {
3588
+ canceled
3589
+ failed
3590
+ pending
3591
+ succeeded
3592
+ }
3593
+
3594
+ union TransactionTarget = Article | Circle | Transaction
3595
+
3596
+ input TransactionsArgs {
3597
+ after: String
3598
+ filter: TransactionsFilter
3599
+ first: first_Int_min_0
3600
+
3601
+ """deprecated, use TransactionsFilter.id instead."""
3602
+ id: ID
3603
+
3604
+ """deprecated, use TransactionsFilter.states instead."""
3605
+ states: [TransactionState!]
3606
+ }
3607
+
3608
+ input TransactionsFilter {
3609
+ currency: TransactionCurrency
3610
+ id: ID
3611
+ purpose: TransactionPurpose
3612
+ states: [TransactionState!]
3613
+ }
3614
+
3615
+ input TransactionsReceivedByArgs {
3616
+ after: String
3617
+ first: first_Int_min_0
3618
+ purpose: TransactionPurpose!
3619
+ senderId: ID
3620
+ }
3621
+
3622
+ type TranslatedAnnouncement {
3623
+ content: String
3624
+ cover: String
3625
+ language: UserLanguage!
3626
+ link: link_String_format_uri
3627
+ title: String
3628
+ }
3629
+
3630
+ input TranslationArgs {
3631
+ language: UserLanguage!
3632
+ }
3633
+
3634
+ input TranslationInput {
3635
+ language: UserLanguage!
3636
+ text: String!
3637
+ }
3638
+
3639
+ enum TranslationModel {
3640
+ google_gemini_2_0_flash
3641
+ google_gemini_2_5_flash
3642
+ google_translation_v2
3643
+ opencc
3644
+ }
3645
+
3646
+ input UnbindLikerIdInput {
3647
+ id: ID!
3648
+ likerId: String!
3649
+ }
3650
+
3651
+ input UnlikeCollectionInput {
3652
+ id: ID!
3653
+ }
3654
+
3655
+ input UnlikeMomentInput {
3656
+ id: ID!
3657
+ }
3658
+
3659
+ input UnpinCommentInput {
3660
+ id: ID!
3661
+ }
3662
+
3663
+ input UnsubscribeCircleInput {
3664
+ """Unique ID."""
3665
+ id: ID!
3666
+ }
3667
+
3668
+ input UnvoteCommentInput {
3669
+ id: ID!
3670
+ }
3671
+
3672
+ input UpdateArticleSensitiveInput {
3673
+ id: ID!
3674
+ sensitive: Boolean!
3675
+ }
3676
+
3677
+ input UpdateArticleStateInput {
3678
+ id: ID!
3679
+ state: ArticleState!
3680
+ }
3681
+
3682
+ input UpdateCampaignApplicationStateInput {
3683
+ campaign: ID!
3684
+ state: CampaignApplicationState!
3685
+ user: ID!
3686
+ }
3687
+
3688
+ input UpdateCommentsStateInput {
3689
+ ids: [ID!]!
3690
+ state: CommentState!
3691
+ }
3692
+
3693
+ input UpdateNotificationSettingInput {
3694
+ enabled: Boolean!
3695
+ type: NotificationSettingType!
3696
+ }
3697
+
3698
+ input UpdateUserExtraInput {
3699
+ id: ID!
3700
+ referralCode: String
3701
+ }
3702
+
3703
+ input UpdateUserInfoInput {
3704
+ agreeOn: Boolean
3705
+ avatar: ID
3706
+ description: String
3707
+ displayName: String
3708
+ language: UserLanguage
3709
+ paymentPassword: String
3710
+ paymentPointer: String
3711
+ profileCover: ID
3712
+ referralCode: String
3713
+ }
3714
+
3715
+ input UpdateUserRoleInput {
3716
+ id: ID!
3717
+ role: UserRole!
3718
+ }
3719
+
3720
+ input UpdateUserStateInput {
3721
+ banDays: banDays_Int_exclusiveMin_0
3722
+ emails: [String!]
3723
+ id: ID
3724
+ password: String
3725
+ state: UserState!
3726
+ }
3727
+
3728
+ scalar Upload
3729
+
3730
+ type User implements Node {
3731
+ """Record of user activity, only accessable by current user."""
3732
+ activity: UserActivity!
3733
+
3734
+ """user data analytics, only accessable by current user."""
3735
+ analytics: UserAnalytics!
3736
+
3737
+ """Articles authored by current user."""
3738
+ articles(input: UserArticlesInput!): ArticleConnection!
3739
+
3740
+ """URL for user avatar."""
3741
+ avatar: String
3742
+
3743
+ """Users that blocked by current user."""
3744
+ blockList(input: ConnectionArgs!): UserConnection!
3745
+
3746
+ """Artilces current user bookmarked."""
3747
+ bookmarkedArticles(input: ConnectionArgs!): ArticleConnection!
3748
+
3749
+ """Tags current user bookmarked."""
3750
+ bookmarkedTags(input: ConnectionArgs!): TagConnection!
3751
+
3752
+ """active applied campaigns"""
3753
+ campaigns(input: ConnectionArgs!): CampaignConnection!
3754
+
3755
+ """collections authored by current user."""
3756
+ collections(input: ConnectionArgs!): CollectionConnection!
3757
+
3758
+ """Articles current user commented on"""
3759
+ commentedArticles(input: ConnectionArgs!): ArticleConnection!
3760
+
3761
+ """Display name on user profile, can be duplicated."""
3762
+ displayName: String
3763
+
3764
+ """Drafts authored by current user."""
3765
+ drafts(input: ConnectionArgs!): DraftConnection!
3766
+
3767
+ """Followers of this user."""
3768
+ followers(input: ConnectionArgs!): UserConnection!
3769
+
3770
+ """Following contents of this user."""
3771
+ following: Following!
3772
+
3773
+ """Global id of an user."""
3774
+ id: ID!
3775
+
3776
+ """User information."""
3777
+ info: UserInfo!
3778
+
3779
+ """Whether current user is blocked by viewer."""
3780
+ isBlocked: Boolean!
3781
+
3782
+ """Whether current user is blocking viewer."""
3783
+ isBlocking: Boolean!
3784
+
3785
+ """Whether viewer is following current user."""
3786
+ isFollowee: Boolean!
3787
+
3788
+ """Whether current user is following viewer."""
3789
+ isFollower: Boolean!
3790
+
3791
+ """user latest articles or collections"""
3792
+ latestWorks: [PinnableWork!]!
3793
+
3794
+ """Liker info of current user"""
3795
+ liker: Liker!
3796
+
3797
+ """LikerID of LikeCoin, being used by LikeCoin OAuth"""
3798
+ likerId: String
3799
+ notices(input: ConnectionArgs!): NoticeConnection!
3800
+ oss: UserOSS!
3801
+
3802
+ """Circles belong to current user."""
3803
+ ownCircles: [Circle!]
3804
+
3805
+ """Payment pointer that resolves to Open Payments endpoints"""
3806
+ paymentPointer: String
3807
+
3808
+ """user pinned articles or collections"""
3809
+ pinnedWorks: [PinnableWork!]!
3810
+
3811
+ """Recommendations for current user."""
3812
+ recommendation: Recommendation!
3813
+ remark: String
3814
+
3815
+ """User settings."""
3816
+ settings: UserSettings!
3817
+
3818
+ """Status of current user."""
3819
+ status: UserStatus
3820
+
3821
+ """Circles whiches user has subscribed."""
3822
+ subscribedCircles(input: ConnectionArgs!): CircleConnection!
3823
+
3824
+ """Tags by usage order of current user."""
3825
+ tags(input: ConnectionArgs!): TagConnection!
3826
+
3827
+ """Global unique user name of a user."""
3828
+ userName: String
3829
+
3830
+ """User Wallet"""
3831
+ wallet: Wallet!
3832
+
3833
+ """Articles and moments authored by current user."""
3834
+ writings(input: WritingInput!): WritingConnection!
3835
+ }
3836
+
3837
+ type UserActivity {
3838
+ """Appreciations current user received."""
3839
+ appreciationsReceived(input: ConnectionArgs!): AppreciationConnection!
3840
+
3841
+ """Total number of appreciation current user received."""
3842
+ appreciationsReceivedTotal: Int!
3843
+
3844
+ """Appreciations current user gave."""
3845
+ appreciationsSent(input: ConnectionArgs!): AppreciationConnection!
3846
+
3847
+ """Total number of appreciation current user gave."""
3848
+ appreciationsSentTotal: Int!
3849
+
3850
+ """User reading history."""
3851
+ history(input: ConnectionArgs!): ReadHistoryConnection!
3852
+
3853
+ """User search history."""
3854
+ recentSearches(input: ConnectionArgs!): RecentSearchConnection!
3855
+ }
3856
+
3857
+ type UserAddArticleTagActivity {
3858
+ actor: User!
3859
+ createdAt: DateTime!
3860
+
3861
+ """Article added to tag"""
3862
+ node: Article!
3863
+
3864
+ """Tag added by article"""
3865
+ target: Tag!
3866
+ }
3867
+
3868
+ type UserAnalytics {
3869
+ """Top donators of current user."""
3870
+ topDonators(input: TopDonatorInput!): TopDonatorConnection!
3871
+ }
3872
+
3873
+ input UserArticlesFilter {
3874
+ state: ArticleState = active
3875
+ }
3876
+
3877
+ input UserArticlesInput {
3878
+ after: String
3879
+ filter: UserArticlesFilter
3880
+ first: first_Int_min_0
3881
+ sort: UserArticlesSort = newest
3882
+ }
3883
+
3884
+ enum UserArticlesSort {
3885
+ mostAppreciations
3886
+ mostComments
3887
+ mostDonations
3888
+ mostReaders
3889
+ newest
3890
+ }
3891
+
3892
+ type UserBroadcastCircleActivity {
3893
+ actor: User!
3894
+ createdAt: DateTime!
3895
+
3896
+ """Comment broadcast by actor"""
3897
+ node: Comment!
3898
+
3899
+ """Circle that comment belongs to"""
3900
+ target: Circle!
3901
+ }
3902
+
3903
+ type UserConnection implements Connection {
3904
+ edges: [UserEdge!]
3905
+ pageInfo: PageInfo!
3906
+ totalCount: Int!
3907
+ }
3908
+
3909
+ type UserCreateCircleActivity {
3910
+ actor: User!
3911
+ createdAt: DateTime!
3912
+
3913
+ """Circle created by actor"""
3914
+ node: Circle!
3915
+ }
3916
+
3917
+ type UserEdge {
3918
+ cursor: String!
3919
+ node: User!
3920
+ }
3921
+
3922
+ type UserFeatureFlag {
3923
+ createdAt: DateTime!
3924
+ type: UserFeatureFlagType!
3925
+ }
3926
+
3927
+ enum UserFeatureFlagType {
3928
+ bypassSpamDetection
3929
+ readSpamStatus
3930
+ unlimitedArticleFetch
3931
+ }
3932
+
3933
+ enum UserGroup {
3934
+ a
3935
+ b
3936
+ }
3937
+
3938
+ type UserInfo {
3939
+ """Timestamp of user agreement."""
3940
+ agreeOn: DateTime
3941
+
3942
+ """User badges."""
3943
+ badges: [Badge!]
3944
+
3945
+ """Timestamp of registration."""
3946
+ createdAt: DateTime
3947
+
3948
+ """Connected wallet."""
3949
+ cryptoWallet: CryptoWallet
3950
+
3951
+ """User desciption."""
3952
+ description: String
3953
+
3954
+ """User email."""
3955
+ email: email_String_format_email
3956
+
3957
+ """Weather user email is verified."""
3958
+ emailVerified: Boolean!
3959
+
3960
+ """Login address"""
3961
+ ethAddress: String
3962
+
3963
+ """
3964
+ saved tags for showing on profile page, API allows up to 100, front-end lock'ed at lower limit
3965
+ """
3966
+ featuredTags: [Tag!]
3967
+
3968
+ """Type of group."""
3969
+ group: UserGroup!
3970
+
3971
+ """
3972
+ the ipnsKey (`ipfs.io/ipns/<ipnsKey>/...`) for feed.json / rss.xml / index
3973
+ """
3974
+ ipnsKey: String
3975
+ isWalletAuth: Boolean!
3976
+
3977
+ """Cover of profile page."""
3978
+ profileCover: String
3979
+
3980
+ """User connected social accounts."""
3981
+ socialAccounts: [SocialAccount!]!
3982
+
3983
+ """Is user name editable."""
3984
+ userNameEditable: Boolean!
3985
+ }
3986
+
3987
+ enum UserInfoFields {
3988
+ agreeOn
3989
+ avatar
3990
+ description
3991
+ displayName
3992
+ email
3993
+ }
3994
+
3995
+ input UserInput {
3996
+ ethAddress: String
3997
+ userName: String
3998
+
3999
+ """used for case insensitive username search """
4000
+ userNameCaseIgnore: Boolean = false
4001
+ }
4002
+
4003
+ enum UserLanguage {
4004
+ en
4005
+ zh_hans
4006
+ zh_hant
4007
+ }
4008
+
4009
+ type UserNotice implements Notice {
4010
+ """List of notice actors."""
4011
+ actors: [User!]
4012
+
4013
+ """Time of this notice was created."""
4014
+ createdAt: DateTime!
4015
+
4016
+ """Unique ID of this notice."""
4017
+ id: ID!
4018
+ target: User!
4019
+ type: UserNoticeType!
4020
+
4021
+ """The value determines if the notice is unread or not."""
4022
+ unread: Boolean!
4023
+ }
4024
+
4025
+ enum UserNoticeType {
4026
+ UserNewFollower
4027
+ }
4028
+
4029
+ type UserOSS {
4030
+ boost: Float!
4031
+ featureFlags: [UserFeatureFlag!]!
4032
+ restrictions: [UserRestriction!]!
4033
+ score: Float!
4034
+ }
4035
+
4036
+ type UserPostMomentActivity {
4037
+ actor: User!
4038
+ createdAt: DateTime!
4039
+
4040
+ """Another 3 moments posted by actor"""
4041
+ more: [Moment!]!
4042
+
4043
+ """Moment posted by actor"""
4044
+ node: Moment!
4045
+ }
4046
+
4047
+ type UserPublishArticleActivity {
4048
+ actor: User!
4049
+ createdAt: DateTime!
4050
+
4051
+ """Article published by actor"""
4052
+ node: Article!
4053
+ }
4054
+
4055
+ type UserRecommendationActivity {
4056
+ """Recommended users"""
4057
+ nodes: [User!]
4058
+
4059
+ """The source type of recommendation"""
4060
+ source: UserRecommendationActivitySource
4061
+ }
4062
+
4063
+ enum UserRecommendationActivitySource {
4064
+ UserFollowing
4065
+ }
4066
+
4067
+ type UserRestriction {
4068
+ createdAt: DateTime!
4069
+ type: UserRestrictionType!
4070
+ }
4071
+
4072
+ enum UserRestrictionType {
4073
+ articleHottest
4074
+ articleNewest
4075
+ }
4076
+
4077
+ enum UserRole {
4078
+ admin
4079
+ user
4080
+ }
4081
+
4082
+ type UserSettings {
4083
+ """User currency preference."""
4084
+ currency: QuoteCurrency!
4085
+
4086
+ """User language setting."""
4087
+ language: UserLanguage!
4088
+
4089
+ """Notification settings."""
4090
+ notification: NotificationSetting
4091
+ }
4092
+
4093
+ enum UserState {
4094
+ active
4095
+ archived
4096
+ banned
4097
+ frozen
4098
+ }
4099
+
4100
+ type UserStatus {
4101
+ """Number of articles published by user"""
4102
+ articleCount: Int!
4103
+
4104
+ """
4105
+ Number of chances for the user to change email in a nature day. Reset in UTC+8 0:00
4106
+ """
4107
+ changeEmailTimesLeft: Int!
4108
+
4109
+ """Number of comments posted by user."""
4110
+ commentCount: Int!
4111
+
4112
+ """Number of articles donated by user"""
4113
+ donatedArticleCount: Int!
4114
+
4115
+ """Weather login password is set for email login."""
4116
+ hasEmailLoginPassword: Boolean!
4117
+
4118
+ """Whether user already set payment password."""
4119
+ hasPaymentPassword: Boolean!
4120
+
4121
+ """Number of moments posted by user"""
4122
+ momentCount: Int!
4123
+
4124
+ """Number of times of donations received by user"""
4125
+ receivedDonationCount: Int!
4126
+
4127
+ """User role and access level."""
4128
+ role: UserRole!
4129
+
4130
+ """User state."""
4131
+ state: UserState!
4132
+
4133
+ """
4134
+ Number of referred user registration count (in Digital Nomad Campaign).
4135
+ """
4136
+ totalReferredCount: Int!
4137
+
4138
+ """Number of total written words."""
4139
+ totalWordCount: Int!
4140
+
4141
+ """Whether there are unread activities from following."""
4142
+ unreadFollowing: Boolean!
4143
+
4144
+ """Number of unread notices."""
4145
+ unreadNoticeCount: Int!
4146
+ }
4147
+
4148
+ enum VerificationCodeType {
4149
+ email_otp
4150
+ email_verify
4151
+ payment_password_reset
4152
+ register
4153
+ }
4154
+
4155
+ input VerifyEmailInput {
4156
+ code: String!
4157
+ email: String!
4158
+ }
4159
+
4160
+ """Enums for vote types."""
4161
+ enum Vote {
4162
+ down
4163
+ up
4164
+ }
4165
+
4166
+ input VoteCommentInput {
4167
+ id: ID!
4168
+ vote: Vote!
4169
+ }
4170
+
4171
+ type Wallet {
4172
+ balance: Balance!
4173
+
4174
+ """The last four digits of the card."""
4175
+ cardLast4: String
4176
+
4177
+ """
4178
+ URL of Stripe Dashboard to manage subscription invoice and payment method
4179
+ """
4180
+ customerPortal: String
4181
+
4182
+ """Account of Stripe Connect to manage payout"""
4183
+ stripeAccount: StripeAccount
4184
+ transactions(input: TransactionsArgs!): TransactionConnection!
4185
+ }
4186
+
4187
+ input WalletLoginInput {
4188
+ ethAddress: String!
4189
+
4190
+ """used in register"""
4191
+ language: UserLanguage
4192
+
4193
+ """nonce from generateSigningMessage"""
4194
+ nonce: String!
4195
+ referralCode: String
4196
+
4197
+ """sign'ed by wallet"""
4198
+ signature: String!
4199
+
4200
+ """the message being sign'ed, including nonce"""
4201
+ signedMessage: String!
4202
+ }
4203
+
4204
+ type WithdrawLockedTokensResult {
4205
+ transaction: Transaction!
4206
+ }
4207
+
4208
+ union Writing = Article | Comment | Moment
4209
+
4210
+ type WritingChallenge implements Campaign & Channel & Node {
4211
+ announcements: [Article!]!
4212
+ application: CampaignApplication
4213
+ applicationPeriod: DatetimeRange
4214
+ articles(input: CampaignArticlesInput!): CampaignArticleConnection!
4215
+ channelEnabled: Boolean!
4216
+ cover: String
4217
+ description(input: TranslationArgs): String
4218
+ featuredDescription(input: TranslationArgs): String!
4219
+ id: ID!
4220
+ isManager: Boolean!
4221
+ link: String!
4222
+ name(input: TranslationArgs): String!
4223
+ navbarTitle(input: TranslationArgs): String!
4224
+ organizers: [User!]!
4225
+ oss: CampaignOSS!
4226
+ participants(input: CampaignParticipantsInput!): CampaignParticipantConnection!
4227
+ shortHash: String!
4228
+ showAd: Boolean!
4229
+ showOther: Boolean!
4230
+ stages: [CampaignStage!]!
4231
+ state: CampaignState!
4232
+ writingPeriod: DatetimeRange
4233
+ }
4234
+
4235
+ type WritingConnection implements Connection {
4236
+ edges: [WritingEdge!]
4237
+ pageInfo: PageInfo!
4238
+ totalCount: Int!
4239
+ }
4240
+
4241
+ type WritingEdge {
4242
+ cursor: String!
4243
+ node: Writing!
4244
+ }
4245
+
4246
+ input WritingInput {
4247
+ after: String
4248
+ first: Int
4249
+ }
4250
+
4251
+ scalar amount_Float_NotNull_exclusiveMin_0
4252
+
4253
+ scalar amount_Float_exclusiveMin_0
4254
+
4255
+ scalar amount_Int_NotNull_min_1
4256
+
4257
+ scalar banDays_Int_exclusiveMin_0
4258
+
4259
+ scalar boost_Float_NotNull_min_0
4260
+
4261
+ scalar description_String_maxLength_140
4262
+
4263
+ scalar email_String_NotNull_format_email
4264
+
4265
+ scalar email_String_format_email
4266
+
4267
+ scalar first_Int_NotNull_min_0
4268
+
4269
+ scalar first_Int_min_0
4270
+
4271
+ scalar freePeriod_Int_NotNull_exclusiveMin_0
4272
+
4273
+ scalar last_Int_min_0
4274
+
4275
+ scalar link_String_NotNull_format_uri
4276
+
4277
+ scalar link_String_format_uri
4278
+
4279
+ scalar random_Int_min_0_max_49
4280
+
4281
+ scalar redirectUrl_String_format_uri
4282
+
4283
+ scalar replyToDonator_String_maxLength_140
4284
+
4285
+ scalar requestForDonation_String_maxLength_140
4286
+
4287
+ scalar url_String_format_uri
4288
+
4289
+ scalar website_String_format_uri