├── .eslintrc.yml
├── .github
└── workflows
│ └── ci.yml
├── .gitignore
├── .husky
└── pre-push
├── .prettierrc
├── LICENSE
├── README.md
├── anilist-codegen.yml
├── anilist-schema.json
├── annict-codegen.yml
├── annict-schema.gql
├── annictGqlNaming.js
├── gql-documents
├── anilist
│ ├── lib.gql
│ ├── me.gql
│ └── update.gql
└── annict
│ ├── lib.gql
│ └── me.gql
├── index.html
├── netlify.toml
├── netlify
└── functions
│ ├── anilist-callback.ts
│ ├── annict-callback.ts
│ └── mal-callback.ts
├── package.json
├── postcss.config.js
├── src
├── App.tsx
├── aniList.ts
├── aniListApiEntry.ts
├── aniListGql.ts
├── annictApiEntry.ts
├── annictGql.ts
├── components
│ ├── AniListLogin.tsx
│ ├── AniListUserInfo.tsx
│ ├── AnnictLogin.tsx
│ ├── AnnictUserInfo.tsx
│ ├── CheckDiff.tsx
│ ├── DiffFetchButton.tsx
│ ├── DiffTable.tsx
│ ├── DoSync.tsx
│ ├── FirstView.tsx
│ ├── MALLogin.tsx
│ ├── MALUserInfo.tsx
│ ├── Main.tsx
│ └── MissingWorkTable.tsx
├── constants.ts
├── index.tsx
├── mal.ts
├── query.ts
├── types.ts
├── utils.ts
└── vite-env.d.ts
├── tsconfig.eslint.json
├── tsconfig.json
├── vite.config.ts
└── yarn.lock
/.eslintrc.yml:
--------------------------------------------------------------------------------
1 | ---
2 | extends:
3 | - "@ci7lus/eslint-config"
4 | - "plugin:react/recommended"
5 | - "plugin:eslint-plugin-react-hooks/recommended"
6 | parserOptions:
7 | project:
8 | - "./tsconfig.eslint.json"
9 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches:
6 | - "**"
7 | tags-ignore:
8 | - "**"
9 | pull_request:
10 |
11 | jobs:
12 | lint:
13 | runs-on: ubuntu-latest
14 |
15 | strategy:
16 | matrix:
17 | node-version: [18.x]
18 |
19 | steps:
20 | - uses: actions/checkout@v3
21 | - name: Use Node.js ${{ matrix.node-version }}
22 | uses: actions/setup-node@v3
23 | with:
24 | node-version: ${{ matrix.node-version }}
25 | cache: "yarn"
26 | - name: Install
27 | run: |
28 | yarn
29 | - name: Lint
30 | run: |
31 | yarn lint:prettier
32 | yarn lint:eslint
33 | build:
34 | runs-on: ubuntu-latest
35 |
36 | strategy:
37 | matrix:
38 | node-version: [18.x]
39 |
40 | needs: lint
41 |
42 | steps:
43 | - uses: actions/checkout@v3
44 | - name: Use Node.js ${{ matrix.node-version }}
45 | uses: actions/setup-node@v3
46 | with:
47 | node-version: ${{ matrix.node-version }}
48 | cache: "yarn"
49 | - name: Install
50 | run: |
51 | yarn
52 | - name: Build
53 | run: |
54 | yarn build
55 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/node
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=node
3 |
4 | ### Node ###
5 | # Logs
6 | logs
7 | *.log
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
11 | lerna-debug.log*
12 |
13 | # Diagnostic reports (https://nodejs.org/api/report.html)
14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
15 |
16 | # Runtime data
17 | pids
18 | *.pid
19 | *.seed
20 | *.pid.lock
21 |
22 | # Directory for instrumented libs generated by jscoverage/JSCover
23 | lib-cov
24 |
25 | # Coverage directory used by tools like istanbul
26 | coverage
27 | *.lcov
28 |
29 | # nyc test coverage
30 | .nyc_output
31 |
32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
33 | .grunt
34 |
35 | # Bower dependency directory (https://bower.io/)
36 | bower_components
37 |
38 | # node-waf configuration
39 | .lock-wscript
40 |
41 | # Compiled binary addons (https://nodejs.org/api/addons.html)
42 | build/Release
43 |
44 | # Dependency directories
45 | node_modules/
46 | jspm_packages/
47 |
48 | # TypeScript v1 declaration files
49 | typings/
50 |
51 | # TypeScript cache
52 | *.tsbuildinfo
53 |
54 | # Optional npm cache directory
55 | .npm
56 |
57 | # Optional eslint cache
58 | .eslintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variables file
76 | .env
77 | .env.test
78 |
79 | # parcel-bundler cache (https://parceljs.org/)
80 | .cache
81 |
82 | # Next.js build output
83 | .next
84 |
85 | # Nuxt.js build / generate output
86 | .nuxt
87 | dist
88 |
89 | # Gatsby files
90 | .cache/
91 | # Comment in the public line in if your project uses Gatsby and not Next.js
92 | # https://nextjs.org/blog/next-9-1#public-directory-support
93 | # public
94 |
95 | # vuepress build output
96 | .vuepress/dist
97 |
98 | # Serverless directories
99 | .serverless/
100 |
101 | # FuseBox cache
102 | .fusebox/
103 |
104 | # DynamoDB Local files
105 | .dynamodb/
106 |
107 | # TernJS port file
108 | .tern-port
109 |
110 | # Stores VSCode versions used for testing VSCode extensions
111 | .vscode-test
112 |
113 | # End of https://www.toptal.com/developers/gitignore/api/node
114 |
115 | lib
116 | .netlify
--------------------------------------------------------------------------------
/.husky/pre-push:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | yarn lint-staged
5 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "es5",
3 | "semi": false,
4 | "singleQuote": false
5 | }
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 ci7lus
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # imau
2 |
3 | Sync your viewing status from Annict to MAL/AniList.
4 |
5 | [](https://gyazo.com/2c86edeea8e8245b3b317f9462bbfbca)
6 |
7 | CLI version: [SlashNephy/annict2anilist](https://github.com/SlashNephy/annict2anilist)
8 |
9 | ## dev
10 |
11 | ```bash
12 | npm install -g netlify-cli
13 | yarn
14 | netlify dev
15 | ```
16 |
17 | ## "imau" means
18 |
19 | 今鵜凪咲 from [SELECTION PROJECT](https://annict.com/works/7836).
20 |
--------------------------------------------------------------------------------
/anilist-codegen.yml:
--------------------------------------------------------------------------------
1 | schema: ./anilist-schema.json
2 | documents: ./gql-documents/anilist/*.gql
3 | generates:
4 | ./src/aniListGql.ts:
5 | plugins:
6 | - add:
7 | content: "/* eslint-disable */"
8 | - typescript
9 | - typescript-operations
10 | - typescript-graphql-request
11 | config:
12 | avoidOptionals: true
13 |
--------------------------------------------------------------------------------
/annict-codegen.yml:
--------------------------------------------------------------------------------
1 | schema: ./annict-schema.gql
2 | documents: ./gql-documents/annict/*.gql
3 | config:
4 | namingConvention: ./annictGqlNaming.js
5 | generates:
6 | ./src/annictGql.ts:
7 | plugins:
8 | - add:
9 | content: "/* eslint-disable */"
10 | - typescript
11 | - typescript-operations
12 | - typescript-graphql-request
13 | config:
14 | avoidOptionals: true
15 |
--------------------------------------------------------------------------------
/annict-schema.gql:
--------------------------------------------------------------------------------
1 | type Activity implements Node {
2 | annictId: Int!
3 | # ID of the object.
4 | id: ID!
5 | user: User!
6 | }
7 |
8 | enum ActivityAction {
9 | CREATE
10 | }
11 |
12 | # The connection type for Activity.
13 | type ActivityConnection {
14 | # A list of edges.
15 | edges: [ActivityEdge]
16 | # A list of nodes.
17 | nodes: [Activity]
18 | # Information to aid in pagination.
19 | pageInfo: PageInfo!
20 | }
21 |
22 | # An edge in a connection.
23 | type ActivityEdge {
24 | action: ActivityAction!
25 | annictId: Int!
26 | # A cursor for use in pagination.
27 | cursor: String!
28 | item: ActivityItem
29 | # Deprecated: Use `item` instead.
30 | node: ActivityItem @deprecated(reason: "Use `item` instead.")
31 | user: User!
32 | }
33 |
34 | union ActivityItem = MultipleRecord | Record | Review | Status
35 | input ActivityOrder {
36 | field: ActivityOrderField!
37 | direction: OrderDirection!
38 | }
39 |
40 | enum ActivityOrderField {
41 | CREATED_AT
42 | }
43 |
44 | type Cast implements Node {
45 | annictId: Int!
46 | character: Character!
47 | id: ID!
48 | name: String!
49 | nameEn: String!
50 | person: Person!
51 | sortNumber: Int!
52 | work: Work!
53 | }
54 |
55 | # The connection type for Cast.
56 | type CastConnection {
57 | # A list of edges.
58 | edges: [CastEdge]
59 | # A list of nodes.
60 | nodes: [Cast]
61 | # Information to aid in pagination.
62 | pageInfo: PageInfo!
63 | }
64 |
65 | # An edge in a connection.
66 | type CastEdge {
67 | # A cursor for use in pagination.
68 | cursor: String!
69 | # The item at the end of the edge.
70 | node: Cast
71 | }
72 |
73 | input CastOrder {
74 | field: CastOrderField!
75 | direction: OrderDirection!
76 | }
77 |
78 | enum CastOrderField {
79 | CREATED_AT
80 | SORT_NUMBER
81 | }
82 |
83 | type Channel implements Node {
84 | annictId: Int!
85 | channelGroup: ChannelGroup!
86 | id: ID!
87 | name: String!
88 | programs(
89 | # Returns the elements in the list that come after the specified cursor.
90 | after: String
91 | # Returns the elements in the list that come before the specified cursor.
92 | before: String
93 | # Returns the first _n_ elements from the list.
94 | first: Int
95 | # Returns the last _n_ elements from the list.
96 | last: Int
97 | ): ProgramConnection
98 | published: Boolean!
99 | scChid: Int!
100 | }
101 |
102 | # The connection type for Channel.
103 | type ChannelConnection {
104 | # A list of edges.
105 | edges: [ChannelEdge]
106 | # A list of nodes.
107 | nodes: [Channel]
108 | # Information to aid in pagination.
109 | pageInfo: PageInfo!
110 | }
111 |
112 | # An edge in a connection.
113 | type ChannelEdge {
114 | # A cursor for use in pagination.
115 | cursor: String!
116 | # The item at the end of the edge.
117 | node: Channel
118 | }
119 |
120 | type ChannelGroup implements Node {
121 | annictId: Int!
122 | channels(
123 | # Returns the elements in the list that come after the specified cursor.
124 | after: String
125 | # Returns the elements in the list that come before the specified cursor.
126 | before: String
127 | # Returns the first _n_ elements from the list.
128 | first: Int
129 | # Returns the last _n_ elements from the list.
130 | last: Int
131 | ): ChannelConnection
132 | id: ID!
133 | name: String!
134 | sortNumber: Int!
135 | }
136 |
137 | type Character implements Node {
138 | age: String!
139 | ageEn: String!
140 | annictId: Int!
141 | birthday: String!
142 | birthdayEn: String!
143 | bloodType: String!
144 | bloodTypeEn: String!
145 | description: String!
146 | descriptionEn: String!
147 | descriptionSource: String!
148 | descriptionSourceEn: String!
149 | favoriteCharactersCount: Int!
150 | height: String!
151 | heightEn: String!
152 | id: ID!
153 | name: String!
154 | nameEn: String!
155 | nameKana: String!
156 | nationality: String!
157 | nationalityEn: String!
158 | nickname: String!
159 | nicknameEn: String!
160 | occupation: String!
161 | occupationEn: String!
162 | series: Series!
163 | weight: String!
164 | weightEn: String!
165 | }
166 |
167 | # The connection type for Character.
168 | type CharacterConnection {
169 | # A list of edges.
170 | edges: [CharacterEdge]
171 | # A list of nodes.
172 | nodes: [Character]
173 | # Information to aid in pagination.
174 | pageInfo: PageInfo!
175 | }
176 |
177 | # An edge in a connection.
178 | type CharacterEdge {
179 | # A cursor for use in pagination.
180 | cursor: String!
181 | # The item at the end of the edge.
182 | node: Character
183 | }
184 |
185 | input CharacterOrder {
186 | field: CharacterOrderField!
187 | direction: OrderDirection!
188 | }
189 |
190 | enum CharacterOrderField {
191 | CREATED_AT
192 | FAVORITE_CHARACTERS_COUNT
193 | }
194 |
195 | # Autogenerated input type of CreateRecord
196 | input CreateRecordInput {
197 | episodeId: ID!
198 | comment: String
199 | ratingState: RatingState
200 | shareTwitter: Boolean
201 | shareFacebook: Boolean
202 | # A unique identifier for the client performing the mutation.
203 | clientMutationId: String
204 | }
205 |
206 | # Autogenerated return type of CreateRecord
207 | type CreateRecordPayload {
208 | # A unique identifier for the client performing the mutation.
209 | clientMutationId: String
210 | record: Record
211 | }
212 |
213 | # Autogenerated input type of CreateReview
214 | input CreateReviewInput {
215 | workId: ID!
216 | title: String
217 | body: String!
218 | ratingOverallState: RatingState
219 | ratingAnimationState: RatingState
220 | ratingMusicState: RatingState
221 | ratingStoryState: RatingState
222 | ratingCharacterState: RatingState
223 | shareTwitter: Boolean
224 | shareFacebook: Boolean
225 | # A unique identifier for the client performing the mutation.
226 | clientMutationId: String
227 | }
228 |
229 | # Autogenerated return type of CreateReview
230 | type CreateReviewPayload {
231 | # A unique identifier for the client performing the mutation.
232 | clientMutationId: String
233 | review: Review
234 | }
235 |
236 | scalar DateTime
237 |
238 | # Autogenerated input type of DeleteRecord
239 | input DeleteRecordInput {
240 | recordId: ID!
241 | # A unique identifier for the client performing the mutation.
242 | clientMutationId: String
243 | }
244 |
245 | # Autogenerated return type of DeleteRecord
246 | type DeleteRecordPayload {
247 | # A unique identifier for the client performing the mutation.
248 | clientMutationId: String
249 | episode: Episode
250 | }
251 |
252 | # Autogenerated input type of DeleteReview
253 | input DeleteReviewInput {
254 | reviewId: ID!
255 | # A unique identifier for the client performing the mutation.
256 | clientMutationId: String
257 | }
258 |
259 | # Autogenerated return type of DeleteReview
260 | type DeleteReviewPayload {
261 | # A unique identifier for the client performing the mutation.
262 | clientMutationId: String
263 | work: Work
264 | }
265 |
266 | # An episode of a work
267 | type Episode implements Node {
268 | annictId: Int!
269 | id: ID!
270 | nextEpisode: Episode
271 | number: Int
272 | numberText: String
273 | prevEpisode: Episode
274 | recordCommentsCount: Int!
275 | records(
276 | # Returns the elements in the list that come after the specified cursor.
277 | after: String
278 | # Returns the elements in the list that come before the specified cursor.
279 | before: String
280 | # Returns the first _n_ elements from the list.
281 | first: Int
282 | # Returns the last _n_ elements from the list.
283 | last: Int
284 | orderBy: RecordOrder
285 | hasComment: Boolean
286 | ): RecordConnection
287 | recordsCount: Int!
288 | satisfactionRate: Float
289 | sortNumber: Int!
290 | title: String
291 | viewerDidTrack: Boolean!
292 | viewerRecordsCount: Int!
293 | work: Work!
294 | }
295 |
296 | # The connection type for Episode.
297 | type EpisodeConnection {
298 | # A list of edges.
299 | edges: [EpisodeEdge]
300 | # A list of nodes.
301 | nodes: [Episode]
302 | # Information to aid in pagination.
303 | pageInfo: PageInfo!
304 | }
305 |
306 | # An edge in a connection.
307 | type EpisodeEdge {
308 | # A cursor for use in pagination.
309 | cursor: String!
310 | # The item at the end of the edge.
311 | node: Episode
312 | }
313 |
314 | input EpisodeOrder {
315 | field: EpisodeOrderField!
316 | direction: OrderDirection!
317 | }
318 |
319 | enum EpisodeOrderField {
320 | CREATED_AT
321 | SORT_NUMBER
322 | }
323 |
324 | type LibraryEntry implements Node {
325 | id: ID!
326 | nextEpisode: Episode
327 | nextProgram: Program
328 | note: String!
329 | status: Status
330 | user: User!
331 | work: Work!
332 | }
333 |
334 | # The connection type for LibraryEntry.
335 | type LibraryEntryConnection {
336 | # A list of edges.
337 | edges: [LibraryEntryEdge]
338 | # A list of nodes.
339 | nodes: [LibraryEntry]
340 | # Information to aid in pagination.
341 | pageInfo: PageInfo!
342 | }
343 |
344 | # An edge in a connection.
345 | type LibraryEntryEdge {
346 | # A cursor for use in pagination.
347 | cursor: String!
348 | # The item at the end of the edge.
349 | node: LibraryEntry
350 | }
351 |
352 | input LibraryEntryOrder {
353 | field: LibraryEntryOrderField!
354 | direction: OrderDirection!
355 | }
356 |
357 | enum LibraryEntryOrderField {
358 | # 最後に記録またはスキップした日時
359 | LAST_TRACKED_AT
360 | }
361 |
362 | # Media of anime
363 | enum Media {
364 | TV
365 | OVA
366 | MOVIE
367 | WEB
368 | OTHER
369 | }
370 |
371 | type MultipleRecord implements Node {
372 | annictId: Int!
373 | createdAt: DateTime!
374 | id: ID!
375 | records(
376 | # Returns the elements in the list that come after the specified cursor.
377 | after: String
378 | # Returns the elements in the list that come before the specified cursor.
379 | before: String
380 | # Returns the first _n_ elements from the list.
381 | first: Int
382 | # Returns the last _n_ elements from the list.
383 | last: Int
384 | ): RecordConnection
385 | user: User!
386 | work: Work!
387 | }
388 |
389 | type Mutation {
390 | createRecord(
391 | # Parameters for CreateRecord
392 | input: CreateRecordInput!
393 | ): CreateRecordPayload
394 | createReview(
395 | # Parameters for CreateReview
396 | input: CreateReviewInput!
397 | ): CreateReviewPayload
398 | deleteRecord(
399 | # Parameters for DeleteRecord
400 | input: DeleteRecordInput!
401 | ): DeleteRecordPayload
402 | deleteReview(
403 | # Parameters for DeleteReview
404 | input: DeleteReviewInput!
405 | ): DeleteReviewPayload
406 | updateRecord(
407 | # Parameters for UpdateRecord
408 | input: UpdateRecordInput!
409 | ): UpdateRecordPayload
410 | updateReview(
411 | # Parameters for UpdateReview
412 | input: UpdateReviewInput!
413 | ): UpdateReviewPayload
414 | updateStatus(
415 | # Parameters for UpdateStatus
416 | input: UpdateStatusInput!
417 | ): UpdateStatusPayload
418 | }
419 |
420 | # An object with an ID.
421 | interface Node {
422 | # ID of the object.
423 | id: ID!
424 | }
425 |
426 | enum OrderDirection {
427 | ASC
428 | DESC
429 | }
430 |
431 | type Organization implements Node {
432 | annictId: Int!
433 | favoriteOrganizationsCount: Int!
434 | id: ID!
435 | name: String!
436 | nameEn: String!
437 | nameKana: String!
438 | staffsCount: Int!
439 | twitterUsername: String!
440 | twitterUsernameEn: String!
441 | url: String!
442 | urlEn: String!
443 | wikipediaUrl: String!
444 | wikipediaUrlEn: String!
445 | }
446 |
447 | # The connection type for Organization.
448 | type OrganizationConnection {
449 | # A list of edges.
450 | edges: [OrganizationEdge]
451 | # A list of nodes.
452 | nodes: [Organization]
453 | # Information to aid in pagination.
454 | pageInfo: PageInfo!
455 | }
456 |
457 | # An edge in a connection.
458 | type OrganizationEdge {
459 | # A cursor for use in pagination.
460 | cursor: String!
461 | # The item at the end of the edge.
462 | node: Organization
463 | }
464 |
465 | input OrganizationOrder {
466 | field: OrganizationOrderField!
467 | direction: OrderDirection!
468 | }
469 |
470 | enum OrganizationOrderField {
471 | CREATED_AT
472 | FAVORITE_ORGANIZATIONS_COUNT
473 | }
474 |
475 | # Information about pagination in a connection.
476 | type PageInfo {
477 | # When paginating forwards, the cursor to continue.
478 | endCursor: String
479 | # When paginating forwards, are there more items?
480 | hasNextPage: Boolean!
481 | # When paginating backwards, are there more items?
482 | hasPreviousPage: Boolean!
483 | # When paginating backwards, the cursor to continue.
484 | startCursor: String
485 | }
486 |
487 | type Person implements Node {
488 | annictId: Int!
489 | birthday: String!
490 | bloodType: String!
491 | castsCount: Int!
492 | favoritePeopleCount: Int!
493 | genderText: String!
494 | height: String!
495 | id: ID!
496 | name: String!
497 | nameEn: String!
498 | nameKana: String!
499 | nickname: String!
500 | nicknameEn: String!
501 | prefecture: Prefecture!
502 | staffsCount: Int!
503 | twitterUsername: String!
504 | twitterUsernameEn: String!
505 | url: String!
506 | urlEn: String!
507 | wikipediaUrl: String!
508 | wikipediaUrlEn: String!
509 | }
510 |
511 | # The connection type for Person.
512 | type PersonConnection {
513 | # A list of edges.
514 | edges: [PersonEdge]
515 | # A list of nodes.
516 | nodes: [Person]
517 | # Information to aid in pagination.
518 | pageInfo: PageInfo!
519 | }
520 |
521 | # An edge in a connection.
522 | type PersonEdge {
523 | # A cursor for use in pagination.
524 | cursor: String!
525 | # The item at the end of the edge.
526 | node: Person
527 | }
528 |
529 | input PersonOrder {
530 | field: PersonOrderField!
531 | direction: OrderDirection!
532 | }
533 |
534 | enum PersonOrderField {
535 | CREATED_AT
536 | FAVORITE_PEOPLE_COUNT
537 | }
538 |
539 | type Prefecture implements Node {
540 | annictId: Int!
541 | id: ID!
542 | name: String!
543 | }
544 |
545 | type Program implements Node {
546 | annictId: Int!
547 | channel: Channel!
548 | episode: Episode!
549 | id: ID!
550 | rebroadcast: Boolean!
551 | scPid: Int
552 | startedAt: DateTime!
553 | state: ProgramState!
554 | work: Work!
555 | }
556 |
557 | # The connection type for Program.
558 | type ProgramConnection {
559 | # A list of edges.
560 | edges: [ProgramEdge]
561 | # A list of nodes.
562 | nodes: [Program]
563 | # Information to aid in pagination.
564 | pageInfo: PageInfo!
565 | }
566 |
567 | # An edge in a connection.
568 | type ProgramEdge {
569 | # A cursor for use in pagination.
570 | cursor: String!
571 | # The item at the end of the edge.
572 | node: Program
573 | }
574 |
575 | input ProgramOrder {
576 | field: ProgramOrderField!
577 | direction: OrderDirection!
578 | }
579 |
580 | enum ProgramOrderField {
581 | STARTED_AT
582 | }
583 |
584 | enum ProgramState {
585 | PUBLISHED
586 | HIDDEN
587 | }
588 |
589 | type Query {
590 | # Fetches an object given its ID.
591 | node(
592 | # ID of the object.
593 | id: ID!
594 | ): Node
595 | # Fetches a list of objects given a list of IDs.
596 | nodes(
597 | # IDs of the objects.
598 | ids: [ID!]!
599 | ): [Node]!
600 | searchCharacters(
601 | # Returns the elements in the list that come after the specified cursor.
602 | after: String
603 | # Returns the elements in the list that come before the specified cursor.
604 | before: String
605 | # Returns the first _n_ elements from the list.
606 | first: Int
607 | # Returns the last _n_ elements from the list.
608 | last: Int
609 | annictIds: [Int!]
610 | names: [String!]
611 | orderBy: CharacterOrder
612 | ): CharacterConnection
613 | searchEpisodes(
614 | # Returns the elements in the list that come after the specified cursor.
615 | after: String
616 | # Returns the elements in the list that come before the specified cursor.
617 | before: String
618 | # Returns the first _n_ elements from the list.
619 | first: Int
620 | # Returns the last _n_ elements from the list.
621 | last: Int
622 | annictIds: [Int!]
623 | orderBy: EpisodeOrder
624 | ): EpisodeConnection
625 | searchOrganizations(
626 | # Returns the elements in the list that come after the specified cursor.
627 | after: String
628 | # Returns the elements in the list that come before the specified cursor.
629 | before: String
630 | # Returns the first _n_ elements from the list.
631 | first: Int
632 | # Returns the last _n_ elements from the list.
633 | last: Int
634 | annictIds: [Int!]
635 | names: [String!]
636 | orderBy: OrganizationOrder
637 | ): OrganizationConnection
638 | searchPeople(
639 | # Returns the elements in the list that come after the specified cursor.
640 | after: String
641 | # Returns the elements in the list that come before the specified cursor.
642 | before: String
643 | # Returns the first _n_ elements from the list.
644 | first: Int
645 | # Returns the last _n_ elements from the list.
646 | last: Int
647 | annictIds: [Int!]
648 | names: [String!]
649 | orderBy: PersonOrder
650 | ): PersonConnection
651 | searchWorks(
652 | # Returns the elements in the list that come after the specified cursor.
653 | after: String
654 | # Returns the elements in the list that come before the specified cursor.
655 | before: String
656 | # Returns the first _n_ elements from the list.
657 | first: Int
658 | # Returns the last _n_ elements from the list.
659 | last: Int
660 | annictIds: [Int!]
661 | seasons: [String!]
662 | titles: [String!]
663 | orderBy: WorkOrder
664 | ): WorkConnection
665 | user(username: String!): User
666 | viewer: User
667 | }
668 |
669 | enum RatingState {
670 | GREAT
671 | GOOD
672 | AVERAGE
673 | BAD
674 | }
675 |
676 | type Record implements Node {
677 | annictId: Int!
678 | comment: String
679 | commentsCount: Int!
680 | createdAt: DateTime!
681 | episode: Episode!
682 | facebookClickCount: Int!
683 | id: ID!
684 | likesCount: Int!
685 | modified: Boolean!
686 | rating: Float
687 | ratingState: RatingState
688 | twitterClickCount: Int!
689 | updatedAt: DateTime!
690 | user: User!
691 | work: Work!
692 | }
693 |
694 | # The connection type for Record.
695 | type RecordConnection {
696 | # A list of edges.
697 | edges: [RecordEdge]
698 | # A list of nodes.
699 | nodes: [Record]
700 | # Information to aid in pagination.
701 | pageInfo: PageInfo!
702 | }
703 |
704 | # An edge in a connection.
705 | type RecordEdge {
706 | # A cursor for use in pagination.
707 | cursor: String!
708 | # The item at the end of the edge.
709 | node: Record
710 | }
711 |
712 | input RecordOrder {
713 | field: RecordOrderField!
714 | direction: OrderDirection!
715 | }
716 |
717 | enum RecordOrderField {
718 | CREATED_AT
719 | LIKES_COUNT
720 | }
721 |
722 | type Review implements Node {
723 | annictId: Int!
724 | body: String!
725 | createdAt: DateTime!
726 | id: ID!
727 | impressionsCount: Int!
728 | likesCount: Int!
729 | modifiedAt: DateTime
730 | ratingAnimationState: RatingState
731 | ratingCharacterState: RatingState
732 | ratingMusicState: RatingState
733 | ratingOverallState: RatingState
734 | ratingStoryState: RatingState
735 | title: String
736 | updatedAt: DateTime!
737 | user: User!
738 | work: Work!
739 | }
740 |
741 | # The connection type for Review.
742 | type ReviewConnection {
743 | # A list of edges.
744 | edges: [ReviewEdge]
745 | # A list of nodes.
746 | nodes: [Review]
747 | # Information to aid in pagination.
748 | pageInfo: PageInfo!
749 | }
750 |
751 | # An edge in a connection.
752 | type ReviewEdge {
753 | # A cursor for use in pagination.
754 | cursor: String!
755 | # The item at the end of the edge.
756 | node: Review
757 | }
758 |
759 | input ReviewOrder {
760 | field: ReviewOrderField!
761 | direction: OrderDirection!
762 | }
763 |
764 | enum ReviewOrderField {
765 | CREATED_AT
766 | LIKES_COUNT
767 | }
768 |
769 | # Season name
770 | enum SeasonName {
771 | WINTER
772 | SPRING
773 | SUMMER
774 | AUTUMN
775 | }
776 |
777 | type Series implements Node {
778 | annictId: Int!
779 | id: ID!
780 | name: String!
781 | nameEn: String!
782 | nameRo: String!
783 | works(
784 | # Returns the elements in the list that come after the specified cursor.
785 | after: String
786 | # Returns the elements in the list that come before the specified cursor.
787 | before: String
788 | # Returns the first _n_ elements from the list.
789 | first: Int
790 | # Returns the last _n_ elements from the list.
791 | last: Int
792 | orderBy: SeriesWorkOrder
793 | ): SeriesWorkConnection
794 | }
795 |
796 | # The connection type for Series.
797 | type SeriesConnection {
798 | # A list of edges.
799 | edges: [SeriesEdge]
800 | # A list of nodes.
801 | nodes: [Series]
802 | # Information to aid in pagination.
803 | pageInfo: PageInfo!
804 | }
805 |
806 | # An edge in a connection.
807 | type SeriesEdge {
808 | # A cursor for use in pagination.
809 | cursor: String!
810 | # The item at the end of the edge.
811 | node: Series
812 | }
813 |
814 | # The connection type for Work.
815 | type SeriesWorkConnection {
816 | # A list of edges.
817 | edges: [SeriesWorkEdge]
818 | # A list of nodes.
819 | nodes: [Work]
820 | # Information to aid in pagination.
821 | pageInfo: PageInfo!
822 | }
823 |
824 | # An edge in a connection.
825 | type SeriesWorkEdge {
826 | # A cursor for use in pagination.
827 | cursor: String!
828 | item: Work!
829 | # Deprecated: Use `item` instead.
830 | node: Work! @deprecated(reason: "Use `item` instead.")
831 | summary: String
832 | summaryEn: String
833 | }
834 |
835 | input SeriesWorkOrder {
836 | field: SeriesWorkOrderField!
837 | direction: OrderDirection!
838 | }
839 |
840 | enum SeriesWorkOrderField {
841 | SEASON
842 | }
843 |
844 | type Staff implements Node {
845 | annictId: Int!
846 | id: ID!
847 | name: String!
848 | nameEn: String!
849 | resource: StaffResourceItem!
850 | roleOther: String!
851 | roleOtherEn: String!
852 | roleText: String!
853 | sortNumber: Int!
854 | work: Work!
855 | }
856 |
857 | # The connection type for Staff.
858 | type StaffConnection {
859 | # A list of edges.
860 | edges: [StaffEdge]
861 | # A list of nodes.
862 | nodes: [Staff]
863 | # Information to aid in pagination.
864 | pageInfo: PageInfo!
865 | }
866 |
867 | # An edge in a connection.
868 | type StaffEdge {
869 | # A cursor for use in pagination.
870 | cursor: String!
871 | # The item at the end of the edge.
872 | node: Staff
873 | }
874 |
875 | input StaffOrder {
876 | field: StaffOrderField!
877 | direction: OrderDirection!
878 | }
879 |
880 | enum StaffOrderField {
881 | CREATED_AT
882 | SORT_NUMBER
883 | }
884 |
885 | union StaffResourceItem = Organization | Person
886 | type Status implements Node {
887 | annictId: Int!
888 | createdAt: DateTime!
889 | id: ID!
890 | likesCount: Int!
891 | state: StatusState!
892 | user: User!
893 | work: Work!
894 | }
895 |
896 | enum StatusState {
897 | WANNA_WATCH
898 | WATCHING
899 | WATCHED
900 | ON_HOLD
901 | STOP_WATCHING
902 | NO_STATE
903 | }
904 |
905 | # Autogenerated input type of UpdateRecord
906 | input UpdateRecordInput {
907 | recordId: ID!
908 | comment: String
909 | ratingState: RatingState
910 | shareTwitter: Boolean
911 | shareFacebook: Boolean
912 | # A unique identifier for the client performing the mutation.
913 | clientMutationId: String
914 | }
915 |
916 | # Autogenerated return type of UpdateRecord
917 | type UpdateRecordPayload {
918 | # A unique identifier for the client performing the mutation.
919 | clientMutationId: String
920 | record: Record
921 | }
922 |
923 | # Autogenerated input type of UpdateReview
924 | input UpdateReviewInput {
925 | reviewId: ID!
926 | title: String
927 | body: String!
928 | ratingOverallState: RatingState!
929 | ratingAnimationState: RatingState!
930 | ratingMusicState: RatingState!
931 | ratingStoryState: RatingState!
932 | ratingCharacterState: RatingState!
933 | shareTwitter: Boolean
934 | shareFacebook: Boolean
935 | # A unique identifier for the client performing the mutation.
936 | clientMutationId: String
937 | }
938 |
939 | # Autogenerated return type of UpdateReview
940 | type UpdateReviewPayload {
941 | # A unique identifier for the client performing the mutation.
942 | clientMutationId: String
943 | review: Review
944 | }
945 |
946 | # Autogenerated input type of UpdateStatus
947 | input UpdateStatusInput {
948 | workId: ID!
949 | state: StatusState!
950 | # A unique identifier for the client performing the mutation.
951 | clientMutationId: String
952 | }
953 |
954 | # Autogenerated return type of UpdateStatus
955 | type UpdateStatusPayload {
956 | # A unique identifier for the client performing the mutation.
957 | clientMutationId: String
958 | work: Work
959 | }
960 |
961 | type User implements Node {
962 | activities(
963 | # Returns the elements in the list that come after the specified cursor.
964 | after: String
965 | # Returns the elements in the list that come before the specified cursor.
966 | before: String
967 | # Returns the first _n_ elements from the list.
968 | first: Int
969 | # Returns the last _n_ elements from the list.
970 | last: Int
971 | orderBy: ActivityOrder
972 | ): ActivityConnection
973 | annictId: Int!
974 | avatarUrl: String
975 | backgroundImageUrl: String
976 | createdAt: DateTime!
977 | description: String!
978 | email: String
979 | followers(
980 | # Returns the elements in the list that come after the specified cursor.
981 | after: String
982 | # Returns the elements in the list that come before the specified cursor.
983 | before: String
984 | # Returns the first _n_ elements from the list.
985 | first: Int
986 | # Returns the last _n_ elements from the list.
987 | last: Int
988 | ): UserConnection
989 | followersCount: Int!
990 | following(
991 | # Returns the elements in the list that come after the specified cursor.
992 | after: String
993 | # Returns the elements in the list that come before the specified cursor.
994 | before: String
995 | # Returns the first _n_ elements from the list.
996 | first: Int
997 | # Returns the last _n_ elements from the list.
998 | last: Int
999 | ): UserConnection
1000 | followingActivities(
1001 | # Returns the elements in the list that come after the specified cursor.
1002 | after: String
1003 | # Returns the elements in the list that come before the specified cursor.
1004 | before: String
1005 | # Returns the first _n_ elements from the list.
1006 | first: Int
1007 | # Returns the last _n_ elements from the list.
1008 | last: Int
1009 | orderBy: ActivityOrder
1010 | ): ActivityConnection
1011 | followingsCount: Int!
1012 | id: ID!
1013 | libraryEntries(
1014 | # Returns the elements in the list that come after the specified cursor.
1015 | after: String
1016 | # Returns the elements in the list that come before the specified cursor.
1017 | before: String
1018 | # Returns the first _n_ elements from the list.
1019 | first: Int
1020 | # Returns the last _n_ elements from the list.
1021 | last: Int
1022 | # 視聴ステータス
1023 | states: [StatusState!]
1024 | # 指定したシーズンの作品を取得する
1025 | seasons: [String!]
1026 | # 指定したシーズンからの作品を取得する
1027 | seasonFrom: String
1028 | # 指定したシーズンまでの作品を取得する
1029 | seasonUntil: String
1030 | orderBy: LibraryEntryOrder
1031 | ): LibraryEntryConnection
1032 | name: String!
1033 | notificationsCount: Int
1034 | onHoldCount: Int!
1035 | programs(
1036 | # Returns the elements in the list that come after the specified cursor.
1037 | after: String
1038 | # Returns the elements in the list that come before the specified cursor.
1039 | before: String
1040 | # Returns the first _n_ elements from the list.
1041 | first: Int
1042 | # Returns the last _n_ elements from the list.
1043 | last: Int
1044 | unwatched: Boolean
1045 | orderBy: ProgramOrder
1046 | ): ProgramConnection
1047 | records(
1048 | # Returns the elements in the list that come after the specified cursor.
1049 | after: String
1050 | # Returns the elements in the list that come before the specified cursor.
1051 | before: String
1052 | # Returns the first _n_ elements from the list.
1053 | first: Int
1054 | # Returns the last _n_ elements from the list.
1055 | last: Int
1056 | orderBy: RecordOrder
1057 | hasComment: Boolean
1058 | ): RecordConnection
1059 | recordsCount: Int!
1060 | stopWatchingCount: Int!
1061 | url: String
1062 | username: String!
1063 | viewerCanFollow: Boolean!
1064 | viewerIsFollowing: Boolean!
1065 | wannaWatchCount: Int!
1066 | watchedCount: Int!
1067 | watchingCount: Int!
1068 | works(
1069 | # Returns the elements in the list that come after the specified cursor.
1070 | after: String
1071 | # Returns the elements in the list that come before the specified cursor.
1072 | before: String
1073 | # Returns the first _n_ elements from the list.
1074 | first: Int
1075 | # Returns the last _n_ elements from the list.
1076 | last: Int
1077 | annictIds: [Int!]
1078 | seasons: [String!]
1079 | titles: [String!]
1080 | state: StatusState
1081 | orderBy: WorkOrder
1082 | ): WorkConnection
1083 | }
1084 |
1085 | # The connection type for User.
1086 | type UserConnection {
1087 | # A list of edges.
1088 | edges: [UserEdge]
1089 | # A list of nodes.
1090 | nodes: [User]
1091 | # Information to aid in pagination.
1092 | pageInfo: PageInfo!
1093 | }
1094 |
1095 | # An edge in a connection.
1096 | type UserEdge {
1097 | # A cursor for use in pagination.
1098 | cursor: String!
1099 | # The item at the end of the edge.
1100 | node: User
1101 | }
1102 |
1103 | # An anime title
1104 | type Work implements Node {
1105 | annictId: Int!
1106 | casts(
1107 | # Returns the elements in the list that come after the specified cursor.
1108 | after: String
1109 | # Returns the elements in the list that come before the specified cursor.
1110 | before: String
1111 | # Returns the first _n_ elements from the list.
1112 | first: Int
1113 | # Returns the last _n_ elements from the list.
1114 | last: Int
1115 | orderBy: CastOrder
1116 | ): CastConnection
1117 | episodes(
1118 | # Returns the elements in the list that come after the specified cursor.
1119 | after: String
1120 | # Returns the elements in the list that come before the specified cursor.
1121 | before: String
1122 | # Returns the first _n_ elements from the list.
1123 | first: Int
1124 | # Returns the last _n_ elements from the list.
1125 | last: Int
1126 | orderBy: EpisodeOrder
1127 | ): EpisodeConnection
1128 | episodesCount: Int!
1129 | id: ID!
1130 | image: WorkImage
1131 | malAnimeId: String
1132 | media: Media!
1133 | noEpisodes: Boolean!
1134 | officialSiteUrl: String
1135 | officialSiteUrlEn: String
1136 | programs(
1137 | # Returns the elements in the list that come after the specified cursor.
1138 | after: String
1139 | # Returns the elements in the list that come before the specified cursor.
1140 | before: String
1141 | # Returns the first _n_ elements from the list.
1142 | first: Int
1143 | # Returns the last _n_ elements from the list.
1144 | last: Int
1145 | orderBy: ProgramOrder
1146 | ): ProgramConnection
1147 | reviews(
1148 | # Returns the elements in the list that come after the specified cursor.
1149 | after: String
1150 | # Returns the elements in the list that come before the specified cursor.
1151 | before: String
1152 | # Returns the first _n_ elements from the list.
1153 | first: Int
1154 | # Returns the last _n_ elements from the list.
1155 | last: Int
1156 | orderBy: ReviewOrder
1157 | hasBody: Boolean
1158 | ): ReviewConnection
1159 | reviewsCount: Int!
1160 | satisfactionRate: Float
1161 | seasonName: SeasonName
1162 | seasonYear: Int
1163 | seriesList(
1164 | # Returns the elements in the list that come after the specified cursor.
1165 | after: String
1166 | # Returns the elements in the list that come before the specified cursor.
1167 | before: String
1168 | # Returns the first _n_ elements from the list.
1169 | first: Int
1170 | # Returns the last _n_ elements from the list.
1171 | last: Int
1172 | ): SeriesConnection
1173 | staffs(
1174 | # Returns the elements in the list that come after the specified cursor.
1175 | after: String
1176 | # Returns the elements in the list that come before the specified cursor.
1177 | before: String
1178 | # Returns the first _n_ elements from the list.
1179 | first: Int
1180 | # Returns the last _n_ elements from the list.
1181 | last: Int
1182 | orderBy: StaffOrder
1183 | ): StaffConnection
1184 | syobocalTid: Int
1185 | title: String!
1186 | titleEn: String
1187 | titleKana: String
1188 | titleRo: String
1189 | twitterHashtag: String
1190 | twitterUsername: String
1191 | viewerStatusState: StatusState
1192 | watchersCount: Int!
1193 | wikipediaUrl: String
1194 | wikipediaUrlEn: String
1195 | }
1196 |
1197 | # The connection type for Work.
1198 | type WorkConnection {
1199 | # A list of edges.
1200 | edges: [WorkEdge]
1201 | # A list of nodes.
1202 | nodes: [Work]
1203 | # Information to aid in pagination.
1204 | pageInfo: PageInfo!
1205 | }
1206 |
1207 | # An edge in a connection.
1208 | type WorkEdge {
1209 | # A cursor for use in pagination.
1210 | cursor: String!
1211 | # The item at the end of the edge.
1212 | node: Work
1213 | }
1214 |
1215 | type WorkImage implements Node {
1216 | annictId: Int
1217 | copyright: String
1218 | facebookOgImageUrl: String
1219 | id: ID!
1220 | internalUrl(size: String!): String
1221 | recommendedImageUrl: String
1222 | twitterAvatarUrl: String
1223 | twitterBiggerAvatarUrl: String
1224 | twitterMiniAvatarUrl: String
1225 | twitterNormalAvatarUrl: String
1226 | work: Work
1227 | }
1228 |
1229 | input WorkOrder {
1230 | field: WorkOrderField!
1231 | direction: OrderDirection!
1232 | }
1233 |
1234 | enum WorkOrderField {
1235 | CREATED_AT
1236 | SEASON
1237 | WATCHERS_COUNT
1238 | }
1239 |
--------------------------------------------------------------------------------
/annictGqlNaming.js:
--------------------------------------------------------------------------------
1 | const FixedConstantCase = (str) => {
2 | if (str === "Record") {
3 | return "WatchRecord"
4 | }
5 | return str
6 | }
7 | module.exports = FixedConstantCase
8 |
--------------------------------------------------------------------------------
/gql-documents/anilist/lib.gql:
--------------------------------------------------------------------------------
1 | query queryLibrary($userId: Int!, $sort: [MediaListSort!]!, $perChunk: Int!, $chunk: Int!, $status: MediaListStatus!) {
2 | MediaListCollection(userId: $userId, sort: $sort, perChunk: $perChunk, chunk: $chunk, type: ANIME, forceSingleCompletedList: true, status: $status) {
3 | lists {
4 | entries {
5 | id
6 | progress
7 | status
8 | media {
9 | id
10 | idMal
11 | title {
12 | english
13 | romaji
14 | native
15 | }
16 | episodes
17 | }
18 | }
19 | }
20 | hasNextChunk
21 | }
22 | }
23 |
24 | query queryWorks($workIds: [Int!]!) {
25 | MediaList(mediaId_in: $workIds) {
26 | status
27 | progress
28 | media {
29 | id
30 | idMal
31 | title {
32 | english
33 | romaji
34 | native
35 | }
36 | episodes
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/gql-documents/anilist/me.gql:
--------------------------------------------------------------------------------
1 | query getMe {
2 | Viewer {
3 | id
4 | name
5 | avatar {
6 | large
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/gql-documents/anilist/update.gql:
--------------------------------------------------------------------------------
1 | mutation createMediaStatus($id: Int!, $status: MediaListStatus!, $numWatchedEpisodes: Int!) {
2 | SaveMediaListEntry(mediaId: $id, status: $status, progress: $numWatchedEpisodes) {
3 | id
4 | }
5 | }
6 |
7 | mutation updateMediaStatus($id: Int!, $status: MediaListStatus!, $numWatchedEpisodes: Int!) {
8 | UpdateMediaListEntries(ids: [$id], status: $status, progress: $numWatchedEpisodes) {
9 | id
10 | }
11 | }
12 |
13 | mutation deleteMediaStatus($id: Int!) {
14 | DeleteMediaListEntry(id: $id) {
15 | deleted
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/gql-documents/annict/lib.gql:
--------------------------------------------------------------------------------
1 | query queryLibrary($states: [StatusState!], $after: String, $amount: Int) {
2 | viewer {
3 | libraryEntries(states: $states, after: $after, first: $amount) {
4 | nodes {
5 | work {
6 | id
7 | annictId
8 | malAnimeId
9 | titleEn
10 | titleRo
11 | title
12 | noEpisodes
13 | episodes {
14 | nodes {
15 | viewerDidTrack
16 | }
17 | }
18 | viewerStatusState
19 | }
20 | }
21 | pageInfo {
22 | hasNextPage
23 | hasPreviousPage
24 | endCursor
25 | }
26 | }
27 | }
28 | }
29 |
30 | query queryWorks($workIds: [Int!]) {
31 | searchWorks(annictIds: $workIds) {
32 | nodes {
33 | id
34 | annictId
35 | malAnimeId
36 | titleEn
37 | titleRo
38 | title
39 | noEpisodes
40 | episodes {
41 | nodes {
42 | viewerDidTrack
43 | }
44 | }
45 | viewerStatusState
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/gql-documents/annict/me.gql:
--------------------------------------------------------------------------------
1 | query getMe {
2 | viewer {
3 | username
4 | name
5 | avatarUrl
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |