notefeed 0.6.0 → 0.8.0

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.
@@ -3,17 +3,41 @@ export type ClientOptions = {
3
3
  };
4
4
  export type Note = {
5
5
  /**
6
- * UTC time to the second plus a slug of the title
6
+ * The note's id: a UTC time to the second plus a random UUID for notes made here; any name without a dot for a file placed by hand
7
7
  */
8
8
  id: string;
9
9
  /**
10
- * The first heading, or the first non-empty line; may be empty
10
+ * The media type of the note's file: `text/markdown`, `image/png`, `image/jpeg`, `image/gif` or `image/webp`
11
+ */
12
+ type: string;
13
+ /**
14
+ * The note's file name, `<id>.<extension>`
15
+ */
16
+ file: string;
17
+ /**
18
+ * Where the note's file is served, absolute, under the feed's read id (public like the read link); null while the feed has no read link
19
+ */
20
+ file_url: string | null;
21
+ /**
22
+ * The size of the note's file in bytes
23
+ */
24
+ size: number;
25
+ /**
26
+ * The title set for the note, else the first heading or the first non-empty line of a markdown note, else the picture's alt text; may be empty
11
27
  */
12
28
  title: string;
13
29
  /**
14
- * The note, byte-for-byte as posted
30
+ * The note's text, byte-for-byte as posted: for a text type (markdown) only; absent for a picture
31
+ */
32
+ content?: string;
33
+ /**
34
+ * Alternative text of an image note, when it has one
35
+ */
36
+ alt?: string;
37
+ /**
38
+ * The file name an image was posted with, when it came with one
15
39
  */
16
- markdown: string;
40
+ name?: string;
17
41
  /**
18
42
  * When the note was posted (UTC)
19
43
  */
@@ -22,6 +46,14 @@ export type Note = {
22
46
  * The note's page in the web UI
23
47
  */
24
48
  url: string;
49
+ /**
50
+ * Verified sign-in name of the poster; absent when the note was posted without a sign-in
51
+ */
52
+ sender?: string | null;
53
+ /**
54
+ * Labels the poster gave the note (not verified, and shown to readers like the note itself); empty when none
55
+ */
56
+ tags: Array<string>;
25
57
  };
26
58
  export type NoteList = {
27
59
  /**
@@ -44,9 +76,17 @@ export type Created = {
44
76
  */
45
77
  feed_url: string;
46
78
  /**
47
- * The feed's read-only RSS link, safe to share
79
+ * The feed's read-only RSS link, safe to share; null only if the server can't read the feed's stored read id, or if that id and the derived one both belong to other feeds
80
+ */
81
+ read_url: string | null;
82
+ /**
83
+ * The note's file name, `<id>.<extension>`. For an image note, pass it as a feed's `image` setting
48
84
  */
49
- read_url: string;
85
+ file: string;
86
+ /**
87
+ * Where the note's file is served, absolute, under the feed's read id (public like the read link); null while the feed has no read link
88
+ */
89
+ file_url: string | null;
50
90
  };
51
91
  export type Error = {
52
92
  /**
@@ -56,16 +96,98 @@ export type Error = {
56
96
  /**
57
97
  * Stable machine-readable code; absent only on a 500
58
98
  */
59
- code?: 'invalid_feed' | 'reserved_feed' | 'auth' | 'rate_limited' | 'too_many_attempts' | 'feed_limit' | 'note_limit' | 'empty_note' | 'too_large' | 'unsupported_type' | 'invalid_body' | 'invalid_request' | 'not_found';
99
+ code?: 'invalid_feed' | 'reserved_feed' | 'auth' | 'rate_limited' | 'too_many_attempts' | 'feed_limit' | 'note_limit' | 'image_limit' | 'empty_note' | 'too_large' | 'unsupported_type' | 'invalid_body' | 'invalid_request' | 'not_found' | 'feed_exists' | 'taken';
100
+ };
101
+ export type NoteMeta = {
102
+ /**
103
+ * The note's title, at most 100 characters, one line; empty or left out means the title is taken from the text (a markdown note) or there is none (an image)
104
+ */
105
+ title?: string;
106
+ /**
107
+ * Alternative text of an image note, at most 500 characters, one line
108
+ */
109
+ alt?: string;
60
110
  };
61
- export type PostJson = {
62
- markdown: string;
111
+ export type PasswordJson = {
112
+ /**
113
+ * The new password: 1 to 256 printable ASCII characters, with no space at the start or end
114
+ */
115
+ password: string;
63
116
  };
64
- export type PostForm = {
65
- markdown: string;
117
+ export type FeedSettings = {
118
+ /**
119
+ * Display title, at most 100 characters, one line; empty means none (the feed's name is shown)
120
+ */
121
+ title: string;
122
+ /**
123
+ * Description, at most 500 characters, one line; may be empty
124
+ */
125
+ description: string;
126
+ /**
127
+ * The file name of an image uploaded to this feed (see uploadImage), shown as the feed's title image; empty removes it, omitted leaves it as it is
128
+ */
129
+ image?: string;
130
+ /**
131
+ * Whether readers (RSS, the read API and pages) see who posted each note; omitted leaves it as it is, a new feed starts with true
132
+ */
133
+ show_sender?: boolean;
134
+ /**
135
+ * A new read id (3 to 64 characters: a-z, 0-9, - and _), empty for a random one; omitted leaves it as it is. The old read link stops showing this feed, and may later show another one. Notes are not edited: a relative image link (`![](file)`) follows the new id, a full URL keeps the old one and is yours to change. Reserved feeds keep theirs. 409 when it is taken
136
+ */
137
+ read_id?: string;
138
+ };
139
+ export type Feed = {
140
+ /**
141
+ * The feed's name
142
+ */
143
+ name: string;
144
+ /**
145
+ * Display title, at most 100 characters, one line; empty means none (the feed's name is shown)
146
+ */
147
+ title: string;
148
+ /**
149
+ * Description, at most 500 characters, one line; may be empty
150
+ */
151
+ description: string;
152
+ /**
153
+ * Whether the feed has its own password
154
+ */
155
+ protected: boolean;
156
+ /**
157
+ * The feed's read-only RSS link; null while the feed has no notes, or if the server can't read the feed's stored read id
158
+ */
159
+ read_url: string | null;
160
+ /**
161
+ * The feed's title image (absolute URL, served under the read id), or null
162
+ */
163
+ image_url: string | null;
164
+ /**
165
+ * Whether readers see who posted each note
166
+ */
167
+ show_sender: boolean;
168
+ };
169
+ export type ReadFeed = {
170
+ /**
171
+ * Display title, at most 100 characters, one line; empty means none (the feed's name is shown)
172
+ */
173
+ title: string;
174
+ /**
175
+ * Description, at most 500 characters, one line; may be empty
176
+ */
177
+ description: string;
178
+ /**
179
+ * The feed's title image (absolute URL, served under the read id), or null
180
+ */
181
+ image_url: string | null;
66
182
  };
67
183
  export type ListNotesData = {
68
184
  body?: never;
185
+ headers?: {
186
+ /**
187
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
188
+ */
189
+ 'X-Feed-Password'?: string;
190
+ };
69
191
  path: {
70
192
  /**
71
193
  * The feed's name. It is the write key: anyone who knows it can post.
@@ -81,6 +203,10 @@ export type ListNotesData = {
81
203
  * Only notes older than this id: the previous page's `next`
82
204
  */
83
205
  before?: string;
206
+ /**
207
+ * Only notes carrying this tag
208
+ */
209
+ tag?: string;
84
210
  };
85
211
  url: '/api/v1/feeds/{feed}/notes';
86
212
  };
@@ -90,7 +216,7 @@ export type ListNotesErrors = {
90
216
  */
91
217
  400: Error;
92
218
  /**
93
- * The instance has a password and it is missing or wrong
219
+ * The instance has a password, or the feed has its own, and it is missing or wrong
94
220
  */
95
221
  401: Error;
96
222
  /**
@@ -107,7 +233,36 @@ export type ListNotesResponses = {
107
233
  };
108
234
  export type ListNotesResponse = ListNotesResponses[keyof ListNotesResponses];
109
235
  export type PostNoteData = {
110
- body: PostJson;
236
+ /**
237
+ * The note, a file: its bytes, of the type `Content-Type` declares
238
+ */
239
+ body: Blob | File;
240
+ headers?: {
241
+ /**
242
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
243
+ */
244
+ 'X-Feed-Password'?: string;
245
+ /**
246
+ * The read id the feed gets when this post creates it: 3 to 64 characters (a-z, 0-9, - and _), random when left out or empty, ignored for a feed that exists. A short readable one is guessable: protect the feed with a password if that matters. 409 when it is taken
247
+ */
248
+ 'X-Read-Id'?: string;
249
+ /**
250
+ * The note's title, for a raw body; a JSON or form body's own `title` wins. At most 100 characters, one line.
251
+ */
252
+ 'X-Note-Title'?: string;
253
+ /**
254
+ * Tags for the note, comma-separated (`ci,deploy`): at most 10 tags, each 1 to 32 characters of letters, digits, `-`, `_`, `.` and `:`; case is folded to lowercase, duplicates are removed. For a raw markdown body; a JSON or form body's own `tags` wins. Empty is none.
255
+ */
256
+ 'X-Note-Tags'?: string;
257
+ /**
258
+ * For an image body: its alternative text; a form's own `alt` wins.
259
+ */
260
+ 'X-Note-Alt'?: string;
261
+ /**
262
+ * For an image body: the picture's original file name, kept with the note (at most 200 characters)
263
+ */
264
+ 'X-Note-Name'?: string;
265
+ };
111
266
  path: {
112
267
  /**
113
268
  * The feed's name. It is the write key: anyone who knows it can post.
@@ -119,19 +274,23 @@ export type PostNoteData = {
119
274
  };
120
275
  export type PostNoteErrors = {
121
276
  /**
122
- * Invalid or reserved feed name; empty note; bad JSON, form or UTF-8
277
+ * Invalid or reserved feed name; a blank note; a bad title, alt text or tags; a new password that is not printable ASCII
123
278
  */
124
279
  400: Error;
125
280
  /**
126
- * The instance has a password and it is missing or wrong
281
+ * The instance has a password, or the feed has its own, and it is missing or wrong
127
282
  */
128
283
  401: Error;
129
284
  /**
130
- * Body over 102400 bytes
285
+ * A password was sent for a feed that already exists without one: it can't be claimed; or the chosen read id is taken
286
+ */
287
+ 409: Error;
288
+ /**
289
+ * Markdown over 102400 bytes, or an image over NOTEFEED_MAX_IMAGE_BYTES
131
290
  */
132
291
  413: Error;
133
292
  /**
134
- * Unsupported content type
293
+ * Content-Type missing or not one of the accepted types, or the body is not what it declares
135
294
  */
136
295
  415: Error;
137
296
  /**
@@ -139,7 +298,7 @@ export type PostNoteErrors = {
139
298
  */
140
299
  429: Error;
141
300
  /**
142
- * NOTEFEED_MAX_FEEDS or NOTEFEED_MAX_NOTES_PER_FEED reached
301
+ * NOTEFEED_MAX_FEEDS, NOTEFEED_MAX_NOTES_PER_FEED or NOTEFEED_MAX_IMAGES_PER_FEED reached
143
302
  */
144
303
  507: Error;
145
304
  };
@@ -151,8 +310,61 @@ export type PostNoteResponses = {
151
310
  201: Created;
152
311
  };
153
312
  export type PostNoteResponse = PostNoteResponses[keyof PostNoteResponses];
313
+ export type DeleteNoteData = {
314
+ body?: never;
315
+ headers?: {
316
+ /**
317
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
318
+ */
319
+ 'X-Feed-Password'?: string;
320
+ };
321
+ path: {
322
+ /**
323
+ * The feed's name. It is the write key: anyone who knows it can post.
324
+ */
325
+ feed: string;
326
+ /**
327
+ * The note's id
328
+ */
329
+ id: string;
330
+ };
331
+ query?: never;
332
+ url: '/api/v1/feeds/{feed}/notes/{id}';
333
+ };
334
+ export type DeleteNoteErrors = {
335
+ /**
336
+ * Invalid or reserved feed name
337
+ */
338
+ 400: Error;
339
+ /**
340
+ * The instance has a password, or the feed has its own, and it is missing or wrong
341
+ */
342
+ 401: Error;
343
+ /**
344
+ * No such note
345
+ */
346
+ 404: Error;
347
+ /**
348
+ * Too many posts, edits and deletes, or wrong passwords, from this client
349
+ */
350
+ 429: Error;
351
+ };
352
+ export type DeleteNoteError = DeleteNoteErrors[keyof DeleteNoteErrors];
353
+ export type DeleteNoteResponses = {
354
+ /**
355
+ * Deleted
356
+ */
357
+ 204: void;
358
+ };
359
+ export type DeleteNoteResponse = DeleteNoteResponses[keyof DeleteNoteResponses];
154
360
  export type GetNoteData = {
155
361
  body?: never;
362
+ headers?: {
363
+ /**
364
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
365
+ */
366
+ 'X-Feed-Password'?: string;
367
+ };
156
368
  path: {
157
369
  /**
158
370
  * The feed's name. It is the write key: anyone who knows it can post.
@@ -172,7 +384,7 @@ export type GetNoteErrors = {
172
384
  */
173
385
  400: Error;
174
386
  /**
175
- * The instance has a password and it is missing or wrong
387
+ * The instance has a password, or the feed has its own, and it is missing or wrong
176
388
  */
177
389
  401: Error;
178
390
  /**
@@ -192,11 +404,364 @@ export type GetNoteResponses = {
192
404
  200: Note;
193
405
  };
194
406
  export type GetNoteResponse = GetNoteResponses[keyof GetNoteResponses];
407
+ export type PatchNoteData = {
408
+ body: NoteMeta;
409
+ headers?: {
410
+ /**
411
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
412
+ */
413
+ 'X-Feed-Password'?: string;
414
+ };
415
+ path: {
416
+ /**
417
+ * The feed's name. It is the write key: anyone who knows it can post.
418
+ */
419
+ feed: string;
420
+ /**
421
+ * The note's id
422
+ */
423
+ id: string;
424
+ };
425
+ query?: never;
426
+ url: '/api/v1/feeds/{feed}/notes/{id}';
427
+ };
428
+ export type PatchNoteErrors = {
429
+ /**
430
+ * Invalid or reserved feed name; nothing to change; a bad title or alt text; alt for a note that has none; bad JSON
431
+ */
432
+ 400: Error;
433
+ /**
434
+ * The instance has a password, or the feed has its own, and it is missing or wrong
435
+ */
436
+ 401: Error;
437
+ /**
438
+ * No such note
439
+ */
440
+ 404: Error;
441
+ /**
442
+ * Content-Type is not application/json
443
+ */
444
+ 415: Error;
445
+ /**
446
+ * Too many posts, edits and deletes, or wrong passwords, from this client
447
+ */
448
+ 429: Error;
449
+ };
450
+ export type PatchNoteError = PatchNoteErrors[keyof PatchNoteErrors];
451
+ export type PatchNoteResponses = {
452
+ /**
453
+ * The note as it is now
454
+ */
455
+ 200: Note;
456
+ };
457
+ export type PatchNoteResponse = PatchNoteResponses[keyof PatchNoteResponses];
458
+ export type EditNoteData = {
459
+ /**
460
+ * The note, a file: its bytes, of the type `Content-Type` declares
461
+ */
462
+ body: Blob | File;
463
+ headers?: {
464
+ /**
465
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
466
+ */
467
+ 'X-Feed-Password'?: string;
468
+ };
469
+ path: {
470
+ /**
471
+ * The feed's name. It is the write key: anyone who knows it can post.
472
+ */
473
+ feed: string;
474
+ /**
475
+ * The note's id
476
+ */
477
+ id: string;
478
+ };
479
+ query?: never;
480
+ url: '/api/v1/feeds/{feed}/notes/{id}';
481
+ };
482
+ export type EditNoteErrors = {
483
+ /**
484
+ * Invalid or reserved feed name; a blank note
485
+ */
486
+ 400: Error;
487
+ /**
488
+ * The instance has a password, or the feed has its own, and it is missing or wrong
489
+ */
490
+ 401: Error;
491
+ /**
492
+ * No such note
493
+ */
494
+ 404: Error;
495
+ /**
496
+ * Markdown over 102400 bytes, or an image over NOTEFEED_MAX_IMAGE_BYTES
497
+ */
498
+ 413: Error;
499
+ /**
500
+ * Content-Type missing, not accepted or not the note's own type, or the body is not what it declares
501
+ */
502
+ 415: Error;
503
+ /**
504
+ * Too many posts, edits and deletes, or wrong passwords, from this client
505
+ */
506
+ 429: Error;
507
+ };
508
+ export type EditNoteError = EditNoteErrors[keyof EditNoteErrors];
509
+ export type EditNoteResponses = {
510
+ /**
511
+ * The note as it is now
512
+ */
513
+ 200: Note;
514
+ };
515
+ export type EditNoteResponse = EditNoteResponses[keyof EditNoteResponses];
516
+ export type DeleteFeedData = {
517
+ body?: never;
518
+ headers?: {
519
+ /**
520
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
521
+ */
522
+ 'X-Feed-Password'?: string;
523
+ };
524
+ path: {
525
+ /**
526
+ * The feed's name. It is the write key: anyone who knows it can post.
527
+ */
528
+ feed: string;
529
+ };
530
+ query?: never;
531
+ url: '/api/v1/feeds/{feed}';
532
+ };
533
+ export type DeleteFeedErrors = {
534
+ /**
535
+ * Invalid or reserved feed name
536
+ */
537
+ 400: Error;
538
+ /**
539
+ * The instance has a password, or the feed has its own, and it is missing or wrong
540
+ */
541
+ 401: Error;
542
+ /**
543
+ * No such feed
544
+ */
545
+ 404: Error;
546
+ /**
547
+ * Too many posts, edits and deletes, or wrong passwords, from this client
548
+ */
549
+ 429: Error;
550
+ };
551
+ export type DeleteFeedError = DeleteFeedErrors[keyof DeleteFeedErrors];
552
+ export type DeleteFeedResponses = {
553
+ /**
554
+ * Deleted
555
+ */
556
+ 204: void;
557
+ };
558
+ export type DeleteFeedResponse = DeleteFeedResponses[keyof DeleteFeedResponses];
559
+ export type GetFeedData = {
560
+ body?: never;
561
+ headers?: {
562
+ /**
563
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
564
+ */
565
+ 'X-Feed-Password'?: string;
566
+ };
567
+ path: {
568
+ /**
569
+ * The feed's name. It is the write key: anyone who knows it can post.
570
+ */
571
+ feed: string;
572
+ };
573
+ query?: never;
574
+ url: '/api/v1/feeds/{feed}';
575
+ };
576
+ export type GetFeedErrors = {
577
+ /**
578
+ * Invalid or reserved feed name
579
+ */
580
+ 400: Error;
581
+ /**
582
+ * The instance has a password, or the feed has its own, and it is missing or wrong
583
+ */
584
+ 401: Error;
585
+ /**
586
+ * No such feed
587
+ */
588
+ 404: Error;
589
+ /**
590
+ * Too many wrong passwords from this client
591
+ */
592
+ 429: Error;
593
+ };
594
+ export type GetFeedError = GetFeedErrors[keyof GetFeedErrors];
595
+ export type GetFeedResponses = {
596
+ /**
597
+ * The feed
598
+ */
599
+ 200: Feed;
600
+ };
601
+ export type GetFeedResponse = GetFeedResponses[keyof GetFeedResponses];
602
+ export type UpdateFeedData = {
603
+ body: FeedSettings;
604
+ headers?: {
605
+ /**
606
+ * The feed's own password, when it has one: to post, list or get, and (as the current password) to change or remove it. On the `POST` that creates a feed it sets the feed's password; on a `POST` to an existing feed that has none it answers 409. An empty value is the same as no header, so a `POST` with an empty one creates an open feed.
607
+ */
608
+ 'X-Feed-Password'?: string;
609
+ };
610
+ path: {
611
+ /**
612
+ * The feed's name. It is the write key: anyone who knows it can post.
613
+ */
614
+ feed: string;
615
+ };
616
+ query?: never;
617
+ url: '/api/v1/feeds/{feed}';
618
+ };
619
+ export type UpdateFeedErrors = {
620
+ /**
621
+ * Invalid or reserved feed name, bad JSON, a title or description that is too long or has control characters, a malformed read id, a reserved feed's read id, or chosen read ids turned off
622
+ */
623
+ 400: Error;
624
+ /**
625
+ * The instance has a password, or the feed has its own, and it is missing or wrong
626
+ */
627
+ 401: Error;
628
+ /**
629
+ * No such feed
630
+ */
631
+ 404: Error;
632
+ /**
633
+ * The read id belongs to another feed or is held back for a reserved one
634
+ */
635
+ 409: Error;
636
+ /**
637
+ * Too many posts, edits and deletes, or wrong passwords, from this client
638
+ */
639
+ 429: Error;
640
+ };
641
+ export type UpdateFeedError = UpdateFeedErrors[keyof UpdateFeedErrors];
642
+ export type UpdateFeedResponses = {
643
+ /**
644
+ * The feed as it is now
645
+ */
646
+ 200: Feed;
647
+ };
648
+ export type UpdateFeedResponse = UpdateFeedResponses[keyof UpdateFeedResponses];
649
+ export type RemoveFeedPasswordData = {
650
+ body?: never;
651
+ headers?: {
652
+ /**
653
+ * The feed's current password
654
+ */
655
+ 'X-Feed-Password'?: string;
656
+ };
657
+ path: {
658
+ /**
659
+ * The feed's name. It is the write key: anyone who knows it can post.
660
+ */
661
+ feed: string;
662
+ };
663
+ query?: never;
664
+ url: '/api/v1/feeds/{feed}/password';
665
+ };
666
+ export type RemoveFeedPasswordErrors = {
667
+ /**
668
+ * Invalid or reserved feed name
669
+ */
670
+ 400: Error;
671
+ /**
672
+ * The instance has a password, or the feed has its own, and it is missing or wrong
673
+ */
674
+ 401: Error;
675
+ /**
676
+ * The feed has no password
677
+ */
678
+ 409: Error;
679
+ /**
680
+ * Too many wrong passwords from this client
681
+ */
682
+ 429: Error;
683
+ };
684
+ export type RemoveFeedPasswordError = RemoveFeedPasswordErrors[keyof RemoveFeedPasswordErrors];
685
+ export type RemoveFeedPasswordResponses = {
686
+ /**
687
+ * Removed
688
+ */
689
+ 204: void;
690
+ };
691
+ export type RemoveFeedPasswordResponse = RemoveFeedPasswordResponses[keyof RemoveFeedPasswordResponses];
692
+ export type ChangeFeedPasswordData = {
693
+ body: PasswordJson;
694
+ headers?: {
695
+ /**
696
+ * The feed's current password
697
+ */
698
+ 'X-Feed-Password'?: string;
699
+ };
700
+ path: {
701
+ /**
702
+ * The feed's name. It is the write key: anyone who knows it can post.
703
+ */
704
+ feed: string;
705
+ };
706
+ query?: never;
707
+ url: '/api/v1/feeds/{feed}/password';
708
+ };
709
+ export type ChangeFeedPasswordErrors = {
710
+ /**
711
+ * Invalid or reserved feed name, bad JSON, or a new password that is not 1 to 256 printable ASCII characters, with no space at the start or end
712
+ */
713
+ 400: Error;
714
+ /**
715
+ * The instance has a password, or the feed has its own, and it is missing or wrong
716
+ */
717
+ 401: Error;
718
+ /**
719
+ * The feed has no password
720
+ */
721
+ 409: Error;
722
+ /**
723
+ * Too many wrong passwords from this client
724
+ */
725
+ 429: Error;
726
+ };
727
+ export type ChangeFeedPasswordError = ChangeFeedPasswordErrors[keyof ChangeFeedPasswordErrors];
728
+ export type ChangeFeedPasswordResponses = {
729
+ /**
730
+ * Changed; the old password and unlock cookies stop working
731
+ */
732
+ 204: void;
733
+ };
734
+ export type ChangeFeedPasswordResponse = ChangeFeedPasswordResponses[keyof ChangeFeedPasswordResponses];
735
+ export type GetReadFeedData = {
736
+ body?: never;
737
+ path: {
738
+ /**
739
+ * The feed's read id, from its read link: 22 random characters, one the feed's owner chose, or the feed's own name for a reserved feed. Read-only; never reveals the name of any other feed.
740
+ */
741
+ readId: string;
742
+ };
743
+ query?: never;
744
+ url: '/api/v1/read/{readId}';
745
+ };
746
+ export type GetReadFeedErrors = {
747
+ /**
748
+ * Malformed read id
749
+ */
750
+ 404: Error;
751
+ };
752
+ export type GetReadFeedError = GetReadFeedErrors[keyof GetReadFeedErrors];
753
+ export type GetReadFeedResponses = {
754
+ /**
755
+ * The feed's public settings
756
+ */
757
+ 200: ReadFeed;
758
+ };
759
+ export type GetReadFeedResponse = GetReadFeedResponses[keyof GetReadFeedResponses];
195
760
  export type ListReadNotesData = {
196
761
  body?: never;
197
762
  path: {
198
763
  /**
199
- * The feed's read id, from its read link. Read-only; never reveals the name.
764
+ * The feed's read id, from its read link: 22 random characters, one the feed's owner chose, or the feed's own name for a reserved feed. Read-only; never reveals the name of any other feed.
200
765
  */
201
766
  readId: string;
202
767
  };
@@ -209,6 +774,10 @@ export type ListReadNotesData = {
209
774
  * Only notes older than this id: the previous page's `next`
210
775
  */
211
776
  before?: string;
777
+ /**
778
+ * Only notes carrying this tag
779
+ */
780
+ tag?: string;
212
781
  };
213
782
  url: '/api/v1/read/{readId}/notes';
214
783
  };
@@ -234,7 +803,7 @@ export type GetReadNoteData = {
234
803
  body?: never;
235
804
  path: {
236
805
  /**
237
- * The feed's read id, from its read link. Read-only; never reveals the name.
806
+ * The feed's read id, from its read link: 22 random characters, one the feed's owner chose, or the feed's own name for a reserved feed. Read-only; never reveals the name of any other feed.
238
807
  */
239
808
  readId: string;
240
809
  /**