@brigadasos/nadeshiko-sdk 1.0.0 → 1.4.0-dev.6f733b8

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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -125
  3. package/dist/client/client.gen.d.ts.map +1 -0
  4. package/dist/client/index.d.ts.map +1 -0
  5. package/dist/client/types.gen.d.ts.map +1 -0
  6. package/dist/client/utils.gen.d.ts.map +1 -0
  7. package/dist/client.gen.d.ts.map +1 -0
  8. package/dist/core/auth.gen.d.ts.map +1 -0
  9. package/dist/core/bodySerializer.gen.d.ts.map +1 -0
  10. package/dist/core/params.gen.d.ts.map +1 -0
  11. package/dist/core/pathSerializer.gen.d.ts.map +1 -0
  12. package/dist/core/queryKeySerializer.gen.d.ts.map +1 -0
  13. package/dist/core/serverSentEvents.gen.d.ts.map +1 -0
  14. package/dist/core/types.gen.d.ts.map +1 -0
  15. package/dist/core/utils.gen.d.ts.map +1 -0
  16. package/dist/index.cjs +1356 -0
  17. package/dist/index.cjs.map +20 -0
  18. package/dist/index.d.ts +6 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1335 -6
  21. package/dist/index.js.map +20 -1
  22. package/dist/internal/lists.gen.d.ts +2 -0
  23. package/dist/internal/lists.gen.d.ts.map +1 -0
  24. package/dist/internal/media.gen.d.ts +2 -0
  25. package/dist/internal/media.gen.d.ts.map +1 -0
  26. package/dist/internal/search.gen.d.ts +2 -0
  27. package/dist/internal/search.gen.d.ts.map +1 -0
  28. package/dist/internal.gen.d.ts +4 -0
  29. package/dist/internal.gen.d.ts.map +1 -0
  30. package/dist/nadeshiko.gen.d.ts +60 -0
  31. package/dist/nadeshiko.gen.d.ts.map +1 -0
  32. package/dist/sdk.gen.d.ts +471 -0
  33. package/dist/sdk.gen.d.ts.map +1 -0
  34. package/dist/types.gen.d.ts +3976 -0
  35. package/dist/types.gen.d.ts.map +1 -0
  36. package/package.json +13 -20
  37. package/dist/generated/client/client.gen.d.ts.map +0 -1
  38. package/dist/generated/client/client.gen.js +0 -236
  39. package/dist/generated/client/client.gen.js.map +0 -1
  40. package/dist/generated/client/index.d.ts.map +0 -1
  41. package/dist/generated/client/index.js +0 -7
  42. package/dist/generated/client/index.js.map +0 -1
  43. package/dist/generated/client/types.gen.d.ts.map +0 -1
  44. package/dist/generated/client/types.gen.js +0 -3
  45. package/dist/generated/client/types.gen.js.map +0 -1
  46. package/dist/generated/client/utils.gen.d.ts.map +0 -1
  47. package/dist/generated/client/utils.gen.js +0 -234
  48. package/dist/generated/client/utils.gen.js.map +0 -1
  49. package/dist/generated/client.gen.d.ts.map +0 -1
  50. package/dist/generated/client.gen.js +0 -4
  51. package/dist/generated/client.gen.js.map +0 -1
  52. package/dist/generated/core/auth.gen.d.ts.map +0 -1
  53. package/dist/generated/core/auth.gen.js +0 -15
  54. package/dist/generated/core/auth.gen.js.map +0 -1
  55. package/dist/generated/core/bodySerializer.gen.d.ts.map +0 -1
  56. package/dist/generated/core/bodySerializer.gen.js +0 -58
  57. package/dist/generated/core/bodySerializer.gen.js.map +0 -1
  58. package/dist/generated/core/params.gen.d.ts.map +0 -1
  59. package/dist/generated/core/params.gen.js +0 -101
  60. package/dist/generated/core/params.gen.js.map +0 -1
  61. package/dist/generated/core/pathSerializer.gen.d.ts.map +0 -1
  62. package/dist/generated/core/pathSerializer.gen.js +0 -115
  63. package/dist/generated/core/pathSerializer.gen.js.map +0 -1
  64. package/dist/generated/core/queryKeySerializer.gen.d.ts.map +0 -1
  65. package/dist/generated/core/queryKeySerializer.gen.js +0 -100
  66. package/dist/generated/core/queryKeySerializer.gen.js.map +0 -1
  67. package/dist/generated/core/serverSentEvents.gen.d.ts.map +0 -1
  68. package/dist/generated/core/serverSentEvents.gen.js +0 -138
  69. package/dist/generated/core/serverSentEvents.gen.js.map +0 -1
  70. package/dist/generated/core/types.gen.d.ts.map +0 -1
  71. package/dist/generated/core/types.gen.js +0 -3
  72. package/dist/generated/core/types.gen.js.map +0 -1
  73. package/dist/generated/core/utils.gen.d.ts.map +0 -1
  74. package/dist/generated/core/utils.gen.js +0 -88
  75. package/dist/generated/core/utils.gen.js.map +0 -1
  76. package/dist/generated/index.d.ts +0 -3
  77. package/dist/generated/index.d.ts.map +0 -1
  78. package/dist/generated/index.js +0 -3
  79. package/dist/generated/index.js.map +0 -1
  80. package/dist/generated/sdk.gen.d.ts +0 -97
  81. package/dist/generated/sdk.gen.d.ts.map +0 -1
  82. package/dist/generated/sdk.gen.js +0 -132
  83. package/dist/generated/sdk.gen.js.map +0 -1
  84. package/dist/generated/types.gen.d.ts +0 -726
  85. package/dist/generated/types.gen.d.ts.map +0 -1
  86. package/dist/generated/types.gen.js +0 -3
  87. package/dist/generated/types.gen.js.map +0 -1
  88. package/dist/nadeshiko.d.ts +0 -70
  89. package/dist/nadeshiko.d.ts.map +0 -1
  90. package/dist/nadeshiko.js +0 -84
  91. package/dist/nadeshiko.js.map +0 -1
  92. /package/dist/{generated/client → client}/client.gen.d.ts +0 -0
  93. /package/dist/{generated/client → client}/index.d.ts +0 -0
  94. /package/dist/{generated/client → client}/types.gen.d.ts +0 -0
  95. /package/dist/{generated/client → client}/utils.gen.d.ts +0 -0
  96. /package/dist/{generated/client.gen.d.ts → client.gen.d.ts} +0 -0
  97. /package/dist/{generated/core → core}/auth.gen.d.ts +0 -0
  98. /package/dist/{generated/core → core}/bodySerializer.gen.d.ts +0 -0
  99. /package/dist/{generated/core → core}/params.gen.d.ts +0 -0
  100. /package/dist/{generated/core → core}/pathSerializer.gen.d.ts +0 -0
  101. /package/dist/{generated/core → core}/queryKeySerializer.gen.d.ts +0 -0
  102. /package/dist/{generated/core → core}/serverSentEvents.gen.d.ts +0 -0
  103. /package/dist/{generated/core → core}/types.gen.d.ts +0 -0
  104. /package/dist/{generated/core → core}/utils.gen.d.ts +0 -0
@@ -0,0 +1,3976 @@
1
+ export type ClientOptions = {
2
+ baseUrl: 'http://localhost:5000' | 'https://api.nadeshiko.co' | (string & {});
3
+ };
4
+ /**
5
+ * Media category type
6
+ */
7
+ export type Category = 'ANIME' | 'JDRAMA';
8
+ /**
9
+ * Media information included in search results
10
+ */
11
+ export type SearchResultMedia = {
12
+ /**
13
+ * Unique identifier for the media
14
+ */
15
+ mediaId: number;
16
+ /**
17
+ * Romaji transliteration of the media name
18
+ */
19
+ nameRomaji: string;
20
+ /**
21
+ * English name of the media
22
+ */
23
+ nameEn?: string;
24
+ /**
25
+ * Original Japanese name of the media
26
+ */
27
+ nameJa?: string;
28
+ /**
29
+ * URL to the cover image
30
+ */
31
+ coverUrl?: string;
32
+ /**
33
+ * URL to the banner image
34
+ */
35
+ bannerUrl?: string;
36
+ category: Category;
37
+ };
38
+ /**
39
+ * Japanese content in search results with optional highlight
40
+ */
41
+ export type JapaneseSearchContent = {
42
+ /**
43
+ * Original Japanese content of the segment
44
+ */
45
+ content: string;
46
+ /**
47
+ * Japanese content with search terms highlighted
48
+ */
49
+ highlight?: string;
50
+ };
51
+ /**
52
+ * Translation content in search results with optional highlight
53
+ */
54
+ export type TranslationSearchContent = {
55
+ /**
56
+ * Translated content
57
+ */
58
+ content?: string;
59
+ /**
60
+ * Translated content with search terms highlighted
61
+ */
62
+ highlight?: string;
63
+ /**
64
+ * Whether the translation was machine-translated
65
+ */
66
+ isMachineTranslated: boolean;
67
+ };
68
+ /**
69
+ * Morphological analysis token
70
+ */
71
+ export type Morpheme = {
72
+ /**
73
+ * Surface form of the token as it appears in the text
74
+ */
75
+ surface: string;
76
+ /**
77
+ * Reading in katakana
78
+ */
79
+ reading: string;
80
+ /**
81
+ * Dictionary/base form of the word
82
+ */
83
+ baseform: string;
84
+ /**
85
+ * Pronunciation in katakana
86
+ */
87
+ pronunciation: string;
88
+ /**
89
+ * Full part-of-speech tag array
90
+ */
91
+ pos: Array<string>;
92
+ /**
93
+ * Short part-of-speech label (first element of pos array)
94
+ */
95
+ posShort: string;
96
+ /**
97
+ * Character offset where the token begins in the original text
98
+ */
99
+ begin: number;
100
+ /**
101
+ * Character offset where the token ends in the original text
102
+ */
103
+ end: number;
104
+ /**
105
+ * Pitch accent type — mora position(s) where the pitch drops. 0 = heiban (flat), 1 = atamadaka, 2+ = nakadaka/odaka. Comma-separated in UniDic feature[24]. Null if not available.
106
+ *
107
+ */
108
+ pitchAccentType: Array<number>;
109
+ /**
110
+ * Compound accent connection rule from UniDic feature[25]. Values like C1-C5, F1-F6, P1-P13. Null if not available.
111
+ *
112
+ */
113
+ pitchCompoundRule: string;
114
+ /**
115
+ * Accent modification rule from UniDic feature[26]. Values like M1, M2, M4. Null if not available.
116
+ *
117
+ */
118
+ pitchModificationRule: string;
119
+ };
120
+ /**
121
+ * Segment details in search results
122
+ */
123
+ export type SearchResultSegment = {
124
+ /**
125
+ * Segment status
126
+ */
127
+ status: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
128
+ /**
129
+ * Unique identifier for the segment
130
+ */
131
+ uuid: string;
132
+ /**
133
+ * Position of the segment within the episode
134
+ */
135
+ position: number;
136
+ /**
137
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
138
+ */
139
+ startTime: string;
140
+ /**
141
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
142
+ */
143
+ endTime: string;
144
+ /**
145
+ * Episode number where the segment appears
146
+ */
147
+ episodeNumber: number;
148
+ ja: JapaneseSearchContent;
149
+ en: TranslationSearchContent;
150
+ es: TranslationSearchContent;
151
+ /**
152
+ * Whether the segment contains NSFW content
153
+ */
154
+ isNsfw: boolean;
155
+ /**
156
+ * Morphological analysis of the Japanese content
157
+ */
158
+ morphemes?: Array<Morpheme>;
159
+ };
160
+ /**
161
+ * URLs to media resources for a segment
162
+ */
163
+ export type SearchResultUrls = {
164
+ /**
165
+ * URL to the subtitle image snapshot
166
+ */
167
+ imageUrl?: string;
168
+ /**
169
+ * URL to the audio clip for this segment
170
+ */
171
+ audioUrl?: string;
172
+ /**
173
+ * URL to the video clip for this segment
174
+ */
175
+ videoUrl?: string;
176
+ };
177
+ /**
178
+ * A complete search result combining media info, segment details, and URLs
179
+ */
180
+ export type SearchResult = {
181
+ /**
182
+ * Media information for this result
183
+ */
184
+ media: SearchResultMedia;
185
+ /**
186
+ * Segment details including translations
187
+ */
188
+ segment: SearchResultSegment;
189
+ /**
190
+ * URLs to media resources (images, audio, video)
191
+ */
192
+ urls: SearchResultUrls;
193
+ };
194
+ /**
195
+ * Pagination metadata for search results
196
+ */
197
+ export type PaginationInfo = {
198
+ /**
199
+ * Number of results returned in this page
200
+ */
201
+ pageSize?: number;
202
+ /**
203
+ * Whether there are more results after this page
204
+ */
205
+ hasMore?: boolean;
206
+ /**
207
+ * Estimated total number of matching segments
208
+ */
209
+ estimatedTotalHits?: number;
210
+ /**
211
+ * Whether estimatedTotalHits is exact or a lower bound
212
+ */
213
+ estimatedTotalHitsRelation?: 'EXACT' | 'LOWER_BOUND';
214
+ };
215
+ export type SearchHealthCheckResponse = {
216
+ results?: Array<SearchResult>;
217
+ pagination?: PaginationInfo;
218
+ /**
219
+ * Cursor for pagination
220
+ */
221
+ cursor?: Array<number>;
222
+ };
223
+ /**
224
+ * Error Response schema for all cases
225
+ */
226
+ export type Error = {
227
+ /**
228
+ * Specific error code for programmatic handling
229
+ */
230
+ code: string;
231
+ /**
232
+ * A short, human-readable summary of the problem
233
+ */
234
+ title: string;
235
+ /**
236
+ * A human-readable explanation specific to this occurrence
237
+ */
238
+ detail: string;
239
+ /**
240
+ * A URI reference that identifies the problem type (e.g., GitHub issues link)
241
+ */
242
+ type?: string;
243
+ /**
244
+ * A URI reference that identifies the specific occurrence (e.g., trace ID)
245
+ */
246
+ instance?: string;
247
+ /**
248
+ * The HTTP status code
249
+ */
250
+ status: number;
251
+ /**
252
+ * Optional map of field names to their error messages (for validation errors)
253
+ */
254
+ errors?: {
255
+ [key: string]: string;
256
+ };
257
+ };
258
+ export type SearchRequest = {
259
+ /**
260
+ * Text or sentence to search (null to search without query)
261
+ */
262
+ query?: string;
263
+ /**
264
+ * Max amount of entries by response
265
+ */
266
+ limit?: number;
267
+ /**
268
+ * Unique ID from segment (Useful to get a specific segment)
269
+ */
270
+ uuid?: string;
271
+ /**
272
+ * Media category filter
273
+ */
274
+ category?: Array<Category>;
275
+ /**
276
+ * Unique ID from media
277
+ */
278
+ mediaId?: number;
279
+ /**
280
+ * Array of episodes to get
281
+ */
282
+ episode?: Array<number>;
283
+ /**
284
+ * Non-negative integer seed for deterministic random sorting
285
+ */
286
+ randomSeed?: number;
287
+ /**
288
+ * Order by amount of characters
289
+ */
290
+ contentSort?: 'ASC' | 'DESC' | 'NONE' | 'TIME_ASC' | 'TIME_DESC' | 'RANDOM';
291
+ /**
292
+ * Current page of search
293
+ */
294
+ cursor?: Array<number>;
295
+ /**
296
+ * Whether to use exact phrase matching
297
+ */
298
+ exactMatch?: boolean;
299
+ /**
300
+ * Minimum content length
301
+ */
302
+ minLength?: number;
303
+ /**
304
+ * Maximum content length
305
+ */
306
+ maxLength?: number;
307
+ /**
308
+ * Media IDs to exclude from results
309
+ */
310
+ excludedMediaIds?: Array<number>;
311
+ /**
312
+ * Segment status filter
313
+ */
314
+ status?: Array<'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG'>;
315
+ /**
316
+ * Media filter with episodes
317
+ */
318
+ media?: Array<{
319
+ mediaId: number;
320
+ /**
321
+ * Array of episode numbers
322
+ */
323
+ episodes: Array<number>;
324
+ }>;
325
+ };
326
+ export type SearchResponse = {
327
+ results?: Array<SearchResult>;
328
+ pagination?: PaginationInfo;
329
+ /**
330
+ * Cursor for pagination
331
+ */
332
+ cursor?: Array<number>;
333
+ };
334
+ export type SearchStatsRequest = {
335
+ /**
336
+ * Text or sentence to search
337
+ */
338
+ query?: string;
339
+ /**
340
+ * Media category filter
341
+ */
342
+ category?: Array<Category>;
343
+ /**
344
+ * Whether to use exact phrase matching
345
+ */
346
+ exactMatch?: boolean;
347
+ /**
348
+ * Minimum content length
349
+ */
350
+ minLength?: number;
351
+ /**
352
+ * Maximum content length
353
+ */
354
+ maxLength?: number;
355
+ /**
356
+ * Media IDs to exclude from results
357
+ */
358
+ excludedMediaIds?: Array<number>;
359
+ /**
360
+ * Restrict stats to these media IDs (for list-scoped stats)
361
+ */
362
+ mediaIds?: Array<number>;
363
+ /**
364
+ * Segment status filter
365
+ */
366
+ status?: Array<'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG'>;
367
+ };
368
+ /**
369
+ * Search result statistics grouped by media
370
+ */
371
+ export type MediaSearchStats = {
372
+ /**
373
+ * Unique identifier for the media
374
+ */
375
+ mediaId?: number;
376
+ category?: Category;
377
+ /**
378
+ * Romaji transliteration of the media name
379
+ */
380
+ nameRomaji?: string;
381
+ /**
382
+ * English name of the media
383
+ */
384
+ nameEn?: string;
385
+ /**
386
+ * Original Japanese name of the media
387
+ */
388
+ nameJa?: string;
389
+ /**
390
+ * Total number of segments found for this media
391
+ */
392
+ segmentCount?: number;
393
+ /**
394
+ * Mapping of episode numbers to segment hit counts
395
+ */
396
+ episodeHits?: {
397
+ [key: string]: number;
398
+ };
399
+ };
400
+ /**
401
+ * Count of entries grouped by media category
402
+ */
403
+ export type CategoryCount = {
404
+ category?: Category;
405
+ /**
406
+ * Number of entries in this category
407
+ */
408
+ count?: number;
409
+ };
410
+ export type SearchStatsResponse = {
411
+ media?: Array<MediaSearchStats>;
412
+ categories?: Array<CategoryCount>;
413
+ };
414
+ export type SearchMultipleRequest = {
415
+ /**
416
+ * List of words to search for
417
+ */
418
+ words: Array<string>;
419
+ /**
420
+ * Whether to use exact matching
421
+ */
422
+ exactMatch?: boolean;
423
+ };
424
+ /**
425
+ * Media entry containing word matches
426
+ */
427
+ export type WordMatchMedia = {
428
+ /**
429
+ * Unique identifier for the media
430
+ */
431
+ mediaId?: number;
432
+ /**
433
+ * English name of the media
434
+ */
435
+ nameEn?: string;
436
+ /**
437
+ * Original Japanese name of the media
438
+ */
439
+ nameJa?: string;
440
+ /**
441
+ * Romaji transliteration of the media name
442
+ */
443
+ nameRomaji?: string;
444
+ /**
445
+ * Number of times the word appears in this media
446
+ */
447
+ matchCount?: number;
448
+ };
449
+ /**
450
+ * Word matching result with occurrences across media
451
+ */
452
+ export type WordMatch = {
453
+ /**
454
+ * The word that was searched for
455
+ */
456
+ word?: string;
457
+ /**
458
+ * Indicates whether the word was found in any segment
459
+ */
460
+ isMatch?: boolean;
461
+ /**
462
+ * Total number of times this word appears across all media
463
+ */
464
+ matchCount?: number;
465
+ /**
466
+ * List of media containing this word
467
+ */
468
+ media?: Array<WordMatchMedia>;
469
+ };
470
+ export type SearchMultipleResponse = {
471
+ results?: Array<WordMatch>;
472
+ };
473
+ export type SegmentContextRequest = {
474
+ /**
475
+ * Media ID
476
+ */
477
+ mediaId: number;
478
+ /**
479
+ * Episode number
480
+ */
481
+ episodeNumber: number;
482
+ /**
483
+ * Segment position in the episode
484
+ */
485
+ segmentPosition: number;
486
+ /**
487
+ * Number of surrounding segments to retrieve
488
+ */
489
+ limit?: number;
490
+ };
491
+ export type SegmentContextResponse = {
492
+ segments: Array<SearchResult>;
493
+ };
494
+ /**
495
+ * Statistics about media and segments for browse view
496
+ */
497
+ export type MediaBrowseStats = {
498
+ /**
499
+ * Number of media entries matching current search/filter
500
+ */
501
+ filteredMediaCount?: number;
502
+ /**
503
+ * Number of segments in the filtered media
504
+ */
505
+ filteredSegmentCount?: number;
506
+ /**
507
+ * Total number of media entries in the entire database
508
+ */
509
+ totalMediaCount?: number;
510
+ /**
511
+ * Total number of segments in the entire database
512
+ */
513
+ totalSegmentCount?: number;
514
+ };
515
+ /**
516
+ * Summary information about a media entry for browse/list views
517
+ */
518
+ export type MediaSummary = {
519
+ /**
520
+ * Unique identifier for the media
521
+ */
522
+ id: number;
523
+ /**
524
+ * AniList database ID for the media
525
+ */
526
+ anilistId?: number;
527
+ /**
528
+ * TMDB (The Movie Database) ID for the media
529
+ */
530
+ tmdbId?: number;
531
+ category?: Category;
532
+ /**
533
+ * Timestamp when the media entry was created in the database
534
+ */
535
+ createdAt?: string;
536
+ /**
537
+ * Timestamp when the media entry was last updated
538
+ */
539
+ updatedAt?: number;
540
+ /**
541
+ * Romaji transliteration of the media name
542
+ */
543
+ nameRomaji?: string;
544
+ /**
545
+ * English name of the media
546
+ */
547
+ nameEn?: string;
548
+ /**
549
+ * Original Japanese name of the media
550
+ */
551
+ nameJa?: string;
552
+ /**
553
+ * Format of the media release (e.g., TV, OVA, Movie)
554
+ */
555
+ airingFormat?: string;
556
+ /**
557
+ * Current airing status (FINISHED, RELEASING)
558
+ */
559
+ airingStatus?: string;
560
+ /**
561
+ * Start date of the media (YYYY-MM-DD)
562
+ */
563
+ startDate?: string;
564
+ /**
565
+ * End date of the media (null if unknown) (YYYY-MM-DD)
566
+ */
567
+ endDate?: string;
568
+ /**
569
+ * Folder name used for storing media files
570
+ */
571
+ folderMediaName?: string;
572
+ /**
573
+ * List of genres associated with the media
574
+ */
575
+ genres?: Array<string>;
576
+ /**
577
+ * URL to the cover image
578
+ */
579
+ coverUrl?: string;
580
+ /**
581
+ * URL to the banner image
582
+ */
583
+ bannerUrl?: string;
584
+ /**
585
+ * Version identifier for the media entry
586
+ */
587
+ version?: string;
588
+ /**
589
+ * Total number of subtitle segments available
590
+ */
591
+ segmentCount?: number;
592
+ /**
593
+ * Total number of episodes available
594
+ */
595
+ episodeCount?: number;
596
+ };
597
+ export type MediaBrowseResponse = {
598
+ stats?: MediaBrowseStats;
599
+ results?: Array<MediaSummary>;
600
+ /**
601
+ * Next cursor for pagination
602
+ */
603
+ cursor?: number;
604
+ /**
605
+ * Whether more results are available
606
+ */
607
+ hasMore?: boolean;
608
+ };
609
+ /**
610
+ * Japanese voice actor (seiyuu)
611
+ */
612
+ export type Seiyuu = {
613
+ /**
614
+ * AniList staff ID
615
+ */
616
+ id: number;
617
+ /**
618
+ * Japanese name of the voice actor
619
+ */
620
+ nameJa: string;
621
+ /**
622
+ * English name of the voice actor
623
+ */
624
+ nameEn: string;
625
+ /**
626
+ * Profile image URL
627
+ */
628
+ imageUrl: string;
629
+ };
630
+ /**
631
+ * Anime character
632
+ */
633
+ export type Character = {
634
+ /**
635
+ * AniList character ID
636
+ */
637
+ id: number;
638
+ /**
639
+ * Japanese name of the character
640
+ */
641
+ nameJa: string;
642
+ /**
643
+ * English name of the character
644
+ */
645
+ nameEn: string;
646
+ /**
647
+ * Character image URL
648
+ */
649
+ imageUrl: string;
650
+ seiyuu: Seiyuu;
651
+ };
652
+ /**
653
+ * Character appearing in a media with their role
654
+ */
655
+ export type MediaCharacter = {
656
+ character: Character;
657
+ /**
658
+ * Character's role in the media
659
+ */
660
+ role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
661
+ };
662
+ /**
663
+ * Media collection list
664
+ */
665
+ export type List = {
666
+ /**
667
+ * List ID
668
+ */
669
+ id: number;
670
+ /**
671
+ * Name of the list
672
+ */
673
+ name: string;
674
+ /**
675
+ * Type of list
676
+ */
677
+ type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
678
+ /**
679
+ * User ID who owns the list (1 = admin)
680
+ */
681
+ userId: number;
682
+ /**
683
+ * Visibility of the list
684
+ */
685
+ visibility: 'PUBLIC' | 'PRIVATE';
686
+ };
687
+ /**
688
+ * Media entry with full metadata
689
+ */
690
+ export type Media = {
691
+ /**
692
+ * Unique identifier for the media
693
+ */
694
+ id: number;
695
+ /**
696
+ * AniList database ID for the media
697
+ */
698
+ anilistId: number;
699
+ /**
700
+ * Original Japanese name of the media
701
+ */
702
+ nameJa: string;
703
+ /**
704
+ * Romaji transliteration of the media name
705
+ */
706
+ nameRomaji: string;
707
+ /**
708
+ * English name of the media
709
+ */
710
+ nameEn: string;
711
+ /**
712
+ * Format of the media release (e.g., TV, OVA, Movie)
713
+ */
714
+ airingFormat: string;
715
+ /**
716
+ * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
717
+ */
718
+ airingStatus: string;
719
+ /**
720
+ * List of genres associated with the media
721
+ */
722
+ genres: Array<string>;
723
+ /**
724
+ * Full URL to the cover image
725
+ */
726
+ coverUrl: string;
727
+ /**
728
+ * Full URL to the banner image
729
+ */
730
+ bannerUrl: string;
731
+ /**
732
+ * Start date of the media (first airing/release)
733
+ */
734
+ startDate: string;
735
+ /**
736
+ * End date of the media (last airing/release)
737
+ */
738
+ endDate?: string;
739
+ category: Category;
740
+ /**
741
+ * Total number of subtitle segments available
742
+ */
743
+ segmentCount?: number;
744
+ /**
745
+ * Total number of episodes available
746
+ */
747
+ episodeCount?: number;
748
+ /**
749
+ * Version identifier for the media entry
750
+ */
751
+ version: string;
752
+ /**
753
+ * Animation studio that produced the media
754
+ */
755
+ studio: string;
756
+ /**
757
+ * Airing season label for the media
758
+ */
759
+ seasonName: string;
760
+ /**
761
+ * Airing year for the media
762
+ */
763
+ seasonYear: number;
764
+ /**
765
+ * Characters appearing in the media with their voice actors
766
+ */
767
+ characters?: Array<MediaCharacter>;
768
+ /**
769
+ * Lists that contain this media
770
+ */
771
+ lists?: Array<List>;
772
+ };
773
+ export type MediaListResponse = {
774
+ data: Array<Media>;
775
+ /**
776
+ * Next cursor for pagination (undefined if no more results)
777
+ */
778
+ cursor?: number;
779
+ /**
780
+ * Whether more results are available
781
+ */
782
+ hasMoreResults: boolean;
783
+ };
784
+ /**
785
+ * Character data for creating/updating media
786
+ */
787
+ export type CharacterInput = {
788
+ /**
789
+ * AniList character ID
790
+ */
791
+ id: number;
792
+ /**
793
+ * Japanese name of the character
794
+ */
795
+ nameJa: string;
796
+ /**
797
+ * English name of the character
798
+ */
799
+ nameEn: string;
800
+ /**
801
+ * Character image URL
802
+ */
803
+ imageUrl: string;
804
+ /**
805
+ * Character's role in the media
806
+ */
807
+ role: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
808
+ /**
809
+ * AniList staff ID for the Japanese voice actor
810
+ */
811
+ seiyuuId: number;
812
+ /**
813
+ * Japanese name of the voice actor
814
+ */
815
+ seiyuuNameJa: string;
816
+ /**
817
+ * English name of the voice actor
818
+ */
819
+ seiyuuNameEn: string;
820
+ /**
821
+ * Voice actor profile image URL
822
+ */
823
+ seiyuuImageUrl: string;
824
+ };
825
+ /**
826
+ * List data for adding media to a list
827
+ */
828
+ export type ListInput = {
829
+ /**
830
+ * Existing list ID (if adding to existing list)
831
+ */
832
+ listId?: number;
833
+ /**
834
+ * Name for new list (if creating new list)
835
+ */
836
+ listName?: string;
837
+ /**
838
+ * Type of list (if creating new list)
839
+ */
840
+ listType?: 'SERIES' | 'CUSTOM';
841
+ /**
842
+ * Visibility of list (if creating new list)
843
+ */
844
+ listVisibility?: 'PUBLIC' | 'PRIVATE';
845
+ /**
846
+ * Position/order of media in the list (1-indexed)
847
+ */
848
+ position: number;
849
+ };
850
+ /**
851
+ * Request body for creating a new media entry
852
+ */
853
+ export type MediaCreateRequest = {
854
+ /**
855
+ * AniList database ID for the media
856
+ */
857
+ anilistId: number;
858
+ /**
859
+ * Original Japanese name of the media
860
+ */
861
+ nameJa: string;
862
+ /**
863
+ * Romaji transliteration of the media name
864
+ */
865
+ nameRomaji: string;
866
+ /**
867
+ * English name of the media
868
+ */
869
+ nameEn: string;
870
+ /**
871
+ * Format of the media release (e.g., TV, OVA, Movie)
872
+ */
873
+ airingFormat: string;
874
+ /**
875
+ * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
876
+ */
877
+ airingStatus: string;
878
+ /**
879
+ * List of genres associated with the media
880
+ */
881
+ genres: Array<string>;
882
+ /**
883
+ * Storage backend for media assets
884
+ */
885
+ storage: 'LOCAL' | 'R2';
886
+ /**
887
+ * Start date of the media (first airing/release)
888
+ */
889
+ startDate: string;
890
+ /**
891
+ * End date of the media (last airing/release)
892
+ */
893
+ endDate?: string;
894
+ /**
895
+ * Media category
896
+ */
897
+ category: 'ANIME' | 'JDRAMA';
898
+ /**
899
+ * Version of the media-sub-splitter used
900
+ */
901
+ version: string;
902
+ /**
903
+ * Hash salt used when generating the hash for the related media assets
904
+ */
905
+ hashSalt: string;
906
+ /**
907
+ * Animation studio that produced the media
908
+ */
909
+ studio: string;
910
+ /**
911
+ * Airing season label for the media
912
+ */
913
+ seasonName: string;
914
+ /**
915
+ * Airing year for the media
916
+ */
917
+ seasonYear: number;
918
+ /**
919
+ * List of characters appearing in the media with their voice actors
920
+ */
921
+ characters?: Array<CharacterInput>;
922
+ /**
923
+ * Lists to add this media to (e.g., series, franchise)
924
+ */
925
+ lists?: Array<ListInput>;
926
+ };
927
+ /**
928
+ * Request body for updating an existing media entry (all fields optional)
929
+ */
930
+ export type MediaUpdateRequest = {
931
+ /**
932
+ * AniList database ID for the media
933
+ */
934
+ anilistId?: number;
935
+ /**
936
+ * Original Japanese name of the media
937
+ */
938
+ nameJa?: string;
939
+ /**
940
+ * Romaji transliteration of the media name
941
+ */
942
+ nameRomaji?: string;
943
+ /**
944
+ * English name of the media
945
+ */
946
+ nameEn?: string;
947
+ /**
948
+ * Format of the media release (e.g., TV, OVA, Movie)
949
+ */
950
+ airingFormat?: string;
951
+ /**
952
+ * Current airing status (FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED)
953
+ */
954
+ airingStatus?: string;
955
+ /**
956
+ * List of genres associated with the media
957
+ */
958
+ genres?: Array<string>;
959
+ /**
960
+ * Storage backend for media assets
961
+ */
962
+ storage?: 'LOCAL' | 'R2';
963
+ /**
964
+ * Start date of the media (first airing/release)
965
+ */
966
+ startDate?: string;
967
+ /**
968
+ * End date of the media (last airing/release)
969
+ */
970
+ endDate?: string;
971
+ /**
972
+ * Media category
973
+ */
974
+ category?: 'ANIME' | 'JDRAMA';
975
+ /**
976
+ * Version of the media-sub-splitter used
977
+ */
978
+ version?: string;
979
+ /**
980
+ * Hash salt used when generating the hash for the related media assets
981
+ */
982
+ hashSalt?: string;
983
+ /**
984
+ * Animation studio that produced the media
985
+ */
986
+ studio?: string;
987
+ /**
988
+ * Airing season label for the media
989
+ */
990
+ seasonName?: string;
991
+ /**
992
+ * Airing year for the media
993
+ */
994
+ seasonYear?: number;
995
+ /**
996
+ * List of characters appearing in the media with their voice actors
997
+ */
998
+ characters?: Array<CharacterInput>;
999
+ /**
1000
+ * Lists to add this media to (e.g., series, franchise)
1001
+ */
1002
+ lists?: Array<ListInput>;
1003
+ /**
1004
+ * Total number of subtitle segments available
1005
+ */
1006
+ segmentCount?: number;
1007
+ };
1008
+ export type Episode = {
1009
+ /**
1010
+ * ID of the media this episode belongs to
1011
+ */
1012
+ mediaId: number;
1013
+ /**
1014
+ * Episode number within the media
1015
+ */
1016
+ episodeNumber: number;
1017
+ /**
1018
+ * AniList episode ID for external reference
1019
+ */
1020
+ anilistEpisodeId?: number;
1021
+ /**
1022
+ * English title of the episode
1023
+ */
1024
+ titleEn?: string;
1025
+ /**
1026
+ * Romanized title of the episode
1027
+ */
1028
+ titleRomaji?: string;
1029
+ /**
1030
+ * Japanese title of the episode
1031
+ */
1032
+ titleJa?: string;
1033
+ /**
1034
+ * Episode description or synopsis
1035
+ */
1036
+ description?: string;
1037
+ /**
1038
+ * When the episode originally aired
1039
+ */
1040
+ airedAt?: string;
1041
+ /**
1042
+ * Episode duration in seconds
1043
+ */
1044
+ lengthSeconds?: number;
1045
+ /**
1046
+ * URL to episode thumbnail image
1047
+ */
1048
+ thumbnailUrl?: string;
1049
+ /**
1050
+ * Number of segments in this episode
1051
+ */
1052
+ segmentCount: number;
1053
+ };
1054
+ export type EpisodeListResponse = {
1055
+ /**
1056
+ * Array of episode objects
1057
+ */
1058
+ data: Array<Episode>;
1059
+ /**
1060
+ * Cursor for pagination (last episode number in current page)
1061
+ */
1062
+ cursor?: number;
1063
+ /**
1064
+ * Whether more results are available
1065
+ */
1066
+ hasMore: boolean;
1067
+ };
1068
+ export type EpisodeCreateRequest = {
1069
+ /**
1070
+ * AniList episode ID for external reference
1071
+ */
1072
+ anilistEpisodeId?: number;
1073
+ /**
1074
+ * English title of the episode
1075
+ */
1076
+ titleEn?: string;
1077
+ /**
1078
+ * Romanized title of the episode
1079
+ */
1080
+ titleRomaji?: string;
1081
+ /**
1082
+ * Japanese title of the episode
1083
+ */
1084
+ titleJa?: string;
1085
+ /**
1086
+ * Episode description or synopsis
1087
+ */
1088
+ description?: string;
1089
+ /**
1090
+ * When the episode originally aired
1091
+ */
1092
+ airedAt?: string;
1093
+ /**
1094
+ * Episode duration in seconds
1095
+ */
1096
+ lengthSeconds?: number;
1097
+ /**
1098
+ * URL to episode thumbnail image
1099
+ */
1100
+ thumbnailUrl?: string;
1101
+ /**
1102
+ * Episode number within the media (must be unique for this media)
1103
+ */
1104
+ episodeNumber: number;
1105
+ };
1106
+ /**
1107
+ * All fields are optional for partial updates
1108
+ */
1109
+ export type EpisodeUpdateRequest = {
1110
+ /**
1111
+ * AniList episode ID for external reference
1112
+ */
1113
+ anilistEpisodeId?: number;
1114
+ /**
1115
+ * English title of the episode
1116
+ */
1117
+ titleEn?: string;
1118
+ /**
1119
+ * Romanized title of the episode
1120
+ */
1121
+ titleRomaji?: string;
1122
+ /**
1123
+ * Japanese title of the episode
1124
+ */
1125
+ titleJa?: string;
1126
+ /**
1127
+ * Episode description or synopsis
1128
+ */
1129
+ description?: string;
1130
+ /**
1131
+ * When the episode originally aired
1132
+ */
1133
+ airedAt?: string;
1134
+ /**
1135
+ * Episode duration in seconds
1136
+ */
1137
+ lengthSeconds?: number;
1138
+ /**
1139
+ * URL to episode thumbnail image
1140
+ */
1141
+ thumbnailUrl?: string;
1142
+ };
1143
+ /**
1144
+ * Japanese content with optional character count
1145
+ */
1146
+ export type JapaneseContent = {
1147
+ /**
1148
+ * Original Japanese content
1149
+ */
1150
+ content: string;
1151
+ /**
1152
+ * Number of characters in the Japanese content
1153
+ */
1154
+ characterCount?: number;
1155
+ };
1156
+ /**
1157
+ * Translation content for a language
1158
+ */
1159
+ export type TranslationContent = {
1160
+ /**
1161
+ * Translated content
1162
+ */
1163
+ content?: string;
1164
+ /**
1165
+ * Whether the translation was machine-translated
1166
+ */
1167
+ isMachineTranslated: boolean;
1168
+ };
1169
+ export type Segment = {
1170
+ /**
1171
+ * Auto-generated segment ID
1172
+ */
1173
+ id: number;
1174
+ /**
1175
+ * Unique identifier for the segment
1176
+ */
1177
+ uuid: string;
1178
+ /**
1179
+ * Position of the segment within the episode
1180
+ */
1181
+ position: number;
1182
+ /**
1183
+ * Segment status
1184
+ */
1185
+ status: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1186
+ /**
1187
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1188
+ */
1189
+ startTime: string;
1190
+ /**
1191
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1192
+ */
1193
+ endTime: string;
1194
+ ja: JapaneseContent;
1195
+ en: TranslationContent;
1196
+ es: TranslationContent;
1197
+ /**
1198
+ * Whether the segment contains NSFW content
1199
+ */
1200
+ isNsfw: boolean;
1201
+ /**
1202
+ * URL to segment screenshot/image (generated from storage + hashedId)
1203
+ */
1204
+ imageUrl?: string;
1205
+ /**
1206
+ * URL to segment audio file (generated from storage + hashedId)
1207
+ */
1208
+ audioUrl?: string;
1209
+ /**
1210
+ * URL to segment video file (generated from storage + hashedId)
1211
+ */
1212
+ videoUrl?: string;
1213
+ /**
1214
+ * Episode number this segment belongs to
1215
+ */
1216
+ episode: number;
1217
+ /**
1218
+ * Media ID this segment belongs to
1219
+ */
1220
+ mediaId: number;
1221
+ /**
1222
+ * Storage backend for segment assets
1223
+ */
1224
+ storage: 'LOCAL' | 'R2';
1225
+ /**
1226
+ * Hash identifier for the segment
1227
+ */
1228
+ hashedId: string;
1229
+ /**
1230
+ * Morphological analysis of the Japanese content
1231
+ */
1232
+ morphemes?: Array<Morpheme>;
1233
+ };
1234
+ export type SegmentListResponse = {
1235
+ /**
1236
+ * Array of segment objects
1237
+ */
1238
+ data: Array<Segment>;
1239
+ /**
1240
+ * Cursor for pagination (last segment ID in current page)
1241
+ */
1242
+ cursor?: number;
1243
+ /**
1244
+ * Whether more results are available
1245
+ */
1246
+ hasMore: boolean;
1247
+ };
1248
+ export type SegmentCreateRequest = {
1249
+ /**
1250
+ * Position of the segment within the episode
1251
+ */
1252
+ position: number;
1253
+ /**
1254
+ * Segment status
1255
+ */
1256
+ status?: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1257
+ /**
1258
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1259
+ */
1260
+ startTime: string;
1261
+ /**
1262
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1263
+ */
1264
+ endTime: string;
1265
+ ja: {
1266
+ /**
1267
+ * Original Japanese content of the segment
1268
+ */
1269
+ content?: string;
1270
+ };
1271
+ es?: {
1272
+ /**
1273
+ * Spanish translation of the segment content
1274
+ */
1275
+ content?: string;
1276
+ /**
1277
+ * Whether the Spanish translation was machine-translated
1278
+ */
1279
+ isMachineTranslated?: boolean;
1280
+ };
1281
+ en?: {
1282
+ /**
1283
+ * English translation of the segment content
1284
+ */
1285
+ content?: string;
1286
+ /**
1287
+ * Whether the English translation was machine-translated
1288
+ */
1289
+ isMachineTranslated?: boolean;
1290
+ };
1291
+ /**
1292
+ * Whether the segment contains NSFW content
1293
+ */
1294
+ isNsfw?: boolean;
1295
+ /**
1296
+ * Storage backend for segment assets
1297
+ */
1298
+ storage: 'LOCAL' | 'R2';
1299
+ /**
1300
+ * Hash identifier for the segment (from segment JSON)
1301
+ */
1302
+ hashedId: string;
1303
+ };
1304
+ /**
1305
+ * All fields are optional for partial updates
1306
+ */
1307
+ export type SegmentUpdateRequest = {
1308
+ /**
1309
+ * Position of the segment within the episode
1310
+ */
1311
+ position?: number;
1312
+ /**
1313
+ * Segment status
1314
+ */
1315
+ status?: 'DELETED' | 'ACTIVE' | 'SUSPENDED' | 'VERIFIED' | 'INVALID' | 'TOO_LONG';
1316
+ /**
1317
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment starts
1318
+ */
1319
+ startTime?: string;
1320
+ /**
1321
+ * Timestamp in H:MM:SS.ffffff format indicating when the segment ends
1322
+ */
1323
+ endTime?: string;
1324
+ ja?: {
1325
+ /**
1326
+ * Original Japanese content of the segment
1327
+ */
1328
+ content?: string;
1329
+ };
1330
+ es?: {
1331
+ /**
1332
+ * Spanish translation of the segment content
1333
+ */
1334
+ content?: string;
1335
+ /**
1336
+ * Whether the Spanish translation was machine-translated
1337
+ */
1338
+ isMachineTranslated?: boolean;
1339
+ };
1340
+ en?: {
1341
+ /**
1342
+ * English translation of the segment content
1343
+ */
1344
+ content?: string;
1345
+ /**
1346
+ * Whether the English translation was machine-translated
1347
+ */
1348
+ isMachineTranslated?: boolean;
1349
+ };
1350
+ /**
1351
+ * Whether the segment contains NSFW content
1352
+ */
1353
+ isNsfw?: boolean;
1354
+ /**
1355
+ * Storage backend for segment assets
1356
+ */
1357
+ storage?: 'LOCAL' | 'R2';
1358
+ /**
1359
+ * Hash identifier for the segment (from segment JSON)
1360
+ */
1361
+ hashedId?: string;
1362
+ };
1363
+ /**
1364
+ * Character with all media appearances
1365
+ */
1366
+ export type CharacterWithMedia = {
1367
+ /**
1368
+ * AniList character ID
1369
+ */
1370
+ id: number;
1371
+ /**
1372
+ * Japanese name of the character
1373
+ */
1374
+ nameJa: string;
1375
+ /**
1376
+ * English name of the character
1377
+ */
1378
+ nameEn: string;
1379
+ /**
1380
+ * Character image URL
1381
+ */
1382
+ imageUrl: string;
1383
+ seiyuu: Seiyuu;
1384
+ /**
1385
+ * All media this character appears in
1386
+ */
1387
+ mediaAppearances: Array<{
1388
+ media?: Media;
1389
+ /**
1390
+ * Character role in this media
1391
+ */
1392
+ role?: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
1393
+ }>;
1394
+ };
1395
+ /**
1396
+ * Seiyuu with all voice acting roles
1397
+ */
1398
+ export type SeiyuuWithRoles = {
1399
+ /**
1400
+ * AniList staff ID
1401
+ */
1402
+ id: number;
1403
+ /**
1404
+ * Japanese name of the voice actor
1405
+ */
1406
+ nameJa: string;
1407
+ /**
1408
+ * English name of the voice actor
1409
+ */
1410
+ nameEn: string;
1411
+ /**
1412
+ * Profile image URL
1413
+ */
1414
+ imageUrl: string;
1415
+ /**
1416
+ * All characters voiced by this seiyuu with their media appearances
1417
+ */
1418
+ roles: Array<{
1419
+ character?: Character;
1420
+ media?: Media;
1421
+ /**
1422
+ * Character role in this media
1423
+ */
1424
+ role?: 'MAIN' | 'SUPPORTING' | 'BACKGROUND';
1425
+ }>;
1426
+ };
1427
+ export type UserQuotaResponse = {
1428
+ /**
1429
+ * Number of API requests used in the current billing period.
1430
+ */
1431
+ quotaUsed: number;
1432
+ /**
1433
+ * Maximum number of API requests allowed in the current billing period.
1434
+ */
1435
+ quotaLimit: number;
1436
+ /**
1437
+ * Number of API requests remaining in the current billing period.
1438
+ */
1439
+ quotaRemaining: number;
1440
+ /**
1441
+ * Current billing period in YYYYMM format.
1442
+ */
1443
+ periodYyyymm: number;
1444
+ /**
1445
+ * Start of the current billing period (UTC).
1446
+ */
1447
+ periodStart: string;
1448
+ /**
1449
+ * End of the current billing period (UTC).
1450
+ */
1451
+ periodEnd: string;
1452
+ };
1453
+ export type Report = {
1454
+ /**
1455
+ * Report ID
1456
+ */
1457
+ id: number;
1458
+ /**
1459
+ * Type of the reported entity
1460
+ */
1461
+ reportType: 'SEGMENT' | 'MEDIA';
1462
+ /**
1463
+ * ID of the reported entity (segment UUID or media ID)
1464
+ */
1465
+ targetId: string;
1466
+ /**
1467
+ * Reason for the report
1468
+ */
1469
+ reason: 'WRONG_TRANSLATION' | 'WRONG_TIMING' | 'WRONG_AUDIO' | 'NSFW_NOT_TAGGED' | 'DUPLICATE_SEGMENT' | 'WRONG_METADATA' | 'MISSING_EPISODES' | 'WRONG_COVER_IMAGE' | 'INAPPROPRIATE_CONTENT' | 'OTHER';
1470
+ /**
1471
+ * Optional description with additional details
1472
+ */
1473
+ description?: string;
1474
+ /**
1475
+ * Current status of the report
1476
+ */
1477
+ status: 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED';
1478
+ /**
1479
+ * Notes from the admin who reviewed the report
1480
+ */
1481
+ adminNotes?: string;
1482
+ /**
1483
+ * When the report was resolved
1484
+ */
1485
+ resolvedAt?: string;
1486
+ /**
1487
+ * ID of the user who submitted the report
1488
+ */
1489
+ userId: number;
1490
+ /**
1491
+ * ID of the admin who resolved the report
1492
+ */
1493
+ resolvedById?: number;
1494
+ /**
1495
+ * When the report was created
1496
+ */
1497
+ createdAt: string;
1498
+ /**
1499
+ * When the report was last updated
1500
+ */
1501
+ updatedAt?: string;
1502
+ };
1503
+ export type ReportListResponse = {
1504
+ data: Array<Report>;
1505
+ /**
1506
+ * Whether more results are available
1507
+ */
1508
+ hasMore: boolean;
1509
+ /**
1510
+ * Cursor for next page
1511
+ */
1512
+ cursor?: number;
1513
+ };
1514
+ export type CreateReportRequest = {
1515
+ /**
1516
+ * Type of the entity being reported
1517
+ */
1518
+ reportType: 'SEGMENT' | 'MEDIA';
1519
+ /**
1520
+ * ID of the entity being reported (segment UUID or media ID as string)
1521
+ */
1522
+ targetId: string;
1523
+ /**
1524
+ * Reason for the report
1525
+ */
1526
+ reason: 'WRONG_TRANSLATION' | 'WRONG_TIMING' | 'WRONG_AUDIO' | 'NSFW_NOT_TAGGED' | 'DUPLICATE_SEGMENT' | 'WRONG_METADATA' | 'MISSING_EPISODES' | 'WRONG_COVER_IMAGE' | 'INAPPROPRIATE_CONTENT' | 'OTHER';
1527
+ /**
1528
+ * Optional description with additional details
1529
+ */
1530
+ description?: string;
1531
+ };
1532
+ /**
1533
+ * Request body for creating a new standalone list
1534
+ */
1535
+ export type ListCreateRequest = {
1536
+ /**
1537
+ * Name of the list
1538
+ */
1539
+ name: string;
1540
+ /**
1541
+ * Type of list
1542
+ */
1543
+ type?: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1544
+ /**
1545
+ * User ID who owns the list (1 = admin)
1546
+ */
1547
+ userId?: number;
1548
+ /**
1549
+ * Visibility of the list
1550
+ */
1551
+ visibility?: 'PUBLIC' | 'PRIVATE';
1552
+ };
1553
+ /**
1554
+ * List with all media in order
1555
+ */
1556
+ export type ListWithMedia = {
1557
+ /**
1558
+ * List ID
1559
+ */
1560
+ id: number;
1561
+ /**
1562
+ * Name of the list
1563
+ */
1564
+ name: string;
1565
+ /**
1566
+ * Type of list
1567
+ */
1568
+ type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1569
+ /**
1570
+ * User ID who owns the list (1 = admin)
1571
+ */
1572
+ userId: number;
1573
+ /**
1574
+ * Visibility of the list
1575
+ */
1576
+ visibility: 'PUBLIC' | 'PRIVATE';
1577
+ /**
1578
+ * All media in the list, sorted by position
1579
+ */
1580
+ media: Array<{
1581
+ /**
1582
+ * Position in the list (1-indexed)
1583
+ */
1584
+ position?: number;
1585
+ media?: Media;
1586
+ }>;
1587
+ };
1588
+ /**
1589
+ * List with saved segments (search result format)
1590
+ */
1591
+ export type ListWithSegments = {
1592
+ /**
1593
+ * List ID
1594
+ */
1595
+ id: number;
1596
+ /**
1597
+ * Name of the list
1598
+ */
1599
+ name: string;
1600
+ /**
1601
+ * Type of list
1602
+ */
1603
+ type: 'SERIES' | 'CUSTOM' | 'SEGMENT';
1604
+ /**
1605
+ * User ID who owns the list
1606
+ */
1607
+ userId: number;
1608
+ /**
1609
+ * Visibility of the list
1610
+ */
1611
+ visibility: 'PUBLIC' | 'PRIVATE';
1612
+ /**
1613
+ * Saved segments with their search result data
1614
+ */
1615
+ segments: Array<{
1616
+ /**
1617
+ * Position in the list
1618
+ */
1619
+ position?: number;
1620
+ /**
1621
+ * User annotation
1622
+ */
1623
+ note?: string;
1624
+ result?: SearchResult;
1625
+ }>;
1626
+ /**
1627
+ * Total number of segments in the list
1628
+ */
1629
+ totalCount: number;
1630
+ };
1631
+ /**
1632
+ * Request to reindex segments from the database into Elasticsearch
1633
+ */
1634
+ export type ReindexRequest = {
1635
+ /**
1636
+ * Array of media to reindex. If not provided, all media will be reindexed.
1637
+ * Each media can optionally specify which episodes to reindex.
1638
+ * If episodes are not specified for a media, all episodes will be reindexed.
1639
+ */
1640
+ media?: Array<{
1641
+ /**
1642
+ * The ID of the media
1643
+ */
1644
+ mediaId: number;
1645
+ /**
1646
+ * Optional array of episode numbers to reindex.
1647
+ * If not provided, all episodes for this media will be reindexed.
1648
+ */
1649
+ episodes?: Array<number>;
1650
+ }>;
1651
+ };
1652
+ /**
1653
+ * Response from the reindex operation
1654
+ */
1655
+ export type ReindexResponse = {
1656
+ /**
1657
+ * Whether the reindex operation completed successfully
1658
+ */
1659
+ success?: boolean;
1660
+ /**
1661
+ * Human-readable message about the reindex operation
1662
+ */
1663
+ message?: string;
1664
+ /**
1665
+ * Statistics about the reindex operation
1666
+ */
1667
+ stats?: {
1668
+ /**
1669
+ * Total number of segments processed
1670
+ */
1671
+ totalSegments?: number;
1672
+ /**
1673
+ * Number of segments successfully indexed
1674
+ */
1675
+ successfulIndexes?: number;
1676
+ /**
1677
+ * Number of segments that failed to index
1678
+ */
1679
+ failedIndexes?: number;
1680
+ /**
1681
+ * Number of media items processed
1682
+ */
1683
+ mediaProcessed?: number;
1684
+ };
1685
+ /**
1686
+ * Array of errors that occurred during reindexing (if any)
1687
+ */
1688
+ errors?: Array<{
1689
+ /**
1690
+ * ID of the segment that failed
1691
+ */
1692
+ segmentId?: number;
1693
+ /**
1694
+ * Error message
1695
+ */
1696
+ error?: string;
1697
+ }>;
1698
+ };
1699
+ export type AdminReport = Report & {
1700
+ /**
1701
+ * Number of reports for the same target
1702
+ */
1703
+ reportCount: number;
1704
+ /**
1705
+ * Name of the user who submitted this report
1706
+ */
1707
+ reporterName: string;
1708
+ };
1709
+ export type AdminReportListResponse = {
1710
+ data: Array<AdminReport>;
1711
+ /**
1712
+ * Whether more results are available
1713
+ */
1714
+ hasMore: boolean;
1715
+ /**
1716
+ * Cursor for next page
1717
+ */
1718
+ cursor?: number;
1719
+ };
1720
+ export type UpdateReportRequest = {
1721
+ /**
1722
+ * New status for the report
1723
+ */
1724
+ status?: 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED';
1725
+ /**
1726
+ * Admin notes about the report
1727
+ */
1728
+ adminNotes?: string;
1729
+ };
1730
+ export type HealthCheckData = {
1731
+ body?: never;
1732
+ path?: never;
1733
+ query?: never;
1734
+ url: '/v1/health';
1735
+ };
1736
+ export type HealthCheckErrors = {
1737
+ /**
1738
+ * Unauthorized
1739
+ */
1740
+ 401: Error;
1741
+ /**
1742
+ * Forbidden
1743
+ */
1744
+ 403: Error;
1745
+ /**
1746
+ * Too Many Requests
1747
+ */
1748
+ 429: Error;
1749
+ /**
1750
+ * Internal Server Error
1751
+ */
1752
+ 500: Error;
1753
+ };
1754
+ export type HealthCheckError = HealthCheckErrors[keyof HealthCheckErrors];
1755
+ export type HealthCheckResponses = {
1756
+ /**
1757
+ * OK
1758
+ */
1759
+ 200: SearchHealthCheckResponse;
1760
+ };
1761
+ export type HealthCheckResponse = HealthCheckResponses[keyof HealthCheckResponses];
1762
+ export type SearchSegmentsData = {
1763
+ body?: SearchRequest;
1764
+ path?: never;
1765
+ query?: never;
1766
+ url: '/v1/search/segments';
1767
+ };
1768
+ export type SearchSegmentsErrors = {
1769
+ /**
1770
+ * Bad Request
1771
+ */
1772
+ 400: Error;
1773
+ /**
1774
+ * Unauthorized
1775
+ */
1776
+ 401: Error;
1777
+ /**
1778
+ * Forbidden
1779
+ */
1780
+ 403: Error;
1781
+ /**
1782
+ * Too Many Requests
1783
+ */
1784
+ 429: Error;
1785
+ /**
1786
+ * Internal Server Error
1787
+ */
1788
+ 500: Error;
1789
+ };
1790
+ export type SearchSegmentsError = SearchSegmentsErrors[keyof SearchSegmentsErrors];
1791
+ export type SearchSegmentsResponses = {
1792
+ /**
1793
+ * OK
1794
+ */
1795
+ 200: SearchResponse;
1796
+ };
1797
+ export type SearchSegmentsResponse = SearchSegmentsResponses[keyof SearchSegmentsResponses];
1798
+ export type GetSearchStatsData = {
1799
+ body?: SearchStatsRequest;
1800
+ path?: never;
1801
+ query?: never;
1802
+ url: '/v1/search/stats';
1803
+ };
1804
+ export type GetSearchStatsErrors = {
1805
+ /**
1806
+ * Bad Request
1807
+ */
1808
+ 400: Error;
1809
+ /**
1810
+ * Unauthorized
1811
+ */
1812
+ 401: Error;
1813
+ /**
1814
+ * Forbidden
1815
+ */
1816
+ 403: Error;
1817
+ /**
1818
+ * Too Many Requests
1819
+ */
1820
+ 429: Error;
1821
+ /**
1822
+ * Internal Server Error
1823
+ */
1824
+ 500: Error;
1825
+ };
1826
+ export type GetSearchStatsError = GetSearchStatsErrors[keyof GetSearchStatsErrors];
1827
+ export type GetSearchStatsResponses = {
1828
+ /**
1829
+ * OK
1830
+ */
1831
+ 200: SearchStatsResponse;
1832
+ };
1833
+ export type GetSearchStatsResponse = GetSearchStatsResponses[keyof GetSearchStatsResponses];
1834
+ export type SearchWordsData = {
1835
+ body: SearchMultipleRequest;
1836
+ path?: never;
1837
+ query?: never;
1838
+ url: '/v1/search/words';
1839
+ };
1840
+ export type SearchWordsErrors = {
1841
+ /**
1842
+ * Bad Request
1843
+ */
1844
+ 400: Error;
1845
+ /**
1846
+ * Unauthorized
1847
+ */
1848
+ 401: Error;
1849
+ /**
1850
+ * Forbidden
1851
+ */
1852
+ 403: Error;
1853
+ /**
1854
+ * Too Many Requests
1855
+ */
1856
+ 429: Error;
1857
+ /**
1858
+ * Internal Server Error
1859
+ */
1860
+ 500: Error;
1861
+ };
1862
+ export type SearchWordsError = SearchWordsErrors[keyof SearchWordsErrors];
1863
+ export type SearchWordsResponses = {
1864
+ /**
1865
+ * OK
1866
+ */
1867
+ 200: SearchMultipleResponse;
1868
+ };
1869
+ export type SearchWordsResponse = SearchWordsResponses[keyof SearchWordsResponses];
1870
+ export type GetSegmentContextData = {
1871
+ body: SegmentContextRequest;
1872
+ path?: never;
1873
+ query?: never;
1874
+ url: '/v1/search/context';
1875
+ };
1876
+ export type GetSegmentContextErrors = {
1877
+ /**
1878
+ * Bad Request
1879
+ */
1880
+ 400: Error;
1881
+ /**
1882
+ * Unauthorized
1883
+ */
1884
+ 401: Error;
1885
+ /**
1886
+ * Forbidden
1887
+ */
1888
+ 403: Error;
1889
+ /**
1890
+ * Not Found
1891
+ */
1892
+ 404: Error;
1893
+ /**
1894
+ * Too Many Requests
1895
+ */
1896
+ 429: Error;
1897
+ /**
1898
+ * Internal Server Error
1899
+ */
1900
+ 500: Error;
1901
+ };
1902
+ export type GetSegmentContextError = GetSegmentContextErrors[keyof GetSegmentContextErrors];
1903
+ export type GetSegmentContextResponses = {
1904
+ /**
1905
+ * OK
1906
+ */
1907
+ 200: SegmentContextResponse;
1908
+ };
1909
+ export type GetSegmentContextResponse = GetSegmentContextResponses[keyof GetSegmentContextResponses];
1910
+ export type BrowseMediaData = {
1911
+ body?: never;
1912
+ path?: never;
1913
+ query?: {
1914
+ /**
1915
+ * Number of results per page
1916
+ */
1917
+ size?: number;
1918
+ /**
1919
+ * Pagination cursor offset
1920
+ */
1921
+ cursor?: number;
1922
+ /**
1923
+ * Search query for filtering media
1924
+ */
1925
+ query?: string;
1926
+ /**
1927
+ * Filter by media category
1928
+ */
1929
+ type?: 'anime' | 'liveaction' | 'audiobook';
1930
+ };
1931
+ url: '/v1/media/browse';
1932
+ };
1933
+ export type BrowseMediaErrors = {
1934
+ /**
1935
+ * Unauthorized
1936
+ */
1937
+ 401: Error;
1938
+ /**
1939
+ * Forbidden
1940
+ */
1941
+ 403: Error;
1942
+ /**
1943
+ * Too Many Requests
1944
+ */
1945
+ 429: Error;
1946
+ /**
1947
+ * Internal Server Error
1948
+ */
1949
+ 500: Error;
1950
+ };
1951
+ export type BrowseMediaError = BrowseMediaErrors[keyof BrowseMediaErrors];
1952
+ export type BrowseMediaResponses = {
1953
+ /**
1954
+ * OK
1955
+ */
1956
+ 200: MediaBrowseResponse;
1957
+ };
1958
+ export type BrowseMediaResponse = BrowseMediaResponses[keyof BrowseMediaResponses];
1959
+ export type MediaIndexData = {
1960
+ body?: never;
1961
+ path?: never;
1962
+ query?: {
1963
+ /**
1964
+ * Number of results per page
1965
+ */
1966
+ limit?: number;
1967
+ /**
1968
+ * Pagination cursor offset
1969
+ */
1970
+ cursor?: number;
1971
+ /**
1972
+ * Filter by media category
1973
+ */
1974
+ category?: 'ANIME' | 'JDRAMA';
1975
+ };
1976
+ url: '/v1/media';
1977
+ };
1978
+ export type MediaIndexErrors = {
1979
+ /**
1980
+ * Bad Request
1981
+ */
1982
+ 400: Error;
1983
+ /**
1984
+ * Unauthorized
1985
+ */
1986
+ 401: Error;
1987
+ /**
1988
+ * Forbidden
1989
+ */
1990
+ 403: Error;
1991
+ /**
1992
+ * Too Many Requests
1993
+ */
1994
+ 429: Error;
1995
+ /**
1996
+ * Internal Server Error
1997
+ */
1998
+ 500: Error;
1999
+ };
2000
+ export type MediaIndexError = MediaIndexErrors[keyof MediaIndexErrors];
2001
+ export type MediaIndexResponses = {
2002
+ /**
2003
+ * OK
2004
+ */
2005
+ 200: MediaListResponse;
2006
+ };
2007
+ export type MediaIndexResponse = MediaIndexResponses[keyof MediaIndexResponses];
2008
+ export type MediaCreateData = {
2009
+ body: MediaCreateRequest;
2010
+ path?: never;
2011
+ query?: never;
2012
+ url: '/v1/media';
2013
+ };
2014
+ export type MediaCreateErrors = {
2015
+ /**
2016
+ * Bad Request
2017
+ */
2018
+ 400: Error;
2019
+ /**
2020
+ * Unauthorized
2021
+ */
2022
+ 401: Error;
2023
+ /**
2024
+ * Forbidden
2025
+ */
2026
+ 403: Error;
2027
+ /**
2028
+ * Conflict
2029
+ */
2030
+ 409: Error;
2031
+ /**
2032
+ * Too Many Requests
2033
+ */
2034
+ 429: Error;
2035
+ /**
2036
+ * Internal Server Error
2037
+ */
2038
+ 500: Error;
2039
+ };
2040
+ export type MediaCreateError = MediaCreateErrors[keyof MediaCreateErrors];
2041
+ export type MediaCreateResponses = {
2042
+ /**
2043
+ * Created
2044
+ */
2045
+ 201: Media;
2046
+ };
2047
+ export type MediaCreateResponse = MediaCreateResponses[keyof MediaCreateResponses];
2048
+ export type MediaDestroyData = {
2049
+ body?: never;
2050
+ path: {
2051
+ /**
2052
+ * Media ID
2053
+ */
2054
+ id: number;
2055
+ };
2056
+ query?: never;
2057
+ url: '/v1/media/{id}';
2058
+ };
2059
+ export type MediaDestroyErrors = {
2060
+ /**
2061
+ * Bad Request
2062
+ */
2063
+ 400: Error;
2064
+ /**
2065
+ * Unauthorized
2066
+ */
2067
+ 401: Error;
2068
+ /**
2069
+ * Forbidden
2070
+ */
2071
+ 403: Error;
2072
+ /**
2073
+ * Not Found
2074
+ */
2075
+ 404: Error;
2076
+ /**
2077
+ * Too Many Requests
2078
+ */
2079
+ 429: Error;
2080
+ /**
2081
+ * Internal Server Error
2082
+ */
2083
+ 500: Error;
2084
+ };
2085
+ export type MediaDestroyError = MediaDestroyErrors[keyof MediaDestroyErrors];
2086
+ export type MediaDestroyResponses = {
2087
+ /**
2088
+ * OK
2089
+ */
2090
+ 200: {
2091
+ message?: string;
2092
+ id?: number;
2093
+ };
2094
+ };
2095
+ export type MediaDestroyResponse = MediaDestroyResponses[keyof MediaDestroyResponses];
2096
+ export type MediaShowData = {
2097
+ body?: never;
2098
+ path: {
2099
+ /**
2100
+ * Media ID
2101
+ */
2102
+ id: number;
2103
+ };
2104
+ query?: never;
2105
+ url: '/v1/media/{id}';
2106
+ };
2107
+ export type MediaShowErrors = {
2108
+ /**
2109
+ * Bad Request
2110
+ */
2111
+ 400: Error;
2112
+ /**
2113
+ * Unauthorized
2114
+ */
2115
+ 401: Error;
2116
+ /**
2117
+ * Forbidden
2118
+ */
2119
+ 403: Error;
2120
+ /**
2121
+ * Not Found
2122
+ */
2123
+ 404: Error;
2124
+ /**
2125
+ * Too Many Requests
2126
+ */
2127
+ 429: Error;
2128
+ /**
2129
+ * Internal Server Error
2130
+ */
2131
+ 500: Error;
2132
+ };
2133
+ export type MediaShowError = MediaShowErrors[keyof MediaShowErrors];
2134
+ export type MediaShowResponses = {
2135
+ /**
2136
+ * OK
2137
+ */
2138
+ 200: Media;
2139
+ };
2140
+ export type MediaShowResponse = MediaShowResponses[keyof MediaShowResponses];
2141
+ export type MediaUpdateData = {
2142
+ body: MediaUpdateRequest;
2143
+ path: {
2144
+ /**
2145
+ * Media ID
2146
+ */
2147
+ id: number;
2148
+ };
2149
+ query?: never;
2150
+ url: '/v1/media/{id}';
2151
+ };
2152
+ export type MediaUpdateErrors = {
2153
+ /**
2154
+ * Bad Request
2155
+ */
2156
+ 400: Error;
2157
+ /**
2158
+ * Unauthorized
2159
+ */
2160
+ 401: Error;
2161
+ /**
2162
+ * Forbidden
2163
+ */
2164
+ 403: Error;
2165
+ /**
2166
+ * Not Found
2167
+ */
2168
+ 404: Error;
2169
+ /**
2170
+ * Too Many Requests
2171
+ */
2172
+ 429: Error;
2173
+ /**
2174
+ * Internal Server Error
2175
+ */
2176
+ 500: Error;
2177
+ };
2178
+ export type MediaUpdateError = MediaUpdateErrors[keyof MediaUpdateErrors];
2179
+ export type MediaUpdateResponses = {
2180
+ /**
2181
+ * OK
2182
+ */
2183
+ 200: Media;
2184
+ };
2185
+ export type MediaUpdateResponse = MediaUpdateResponses[keyof MediaUpdateResponses];
2186
+ export type EpisodeIndexData = {
2187
+ body?: never;
2188
+ path: {
2189
+ /**
2190
+ * ID of the media
2191
+ */
2192
+ mediaId: number;
2193
+ };
2194
+ query?: {
2195
+ /**
2196
+ * Maximum number of episodes to return
2197
+ */
2198
+ size?: number;
2199
+ /**
2200
+ * Episode number to start from (for pagination)
2201
+ */
2202
+ cursor?: number;
2203
+ };
2204
+ url: '/v1/media/{mediaId}/episodes';
2205
+ };
2206
+ export type EpisodeIndexErrors = {
2207
+ /**
2208
+ * Bad Request
2209
+ */
2210
+ 400: Error;
2211
+ /**
2212
+ * Unauthorized
2213
+ */
2214
+ 401: Error;
2215
+ /**
2216
+ * Forbidden
2217
+ */
2218
+ 403: Error;
2219
+ /**
2220
+ * Not Found
2221
+ */
2222
+ 404: Error;
2223
+ /**
2224
+ * Too Many Requests
2225
+ */
2226
+ 429: Error;
2227
+ /**
2228
+ * Internal Server Error
2229
+ */
2230
+ 500: Error;
2231
+ };
2232
+ export type EpisodeIndexError = EpisodeIndexErrors[keyof EpisodeIndexErrors];
2233
+ export type EpisodeIndexResponses = {
2234
+ /**
2235
+ * Paginated list of episodes
2236
+ */
2237
+ 200: EpisodeListResponse;
2238
+ };
2239
+ export type EpisodeIndexResponse = EpisodeIndexResponses[keyof EpisodeIndexResponses];
2240
+ export type EpisodeCreateData = {
2241
+ body: EpisodeCreateRequest;
2242
+ path: {
2243
+ /**
2244
+ * ID of the media
2245
+ */
2246
+ mediaId: number;
2247
+ };
2248
+ query?: never;
2249
+ url: '/v1/media/{mediaId}/episodes';
2250
+ };
2251
+ export type EpisodeCreateErrors = {
2252
+ /**
2253
+ * Bad Request
2254
+ */
2255
+ 400: Error;
2256
+ /**
2257
+ * Unauthorized
2258
+ */
2259
+ 401: Error;
2260
+ /**
2261
+ * Forbidden
2262
+ */
2263
+ 403: Error;
2264
+ /**
2265
+ * Not Found
2266
+ */
2267
+ 404: Error;
2268
+ /**
2269
+ * Conflict
2270
+ */
2271
+ 409: Error;
2272
+ /**
2273
+ * Too Many Requests
2274
+ */
2275
+ 429: Error;
2276
+ /**
2277
+ * Internal Server Error
2278
+ */
2279
+ 500: Error;
2280
+ };
2281
+ export type EpisodeCreateError = EpisodeCreateErrors[keyof EpisodeCreateErrors];
2282
+ export type EpisodeCreateResponses = {
2283
+ /**
2284
+ * Single episode response
2285
+ */
2286
+ 201: Episode;
2287
+ };
2288
+ export type EpisodeCreateResponse = EpisodeCreateResponses[keyof EpisodeCreateResponses];
2289
+ export type EpisodeDestroyData = {
2290
+ body?: never;
2291
+ path: {
2292
+ /**
2293
+ * ID of the media
2294
+ */
2295
+ mediaId: number;
2296
+ /**
2297
+ * Episode number
2298
+ */
2299
+ episodeNumber: number;
2300
+ };
2301
+ query?: never;
2302
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2303
+ };
2304
+ export type EpisodeDestroyErrors = {
2305
+ /**
2306
+ * Bad Request
2307
+ */
2308
+ 400: Error;
2309
+ /**
2310
+ * Unauthorized
2311
+ */
2312
+ 401: Error;
2313
+ /**
2314
+ * Forbidden
2315
+ */
2316
+ 403: Error;
2317
+ /**
2318
+ * Not Found
2319
+ */
2320
+ 404: Error;
2321
+ /**
2322
+ * Too Many Requests
2323
+ */
2324
+ 429: Error;
2325
+ /**
2326
+ * Internal Server Error
2327
+ */
2328
+ 500: Error;
2329
+ };
2330
+ export type EpisodeDestroyError = EpisodeDestroyErrors[keyof EpisodeDestroyErrors];
2331
+ export type EpisodeDestroyResponses = {
2332
+ /**
2333
+ * Episode successfully deleted
2334
+ */
2335
+ 204: void;
2336
+ };
2337
+ export type EpisodeDestroyResponse = EpisodeDestroyResponses[keyof EpisodeDestroyResponses];
2338
+ export type EpisodeShowData = {
2339
+ body?: never;
2340
+ path: {
2341
+ /**
2342
+ * ID of the media
2343
+ */
2344
+ mediaId: number;
2345
+ /**
2346
+ * Episode number
2347
+ */
2348
+ episodeNumber: number;
2349
+ };
2350
+ query?: never;
2351
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2352
+ };
2353
+ export type EpisodeShowErrors = {
2354
+ /**
2355
+ * Bad Request
2356
+ */
2357
+ 400: Error;
2358
+ /**
2359
+ * Unauthorized
2360
+ */
2361
+ 401: Error;
2362
+ /**
2363
+ * Forbidden
2364
+ */
2365
+ 403: Error;
2366
+ /**
2367
+ * Not Found
2368
+ */
2369
+ 404: Error;
2370
+ /**
2371
+ * Too Many Requests
2372
+ */
2373
+ 429: Error;
2374
+ /**
2375
+ * Internal Server Error
2376
+ */
2377
+ 500: Error;
2378
+ };
2379
+ export type EpisodeShowError = EpisodeShowErrors[keyof EpisodeShowErrors];
2380
+ export type EpisodeShowResponses = {
2381
+ /**
2382
+ * Single episode response
2383
+ */
2384
+ 200: Episode;
2385
+ };
2386
+ export type EpisodeShowResponse = EpisodeShowResponses[keyof EpisodeShowResponses];
2387
+ export type EpisodeUpdateData = {
2388
+ body: EpisodeUpdateRequest;
2389
+ path: {
2390
+ /**
2391
+ * ID of the media
2392
+ */
2393
+ mediaId: number;
2394
+ /**
2395
+ * Episode number
2396
+ */
2397
+ episodeNumber: number;
2398
+ };
2399
+ query?: never;
2400
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}';
2401
+ };
2402
+ export type EpisodeUpdateErrors = {
2403
+ /**
2404
+ * Bad Request
2405
+ */
2406
+ 400: Error;
2407
+ /**
2408
+ * Unauthorized
2409
+ */
2410
+ 401: Error;
2411
+ /**
2412
+ * Forbidden
2413
+ */
2414
+ 403: Error;
2415
+ /**
2416
+ * Not Found
2417
+ */
2418
+ 404: Error;
2419
+ /**
2420
+ * Too Many Requests
2421
+ */
2422
+ 429: Error;
2423
+ /**
2424
+ * Internal Server Error
2425
+ */
2426
+ 500: Error;
2427
+ };
2428
+ export type EpisodeUpdateError = EpisodeUpdateErrors[keyof EpisodeUpdateErrors];
2429
+ export type EpisodeUpdateResponses = {
2430
+ /**
2431
+ * Single episode response
2432
+ */
2433
+ 200: Episode;
2434
+ };
2435
+ export type EpisodeUpdateResponse = EpisodeUpdateResponses[keyof EpisodeUpdateResponses];
2436
+ export type SegmentIndexData = {
2437
+ body?: never;
2438
+ path: {
2439
+ /**
2440
+ * ID of the media
2441
+ */
2442
+ mediaId: number;
2443
+ /**
2444
+ * Episode number
2445
+ */
2446
+ episodeNumber: number;
2447
+ };
2448
+ query?: {
2449
+ /**
2450
+ * Maximum number of segments to return
2451
+ */
2452
+ size?: number;
2453
+ /**
2454
+ * Segment ID to start from (for pagination)
2455
+ */
2456
+ cursor?: number;
2457
+ };
2458
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
2459
+ };
2460
+ export type SegmentIndexErrors = {
2461
+ /**
2462
+ * Bad Request
2463
+ */
2464
+ 400: Error;
2465
+ /**
2466
+ * Unauthorized
2467
+ */
2468
+ 401: Error;
2469
+ /**
2470
+ * Forbidden
2471
+ */
2472
+ 403: Error;
2473
+ /**
2474
+ * Not Found
2475
+ */
2476
+ 404: Error;
2477
+ /**
2478
+ * Too Many Requests
2479
+ */
2480
+ 429: Error;
2481
+ /**
2482
+ * Internal Server Error
2483
+ */
2484
+ 500: Error;
2485
+ };
2486
+ export type SegmentIndexError = SegmentIndexErrors[keyof SegmentIndexErrors];
2487
+ export type SegmentIndexResponses = {
2488
+ /**
2489
+ * Paginated list of segments
2490
+ */
2491
+ 200: SegmentListResponse;
2492
+ };
2493
+ export type SegmentIndexResponse = SegmentIndexResponses[keyof SegmentIndexResponses];
2494
+ export type SegmentCreateData = {
2495
+ body: SegmentCreateRequest;
2496
+ path: {
2497
+ /**
2498
+ * ID of the media
2499
+ */
2500
+ mediaId: number;
2501
+ /**
2502
+ * Episode number
2503
+ */
2504
+ episodeNumber: number;
2505
+ };
2506
+ query?: never;
2507
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments';
2508
+ };
2509
+ export type SegmentCreateErrors = {
2510
+ /**
2511
+ * Bad Request
2512
+ */
2513
+ 400: Error;
2514
+ /**
2515
+ * Unauthorized
2516
+ */
2517
+ 401: Error;
2518
+ /**
2519
+ * Forbidden
2520
+ */
2521
+ 403: Error;
2522
+ /**
2523
+ * Not Found
2524
+ */
2525
+ 404: Error;
2526
+ /**
2527
+ * Conflict
2528
+ */
2529
+ 409: Error;
2530
+ /**
2531
+ * Too Many Requests
2532
+ */
2533
+ 429: Error;
2534
+ /**
2535
+ * Internal Server Error
2536
+ */
2537
+ 500: Error;
2538
+ };
2539
+ export type SegmentCreateError = SegmentCreateErrors[keyof SegmentCreateErrors];
2540
+ export type SegmentCreateResponses = {
2541
+ /**
2542
+ * Single segment response
2543
+ */
2544
+ 201: Segment;
2545
+ };
2546
+ export type SegmentCreateResponse = SegmentCreateResponses[keyof SegmentCreateResponses];
2547
+ export type SegmentDestroyData = {
2548
+ body?: never;
2549
+ path: {
2550
+ /**
2551
+ * ID of the media
2552
+ */
2553
+ mediaId: number;
2554
+ /**
2555
+ * Episode number
2556
+ */
2557
+ episodeNumber: number;
2558
+ /**
2559
+ * Segment ID
2560
+ */
2561
+ id: number;
2562
+ };
2563
+ query?: never;
2564
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2565
+ };
2566
+ export type SegmentDestroyErrors = {
2567
+ /**
2568
+ * Bad Request
2569
+ */
2570
+ 400: Error;
2571
+ /**
2572
+ * Unauthorized
2573
+ */
2574
+ 401: Error;
2575
+ /**
2576
+ * Forbidden
2577
+ */
2578
+ 403: Error;
2579
+ /**
2580
+ * Not Found
2581
+ */
2582
+ 404: Error;
2583
+ /**
2584
+ * Too Many Requests
2585
+ */
2586
+ 429: Error;
2587
+ /**
2588
+ * Internal Server Error
2589
+ */
2590
+ 500: Error;
2591
+ };
2592
+ export type SegmentDestroyError = SegmentDestroyErrors[keyof SegmentDestroyErrors];
2593
+ export type SegmentDestroyResponses = {
2594
+ /**
2595
+ * Segment successfully deleted
2596
+ */
2597
+ 204: void;
2598
+ };
2599
+ export type SegmentDestroyResponse = SegmentDestroyResponses[keyof SegmentDestroyResponses];
2600
+ export type SegmentShowData = {
2601
+ body?: never;
2602
+ path: {
2603
+ /**
2604
+ * ID of the media
2605
+ */
2606
+ mediaId: number;
2607
+ /**
2608
+ * Episode number
2609
+ */
2610
+ episodeNumber: number;
2611
+ /**
2612
+ * Segment ID
2613
+ */
2614
+ id: number;
2615
+ };
2616
+ query?: never;
2617
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2618
+ };
2619
+ export type SegmentShowErrors = {
2620
+ /**
2621
+ * Bad Request
2622
+ */
2623
+ 400: Error;
2624
+ /**
2625
+ * Unauthorized
2626
+ */
2627
+ 401: Error;
2628
+ /**
2629
+ * Forbidden
2630
+ */
2631
+ 403: Error;
2632
+ /**
2633
+ * Not Found
2634
+ */
2635
+ 404: Error;
2636
+ /**
2637
+ * Too Many Requests
2638
+ */
2639
+ 429: Error;
2640
+ /**
2641
+ * Internal Server Error
2642
+ */
2643
+ 500: Error;
2644
+ };
2645
+ export type SegmentShowError = SegmentShowErrors[keyof SegmentShowErrors];
2646
+ export type SegmentShowResponses = {
2647
+ /**
2648
+ * Single segment response
2649
+ */
2650
+ 200: Segment;
2651
+ };
2652
+ export type SegmentShowResponse = SegmentShowResponses[keyof SegmentShowResponses];
2653
+ export type SegmentUpdateData = {
2654
+ body: SegmentUpdateRequest;
2655
+ path: {
2656
+ /**
2657
+ * ID of the media
2658
+ */
2659
+ mediaId: number;
2660
+ /**
2661
+ * Episode number
2662
+ */
2663
+ episodeNumber: number;
2664
+ /**
2665
+ * Segment ID
2666
+ */
2667
+ id: number;
2668
+ };
2669
+ query?: never;
2670
+ url: '/v1/media/{mediaId}/episodes/{episodeNumber}/segments/{id}';
2671
+ };
2672
+ export type SegmentUpdateErrors = {
2673
+ /**
2674
+ * Bad Request
2675
+ */
2676
+ 400: Error;
2677
+ /**
2678
+ * Unauthorized
2679
+ */
2680
+ 401: Error;
2681
+ /**
2682
+ * Forbidden
2683
+ */
2684
+ 403: Error;
2685
+ /**
2686
+ * Not Found
2687
+ */
2688
+ 404: Error;
2689
+ /**
2690
+ * Too Many Requests
2691
+ */
2692
+ 429: Error;
2693
+ /**
2694
+ * Internal Server Error
2695
+ */
2696
+ 500: Error;
2697
+ };
2698
+ export type SegmentUpdateError = SegmentUpdateErrors[keyof SegmentUpdateErrors];
2699
+ export type SegmentUpdateResponses = {
2700
+ /**
2701
+ * Single segment response
2702
+ */
2703
+ 200: Segment;
2704
+ };
2705
+ export type SegmentUpdateResponse = SegmentUpdateResponses[keyof SegmentUpdateResponses];
2706
+ export type SegmentShowByUuidData = {
2707
+ body?: never;
2708
+ path: {
2709
+ /**
2710
+ * Segment UUID
2711
+ */
2712
+ uuid: string;
2713
+ };
2714
+ query?: never;
2715
+ url: '/v1/media/segments/{uuid}';
2716
+ };
2717
+ export type SegmentShowByUuidErrors = {
2718
+ /**
2719
+ * Bad Request
2720
+ */
2721
+ 400: Error;
2722
+ /**
2723
+ * Unauthorized
2724
+ */
2725
+ 401: Error;
2726
+ /**
2727
+ * Forbidden
2728
+ */
2729
+ 403: Error;
2730
+ /**
2731
+ * Not Found
2732
+ */
2733
+ 404: Error;
2734
+ /**
2735
+ * Too Many Requests
2736
+ */
2737
+ 429: Error;
2738
+ /**
2739
+ * Internal Server Error
2740
+ */
2741
+ 500: Error;
2742
+ };
2743
+ export type SegmentShowByUuidError = SegmentShowByUuidErrors[keyof SegmentShowByUuidErrors];
2744
+ export type SegmentShowByUuidResponses = {
2745
+ 200: Segment;
2746
+ };
2747
+ export type SegmentShowByUuidResponse = SegmentShowByUuidResponses[keyof SegmentShowByUuidResponses];
2748
+ export type CharacterShowData = {
2749
+ body?: never;
2750
+ path: {
2751
+ /**
2752
+ * AniList character ID
2753
+ */
2754
+ id: number;
2755
+ };
2756
+ query?: never;
2757
+ url: '/v1/media/characters/{id}';
2758
+ };
2759
+ export type CharacterShowErrors = {
2760
+ /**
2761
+ * Bad Request
2762
+ */
2763
+ 400: Error;
2764
+ /**
2765
+ * Unauthorized
2766
+ */
2767
+ 401: Error;
2768
+ /**
2769
+ * Forbidden
2770
+ */
2771
+ 403: Error;
2772
+ /**
2773
+ * Not Found
2774
+ */
2775
+ 404: Error;
2776
+ /**
2777
+ * Too Many Requests
2778
+ */
2779
+ 429: Error;
2780
+ /**
2781
+ * Internal Server Error
2782
+ */
2783
+ 500: Error;
2784
+ };
2785
+ export type CharacterShowError = CharacterShowErrors[keyof CharacterShowErrors];
2786
+ export type CharacterShowResponses = {
2787
+ /**
2788
+ * OK
2789
+ */
2790
+ 200: CharacterWithMedia;
2791
+ };
2792
+ export type CharacterShowResponse = CharacterShowResponses[keyof CharacterShowResponses];
2793
+ export type SeiyuuShowData = {
2794
+ body?: never;
2795
+ path: {
2796
+ /**
2797
+ * AniList staff ID
2798
+ */
2799
+ id: number;
2800
+ };
2801
+ query?: never;
2802
+ url: '/v1/media/seiyuu/{id}';
2803
+ };
2804
+ export type SeiyuuShowErrors = {
2805
+ /**
2806
+ * Bad Request
2807
+ */
2808
+ 400: Error;
2809
+ /**
2810
+ * Unauthorized
2811
+ */
2812
+ 401: Error;
2813
+ /**
2814
+ * Forbidden
2815
+ */
2816
+ 403: Error;
2817
+ /**
2818
+ * Not Found
2819
+ */
2820
+ 404: Error;
2821
+ /**
2822
+ * Too Many Requests
2823
+ */
2824
+ 429: Error;
2825
+ /**
2826
+ * Internal Server Error
2827
+ */
2828
+ 500: Error;
2829
+ };
2830
+ export type SeiyuuShowError = SeiyuuShowErrors[keyof SeiyuuShowErrors];
2831
+ export type SeiyuuShowResponses = {
2832
+ /**
2833
+ * OK
2834
+ */
2835
+ 200: SeiyuuWithRoles;
2836
+ };
2837
+ export type SeiyuuShowResponse = SeiyuuShowResponses[keyof SeiyuuShowResponses];
2838
+ export type GetUserQuotaData = {
2839
+ body?: never;
2840
+ path?: never;
2841
+ query?: never;
2842
+ url: '/v1/user/quota';
2843
+ };
2844
+ export type GetUserQuotaErrors = {
2845
+ /**
2846
+ * Unauthorized
2847
+ */
2848
+ 401: Error;
2849
+ /**
2850
+ * Internal Server Error
2851
+ */
2852
+ 500: Error;
2853
+ };
2854
+ export type GetUserQuotaError = GetUserQuotaErrors[keyof GetUserQuotaErrors];
2855
+ export type GetUserQuotaResponses = {
2856
+ /**
2857
+ * OK
2858
+ */
2859
+ 200: UserQuotaResponse;
2860
+ };
2861
+ export type GetUserQuotaResponse = GetUserQuotaResponses[keyof GetUserQuotaResponses];
2862
+ export type GetUserReportsData = {
2863
+ body?: never;
2864
+ path?: never;
2865
+ query?: {
2866
+ /**
2867
+ * Cursor for pagination (report ID to start after)
2868
+ */
2869
+ cursor?: number;
2870
+ /**
2871
+ * Number of results per page
2872
+ */
2873
+ size?: number;
2874
+ /**
2875
+ * Filter by report status
2876
+ */
2877
+ status?: 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED';
2878
+ };
2879
+ url: '/v1/user/reports';
2880
+ };
2881
+ export type GetUserReportsErrors = {
2882
+ /**
2883
+ * Unauthorized
2884
+ */
2885
+ 401: Error;
2886
+ /**
2887
+ * Internal Server Error
2888
+ */
2889
+ 500: Error;
2890
+ };
2891
+ export type GetUserReportsError = GetUserReportsErrors[keyof GetUserReportsErrors];
2892
+ export type GetUserReportsResponses = {
2893
+ /**
2894
+ * OK
2895
+ */
2896
+ 200: ReportListResponse;
2897
+ };
2898
+ export type GetUserReportsResponse = GetUserReportsResponses[keyof GetUserReportsResponses];
2899
+ export type CreateReportData = {
2900
+ body: CreateReportRequest;
2901
+ path?: never;
2902
+ query?: never;
2903
+ url: '/v1/user/reports';
2904
+ };
2905
+ export type CreateReportErrors = {
2906
+ /**
2907
+ * Bad Request
2908
+ */
2909
+ 400: Error;
2910
+ /**
2911
+ * Unauthorized
2912
+ */
2913
+ 401: Error;
2914
+ /**
2915
+ * Not Found
2916
+ */
2917
+ 404: Error;
2918
+ /**
2919
+ * Internal Server Error
2920
+ */
2921
+ 500: Error;
2922
+ };
2923
+ export type CreateReportError = CreateReportErrors[keyof CreateReportErrors];
2924
+ export type CreateReportResponses = {
2925
+ /**
2926
+ * Report created successfully
2927
+ */
2928
+ 201: Report;
2929
+ };
2930
+ export type CreateReportResponse = CreateReportResponses[keyof CreateReportResponses];
2931
+ export type ListIndexData = {
2932
+ body?: never;
2933
+ path?: never;
2934
+ query?: {
2935
+ /**
2936
+ * Filter by visibility
2937
+ */
2938
+ visibility?: 'public' | 'private';
2939
+ /**
2940
+ * Filter by list type
2941
+ */
2942
+ type?: 'SERIES' | 'CUSTOM' | 'SEGMENT';
2943
+ /**
2944
+ * Filter by list owner user ID
2945
+ */
2946
+ userId?: number;
2947
+ /**
2948
+ * Filter lists containing this media ID
2949
+ */
2950
+ mediaId?: number;
2951
+ };
2952
+ url: '/v1/lists';
2953
+ };
2954
+ export type ListIndexErrors = {
2955
+ /**
2956
+ * Bad Request
2957
+ */
2958
+ 400: Error;
2959
+ /**
2960
+ * Unauthorized
2961
+ */
2962
+ 401: Error;
2963
+ /**
2964
+ * Forbidden
2965
+ */
2966
+ 403: Error;
2967
+ /**
2968
+ * Too Many Requests
2969
+ */
2970
+ 429: Error;
2971
+ /**
2972
+ * Internal Server Error
2973
+ */
2974
+ 500: Error;
2975
+ };
2976
+ export type ListIndexError = ListIndexErrors[keyof ListIndexErrors];
2977
+ export type ListIndexResponses = {
2978
+ /**
2979
+ * OK
2980
+ */
2981
+ 200: Array<List>;
2982
+ };
2983
+ export type ListIndexResponse = ListIndexResponses[keyof ListIndexResponses];
2984
+ export type ListCreateData = {
2985
+ body: ListCreateRequest;
2986
+ path?: never;
2987
+ query?: never;
2988
+ url: '/v1/lists';
2989
+ };
2990
+ export type ListCreateErrors = {
2991
+ /**
2992
+ * Bad Request
2993
+ */
2994
+ 400: Error;
2995
+ /**
2996
+ * Unauthorized
2997
+ */
2998
+ 401: Error;
2999
+ /**
3000
+ * Forbidden
3001
+ */
3002
+ 403: Error;
3003
+ /**
3004
+ * Too Many Requests
3005
+ */
3006
+ 429: Error;
3007
+ /**
3008
+ * Internal Server Error
3009
+ */
3010
+ 500: Error;
3011
+ };
3012
+ export type ListCreateError = ListCreateErrors[keyof ListCreateErrors];
3013
+ export type ListCreateResponses = {
3014
+ /**
3015
+ * Created
3016
+ */
3017
+ 201: List;
3018
+ };
3019
+ export type ListCreateResponse = ListCreateResponses[keyof ListCreateResponses];
3020
+ export type ListDestroyData = {
3021
+ body?: never;
3022
+ path: {
3023
+ /**
3024
+ * List ID
3025
+ */
3026
+ id: number;
3027
+ };
3028
+ query?: never;
3029
+ url: '/v1/lists/{id}';
3030
+ };
3031
+ export type ListDestroyErrors = {
3032
+ /**
3033
+ * Bad Request
3034
+ */
3035
+ 400: Error;
3036
+ /**
3037
+ * Unauthorized
3038
+ */
3039
+ 401: Error;
3040
+ /**
3041
+ * Forbidden
3042
+ */
3043
+ 403: Error;
3044
+ /**
3045
+ * Not Found
3046
+ */
3047
+ 404: Error;
3048
+ /**
3049
+ * Too Many Requests
3050
+ */
3051
+ 429: Error;
3052
+ /**
3053
+ * Internal Server Error
3054
+ */
3055
+ 500: Error;
3056
+ };
3057
+ export type ListDestroyError = ListDestroyErrors[keyof ListDestroyErrors];
3058
+ export type ListDestroyResponses = {
3059
+ /**
3060
+ * OK
3061
+ */
3062
+ 200: {
3063
+ message?: string;
3064
+ id?: number;
3065
+ };
3066
+ };
3067
+ export type ListDestroyResponse = ListDestroyResponses[keyof ListDestroyResponses];
3068
+ export type ListShowData = {
3069
+ body?: never;
3070
+ path: {
3071
+ /**
3072
+ * List ID
3073
+ */
3074
+ id: number;
3075
+ };
3076
+ query?: never;
3077
+ url: '/v1/lists/{id}';
3078
+ };
3079
+ export type ListShowErrors = {
3080
+ /**
3081
+ * Bad Request
3082
+ */
3083
+ 400: Error;
3084
+ /**
3085
+ * Unauthorized
3086
+ */
3087
+ 401: Error;
3088
+ /**
3089
+ * Forbidden
3090
+ */
3091
+ 403: Error;
3092
+ /**
3093
+ * Not Found
3094
+ */
3095
+ 404: Error;
3096
+ /**
3097
+ * Too Many Requests
3098
+ */
3099
+ 429: Error;
3100
+ /**
3101
+ * Internal Server Error
3102
+ */
3103
+ 500: Error;
3104
+ };
3105
+ export type ListShowError = ListShowErrors[keyof ListShowErrors];
3106
+ export type ListShowResponses = {
3107
+ /**
3108
+ * OK
3109
+ */
3110
+ 200: ListWithMedia;
3111
+ };
3112
+ export type ListShowResponse = ListShowResponses[keyof ListShowResponses];
3113
+ export type ListUpdateData = {
3114
+ body: {
3115
+ name?: string;
3116
+ visibility?: 'PUBLIC' | 'PRIVATE';
3117
+ };
3118
+ path: {
3119
+ /**
3120
+ * List ID
3121
+ */
3122
+ id: number;
3123
+ };
3124
+ query?: never;
3125
+ url: '/v1/lists/{id}';
3126
+ };
3127
+ export type ListUpdateErrors = {
3128
+ /**
3129
+ * Bad Request
3130
+ */
3131
+ 400: Error;
3132
+ /**
3133
+ * Unauthorized
3134
+ */
3135
+ 401: Error;
3136
+ /**
3137
+ * Forbidden
3138
+ */
3139
+ 403: Error;
3140
+ /**
3141
+ * Not Found
3142
+ */
3143
+ 404: Error;
3144
+ /**
3145
+ * Too Many Requests
3146
+ */
3147
+ 429: Error;
3148
+ /**
3149
+ * Internal Server Error
3150
+ */
3151
+ 500: Error;
3152
+ };
3153
+ export type ListUpdateError = ListUpdateErrors[keyof ListUpdateErrors];
3154
+ export type ListUpdateResponses = {
3155
+ /**
3156
+ * OK
3157
+ */
3158
+ 200: List;
3159
+ };
3160
+ export type ListUpdateResponse = ListUpdateResponses[keyof ListUpdateResponses];
3161
+ export type ListAddItemData = {
3162
+ body: {
3163
+ mediaId: number;
3164
+ /**
3165
+ * Position in the list (1-indexed)
3166
+ */
3167
+ position: number;
3168
+ };
3169
+ path: {
3170
+ /**
3171
+ * List ID
3172
+ */
3173
+ id: number;
3174
+ };
3175
+ query?: never;
3176
+ url: '/v1/lists/{id}/items';
3177
+ };
3178
+ export type ListAddItemErrors = {
3179
+ /**
3180
+ * Bad Request
3181
+ */
3182
+ 400: Error;
3183
+ /**
3184
+ * Unauthorized
3185
+ */
3186
+ 401: Error;
3187
+ /**
3188
+ * Forbidden
3189
+ */
3190
+ 403: Error;
3191
+ /**
3192
+ * Not Found
3193
+ */
3194
+ 404: Error;
3195
+ /**
3196
+ * Conflict
3197
+ */
3198
+ 409: Error;
3199
+ /**
3200
+ * Too Many Requests
3201
+ */
3202
+ 429: Error;
3203
+ /**
3204
+ * Internal Server Error
3205
+ */
3206
+ 500: Error;
3207
+ };
3208
+ export type ListAddItemError = ListAddItemErrors[keyof ListAddItemErrors];
3209
+ export type ListAddItemResponses = {
3210
+ /**
3211
+ * Created
3212
+ */
3213
+ 201: {
3214
+ message?: string;
3215
+ };
3216
+ };
3217
+ export type ListAddItemResponse = ListAddItemResponses[keyof ListAddItemResponses];
3218
+ export type ListRemoveItemData = {
3219
+ body?: never;
3220
+ path: {
3221
+ /**
3222
+ * List ID
3223
+ */
3224
+ id: number;
3225
+ /**
3226
+ * Media ID
3227
+ */
3228
+ mediaId: number;
3229
+ };
3230
+ query?: never;
3231
+ url: '/v1/lists/{id}/items/{mediaId}';
3232
+ };
3233
+ export type ListRemoveItemErrors = {
3234
+ /**
3235
+ * Bad Request
3236
+ */
3237
+ 400: Error;
3238
+ /**
3239
+ * Unauthorized
3240
+ */
3241
+ 401: Error;
3242
+ /**
3243
+ * Forbidden
3244
+ */
3245
+ 403: Error;
3246
+ /**
3247
+ * Not Found
3248
+ */
3249
+ 404: Error;
3250
+ /**
3251
+ * Too Many Requests
3252
+ */
3253
+ 429: Error;
3254
+ /**
3255
+ * Internal Server Error
3256
+ */
3257
+ 500: Error;
3258
+ };
3259
+ export type ListRemoveItemError = ListRemoveItemErrors[keyof ListRemoveItemErrors];
3260
+ export type ListRemoveItemResponses = {
3261
+ /**
3262
+ * OK
3263
+ */
3264
+ 200: {
3265
+ message?: string;
3266
+ };
3267
+ };
3268
+ export type ListRemoveItemResponse = ListRemoveItemResponses[keyof ListRemoveItemResponses];
3269
+ export type ListUpdateItemData = {
3270
+ body: {
3271
+ /**
3272
+ * New position in the list (1-indexed)
3273
+ */
3274
+ position: number;
3275
+ };
3276
+ path: {
3277
+ /**
3278
+ * List ID
3279
+ */
3280
+ id: number;
3281
+ /**
3282
+ * Media ID
3283
+ */
3284
+ mediaId: number;
3285
+ };
3286
+ query?: never;
3287
+ url: '/v1/lists/{id}/items/{mediaId}';
3288
+ };
3289
+ export type ListUpdateItemErrors = {
3290
+ /**
3291
+ * Bad Request
3292
+ */
3293
+ 400: Error;
3294
+ /**
3295
+ * Unauthorized
3296
+ */
3297
+ 401: Error;
3298
+ /**
3299
+ * Forbidden
3300
+ */
3301
+ 403: Error;
3302
+ /**
3303
+ * Not Found
3304
+ */
3305
+ 404: Error;
3306
+ /**
3307
+ * Too Many Requests
3308
+ */
3309
+ 429: Error;
3310
+ /**
3311
+ * Internal Server Error
3312
+ */
3313
+ 500: Error;
3314
+ };
3315
+ export type ListUpdateItemError = ListUpdateItemErrors[keyof ListUpdateItemErrors];
3316
+ export type ListUpdateItemResponses = {
3317
+ /**
3318
+ * OK
3319
+ */
3320
+ 200: {
3321
+ message?: string;
3322
+ };
3323
+ };
3324
+ export type ListUpdateItemResponse = ListUpdateItemResponses[keyof ListUpdateItemResponses];
3325
+ export type ListGetSegmentsData = {
3326
+ body?: never;
3327
+ path: {
3328
+ /**
3329
+ * List ID
3330
+ */
3331
+ id: number;
3332
+ };
3333
+ query?: {
3334
+ /**
3335
+ * Page number (1-indexed)
3336
+ */
3337
+ page?: number;
3338
+ /**
3339
+ * Items per page
3340
+ */
3341
+ limit?: number;
3342
+ };
3343
+ url: '/v1/lists/{id}/segments';
3344
+ };
3345
+ export type ListGetSegmentsErrors = {
3346
+ /**
3347
+ * Bad Request
3348
+ */
3349
+ 400: Error;
3350
+ /**
3351
+ * Unauthorized
3352
+ */
3353
+ 401: Error;
3354
+ /**
3355
+ * Forbidden
3356
+ */
3357
+ 403: Error;
3358
+ /**
3359
+ * Not Found
3360
+ */
3361
+ 404: Error;
3362
+ /**
3363
+ * Too Many Requests
3364
+ */
3365
+ 429: Error;
3366
+ /**
3367
+ * Internal Server Error
3368
+ */
3369
+ 500: Error;
3370
+ };
3371
+ export type ListGetSegmentsError = ListGetSegmentsErrors[keyof ListGetSegmentsErrors];
3372
+ export type ListGetSegmentsResponses = {
3373
+ /**
3374
+ * OK
3375
+ */
3376
+ 200: ListWithSegments;
3377
+ };
3378
+ export type ListGetSegmentsResponse = ListGetSegmentsResponses[keyof ListGetSegmentsResponses];
3379
+ export type ListAddSegmentData = {
3380
+ body: {
3381
+ /**
3382
+ * UUID of the segment to add
3383
+ */
3384
+ segmentUuid: string;
3385
+ /**
3386
+ * Optional annotation
3387
+ */
3388
+ note?: string;
3389
+ };
3390
+ path: {
3391
+ /**
3392
+ * List ID
3393
+ */
3394
+ id: number;
3395
+ };
3396
+ query?: never;
3397
+ url: '/v1/lists/{id}/segments';
3398
+ };
3399
+ export type ListAddSegmentErrors = {
3400
+ /**
3401
+ * Bad Request
3402
+ */
3403
+ 400: Error;
3404
+ /**
3405
+ * Unauthorized
3406
+ */
3407
+ 401: Error;
3408
+ /**
3409
+ * Forbidden
3410
+ */
3411
+ 403: Error;
3412
+ /**
3413
+ * Not Found
3414
+ */
3415
+ 404: Error;
3416
+ /**
3417
+ * Conflict
3418
+ */
3419
+ 409: Error;
3420
+ /**
3421
+ * Too Many Requests
3422
+ */
3423
+ 429: Error;
3424
+ /**
3425
+ * Internal Server Error
3426
+ */
3427
+ 500: Error;
3428
+ };
3429
+ export type ListAddSegmentError = ListAddSegmentErrors[keyof ListAddSegmentErrors];
3430
+ export type ListAddSegmentResponses = {
3431
+ /**
3432
+ * Created
3433
+ */
3434
+ 201: {
3435
+ message?: string;
3436
+ };
3437
+ };
3438
+ export type ListAddSegmentResponse = ListAddSegmentResponses[keyof ListAddSegmentResponses];
3439
+ export type ListRemoveSegmentData = {
3440
+ body?: never;
3441
+ path: {
3442
+ /**
3443
+ * List ID
3444
+ */
3445
+ id: number;
3446
+ /**
3447
+ * Segment UUID
3448
+ */
3449
+ uuid: string;
3450
+ };
3451
+ query?: never;
3452
+ url: '/v1/lists/{id}/segments/{uuid}';
3453
+ };
3454
+ export type ListRemoveSegmentErrors = {
3455
+ /**
3456
+ * Bad Request
3457
+ */
3458
+ 400: Error;
3459
+ /**
3460
+ * Unauthorized
3461
+ */
3462
+ 401: Error;
3463
+ /**
3464
+ * Forbidden
3465
+ */
3466
+ 403: Error;
3467
+ /**
3468
+ * Not Found
3469
+ */
3470
+ 404: Error;
3471
+ /**
3472
+ * Too Many Requests
3473
+ */
3474
+ 429: Error;
3475
+ /**
3476
+ * Internal Server Error
3477
+ */
3478
+ 500: Error;
3479
+ };
3480
+ export type ListRemoveSegmentError = ListRemoveSegmentErrors[keyof ListRemoveSegmentErrors];
3481
+ export type ListRemoveSegmentResponses = {
3482
+ /**
3483
+ * OK
3484
+ */
3485
+ 200: {
3486
+ message?: string;
3487
+ };
3488
+ };
3489
+ export type ListRemoveSegmentResponse = ListRemoveSegmentResponses[keyof ListRemoveSegmentResponses];
3490
+ export type ListUpdateSegmentData = {
3491
+ body: {
3492
+ /**
3493
+ * New position in the list
3494
+ */
3495
+ position?: number;
3496
+ /**
3497
+ * Updated annotation
3498
+ */
3499
+ note?: string;
3500
+ };
3501
+ path: {
3502
+ /**
3503
+ * List ID
3504
+ */
3505
+ id: number;
3506
+ /**
3507
+ * Segment UUID
3508
+ */
3509
+ uuid: string;
3510
+ };
3511
+ query?: never;
3512
+ url: '/v1/lists/{id}/segments/{uuid}';
3513
+ };
3514
+ export type ListUpdateSegmentErrors = {
3515
+ /**
3516
+ * Bad Request
3517
+ */
3518
+ 400: Error;
3519
+ /**
3520
+ * Unauthorized
3521
+ */
3522
+ 401: Error;
3523
+ /**
3524
+ * Forbidden
3525
+ */
3526
+ 403: Error;
3527
+ /**
3528
+ * Not Found
3529
+ */
3530
+ 404: Error;
3531
+ /**
3532
+ * Too Many Requests
3533
+ */
3534
+ 429: Error;
3535
+ /**
3536
+ * Internal Server Error
3537
+ */
3538
+ 500: Error;
3539
+ };
3540
+ export type ListUpdateSegmentError = ListUpdateSegmentErrors[keyof ListUpdateSegmentErrors];
3541
+ export type ListUpdateSegmentResponses = {
3542
+ /**
3543
+ * OK
3544
+ */
3545
+ 200: {
3546
+ message?: string;
3547
+ };
3548
+ };
3549
+ export type ListUpdateSegmentResponse = ListUpdateSegmentResponses[keyof ListUpdateSegmentResponses];
3550
+ export type ReindexElasticsearchData = {
3551
+ body?: ReindexRequest;
3552
+ path?: never;
3553
+ query?: never;
3554
+ url: '/v1/admin/reindex';
3555
+ };
3556
+ export type ReindexElasticsearchErrors = {
3557
+ /**
3558
+ * Bad Request
3559
+ */
3560
+ 400: Error;
3561
+ /**
3562
+ * Unauthorized
3563
+ */
3564
+ 401: Error;
3565
+ /**
3566
+ * Forbidden
3567
+ */
3568
+ 403: Error;
3569
+ /**
3570
+ * Too Many Requests
3571
+ */
3572
+ 429: Error;
3573
+ /**
3574
+ * Internal Server Error
3575
+ */
3576
+ 500: Error;
3577
+ };
3578
+ export type ReindexElasticsearchError = ReindexElasticsearchErrors[keyof ReindexElasticsearchErrors];
3579
+ export type ReindexElasticsearchResponses = {
3580
+ /**
3581
+ * Reindex operation completed
3582
+ */
3583
+ 200: ReindexResponse;
3584
+ };
3585
+ export type ReindexElasticsearchResponse = ReindexElasticsearchResponses[keyof ReindexElasticsearchResponses];
3586
+ export type GetQueueStatsData = {
3587
+ body?: never;
3588
+ path?: never;
3589
+ query?: never;
3590
+ url: '/v1/admin/queues/stats';
3591
+ };
3592
+ export type GetQueueStatsErrors = {
3593
+ /**
3594
+ * Bad Request
3595
+ */
3596
+ 400: Error;
3597
+ /**
3598
+ * Unauthorized
3599
+ */
3600
+ 401: Error;
3601
+ /**
3602
+ * Forbidden
3603
+ */
3604
+ 403: Error;
3605
+ /**
3606
+ * Too Many Requests
3607
+ */
3608
+ 429: Error;
3609
+ /**
3610
+ * Internal Server Error
3611
+ */
3612
+ 500: Error;
3613
+ };
3614
+ export type GetQueueStatsError = GetQueueStatsErrors[keyof GetQueueStatsErrors];
3615
+ export type GetQueueStatsResponses = {
3616
+ /**
3617
+ * Queue statistics retrieved successfully
3618
+ */
3619
+ 200: Array<{
3620
+ queue?: string;
3621
+ /**
3622
+ * Number of jobs currently pending/active
3623
+ */
3624
+ stuckCount?: number;
3625
+ /**
3626
+ * Number of failed jobs
3627
+ */
3628
+ failedCount?: number;
3629
+ }>;
3630
+ };
3631
+ export type GetQueueStatsResponse = GetQueueStatsResponses[keyof GetQueueStatsResponses];
3632
+ export type GetQueueDetailsData = {
3633
+ body?: never;
3634
+ path: {
3635
+ /**
3636
+ * The name of the queue
3637
+ */
3638
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
3639
+ };
3640
+ query?: never;
3641
+ url: '/v1/admin/queues/{queueName}';
3642
+ };
3643
+ export type GetQueueDetailsErrors = {
3644
+ /**
3645
+ * Bad Request
3646
+ */
3647
+ 400: Error;
3648
+ /**
3649
+ * Unauthorized
3650
+ */
3651
+ 401: Error;
3652
+ /**
3653
+ * Forbidden
3654
+ */
3655
+ 403: Error;
3656
+ /**
3657
+ * Not Found
3658
+ */
3659
+ 404: Error;
3660
+ /**
3661
+ * Too Many Requests
3662
+ */
3663
+ 429: Error;
3664
+ /**
3665
+ * Internal Server Error
3666
+ */
3667
+ 500: Error;
3668
+ };
3669
+ export type GetQueueDetailsError = GetQueueDetailsErrors[keyof GetQueueDetailsErrors];
3670
+ export type GetQueueDetailsResponses = {
3671
+ /**
3672
+ * Queue details retrieved successfully
3673
+ */
3674
+ 200: {
3675
+ queue?: string;
3676
+ /**
3677
+ * Current queue size (pending jobs)
3678
+ */
3679
+ size?: number;
3680
+ /**
3681
+ * Total jobs created
3682
+ */
3683
+ created?: number;
3684
+ /**
3685
+ * Total failed jobs
3686
+ */
3687
+ failed?: number;
3688
+ /**
3689
+ * Total completed jobs
3690
+ */
3691
+ complete?: number;
3692
+ /**
3693
+ * Total expired jobs
3694
+ */
3695
+ expired?: number;
3696
+ /**
3697
+ * Total cancelled jobs
3698
+ */
3699
+ cancelled?: number;
3700
+ };
3701
+ };
3702
+ export type GetQueueDetailsResponse = GetQueueDetailsResponses[keyof GetQueueDetailsResponses];
3703
+ export type GetFailedJobsData = {
3704
+ body?: never;
3705
+ path: {
3706
+ /**
3707
+ * The name of the queue
3708
+ */
3709
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
3710
+ };
3711
+ query?: never;
3712
+ url: '/v1/admin/queues/{queueName}/failed';
3713
+ };
3714
+ export type GetFailedJobsErrors = {
3715
+ /**
3716
+ * Bad Request
3717
+ */
3718
+ 400: Error;
3719
+ /**
3720
+ * Unauthorized
3721
+ */
3722
+ 401: Error;
3723
+ /**
3724
+ * Forbidden
3725
+ */
3726
+ 403: Error;
3727
+ /**
3728
+ * Too Many Requests
3729
+ */
3730
+ 429: Error;
3731
+ /**
3732
+ * Internal Server Error
3733
+ */
3734
+ 500: Error;
3735
+ };
3736
+ export type GetFailedJobsError = GetFailedJobsErrors[keyof GetFailedJobsErrors];
3737
+ export type GetFailedJobsResponses = {
3738
+ /**
3739
+ * Failed jobs retrieved successfully
3740
+ */
3741
+ 200: Array<{
3742
+ /**
3743
+ * Job ID
3744
+ */
3745
+ id?: string;
3746
+ /**
3747
+ * The segment ID that failed to sync
3748
+ */
3749
+ segmentId?: number;
3750
+ /**
3751
+ * Error message from the last attempt
3752
+ */
3753
+ error?: string;
3754
+ /**
3755
+ * When the job was created
3756
+ */
3757
+ createdOn?: string;
3758
+ }>;
3759
+ };
3760
+ export type GetFailedJobsResponse = GetFailedJobsResponses[keyof GetFailedJobsResponses];
3761
+ export type RetryQueueJobsData = {
3762
+ body?: never;
3763
+ path: {
3764
+ /**
3765
+ * The name of the queue
3766
+ */
3767
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
3768
+ };
3769
+ query?: never;
3770
+ url: '/v1/admin/queues/{queueName}/retry';
3771
+ };
3772
+ export type RetryQueueJobsErrors = {
3773
+ /**
3774
+ * Bad Request
3775
+ */
3776
+ 400: Error;
3777
+ /**
3778
+ * Unauthorized
3779
+ */
3780
+ 401: Error;
3781
+ /**
3782
+ * Forbidden
3783
+ */
3784
+ 403: Error;
3785
+ /**
3786
+ * Too Many Requests
3787
+ */
3788
+ 429: Error;
3789
+ /**
3790
+ * Internal Server Error
3791
+ */
3792
+ 500: Error;
3793
+ };
3794
+ export type RetryQueueJobsError = RetryQueueJobsErrors[keyof RetryQueueJobsErrors];
3795
+ export type RetryQueueJobsResponses = {
3796
+ /**
3797
+ * Jobs queued for retry
3798
+ */
3799
+ 200: {
3800
+ success?: boolean;
3801
+ /**
3802
+ * Number of jobs queued for retry
3803
+ */
3804
+ retriedCount?: number;
3805
+ message?: string;
3806
+ };
3807
+ };
3808
+ export type RetryQueueJobsResponse = RetryQueueJobsResponses[keyof RetryQueueJobsResponses];
3809
+ export type PurgeFailedJobsData = {
3810
+ body?: never;
3811
+ path: {
3812
+ /**
3813
+ * The name of the queue
3814
+ */
3815
+ queueName: 'es-sync-create' | 'es-sync-update' | 'es-sync-delete';
3816
+ };
3817
+ query?: never;
3818
+ url: '/v1/admin/queues/{queueName}/purge';
3819
+ };
3820
+ export type PurgeFailedJobsErrors = {
3821
+ /**
3822
+ * Bad Request
3823
+ */
3824
+ 400: Error;
3825
+ /**
3826
+ * Unauthorized
3827
+ */
3828
+ 401: Error;
3829
+ /**
3830
+ * Forbidden
3831
+ */
3832
+ 403: Error;
3833
+ /**
3834
+ * Too Many Requests
3835
+ */
3836
+ 429: Error;
3837
+ /**
3838
+ * Internal Server Error
3839
+ */
3840
+ 500: Error;
3841
+ };
3842
+ export type PurgeFailedJobsError = PurgeFailedJobsErrors[keyof PurgeFailedJobsErrors];
3843
+ export type PurgeFailedJobsResponses = {
3844
+ /**
3845
+ * Failed jobs purged successfully
3846
+ */
3847
+ 200: {
3848
+ success?: boolean;
3849
+ /**
3850
+ * Number of failed jobs deleted
3851
+ */
3852
+ purgedCount?: number;
3853
+ message?: string;
3854
+ };
3855
+ };
3856
+ export type PurgeFailedJobsResponse = PurgeFailedJobsResponses[keyof PurgeFailedJobsResponses];
3857
+ export type MorphemeBackfillData = {
3858
+ body?: never;
3859
+ path?: never;
3860
+ query?: never;
3861
+ url: '/v1/admin/morpheme-backfill';
3862
+ };
3863
+ export type MorphemeBackfillResponses = {
3864
+ /**
3865
+ * Backfill completed
3866
+ */
3867
+ 200: {
3868
+ success: boolean;
3869
+ message: string;
3870
+ stats: {
3871
+ totalSegments: number;
3872
+ successfulAnalyses: number;
3873
+ failedAnalyses: number;
3874
+ };
3875
+ };
3876
+ };
3877
+ export type MorphemeBackfillResponse = MorphemeBackfillResponses[keyof MorphemeBackfillResponses];
3878
+ export type GetAdminReportsData = {
3879
+ body?: never;
3880
+ path?: never;
3881
+ query?: {
3882
+ /**
3883
+ * Cursor for pagination (report ID to start after)
3884
+ */
3885
+ cursor?: number;
3886
+ /**
3887
+ * Number of results per page
3888
+ */
3889
+ size?: number;
3890
+ /**
3891
+ * Filter by report status
3892
+ */
3893
+ status?: 'PENDING' | 'ACCEPTED' | 'REJECTED' | 'RESOLVED';
3894
+ /**
3895
+ * Filter by report type
3896
+ */
3897
+ reportType?: 'SEGMENT' | 'MEDIA';
3898
+ /**
3899
+ * Filter by target ID
3900
+ */
3901
+ targetId?: string;
3902
+ };
3903
+ url: '/v1/admin/reports';
3904
+ };
3905
+ export type GetAdminReportsErrors = {
3906
+ /**
3907
+ * Unauthorized
3908
+ */
3909
+ 401: Error;
3910
+ /**
3911
+ * Forbidden
3912
+ */
3913
+ 403: Error;
3914
+ /**
3915
+ * Too Many Requests
3916
+ */
3917
+ 429: Error;
3918
+ /**
3919
+ * Internal Server Error
3920
+ */
3921
+ 500: Error;
3922
+ };
3923
+ export type GetAdminReportsError = GetAdminReportsErrors[keyof GetAdminReportsErrors];
3924
+ export type GetAdminReportsResponses = {
3925
+ /**
3926
+ * OK
3927
+ */
3928
+ 200: AdminReportListResponse;
3929
+ };
3930
+ export type GetAdminReportsResponse = GetAdminReportsResponses[keyof GetAdminReportsResponses];
3931
+ export type UpdateReportData = {
3932
+ body: UpdateReportRequest;
3933
+ path: {
3934
+ /**
3935
+ * Report ID
3936
+ */
3937
+ id: number;
3938
+ };
3939
+ query?: never;
3940
+ url: '/v1/admin/reports/{id}';
3941
+ };
3942
+ export type UpdateReportErrors = {
3943
+ /**
3944
+ * Bad Request
3945
+ */
3946
+ 400: Error;
3947
+ /**
3948
+ * Unauthorized
3949
+ */
3950
+ 401: Error;
3951
+ /**
3952
+ * Forbidden
3953
+ */
3954
+ 403: Error;
3955
+ /**
3956
+ * Not Found
3957
+ */
3958
+ 404: Error;
3959
+ /**
3960
+ * Too Many Requests
3961
+ */
3962
+ 429: Error;
3963
+ /**
3964
+ * Internal Server Error
3965
+ */
3966
+ 500: Error;
3967
+ };
3968
+ export type UpdateReportError = UpdateReportErrors[keyof UpdateReportErrors];
3969
+ export type UpdateReportResponses = {
3970
+ /**
3971
+ * Report updated successfully
3972
+ */
3973
+ 200: Report;
3974
+ };
3975
+ export type UpdateReportResponse = UpdateReportResponses[keyof UpdateReportResponses];
3976
+ //# sourceMappingURL=types.gen.d.ts.map