initiative-plugin-sdk 8.1.0 → 9.0.1

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Generated by scripts/generate-plugin-api.mjs from schemas/plugin-api.json, the plug-in API
3
- * taken from Initiative 0.76.0 (commit 4aa7e8215). Do not edit: regenerate.
3
+ * taken from Initiative 0.77.1 (commit efa16ee25). Do not edit: regenerate.
4
4
  */
5
5
  import type { Scope } from "./contract.js";
6
6
  /**
@@ -31,7 +31,7 @@ export interface PluginApiSchemas {
31
31
  /**
32
32
  * Things that can be archived.
33
33
  */
34
- ArchivableType: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki" | "task" | "initiative";
34
+ ArchivableType: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "wiki" | "task" | "initiative" | "collection";
35
35
  /**
36
36
  * What archiving or unarchiving answers with.
37
37
  */
@@ -40,13 +40,15 @@ export interface PluginApiSchemas {
40
40
  entity_id: number;
41
41
  archived_at?: string | null;
42
42
  };
43
- Body_upload_gallery_image: {
44
- file: string;
45
- title?: string | null;
46
- caption?: string | null;
43
+ Body_upload_file: {
44
+ name: string;
45
+ initiative_id: number;
46
+ file?: string | null;
47
+ upload_id?: string | null;
47
48
  };
48
- Body_upload_gallery_image_version: {
49
- file: string;
49
+ Body_upload_file_version: {
50
+ file?: string | null;
51
+ upload_id?: string | null;
50
52
  };
51
53
  CalendarCreate: {
52
54
  properties?: PluginApiSchemas["PropertyValueInput"][];
@@ -104,7 +106,6 @@ export interface PluginApiSchemas {
104
106
  overridden_fields: string[];
105
107
  skipped_starts: string[];
106
108
  extra_starts: string[];
107
- plugin_values: PluginApiSchemas["PluginValueSummary"][];
108
109
  };
109
110
  CalendarEventUpdate: {
110
111
  properties?: PluginApiSchemas["PropertyValueInput"][] | null;
@@ -209,6 +210,178 @@ export interface PluginApiSchemas {
209
210
  completed: number;
210
211
  total: number;
211
212
  };
213
+ /**
214
+ * What the caller may do to a collection (`resource_access.may_change`).
215
+ */
216
+ CollectionCan: {
217
+ edit: boolean;
218
+ unarchive: boolean;
219
+ };
220
+ /**
221
+ * The file a card shows for a collection.
222
+ */
223
+ CollectionCover: {
224
+ file_id: number;
225
+ name: string;
226
+ file_type: PluginApiSchemas["FileType"];
227
+ /**
228
+ * A stored file comes as an empty string, without its path. A URL from
229
+ * elsewhere comes as it is.
230
+ */
231
+ file_url: string | null;
232
+ file_content_type: string | null;
233
+ /**
234
+ * A stored file comes as an empty string, without its path. A URL from
235
+ * elsewhere comes as it is.
236
+ */
237
+ thumbnail_url: string | null;
238
+ width: number | null;
239
+ height: number | null;
240
+ };
241
+ /**
242
+ * A new collection, made with the files it starts with: a collection is never
243
+ * empty. It starts blank (its grid and table, and no metadata of its own), as
244
+ * a ready-made `shape`, or with the metadata and lists of another collection
245
+ * in the initiative (`shape_from`), none of its values.
246
+ */
247
+ CollectionCreate: {
248
+ properties?: PluginApiSchemas["PropertyValueInput"][];
249
+ file_ids: number[];
250
+ initiative_id: number;
251
+ name: string;
252
+ description?: string | null;
253
+ tag_ids?: number[] | null;
254
+ shape?: PluginApiSchemas["CollectionShapeKey"] | null;
255
+ shape_from?: number | null;
256
+ };
257
+ CollectionFileListResponse: {
258
+ total_count: number;
259
+ page: number;
260
+ page_size: number;
261
+ has_next: boolean;
262
+ has_prev: boolean;
263
+ items: PluginApiSchemas["CollectionFileSummary"][];
264
+ };
265
+ /**
266
+ * A file as its collection lists it: with when it was added there, and its
267
+ * values of the collection's metadata.
268
+ */
269
+ CollectionFileSummary: {
270
+ archived_at: string | null;
271
+ can: PluginApiSchemas["ToolCan"];
272
+ id: number;
273
+ initiative_id: number;
274
+ community_id: string;
275
+ created_by: string | null;
276
+ created_at: string;
277
+ updated_at: string;
278
+ comments_enabled: boolean;
279
+ tags: PluginApiSchemas["TagSummary"][];
280
+ properties: PluginApiSchemas["PropertySummary"][];
281
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
282
+ name: string;
283
+ /**
284
+ * A stored file comes as an empty string, without its path. A URL from
285
+ * elsewhere comes as it is.
286
+ */
287
+ featured_image_url: string | null;
288
+ is_template: boolean;
289
+ initiative: PluginApiSchemas["InitiativeSummary"] | null;
290
+ owner: PluginApiSchemas["PluginPerson"] | null;
291
+ owner_plugin: PluginApiSchemas["OwnerPluginSummary"] | null;
292
+ comment_count: number;
293
+ file_type: PluginApiSchemas["FileType"];
294
+ /**
295
+ * A stored file comes as an empty string, without its path. A URL from
296
+ * elsewhere comes as it is.
297
+ */
298
+ file_url: string | null;
299
+ file_content_type: string | null;
300
+ file_size: number | null;
301
+ original_filename: string | null;
302
+ /**
303
+ * A stored file comes as an empty string, without its path. A URL from
304
+ * elsewhere comes as it is.
305
+ */
306
+ thumbnail_url: string | null;
307
+ width: number | null;
308
+ height: number | null;
309
+ smart_link_url: string | null;
310
+ added_at: string;
311
+ metadata: PluginApiSchemas["PropertySummary"][];
312
+ /**
313
+ * How the file is shown, which follows from its type.
314
+ */
315
+ kind: PluginApiSchemas["FileKind"];
316
+ };
317
+ /**
318
+ * Files to put in a collection or take out of it.
319
+ */
320
+ CollectionFiles: {
321
+ file_ids: number[];
322
+ };
323
+ CollectionListResponse: {
324
+ items: PluginApiSchemas["CollectionRead"][];
325
+ };
326
+ /**
327
+ * A collection as its reader sees it: only the files they can open are
328
+ * counted, and the cover is one of those.
329
+ */
330
+ CollectionRead: {
331
+ id: number;
332
+ initiative_id: number;
333
+ community_id: string;
334
+ name: string;
335
+ description: string | null;
336
+ cover_file_id: number | null;
337
+ cover: PluginApiSchemas["CollectionCover"] | null;
338
+ file_count: number;
339
+ hidden_files: PluginApiSchemas["HiddenFiles"];
340
+ created_by: string | null;
341
+ created_at: string;
342
+ updated_at: string;
343
+ archived_at: string | null;
344
+ comments_enabled: boolean;
345
+ comments_locked_at: string | null;
346
+ comment_count: number;
347
+ tags: PluginApiSchemas["TagSummary"][];
348
+ properties: PluginApiSchemas["PropertySummary"][];
349
+ metadata: PluginApiSchemas["PropertyDefinitionRead"][];
350
+ can: PluginApiSchemas["CollectionCan"];
351
+ };
352
+ CollectionShapeEntry: {
353
+ key: PluginApiSchemas["CollectionShapeKey"];
354
+ name: string;
355
+ hint: string;
356
+ lists: Array<"table" | "board" | "gantt" | "calendar" | "masonry" | "grid" | "timeline">;
357
+ metadata: PluginApiSchemas["CollectionShapeMetadata"][];
358
+ };
359
+ CollectionShapeGroup: {
360
+ key: string;
361
+ name: string;
362
+ entries: PluginApiSchemas["CollectionShapeEntry"][];
363
+ };
364
+ /**
365
+ * A ready-made shape a collection can start as.
366
+ */
367
+ CollectionShapeKey: "gallery" | "catalog" | "log";
368
+ /**
369
+ * Metadata a ready-made shape brings, in the reader's language.
370
+ */
371
+ CollectionShapeMetadata: {
372
+ name: string;
373
+ type: PluginApiSchemas["MetadataType"];
374
+ display: "number" | "stars" | "bar" | null;
375
+ currency: PluginApiSchemas["CurrencyCode"] | null;
376
+ };
377
+ CollectionUpdate: {
378
+ properties?: PluginApiSchemas["PropertyValueInput"][] | null;
379
+ name?: string | null;
380
+ description?: string | null;
381
+ cover_file_id?: number | null;
382
+ tag_ids?: number[] | null;
383
+ comments_enabled?: boolean | null;
384
+ };
212
385
  /**
213
386
  * One limited column of a project's board: its limit, and how many open tasks
214
387
  * it holds.
@@ -233,6 +406,7 @@ export interface PluginApiSchemas {
233
406
  content: string;
234
407
  task_id?: number | null;
235
408
  wiki_page_id?: number | null;
409
+ collection_id?: number | null;
236
410
  project_id?: number | null;
237
411
  file_id?: number | null;
238
412
  queue_id?: number | null;
@@ -240,7 +414,6 @@ export interface PluginApiSchemas {
240
414
  calendar_id?: number | null;
241
415
  dashboard_id?: number | null;
242
416
  post_id?: number | null;
243
- gallery_id?: number | null;
244
417
  wiki_id?: number | null;
245
418
  parent_comment_id?: number | null;
246
419
  audience?: PluginApiSchemas["CommentAudience"];
@@ -269,6 +442,7 @@ export interface PluginApiSchemas {
269
442
  content: string;
270
443
  task_id: number | null;
271
444
  wiki_page_id: number | null;
445
+ collection_id: number | null;
272
446
  project_id: number | null;
273
447
  file_id: number | null;
274
448
  queue_id: number | null;
@@ -276,7 +450,6 @@ export interface PluginApiSchemas {
276
450
  calendar_id: number | null;
277
451
  dashboard_id: number | null;
278
452
  post_id: number | null;
279
- gallery_id: number | null;
280
453
  wiki_id: number | null;
281
454
  id: number;
282
455
  created_by: string | null;
@@ -402,7 +575,6 @@ export interface PluginApiSchemas {
402
575
  view_mode: PluginApiSchemas["CounterViewMode"];
403
576
  position: string;
404
577
  properties: PluginApiSchemas["PropertySummary"][];
405
- plugin_values: PluginApiSchemas["PluginValueSummary"][];
406
578
  created_at: string;
407
579
  updated_at: string;
408
580
  };
@@ -435,6 +607,10 @@ export interface PluginApiSchemas {
435
607
  position?: number | string | null;
436
608
  };
437
609
  CounterViewMode: "number" | "progress_bar" | "segmented_clock";
610
+ /**
611
+ * The ISO 4217 code a money property's amounts are in.
612
+ */
613
+ CurrencyCode: "AED" | "AFN" | "ALL" | "AMD" | "AOA" | "ARS" | "AUD" | "AWG" | "AZN" | "BAM" | "BBD" | "BDT" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BRL" | "BSD" | "BTN" | "BWP" | "BYN" | "BZD" | "CAD" | "CDF" | "CHF" | "CLP" | "CNY" | "COP" | "CRC" | "CUP" | "CVE" | "CZK" | "DJF" | "DKK" | "DOP" | "DZD" | "EGP" | "ERN" | "ETB" | "EUR" | "FJD" | "FKP" | "GBP" | "GEL" | "GHS" | "GIP" | "GMD" | "GNF" | "GTQ" | "GYD" | "HKD" | "HNL" | "HTG" | "HUF" | "IDR" | "ILS" | "INR" | "IQD" | "IRR" | "ISK" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LYD" | "MAD" | "MDL" | "MGA" | "MKD" | "MMK" | "MNT" | "MOP" | "MRU" | "MUR" | "MVR" | "MWK" | "MXN" | "MYR" | "MZN" | "NAD" | "NGN" | "NIO" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEN" | "PGK" | "PHP" | "PKR" | "PLN" | "PYG" | "QAR" | "RON" | "RSD" | "RUB" | "RWF" | "SAR" | "SBD" | "SCR" | "SDG" | "SEK" | "SGD" | "SHP" | "SLE" | "SOS" | "SRD" | "SSP" | "STN" | "SVC" | "SYP" | "SZL" | "THB" | "TJS" | "TMT" | "TND" | "TOP" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UGX" | "USD" | "UYU" | "UZS" | "VED" | "VES" | "VND" | "VUV" | "WST" | "XAF" | "XCD" | "XCG" | "XOF" | "XPF" | "YER" | "ZAR" | "ZMW" | "ZWG";
438
614
  /**
439
615
  * What a date is grouped by: the calendar's day, week, month, quarter or year
440
616
  * it falls in. A week starts on Monday, as Postgres counts one.
@@ -447,9 +623,10 @@ export interface PluginApiSchemas {
447
623
  featured_image_url?: string | null;
448
624
  is_template?: boolean;
449
625
  content?: Record<string, unknown> | null;
450
- file_type?: "native" | "whiteboard" | "smart_link" | "spreadsheet";
626
+ file_type?: "lexical" | "excalidraw" | "url" | "sheet";
451
627
  grants?: PluginApiSchemas["ResourceGrantSchema"][];
452
628
  };
629
+ FileKind: "document" | "spreadsheet" | "presentation" | "whiteboard" | "pdf" | "image" | "video" | "audio" | "text" | "compressed" | "design" | "3d" | "font" | "raw" | "code" | "ebook" | "cad" | "link" | "other";
453
630
  FileListResponse: {
454
631
  total_count: number;
455
632
  page: number;
@@ -491,6 +668,13 @@ export interface PluginApiSchemas {
491
668
  file_content_type: string | null;
492
669
  file_size: number | null;
493
670
  original_filename: string | null;
671
+ /**
672
+ * A stored file comes as an empty string, without its path. A URL from
673
+ * elsewhere comes as it is.
674
+ */
675
+ thumbnail_url: string | null;
676
+ width: number | null;
677
+ height: number | null;
494
678
  smart_link_url: string | null;
495
679
  /**
496
680
  * A Lexical editor state. A person is mentioned by a node whose
@@ -500,7 +684,17 @@ export interface PluginApiSchemas {
500
684
  * `src` and a link's `url` are empty.
501
685
  */
502
686
  content: Record<string, unknown>;
687
+ collection_ids: number[];
503
688
  content_version: string | null;
689
+ /**
690
+ * How the file is shown, which follows from its type.
691
+ */
692
+ kind: PluginApiSchemas["FileKind"];
693
+ /**
694
+ * The editor's own type this uploaded file becomes when somebody converts
695
+ * it to edit it (`POST /files/{id}/convert`), or `None`.
696
+ */
697
+ converts_to: PluginApiSchemas["FileType"] | null;
504
698
  };
505
699
  FileSummary: {
506
700
  archived_at: string | null;
@@ -535,12 +729,20 @@ export interface PluginApiSchemas {
535
729
  file_content_type: string | null;
536
730
  file_size: number | null;
537
731
  original_filename: string | null;
732
+ /**
733
+ * A stored file comes as an empty string, without its path. A URL from
734
+ * elsewhere comes as it is.
735
+ */
736
+ thumbnail_url: string | null;
737
+ width: number | null;
738
+ height: number | null;
538
739
  smart_link_url: string | null;
740
+ /**
741
+ * How the file is shown, which follows from its type.
742
+ */
743
+ kind: PluginApiSchemas["FileKind"];
539
744
  };
540
- /**
541
- * Discriminator for file type.
542
- */
543
- FileType: "native" | "file" | "whiteboard" | "smart_link" | "spreadsheet";
745
+ FileType: "lexical" | "excalidraw" | "sheet" | "url" | "pdf" | "doc" | "docx" | "odt" | "rtf" | "md" | "xls" | "xlsx" | "ods" | "csv" | "tsv" | "ppt" | "pptx" | "odp" | "png" | "jpeg" | "gif" | "webp" | "svg" | "heic" | "tiff" | "mp4" | "webm" | "mov" | "mp3" | "m4a" | "wav" | "ogg" | "flac" | "txt" | "json" | "html" | "zip" | "tar" | "gz" | "7z" | "rar" | "ai" | "psd" | "eps" | "indd" | "xcf" | "kra" | "procreate" | "clip" | "sketch" | "fig" | "afdesign" | "afphoto" | "afpub" | "cdr" | "blend" | "fbx" | "obj" | "stl" | "glb" | "gltf" | "3mf" | "usdz" | "ttf" | "otf" | "woff" | "woff2" | "dng" | "cr2" | "cr3" | "nef" | "arw" | "raf" | "orf" | "py" | "js" | "ts" | "css" | "sql" | "yaml" | "xml" | "toml" | "c" | "cpp" | "cs" | "java" | "go" | "rs" | "rb" | "php" | "swift" | "kt" | "epub" | "mobi" | "dwg" | "dxf" | "step" | "other";
544
746
  FileUpdate: {
545
747
  name?: string | null;
546
748
  content?: Record<string, unknown> | null;
@@ -548,6 +750,20 @@ export interface PluginApiSchemas {
548
750
  featured_image_url?: string | null;
549
751
  is_template?: boolean | null;
550
752
  };
753
+ /**
754
+ * A single stored version of an uploaded file. The binary is fetched via the
755
+ * version download endpoint by id — `file_url` is intentionally not exposed.
756
+ */
757
+ FileVersionRead: {
758
+ id: number;
759
+ version_number: number;
760
+ file_content_type: string | null;
761
+ file_size: number | null;
762
+ original_filename: string | null;
763
+ created_by: number | null;
764
+ created_at: string;
765
+ is_current: boolean;
766
+ };
551
767
  /**
552
768
  * A single field comparison.
553
769
  */
@@ -569,159 +785,6 @@ export interface PluginApiSchemas {
569
785
  * Comparison operators for filter conditions.
570
786
  */
571
787
  FilterOp: "eq" | "lt" | "lte" | "gt" | "gte" | "in_" | "ilike" | "is_null";
572
- /**
573
- * What a list draws for a gallery: one picture, at whichever size it has.
574
- */
575
- GalleryCover: {
576
- image_id: number;
577
- /**
578
- * A stored file comes as an empty string, without its path. A URL from
579
- * elsewhere comes as it is.
580
- */
581
- file_url: string;
582
- /**
583
- * A stored file comes as an empty string, without its path. A URL from
584
- * elsewhere comes as it is.
585
- */
586
- thumbnail_url: string | null;
587
- width: number | null;
588
- height: number | null;
589
- };
590
- GalleryCreate: {
591
- properties?: PluginApiSchemas["PropertyValueInput"][];
592
- name: string;
593
- description?: string | null;
594
- initiative_id: number;
595
- tag_ids?: number[] | null;
596
- grants?: PluginApiSchemas["ResourceGrantSchema"][];
597
- };
598
- GalleryImageListResponse: {
599
- total_count: number;
600
- page: number;
601
- page_size: number;
602
- has_next: boolean;
603
- has_prev: boolean;
604
- items: PluginApiSchemas["GalleryImageRead"][];
605
- };
606
- GalleryImageRead: {
607
- id: number;
608
- gallery_id: number;
609
- community_id: string;
610
- title: string | null;
611
- caption: string | null;
612
- /**
613
- * A stored file comes as an empty string, without its path. A URL from
614
- * elsewhere comes as it is.
615
- */
616
- file_url: string;
617
- /**
618
- * A stored file comes as an empty string, without its path. A URL from
619
- * elsewhere comes as it is.
620
- */
621
- thumbnail_url: string | null;
622
- file_content_type: string | null;
623
- file_size: number | null;
624
- original_filename: string | null;
625
- width: number | null;
626
- height: number | null;
627
- created_by: string | null;
628
- uploader: PluginApiSchemas["PluginPerson"] | null;
629
- created_at: string;
630
- updated_at: string;
631
- version_count: number;
632
- tags: PluginApiSchemas["TagSummary"][];
633
- properties: PluginApiSchemas["PropertySummary"][];
634
- plugin_values: PluginApiSchemas["PluginValueSummary"][];
635
- };
636
- GalleryImageUpdate: {
637
- properties?: PluginApiSchemas["PropertyValueInput"][] | null;
638
- title?: string | null;
639
- caption?: string | null;
640
- tag_ids?: number[] | null;
641
- caption_base?: string | null;
642
- };
643
- /**
644
- * One stored rendition of a picture.
645
- */
646
- GalleryImageVersionRead: {
647
- id: number;
648
- version_number: number;
649
- /**
650
- * A stored file comes as an empty string, without its path. A URL from
651
- * elsewhere comes as it is.
652
- */
653
- file_url: string;
654
- /**
655
- * A stored file comes as an empty string, without its path. A URL from
656
- * elsewhere comes as it is.
657
- */
658
- thumbnail_url: string | null;
659
- file_content_type: string | null;
660
- file_size: number | null;
661
- original_filename: string | null;
662
- width: number | null;
663
- height: number | null;
664
- created_by: string | null;
665
- created_at: string;
666
- is_current: boolean;
667
- };
668
- GalleryListResponse: {
669
- total_count: number;
670
- page: number;
671
- page_size: number;
672
- has_next: boolean;
673
- has_prev: boolean;
674
- items: PluginApiSchemas["GallerySummary"][];
675
- };
676
- /**
677
- * A gallery on its own page. The same shape as its summary: the pictures are
678
- * paged separately, because a gallery is browsed rather than read.
679
- */
680
- GalleryRead: {
681
- archived_at: string | null;
682
- can: PluginApiSchemas["ToolCan"];
683
- id: number;
684
- initiative_id: number;
685
- community_id: string;
686
- created_by: string | null;
687
- created_at: string;
688
- updated_at: string;
689
- comments_enabled: boolean;
690
- tags: PluginApiSchemas["TagSummary"][];
691
- properties: PluginApiSchemas["PropertySummary"][];
692
- grants: PluginApiSchemas["ResourceGrantSchema"][];
693
- name: string;
694
- description: string | null;
695
- cover_image_id: number | null;
696
- cover: PluginApiSchemas["GalleryCover"] | null;
697
- preview: PluginApiSchemas["GalleryCover"][];
698
- comment_count: number;
699
- };
700
- GallerySummary: {
701
- archived_at: string | null;
702
- can: PluginApiSchemas["ToolCan"];
703
- id: number;
704
- initiative_id: number;
705
- community_id: string;
706
- created_by: string | null;
707
- created_at: string;
708
- updated_at: string;
709
- comments_enabled: boolean;
710
- tags: PluginApiSchemas["TagSummary"][];
711
- properties: PluginApiSchemas["PropertySummary"][];
712
- grants: PluginApiSchemas["ResourceGrantSchema"][];
713
- name: string;
714
- description: string | null;
715
- cover_image_id: number | null;
716
- cover: PluginApiSchemas["GalleryCover"] | null;
717
- preview: PluginApiSchemas["GalleryCover"][];
718
- comment_count: number;
719
- };
720
- GalleryUpdate: {
721
- name?: string | null;
722
- description?: string | null;
723
- cover_image_id?: number | null;
724
- };
725
788
  /**
726
789
  * One group of a grouped list.
727
790
  */
@@ -739,6 +802,14 @@ export interface PluginApiSchemas {
739
802
  HTTPValidationError: {
740
803
  detail?: PluginApiSchemas["ValidationError"][];
741
804
  };
805
+ /**
806
+ * The files of a collection or a wiki the reader knows are there and can't
807
+ * open, and how many of those they have asked for.
808
+ */
809
+ HiddenFiles: {
810
+ count?: number;
811
+ requested?: number;
812
+ };
742
813
  /**
743
814
  * What the caller may do in an initiative (:func:`initiative_can`).
744
815
  */
@@ -770,7 +841,6 @@ export interface PluginApiSchemas {
770
841
  calendars_enabled: boolean;
771
842
  dashboards_enabled: boolean;
772
843
  posts_enabled: boolean;
773
- galleries_enabled: boolean;
774
844
  wikis_enabled: boolean;
775
845
  name: string;
776
846
  description: string | null;
@@ -806,6 +876,10 @@ export interface PluginApiSchemas {
806
876
  project_count: number;
807
877
  projects_total: number;
808
878
  };
879
+ /**
880
+ * What a metadata definition's values are.
881
+ */
882
+ MetadataType: "text" | "number" | "checkbox" | "date" | "datetime" | "url" | "select" | "multi_select" | "user_reference" | "currency" | "scale" | "link" | "badge" | "json";
809
883
  OccurrenceRequest: {
810
884
  start: string;
811
885
  };
@@ -833,16 +907,6 @@ export interface PluginApiSchemas {
833
907
  */
834
908
  avatar_url?: string | null;
835
909
  };
836
- /**
837
- * One value an installed plug-in shows on an item: a key its pinned version
838
- * declares as a field there. A list field's value is an array of its
839
- * elements, newest first, each with its `ref`.
840
- */
841
- PluginValueSummary: {
842
- plugin_id: number;
843
- key: string;
844
- value: unknown;
845
- };
846
910
  PollOptionRead: {
847
911
  id: number;
848
912
  text: string;
@@ -959,7 +1023,6 @@ export interface PluginApiSchemas {
959
1023
  */
960
1024
  body: Record<string, unknown>;
961
1025
  poll: PluginApiSchemas["PollRead"] | null;
962
- plugin_values: PluginApiSchemas["PluginValueSummary"][];
963
1026
  };
964
1027
  PostUpdate: {
965
1028
  name?: string | null;
@@ -1038,20 +1101,26 @@ export interface PluginApiSchemas {
1038
1101
  };
1039
1102
  PropertyDefinitionCreate: {
1040
1103
  name: string;
1041
- type: PluginApiSchemas["PropertyType"];
1104
+ type: PluginApiSchemas["MetadataType"];
1042
1105
  position?: number;
1043
1106
  color?: string | null;
1044
1107
  options?: PluginApiSchemas["PropertyOption"][] | null;
1108
+ currency?: PluginApiSchemas["CurrencyCode"] | null;
1045
1109
  initiative_id: number;
1110
+ project_id?: number | null;
1111
+ collection_id?: number | null;
1046
1112
  };
1047
1113
  PropertyDefinitionRead: {
1048
1114
  name: string;
1049
- type: PluginApiSchemas["PropertyType"];
1115
+ type: PluginApiSchemas["MetadataType"];
1050
1116
  position: number;
1051
1117
  color: string | null;
1052
1118
  options: PluginApiSchemas["PropertyOption"][] | null;
1119
+ currency: PluginApiSchemas["CurrencyCode"] | null;
1053
1120
  id: number;
1054
1121
  initiative_id: number;
1122
+ project_id: number | null;
1123
+ collection_id: number | null;
1055
1124
  created_at: string;
1056
1125
  updated_at: string;
1057
1126
  };
@@ -1063,6 +1132,7 @@ export interface PluginApiSchemas {
1063
1132
  position?: number | null;
1064
1133
  color?: string | null;
1065
1134
  options?: PluginApiSchemas["PropertyOption"][] | null;
1135
+ currency?: PluginApiSchemas["CurrencyCode"] | null;
1066
1136
  };
1067
1137
  /**
1068
1138
  * Envelope for PATCH /property-definitions/{id}.
@@ -1095,23 +1165,26 @@ export interface PluginApiSchemas {
1095
1165
  PropertySummary: {
1096
1166
  property_id: number;
1097
1167
  name: string;
1098
- type: PluginApiSchemas["PropertyType"];
1168
+ type: PluginApiSchemas["MetadataType"];
1169
+ project_id: number | null;
1170
+ collection_id: number | null;
1171
+ install_id: number | null;
1172
+ key: string | null;
1099
1173
  options: PluginApiSchemas["PropertyOption"][] | null;
1174
+ currency: PluginApiSchemas["CurrencyCode"] | null;
1100
1175
  /**
1101
- * Shaped by the property's type. For user_reference, a person: id,
1176
+ * Shaped by the definition's type. For user_reference, a person: id,
1102
1177
  * username, discriminator, display_name and avatar_url, or an PluginPerson
1103
- * when the reader is an installed plug-in.
1178
+ * when the reader is an installed plug-in. A plug-in's value is as the
1179
+ * plug-in wrote it: a list field's an array of its elements, newest first,
1180
+ * each with its ref, and a value with a state the state beside it.
1104
1181
  */
1105
1182
  value: unknown;
1106
1183
  };
1107
1184
  /**
1108
1185
  * What can carry custom property values: every tool and sub-tool.
1109
1186
  */
1110
- PropertyTarget: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki" | "task" | "queue_item" | "calendar_event" | "counter" | "gallery_image" | "wiki_page";
1111
- /**
1112
- * Supported value types for a property definition.
1113
- */
1114
- PropertyType: "text" | "number" | "checkbox" | "date" | "datetime" | "url" | "select" | "multi_select" | "user_reference";
1187
+ PropertyTarget: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "wiki" | "task" | "queue_item" | "calendar_event" | "counter" | "wiki_page" | "collection";
1115
1188
  /**
1116
1189
  * A single (property_id, value) pair submitted by the client.
1117
1190
  */
@@ -1163,7 +1236,6 @@ export interface PluginApiSchemas {
1163
1236
  held_at_round: number | null;
1164
1237
  created_by: string | null;
1165
1238
  created_at: string;
1166
- plugin_values: PluginApiSchemas["PluginValueSummary"][];
1167
1239
  };
1168
1240
  QueueItemUpdate: {
1169
1241
  properties?: PluginApiSchemas["PropertyValueInput"][] | null;
@@ -1281,7 +1353,7 @@ export interface PluginApiSchemas {
1281
1353
  all_initiative_members?: boolean;
1282
1354
  plugin_install_id?: number | null;
1283
1355
  };
1284
- SearchEntityType: "calendar" | "calendar_event" | "comment" | "counter" | "counter_group" | "dashboard" | "file" | "gallery" | "gallery_image" | "post" | "project" | "queue" | "queue_item" | "tag" | "task" | "wiki" | "wiki_page";
1356
+ SearchEntityType: "calendar" | "calendar_event" | "collection" | "comment" | "counter" | "counter_group" | "dashboard" | "file" | "post" | "project" | "queue" | "queue_item" | "tag" | "task" | "wiki" | "wiki_page";
1285
1357
  /**
1286
1358
  * A jump-to target for the command palette: enough to render and route.
1287
1359
  */
@@ -1338,7 +1410,7 @@ export interface PluginApiSchemas {
1338
1410
  /**
1339
1411
  * Entity types a bulk tag edit can address.
1340
1412
  */
1341
- TagTarget: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki" | "task" | "queue_item" | "calendar_event" | "gallery_image" | "wiki_page";
1413
+ TagTarget: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "wiki" | "task" | "queue_item" | "calendar_event" | "wiki_page" | "collection";
1342
1414
  TaskCreate: {
1343
1415
  properties?: PluginApiSchemas["PropertyValueInput"][];
1344
1416
  title: string;
@@ -1356,6 +1428,7 @@ export interface PluginApiSchemas {
1356
1428
  task_type_id?: number | null;
1357
1429
  tag_ids?: number[];
1358
1430
  checklist?: PluginApiSchemas["ChecklistItemInput"][];
1431
+ parent_task_id?: number | null;
1359
1432
  };
1360
1433
  /**
1361
1434
  * Lightweight schema for task list endpoints - excludes heavy nested data
@@ -1397,9 +1470,10 @@ export interface PluginApiSchemas {
1397
1470
  initiative_name: string | null;
1398
1471
  initiative_color: string | null;
1399
1472
  checklist_progress: PluginApiSchemas["ChecklistProgress"] | null;
1473
+ parent: PluginApiSchemas["TaskParentSummary"] | null;
1474
+ subtask_progress: PluginApiSchemas["ChecklistProgress"] | null;
1400
1475
  tags: PluginApiSchemas["TagSummary"][];
1401
1476
  properties: PluginApiSchemas["PropertySummary"][];
1402
- plugin_values: PluginApiSchemas["PluginValueSummary"][];
1403
1477
  };
1404
1478
  TaskListResponse: {
1405
1479
  total_count: number;
@@ -1413,6 +1487,13 @@ export interface PluginApiSchemas {
1413
1487
  TaskMoveRequest: {
1414
1488
  target_project_id: number;
1415
1489
  };
1490
+ /**
1491
+ * The task a task is part of: the target of its `part_of` edge.
1492
+ */
1493
+ TaskParentSummary: {
1494
+ id: number;
1495
+ title: string;
1496
+ };
1416
1497
  TaskPriority: "low" | "medium" | "high" | "urgent";
1417
1498
  TaskProjectSummary: {
1418
1499
  id: number;
@@ -1458,9 +1539,10 @@ export interface PluginApiSchemas {
1458
1539
  project: PluginApiSchemas["TaskProjectSummary"] | null;
1459
1540
  checklist: PluginApiSchemas["ChecklistItem"][];
1460
1541
  checklist_progress: PluginApiSchemas["ChecklistProgress"] | null;
1542
+ parent: PluginApiSchemas["TaskParentSummary"] | null;
1543
+ subtask_progress: PluginApiSchemas["ChecklistProgress"] | null;
1461
1544
  tags: PluginApiSchemas["TagSummary"][];
1462
1545
  properties: PluginApiSchemas["PropertySummary"][];
1463
- plugin_values: PluginApiSchemas["PluginValueSummary"][];
1464
1546
  };
1465
1547
  TaskStatusCategory: "backlog" | "todo" | "in_progress" | "done";
1466
1548
  TaskStatusRead: {
@@ -1542,6 +1624,7 @@ export interface PluginApiSchemas {
1542
1624
  recurrence_limit?: number | null;
1543
1625
  tag_ids?: number[] | null;
1544
1626
  checklist?: PluginApiSchemas["ChecklistItemInput"][] | null;
1627
+ parent_task_id?: number | null;
1545
1628
  scope?: "this" | "following" | "all" | null;
1546
1629
  };
1547
1630
  /**
@@ -1556,7 +1639,7 @@ export interface PluginApiSchemas {
1556
1639
  TimelineResponse: {
1557
1640
  buckets: PluginApiSchemas["TimelineBucket"][];
1558
1641
  };
1559
- Tool: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki";
1642
+ Tool: "project" | "file" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "wiki";
1560
1643
  /**
1561
1644
  * What the caller may do to one of a tool's rows
1562
1645
  * (`permissions.client_access`).
@@ -1746,9 +1829,9 @@ export interface PluginApiSchemas {
1746
1829
  tag_ids?: number[] | null;
1747
1830
  };
1748
1831
  /**
1749
- * A wiki on its own page. The same shape as its summary: the pages are
1750
- * fetched as a tree of their own, because a wiki is navigated rather than
1751
- * read end to end.
1832
+ * A wiki on its own page: its summary, and the files filed in it the reader
1833
+ * knows are there and can't open. The pages are fetched as a tree of their
1834
+ * own, because a wiki is navigated rather than read end to end.
1752
1835
  */
1753
1836
  WikiRead: {
1754
1837
  archived_at: string | null;
@@ -1774,6 +1857,7 @@ export interface PluginApiSchemas {
1774
1857
  accent_color: string | null;
1775
1858
  template_page_id: number | null;
1776
1859
  comment_count: number;
1860
+ hidden_files: PluginApiSchemas["HiddenFiles"];
1777
1861
  };
1778
1862
  /**
1779
1863
  * How wide a page's body runs.
@@ -1916,6 +2000,14 @@ export interface PluginApiOperations {
1916
2000
  * Filter by file type
1917
2001
  */
1918
2002
  file_type?: PluginApiSchemas["FileType"] | null;
2003
+ /**
2004
+ * Filter by kind of file
2005
+ */
2006
+ kind?: PluginApiSchemas["FileKind"] | null;
2007
+ /**
2008
+ * Filter to the files in one collection
2009
+ */
2010
+ collection_id?: number | null;
1919
2011
  page?: number;
1920
2012
  page_size?: number;
1921
2013
  /**
@@ -2133,12 +2225,12 @@ export interface PluginApiOperations {
2133
2225
  body: PluginApiSchemas["PostCreate"];
2134
2226
  answer: PluginApiSchemas["PostRead"];
2135
2227
  };
2136
- list_galleries: {
2228
+ list_wikis: {
2137
2229
  query: {
2138
2230
  initiative_id?: number | null;
2139
2231
  /**
2140
- * Full-text match over the gallery's name and description, through the
2141
- * same index the search page reads.
2232
+ * Full-text match over the wiki's name and description, through the same
2233
+ * index the search page reads.
2142
2234
  */
2143
2235
  search?: string | null;
2144
2236
  /**
@@ -2150,7 +2242,7 @@ export interface PluginApiOperations {
2150
2242
  */
2151
2243
  sort_dir?: string | null;
2152
2244
  /**
2153
- * Only galleries carrying any of these tags.
2245
+ * Only wikis carrying any of these tags.
2154
2246
  */
2155
2247
  tag_ids?: number[] | null;
2156
2248
  /**
@@ -2163,30 +2255,54 @@ export interface PluginApiOperations {
2163
2255
  * live list, which is what every other view shows.
2164
2256
  */
2165
2257
  archived?: boolean | null;
2166
- /**
2167
- * Also send what each row's card shows of what is inside it, read for the
2168
- * whole page at once.
2169
- */
2170
- include_preview?: boolean;
2171
2258
  page?: number;
2172
2259
  page_size?: number;
2173
2260
  };
2174
- answer: PluginApiSchemas["GalleryListResponse"];
2261
+ answer: PluginApiSchemas["WikiListResponse"];
2175
2262
  };
2176
- create_gallery: {
2177
- body: PluginApiSchemas["GalleryCreate"];
2178
- answer: PluginApiSchemas["GalleryRead"];
2263
+ create_wiki: {
2264
+ body: PluginApiSchemas["WikiCreate"];
2265
+ answer: PluginApiSchemas["WikiRead"];
2179
2266
  };
2180
- list_wikis: {
2267
+ list_collection_files: {
2268
+ path: {
2269
+ collection_id: number;
2270
+ };
2181
2271
  query: {
2182
2272
  initiative_id?: number | null;
2273
+ search?: string | null;
2183
2274
  /**
2184
- * Full-text match over the wiki's name and description, through the same
2185
- * index the search page reads.
2275
+ * Filter by tag IDs
2186
2276
  */
2187
- search?: string | null;
2277
+ tag_ids?: number[] | null;
2188
2278
  /**
2189
- * Order by one of: name, initiative, updated_at. Omit for newest first.
2279
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
2280
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
2281
+ */
2282
+ property_filters?: string | null;
2283
+ /**
2284
+ * Filter to files with no tags
2285
+ */
2286
+ untagged?: boolean | null;
2287
+ /**
2288
+ * Only templates (true) or only files that are not templates (false).
2289
+ * Omit for both.
2290
+ */
2291
+ is_template?: boolean | null;
2292
+ /**
2293
+ * Filter by file type
2294
+ */
2295
+ file_type?: PluginApiSchemas["FileType"] | null;
2296
+ /**
2297
+ * Filter by kind of file
2298
+ */
2299
+ kind?: PluginApiSchemas["FileKind"] | null;
2300
+ page?: number;
2301
+ page_size?: number;
2302
+ /**
2303
+ * Order by one of: name, initiative, updated_at, created_at, added_at
2304
+ * (when each was added to the collection). Omit for added_at, newest
2305
+ * first.
2190
2306
  */
2191
2307
  sort_by?: string | null;
2192
2308
  /**
@@ -2194,7 +2310,45 @@ export interface PluginApiOperations {
2194
2310
  */
2195
2311
  sort_dir?: string | null;
2196
2312
  /**
2197
- * Only wikis carrying any of these tags.
2313
+ * true lists what has been archived instead of what is live. Omit for the
2314
+ * live list, which is what every other view shows.
2315
+ */
2316
+ archived?: boolean | null;
2317
+ /**
2318
+ * Start the list at this instant, measured by when each file was added to
2319
+ * the collection. Newest first it is a ceiling and the page walks back
2320
+ * from it; oldest first (sort_by=added_at, sort_dir=asc) a floor and the
2321
+ * page walks forward. This is how a timeline jumps to a month: pair it
2322
+ * with the matching end of the month's bucket.
2323
+ */
2324
+ until?: string | null;
2325
+ };
2326
+ answer: PluginApiSchemas["CollectionFileListResponse"];
2327
+ };
2328
+ add_collection_files: {
2329
+ path: {
2330
+ collection_id: number;
2331
+ };
2332
+ body: PluginApiSchemas["CollectionFiles"];
2333
+ answer: PluginApiSchemas["CollectionRead"];
2334
+ };
2335
+ remove_collection_files: {
2336
+ path: {
2337
+ collection_id: number;
2338
+ };
2339
+ query: {
2340
+ file_ids: number[];
2341
+ };
2342
+ answer: void;
2343
+ };
2344
+ get_collection_files_timeline: {
2345
+ path: {
2346
+ collection_id: number;
2347
+ };
2348
+ query: {
2349
+ search?: string | null;
2350
+ /**
2351
+ * Filter by tag IDs
2198
2352
  */
2199
2353
  tag_ids?: number[] | null;
2200
2354
  /**
@@ -2202,19 +2356,35 @@ export interface PluginApiOperations {
2202
2356
  * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
2203
2357
  */
2204
2358
  property_filters?: string | null;
2359
+ /**
2360
+ * Filter to files with no tags
2361
+ */
2362
+ untagged?: boolean | null;
2363
+ /**
2364
+ * Only templates (true) or only files that are not templates (false).
2365
+ * Omit for both.
2366
+ */
2367
+ is_template?: boolean | null;
2368
+ /**
2369
+ * Filter by file type
2370
+ */
2371
+ file_type?: PluginApiSchemas["FileType"] | null;
2372
+ /**
2373
+ * Filter by kind of file
2374
+ */
2375
+ kind?: PluginApiSchemas["FileKind"] | null;
2205
2376
  /**
2206
2377
  * true lists what has been archived instead of what is live. Omit for the
2207
2378
  * live list, which is what every other view shows.
2208
2379
  */
2209
2380
  archived?: boolean | null;
2210
- page?: number;
2211
- page_size?: number;
2381
+ /**
2382
+ * IANA zone the month boundaries are cut in, e.g. Pacific/Auckland.
2383
+ * Defaults to UTC.
2384
+ */
2385
+ tz?: string | null;
2212
2386
  };
2213
- answer: PluginApiSchemas["WikiListResponse"];
2214
- };
2215
- create_wiki: {
2216
- body: PluginApiSchemas["WikiCreate"];
2217
- answer: PluginApiSchemas["WikiRead"];
2387
+ answer: PluginApiSchemas["TimelineResponse"];
2218
2388
  };
2219
2389
  read_project: {
2220
2390
  path: {
@@ -2364,12 +2534,20 @@ export interface PluginApiOperations {
2364
2534
  body: PluginApiSchemas["ChecklistItemToggle"];
2365
2535
  answer: PluginApiSchemas["ChecklistItem"][];
2366
2536
  };
2537
+ promote_checklist_item: {
2538
+ path: {
2539
+ task_id: number;
2540
+ item_id: string;
2541
+ };
2542
+ answer: PluginApiSchemas["TaskRead"];
2543
+ };
2367
2544
  list_comments: {
2368
2545
  query: {
2369
2546
  limit?: number;
2370
2547
  cursor?: string | null;
2371
2548
  task_id?: number | null;
2372
2549
  wiki_page_id?: number | null;
2550
+ collection_id?: number | null;
2373
2551
  project_id?: number | null;
2374
2552
  file_id?: number | null;
2375
2553
  queue_id?: number | null;
@@ -2377,7 +2555,6 @@ export interface PluginApiOperations {
2377
2555
  calendar_id?: number | null;
2378
2556
  dashboard_id?: number | null;
2379
2557
  post_id?: number | null;
2380
- gallery_id?: number | null;
2381
2558
  wiki_id?: number | null;
2382
2559
  };
2383
2560
  answer: PluginApiSchemas["CommentListResponse"];
@@ -2420,6 +2597,17 @@ export interface PluginApiOperations {
2420
2597
  };
2421
2598
  answer: PluginApiSchemas["InitiativeRead"];
2422
2599
  };
2600
+ upload_file: {
2601
+ body: FormData;
2602
+ answer: PluginApiSchemas["FileRead"];
2603
+ };
2604
+ upload_file_version: {
2605
+ path: {
2606
+ file_id: number;
2607
+ };
2608
+ body: FormData;
2609
+ answer: PluginApiSchemas["FileVersionRead"];
2610
+ };
2423
2611
  read_file: {
2424
2612
  path: {
2425
2613
  file_id: number;
@@ -2448,6 +2636,58 @@ export interface PluginApiOperations {
2448
2636
  body: PluginApiSchemas["FileUpdate"];
2449
2637
  answer: PluginApiSchemas["FileRead"];
2450
2638
  };
2639
+ list_collection_shapes: {
2640
+ answer: PluginApiSchemas["CollectionShapeGroup"][];
2641
+ };
2642
+ list_collections: {
2643
+ query: {
2644
+ initiative_id: number;
2645
+ /**
2646
+ * true lists what has been archived instead of what is live. Omit for the
2647
+ * live list, which is what every other view shows.
2648
+ */
2649
+ archived?: boolean | null;
2650
+ };
2651
+ answer: PluginApiSchemas["CollectionListResponse"];
2652
+ };
2653
+ create_collection: {
2654
+ body: PluginApiSchemas["CollectionCreate"];
2655
+ answer: PluginApiSchemas["CollectionRead"];
2656
+ };
2657
+ read_collection: {
2658
+ path: {
2659
+ collection_id: number;
2660
+ };
2661
+ answer: PluginApiSchemas["CollectionRead"];
2662
+ };
2663
+ delete_collection: {
2664
+ path: {
2665
+ collection_id: number;
2666
+ };
2667
+ answer: void;
2668
+ };
2669
+ update_collection: {
2670
+ path: {
2671
+ collection_id: number;
2672
+ };
2673
+ body: PluginApiSchemas["CollectionUpdate"];
2674
+ answer: PluginApiSchemas["CollectionRead"];
2675
+ };
2676
+ get_collection_file_metadata: {
2677
+ path: {
2678
+ collection_id: number;
2679
+ file_id: number;
2680
+ };
2681
+ answer: PluginApiSchemas["PropertySummary"][];
2682
+ };
2683
+ set_collection_file_metadata: {
2684
+ path: {
2685
+ collection_id: number;
2686
+ file_id: number;
2687
+ };
2688
+ body: PluginApiSchemas["PropertyValuesSetRequest"];
2689
+ answer: PluginApiSchemas["PropertySummary"][];
2690
+ };
2451
2691
  read_queue: {
2452
2692
  path: {
2453
2693
  queue_id: number;
@@ -2691,118 +2931,6 @@ export interface PluginApiOperations {
2691
2931
  body: PluginApiSchemas["PostPinUpdate"];
2692
2932
  answer: PluginApiSchemas["PostRead"];
2693
2933
  };
2694
- read_gallery: {
2695
- path: {
2696
- gallery_id: number;
2697
- };
2698
- query: {
2699
- /**
2700
- * Also return the resource if it is in the trash. For reading a resource
2701
- * back after a deleted event — the row still exists until retention
2702
- * purges it, and access is checked exactly as for a live one.
2703
- */
2704
- include_deleted?: boolean;
2705
- };
2706
- answer: PluginApiSchemas["GalleryRead"];
2707
- };
2708
- update_gallery: {
2709
- path: {
2710
- gallery_id: number;
2711
- };
2712
- body: PluginApiSchemas["GalleryUpdate"];
2713
- answer: PluginApiSchemas["GalleryRead"];
2714
- };
2715
- list_gallery_images: {
2716
- path: {
2717
- gallery_id: number;
2718
- };
2719
- query: {
2720
- /**
2721
- * Only pictures carrying ANY of these tags.
2722
- */
2723
- tag_ids?: number[] | null;
2724
- /**
2725
- * Match on title, caption or filename.
2726
- */
2727
- search?: string | null;
2728
- /**
2729
- * Read the gallery in the order it was filled rather than newest first.
2730
- */
2731
- oldest_first?: boolean;
2732
- /**
2733
- * Start the list at this instant, inclusive, measured by upload time —
2734
- * which is what the list is ordered by. This is how a timeline jumps to a
2735
- * month without paging through everything since. It follows the list's
2736
- * own direction: newest first it is a ceiling and the page walks back
2737
- * from it, oldest first a floor and the page walks forward, so pair it
2738
- * with the matching end of the timeline bucket.
2739
- */
2740
- until?: string | null;
2741
- page?: number;
2742
- page_size?: number;
2743
- };
2744
- answer: PluginApiSchemas["GalleryImageListResponse"];
2745
- };
2746
- upload_gallery_image: {
2747
- path: {
2748
- gallery_id: number;
2749
- };
2750
- body: FormData;
2751
- answer: PluginApiSchemas["GalleryImageRead"];
2752
- };
2753
- get_gallery_image_timeline: {
2754
- path: {
2755
- gallery_id: number;
2756
- };
2757
- query: {
2758
- tag_ids?: number[] | null;
2759
- search?: string | null;
2760
- /**
2761
- * IANA zone the month boundaries are cut in, e.g. Pacific/Auckland.
2762
- * Defaults to UTC.
2763
- */
2764
- tz?: string | null;
2765
- };
2766
- answer: PluginApiSchemas["TimelineResponse"];
2767
- };
2768
- read_gallery_image: {
2769
- path: {
2770
- gallery_id: number;
2771
- image_id: number;
2772
- };
2773
- answer: PluginApiSchemas["GalleryImageRead"];
2774
- };
2775
- update_gallery_image: {
2776
- path: {
2777
- gallery_id: number;
2778
- image_id: number;
2779
- };
2780
- body: PluginApiSchemas["GalleryImageUpdate"];
2781
- answer: PluginApiSchemas["GalleryImageRead"];
2782
- };
2783
- list_gallery_image_versions: {
2784
- path: {
2785
- gallery_id: number;
2786
- image_id: number;
2787
- };
2788
- answer: PluginApiSchemas["GalleryImageVersionRead"][];
2789
- };
2790
- upload_gallery_image_version: {
2791
- path: {
2792
- gallery_id: number;
2793
- image_id: number;
2794
- };
2795
- body: FormData;
2796
- answer: PluginApiSchemas["GalleryImageVersionRead"];
2797
- };
2798
- delete_gallery_image_version: {
2799
- path: {
2800
- gallery_id: number;
2801
- image_id: number;
2802
- version_id: number;
2803
- };
2804
- answer: void;
2805
- };
2806
2934
  read_wiki: {
2807
2935
  path: {
2808
2936
  wiki_id: number;
@@ -2984,13 +3112,6 @@ export interface PluginApiOperations {
2984
3112
  body: PluginApiSchemas["ResourceGrantSchema"][];
2985
3113
  answer: PluginApiSchemas["PostRead"];
2986
3114
  };
2987
- set_gallery_grants: {
2988
- path: {
2989
- gallery_id: number;
2990
- };
2991
- body: PluginApiSchemas["ResourceGrantSchema"][];
2992
- answer: PluginApiSchemas["GalleryRead"];
2993
- };
2994
3115
  set_wiki_grants: {
2995
3116
  path: {
2996
3117
  wiki_id: number;
@@ -3040,13 +3161,6 @@ export interface PluginApiOperations {
3040
3161
  body: PluginApiSchemas["ToolDuplicateRequest"] | null;
3041
3162
  answer: PluginApiSchemas["PostRead"];
3042
3163
  };
3043
- duplicate_gallery: {
3044
- path: {
3045
- gallery_id: number;
3046
- };
3047
- body: PluginApiSchemas["ToolDuplicateRequest"] | null;
3048
- answer: PluginApiSchemas["GalleryRead"];
3049
- };
3050
3164
  duplicate_wiki: {
3051
3165
  path: {
3052
3166
  wiki_id: number;
@@ -3062,9 +3176,9 @@ export interface PluginApiOperations {
3062
3176
  search: string;
3063
3177
  /**
3064
3178
  * Restrict to these entity types. Omit for the default scope (calendar,
3065
- * calendar_event, counter, counter_group, dashboard, file, gallery,
3066
- * gallery_image, post, project, queue, queue_item, tag, task, wiki,
3067
- * wiki_page); naming a type reaches it explicitly.
3179
+ * calendar_event, collection, counter, counter_group, dashboard, file,
3180
+ * post, project, queue, queue_item, tag, task, wiki, wiki_page); naming a
3181
+ * type reaches it explicitly.
3068
3182
  */
3069
3183
  types?: PluginApiSchemas["SearchEntityType"][] | null;
3070
3184
  /**
@@ -3089,6 +3203,14 @@ export interface PluginApiOperations {
3089
3203
  list_property_definitions: {
3090
3204
  query: {
3091
3205
  initiative_id?: number | null;
3206
+ /**
3207
+ * List this project's metadata instead of properties.
3208
+ */
3209
+ project_id?: number | null;
3210
+ /**
3211
+ * List this collection's metadata instead of properties.
3212
+ */
3213
+ collection_id?: number | null;
3092
3214
  };
3093
3215
  answer: PluginApiSchemas["PropertyDefinitionRead"][];
3094
3216
  };
@@ -3175,7 +3297,7 @@ export declare const pluginApiOperations: {
3175
3297
  readonly path: "/webhooks/subscriptions";
3176
3298
  readonly scope: {
3177
3299
  readonly per: "event_type";
3178
- readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "files:read", "galleries:read", "initiatives:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
3300
+ readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "files:read", "initiatives:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
3179
3301
  };
3180
3302
  };
3181
3303
  readonly delete_subscription: {
@@ -3183,7 +3305,7 @@ export declare const pluginApiOperations: {
3183
3305
  readonly path: "/webhooks/subscriptions/{subscription_id}";
3184
3306
  readonly scope: {
3185
3307
  readonly per: "event_type";
3186
- readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "files:read", "galleries:read", "initiatives:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
3308
+ readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "files:read", "initiatives:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
3187
3309
  };
3188
3310
  };
3189
3311
  readonly list_projects: {
@@ -3246,16 +3368,6 @@ export declare const pluginApiOperations: {
3246
3368
  readonly path: "/posts/";
3247
3369
  readonly scope: "posts:write";
3248
3370
  };
3249
- readonly list_galleries: {
3250
- readonly method: "GET";
3251
- readonly path: "/galleries/";
3252
- readonly scope: "galleries:read";
3253
- };
3254
- readonly create_gallery: {
3255
- readonly method: "POST";
3256
- readonly path: "/galleries/";
3257
- readonly scope: "galleries:write";
3258
- };
3259
3371
  readonly list_wikis: {
3260
3372
  readonly method: "GET";
3261
3373
  readonly path: "/wikis/";
@@ -3266,6 +3378,26 @@ export declare const pluginApiOperations: {
3266
3378
  readonly path: "/wikis/";
3267
3379
  readonly scope: "wikis:write";
3268
3380
  };
3381
+ readonly list_collection_files: {
3382
+ readonly method: "GET";
3383
+ readonly path: "/collections/{collection_id}/files";
3384
+ readonly scope: "files:read";
3385
+ };
3386
+ readonly add_collection_files: {
3387
+ readonly method: "POST";
3388
+ readonly path: "/collections/{collection_id}/files";
3389
+ readonly scope: "files:write";
3390
+ };
3391
+ readonly remove_collection_files: {
3392
+ readonly method: "DELETE";
3393
+ readonly path: "/collections/{collection_id}/files";
3394
+ readonly scope: "files:write";
3395
+ };
3396
+ readonly get_collection_files_timeline: {
3397
+ readonly method: "GET";
3398
+ readonly path: "/collections/{collection_id}/files/timeline";
3399
+ readonly scope: "files:read";
3400
+ };
3269
3401
  readonly read_project: {
3270
3402
  readonly method: "GET";
3271
3403
  readonly path: "/projects/{project_id}";
@@ -3348,6 +3480,11 @@ export declare const pluginApiOperations: {
3348
3480
  readonly path: "/tasks/{task_id}/checklist/{item_id}";
3349
3481
  readonly scope: "projects:write";
3350
3482
  };
3483
+ readonly promote_checklist_item: {
3484
+ readonly method: "POST";
3485
+ readonly path: "/tasks/{task_id}/checklist/{item_id}/promote";
3486
+ readonly scope: "projects:write";
3487
+ };
3351
3488
  readonly list_comments: {
3352
3489
  readonly method: "GET";
3353
3490
  readonly path: "/comments/";
@@ -3373,6 +3510,16 @@ export declare const pluginApiOperations: {
3373
3510
  readonly path: "/initiatives/{initiative_id}";
3374
3511
  readonly scope: "initiatives:read";
3375
3512
  };
3513
+ readonly upload_file: {
3514
+ readonly method: "POST";
3515
+ readonly path: "/files/upload";
3516
+ readonly scope: "files:write";
3517
+ };
3518
+ readonly upload_file_version: {
3519
+ readonly method: "POST";
3520
+ readonly path: "/files/{file_id}/versions";
3521
+ readonly scope: "files:write";
3522
+ };
3376
3523
  readonly read_file: {
3377
3524
  readonly method: "GET";
3378
3525
  readonly path: "/files/{file_id}";
@@ -3383,6 +3530,46 @@ export declare const pluginApiOperations: {
3383
3530
  readonly path: "/files/{file_id}";
3384
3531
  readonly scope: "files:write";
3385
3532
  };
3533
+ readonly list_collection_shapes: {
3534
+ readonly method: "GET";
3535
+ readonly path: "/collections/shapes";
3536
+ readonly scope: "files:read";
3537
+ };
3538
+ readonly list_collections: {
3539
+ readonly method: "GET";
3540
+ readonly path: "/collections/";
3541
+ readonly scope: "files:read";
3542
+ };
3543
+ readonly create_collection: {
3544
+ readonly method: "POST";
3545
+ readonly path: "/collections/";
3546
+ readonly scope: "files:write";
3547
+ };
3548
+ readonly read_collection: {
3549
+ readonly method: "GET";
3550
+ readonly path: "/collections/{collection_id}";
3551
+ readonly scope: "files:read";
3552
+ };
3553
+ readonly delete_collection: {
3554
+ readonly method: "DELETE";
3555
+ readonly path: "/collections/{collection_id}";
3556
+ readonly scope: "files:write";
3557
+ };
3558
+ readonly update_collection: {
3559
+ readonly method: "PATCH";
3560
+ readonly path: "/collections/{collection_id}";
3561
+ readonly scope: "files:write";
3562
+ };
3563
+ readonly get_collection_file_metadata: {
3564
+ readonly method: "GET";
3565
+ readonly path: "/collections/{collection_id}/files/{file_id}/metadata";
3566
+ readonly scope: "files:read";
3567
+ };
3568
+ readonly set_collection_file_metadata: {
3569
+ readonly method: "PUT";
3570
+ readonly path: "/collections/{collection_id}/files/{file_id}/metadata";
3571
+ readonly scope: "files:write";
3572
+ };
3386
3573
  readonly read_queue: {
3387
3574
  readonly method: "GET";
3388
3575
  readonly path: "/queues/{queue_id}";
@@ -3533,56 +3720,6 @@ export declare const pluginApiOperations: {
3533
3720
  readonly path: "/posts/{post_id}/pin";
3534
3721
  readonly scope: "posts:write";
3535
3722
  };
3536
- readonly read_gallery: {
3537
- readonly method: "GET";
3538
- readonly path: "/galleries/{gallery_id}";
3539
- readonly scope: "galleries:read";
3540
- };
3541
- readonly update_gallery: {
3542
- readonly method: "PATCH";
3543
- readonly path: "/galleries/{gallery_id}";
3544
- readonly scope: "galleries:write";
3545
- };
3546
- readonly list_gallery_images: {
3547
- readonly method: "GET";
3548
- readonly path: "/galleries/{gallery_id}/images";
3549
- readonly scope: "galleries:read";
3550
- };
3551
- readonly upload_gallery_image: {
3552
- readonly method: "POST";
3553
- readonly path: "/galleries/{gallery_id}/images";
3554
- readonly scope: "galleries:write";
3555
- };
3556
- readonly get_gallery_image_timeline: {
3557
- readonly method: "GET";
3558
- readonly path: "/galleries/{gallery_id}/images/timeline";
3559
- readonly scope: "galleries:read";
3560
- };
3561
- readonly read_gallery_image: {
3562
- readonly method: "GET";
3563
- readonly path: "/galleries/{gallery_id}/images/{image_id}";
3564
- readonly scope: "galleries:read";
3565
- };
3566
- readonly update_gallery_image: {
3567
- readonly method: "PATCH";
3568
- readonly path: "/galleries/{gallery_id}/images/{image_id}";
3569
- readonly scope: "galleries:write";
3570
- };
3571
- readonly list_gallery_image_versions: {
3572
- readonly method: "GET";
3573
- readonly path: "/galleries/{gallery_id}/images/{image_id}/versions";
3574
- readonly scope: "galleries:read";
3575
- };
3576
- readonly upload_gallery_image_version: {
3577
- readonly method: "POST";
3578
- readonly path: "/galleries/{gallery_id}/images/{image_id}/versions";
3579
- readonly scope: "galleries:write";
3580
- };
3581
- readonly delete_gallery_image_version: {
3582
- readonly method: "DELETE";
3583
- readonly path: "/galleries/{gallery_id}/images/{image_id}/versions/{version_id}";
3584
- readonly scope: "galleries:write";
3585
- };
3586
3723
  readonly read_wiki: {
3587
3724
  readonly method: "GET";
3588
3725
  readonly path: "/wikis/{wiki_id}";
@@ -3708,11 +3845,6 @@ export declare const pluginApiOperations: {
3708
3845
  readonly path: "/posts/{post_id}/grants";
3709
3846
  readonly scope: "sharing:write";
3710
3847
  };
3711
- readonly set_gallery_grants: {
3712
- readonly method: "PUT";
3713
- readonly path: "/galleries/{gallery_id}/grants";
3714
- readonly scope: "sharing:write";
3715
- };
3716
3848
  readonly set_wiki_grants: {
3717
3849
  readonly method: "PUT";
3718
3850
  readonly path: "/wikis/{wiki_id}/grants";
@@ -3748,11 +3880,6 @@ export declare const pluginApiOperations: {
3748
3880
  readonly path: "/posts/{post_id}/duplicate";
3749
3881
  readonly scope: "posts:write";
3750
3882
  };
3751
- readonly duplicate_gallery: {
3752
- readonly method: "POST";
3753
- readonly path: "/galleries/{gallery_id}/duplicate";
3754
- readonly scope: "galleries:write";
3755
- };
3756
3883
  readonly duplicate_wiki: {
3757
3884
  readonly method: "POST";
3758
3885
  readonly path: "/wikis/{wiki_id}/duplicate";
@@ -3763,7 +3890,7 @@ export declare const pluginApiOperations: {
3763
3890
  readonly path: "/search/suggest";
3764
3891
  readonly scope: {
3765
3892
  readonly per: "entity_type";
3766
- readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "files:read", "galleries:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
3893
+ readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "files:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
3767
3894
  };
3768
3895
  };
3769
3896
  readonly list_property_definitions: {
@@ -3771,23 +3898,32 @@ export declare const pluginApiOperations: {
3771
3898
  readonly path: "/property-definitions/";
3772
3899
  readonly scope: {
3773
3900
  readonly per: "tool";
3774
- readonly any_of: readonly ["calendars:read", "counter_groups:read", "dashboards:read", "files:read", "galleries:read", "posts:read", "projects:read", "properties:read", "queues:read", "wikis:read"];
3901
+ readonly any_of: readonly ["calendars:read", "counter_groups:read", "dashboards:read", "files:read", "posts:read", "projects:read", "properties:read", "queues:read", "wikis:read"];
3775
3902
  };
3776
3903
  };
3777
3904
  readonly create_property_definition: {
3778
3905
  readonly method: "POST";
3779
3906
  readonly path: "/property-definitions/";
3780
- readonly scope: "properties:write";
3907
+ readonly scope: {
3908
+ readonly per: "owner's_scope";
3909
+ readonly any_of: readonly ["files:write", "projects:write", "properties:write"];
3910
+ };
3781
3911
  };
3782
3912
  readonly delete_property_definition: {
3783
3913
  readonly method: "DELETE";
3784
3914
  readonly path: "/property-definitions/{definition_id}";
3785
- readonly scope: "properties:write";
3915
+ readonly scope: {
3916
+ readonly per: "owner's_scope";
3917
+ readonly any_of: readonly ["files:write", "projects:write", "properties:write"];
3918
+ };
3786
3919
  };
3787
3920
  readonly update_property_definition: {
3788
3921
  readonly method: "PATCH";
3789
3922
  readonly path: "/property-definitions/{definition_id}";
3790
- readonly scope: "properties:write";
3923
+ readonly scope: {
3924
+ readonly per: "owner's_scope";
3925
+ readonly any_of: readonly ["files:write", "projects:write", "properties:write"];
3926
+ };
3791
3927
  };
3792
3928
  readonly set_properties: {
3793
3929
  readonly method: "PUT";
@@ -3797,12 +3933,11 @@ export declare const pluginApiOperations: {
3797
3933
  readonly scopes: {
3798
3934
  readonly calendar: "calendars:write";
3799
3935
  readonly calendar_event: "calendars:write";
3936
+ readonly collection: "files:write";
3800
3937
  readonly counter: "counter_groups:write";
3801
3938
  readonly counter_group: "counter_groups:write";
3802
3939
  readonly dashboard: "dashboards:write";
3803
3940
  readonly file: "files:write";
3804
- readonly gallery: "galleries:write";
3805
- readonly gallery_image: "galleries:write";
3806
3941
  readonly post: "posts:write";
3807
3942
  readonly project: "projects:write";
3808
3943
  readonly queue: "queues:write";
@@ -3820,10 +3955,10 @@ export declare const pluginApiOperations: {
3820
3955
  readonly by: "entity_type";
3821
3956
  readonly scopes: {
3822
3957
  readonly calendar: "calendars:write";
3958
+ readonly collection: "files:write";
3823
3959
  readonly counter_group: "counter_groups:write";
3824
3960
  readonly dashboard: "dashboards:write";
3825
3961
  readonly file: "files:write";
3826
- readonly gallery: "galleries:write";
3827
3962
  readonly post: "posts:write";
3828
3963
  readonly project: "projects:write";
3829
3964
  readonly queue: "queues:write";
@@ -3851,7 +3986,7 @@ export declare class PluginApi {
3851
3986
  /**
3852
3987
  * Register a new webhook subscription.
3853
3988
  *
3854
- * `POST /webhooks/subscriptions`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `galleries:read`, `initiatives:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
3989
+ * `POST /webhooks/subscriptions`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `initiatives:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
3855
3990
  */
3856
3991
  createSubscription(args: {
3857
3992
  body: PluginApiOperations["create_subscription"]["body"];
@@ -3862,7 +3997,7 @@ export declare class PluginApi {
3862
3997
  * installed plug-in reaches only the subscriptions it registered, and any
3863
3998
  * other is a 404.
3864
3999
  *
3865
- * `DELETE /webhooks/subscriptions/{subscription_id}`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `galleries:read`, `initiatives:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
4000
+ * `DELETE /webhooks/subscriptions/{subscription_id}`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `initiatives:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
3866
4001
  */
3867
4002
  deleteSubscription(args: {
3868
4003
  path: PluginApiOperations["delete_subscription"]["path"];
@@ -3964,23 +4099,6 @@ export declare class PluginApi {
3964
4099
  createPost(args: {
3965
4100
  body: PluginApiOperations["create_post"]["body"];
3966
4101
  }): Promise<PluginApiOperations["create_post"]["answer"]>;
3967
- /**
3968
- * List galleries visible to the current user (guild admins see all).
3969
- *
3970
- * `GET /galleries/`, needs `galleries:read`.
3971
- */
3972
- listGalleries(args?: {
3973
- query?: PluginApiOperations["list_galleries"]["query"];
3974
- }): Promise<PluginApiOperations["list_galleries"]["answer"]>;
3975
- /**
3976
- * Create a gallery. Requires create_galleries permission on the initiative
3977
- * (or guild admin); the creator gets the owner grant.
3978
- *
3979
- * `POST /galleries/`, needs `galleries:write`.
3980
- */
3981
- createGallery(args: {
3982
- body: PluginApiOperations["create_gallery"]["body"];
3983
- }): Promise<PluginApiOperations["create_gallery"]["answer"]>;
3984
4102
  /**
3985
4103
  * List wikis visible to the current user (guild admins see all).
3986
4104
  *
@@ -3998,6 +4116,49 @@ export declare class PluginApi {
3998
4116
  createWiki(args: {
3999
4117
  body: PluginApiOperations["create_wiki"]["body"];
4000
4118
  }): Promise<PluginApiOperations["create_wiki"]["answer"]>;
4119
+ /**
4120
+ * The files in one collection the reader can open: the Files list, with its
4121
+ * parameters, narrowed to the collection, each with when it was added to it.
4122
+ * A collection out of reach is a 404.
4123
+ *
4124
+ * `GET /collections/{collection_id}/files`, needs `files:read`.
4125
+ */
4126
+ listCollectionFiles(args: {
4127
+ path: PluginApiOperations["list_collection_files"]["path"];
4128
+ query?: PluginApiOperations["list_collection_files"]["query"];
4129
+ }): Promise<PluginApiOperations["list_collection_files"]["answer"]>;
4130
+ /**
4131
+ * Put files in a collection: each a file of its initiative the reader can
4132
+ * open. One already in it stays as it is.
4133
+ *
4134
+ * `POST /collections/{collection_id}/files`, needs `files:write`.
4135
+ */
4136
+ addCollectionFiles(args: {
4137
+ path: PluginApiOperations["add_collection_files"]["path"];
4138
+ body: PluginApiOperations["add_collection_files"]["body"];
4139
+ }): Promise<PluginApiOperations["add_collection_files"]["answer"]>;
4140
+ /**
4141
+ * Take files out of a collection. The files stay where they are. A collection
4142
+ * left with no file goes to the trash.
4143
+ *
4144
+ * `DELETE /collections/{collection_id}/files`, needs `files:write`.
4145
+ */
4146
+ removeCollectionFiles(args: {
4147
+ path: PluginApiOperations["remove_collection_files"]["path"];
4148
+ query: PluginApiOperations["remove_collection_files"]["query"];
4149
+ }): Promise<PluginApiOperations["remove_collection_files"]["answer"]>;
4150
+ /**
4151
+ * The months files were added to this collection in, newest first, each with
4152
+ * how many of them the reader can open and the instants to jump to: what the
4153
+ * timeline rail is drawn from. Takes the same filters the list does, so the
4154
+ * rail is a picture of the list as it stands.
4155
+ *
4156
+ * `GET /collections/{collection_id}/files/timeline`, needs `files:read`.
4157
+ */
4158
+ getCollectionFilesTimeline(args: {
4159
+ path: PluginApiOperations["get_collection_files_timeline"]["path"];
4160
+ query?: PluginApiOperations["get_collection_files_timeline"]["query"];
4161
+ }): Promise<PluginApiOperations["get_collection_files_timeline"]["answer"]>;
4001
4162
  /**
4002
4163
  * Read Project
4003
4164
  *
@@ -4138,6 +4299,14 @@ export declare class PluginApi {
4138
4299
  path: PluginApiOperations["toggle_checklist_item"]["path"];
4139
4300
  body: PluginApiOperations["toggle_checklist_item"]["body"];
4140
4301
  }): Promise<PluginApiOperations["toggle_checklist_item"]["answer"]>;
4302
+ /**
4303
+ * Make one checklist item a task of its own, part of this one.
4304
+ *
4305
+ * `POST /tasks/{task_id}/checklist/{item_id}/promote`, needs `projects:write`.
4306
+ */
4307
+ promoteChecklistItem(args: {
4308
+ path: PluginApiOperations["promote_checklist_item"]["path"];
4309
+ }): Promise<PluginApiOperations["promote_checklist_item"]["answer"]>;
4141
4310
  /**
4142
4311
  * One page of a thread: `limit` conversations, newest first, each with every
4143
4312
  * reply under it. Follow `next_cursor` for older conversations.
@@ -4182,6 +4351,25 @@ export declare class PluginApi {
4182
4351
  path: PluginApiOperations["get_initiative"]["path"];
4183
4352
  query?: PluginApiOperations["get_initiative"]["query"];
4184
4353
  }): Promise<PluginApiOperations["get_initiative"]["answer"]>;
4354
+ /**
4355
+ * Upload a file: sent with the request as `file`, or sent in pieces before it
4356
+ * as a resumable upload, named by `upload_id`.
4357
+ *
4358
+ * `POST /files/upload`, needs `files:write`.
4359
+ */
4360
+ uploadFile(args: {
4361
+ body: PluginApiOperations["upload_file"]["body"];
4362
+ }): Promise<PluginApiOperations["upload_file"]["answer"]>;
4363
+ /**
4364
+ * Upload a new version of an uploaded file, sent as `file` or as a resumable
4365
+ * upload named by `upload_id`. Requires write access.
4366
+ *
4367
+ * `POST /files/{file_id}/versions`, needs `files:write`.
4368
+ */
4369
+ uploadFileVersion(args: {
4370
+ path: PluginApiOperations["upload_file_version"]["path"];
4371
+ body?: PluginApiOperations["upload_file_version"]["body"];
4372
+ }): Promise<PluginApiOperations["upload_file_version"]["answer"]>;
4185
4373
  /**
4186
4374
  * Read File
4187
4375
  *
@@ -4200,6 +4388,83 @@ export declare class PluginApi {
4200
4388
  path: PluginApiOperations["update_file"]["path"];
4201
4389
  body: PluginApiOperations["update_file"]["body"];
4202
4390
  }): Promise<PluginApiOperations["update_file"]["answer"]>;
4391
+ /**
4392
+ * The ready-made shapes a new collection can start as, grouped, in the
4393
+ * reader's language: the lists each shows and opens on, and its metadata.
4394
+ *
4395
+ * `GET /collections/shapes`, needs `files:read`.
4396
+ */
4397
+ listCollectionShapes(): Promise<PluginApiOperations["list_collection_shapes"]["answer"]>;
4398
+ /**
4399
+ * The initiative's collections the reader can see — those holding a file they
4400
+ * can open — most recently changed first, each with how many of its files
4401
+ * they can see and a cover they can open.
4402
+ *
4403
+ * `GET /collections/`, needs `files:read`.
4404
+ */
4405
+ listCollections(args: {
4406
+ query: PluginApiOperations["list_collections"]["query"];
4407
+ }): Promise<PluginApiOperations["list_collections"]["answer"]>;
4408
+ /**
4409
+ * Make a collection of files. It starts with the files named, each one a file
4410
+ * of the initiative the reader can open. Takes the initiative role's right to
4411
+ * create files. It starts blank, as a ready-made `shape` with its words in
4412
+ * the maker's language, or with the metadata and lists of `shape_from`, a
4413
+ * collection of the same initiative the maker sees.
4414
+ *
4415
+ * `POST /collections/`, needs `files:write`.
4416
+ */
4417
+ createCollection(args: {
4418
+ body: PluginApiOperations["create_collection"]["body"];
4419
+ }): Promise<PluginApiOperations["create_collection"]["answer"]>;
4420
+ /**
4421
+ * Read Collection
4422
+ *
4423
+ * `GET /collections/{collection_id}`, needs `files:read`.
4424
+ */
4425
+ readCollection(args: {
4426
+ path: PluginApiOperations["read_collection"]["path"];
4427
+ }): Promise<PluginApiOperations["read_collection"]["answer"]>;
4428
+ /**
4429
+ * Send a collection to the trash. Its files stay where they are.
4430
+ *
4431
+ * `DELETE /collections/{collection_id}`, needs `files:write`.
4432
+ */
4433
+ deleteCollection(args: {
4434
+ path: PluginApiOperations["delete_collection"]["path"];
4435
+ }): Promise<PluginApiOperations["delete_collection"]["answer"]>;
4436
+ /**
4437
+ * Rename, describe, tag, set the cover of, or switch the comments of a
4438
+ * collection.
4439
+ *
4440
+ * `PATCH /collections/{collection_id}`, needs `files:write`.
4441
+ */
4442
+ updateCollection(args: {
4443
+ path: PluginApiOperations["update_collection"]["path"];
4444
+ body: PluginApiOperations["update_collection"]["body"];
4445
+ }): Promise<PluginApiOperations["update_collection"]["answer"]>;
4446
+ /**
4447
+ * One file's values of the collection's metadata, for a file in the
4448
+ * collection the reader can open.
4449
+ *
4450
+ * `GET /collections/{collection_id}/files/{file_id}/metadata`, needs `files:read`.
4451
+ */
4452
+ getCollectionFileMetadata(args: {
4453
+ path: PluginApiOperations["get_collection_file_metadata"]["path"];
4454
+ }): Promise<PluginApiOperations["get_collection_file_metadata"]["answer"]>;
4455
+ /**
4456
+ * Replace one file's values of the collection's metadata, or with `merge`
4457
+ * write only the ones named, as `PUT /properties` does for a property. The
4458
+ * file is one in the collection the reader can open, and the values are the
4459
+ * collection's: they take the right to change the collection, not to edit the
4460
+ * file. An empty list clears them all.
4461
+ *
4462
+ * `PUT /collections/{collection_id}/files/{file_id}/metadata`, needs `files:write`.
4463
+ */
4464
+ setCollectionFileMetadata(args: {
4465
+ path: PluginApiOperations["set_collection_file_metadata"]["path"];
4466
+ body: PluginApiOperations["set_collection_file_metadata"]["body"];
4467
+ }): Promise<PluginApiOperations["set_collection_file_metadata"]["answer"]>;
4203
4468
  /**
4204
4469
  * Read Queue
4205
4470
  *
@@ -4465,99 +4730,6 @@ export declare class PluginApi {
4465
4730
  path: PluginApiOperations["set_post_pin"]["path"];
4466
4731
  body: PluginApiOperations["set_post_pin"]["body"];
4467
4732
  }): Promise<PluginApiOperations["set_post_pin"]["answer"]>;
4468
- /**
4469
- * Read Gallery
4470
- *
4471
- * `GET /galleries/{gallery_id}`, needs `galleries:read`.
4472
- */
4473
- readGallery(args: {
4474
- path: PluginApiOperations["read_gallery"]["path"];
4475
- query?: PluginApiOperations["read_gallery"]["query"];
4476
- }): Promise<PluginApiOperations["read_gallery"]["answer"]>;
4477
- /**
4478
- * Rename, describe, or choose the cover. Requires write access.
4479
- *
4480
- * `PATCH /galleries/{gallery_id}`, needs `galleries:write`.
4481
- */
4482
- updateGallery(args: {
4483
- path: PluginApiOperations["update_gallery"]["path"];
4484
- body: PluginApiOperations["update_gallery"]["body"];
4485
- }): Promise<PluginApiOperations["update_gallery"]["answer"]>;
4486
- /**
4487
- * One page of a gallery's pictures, newest first.
4488
- *
4489
- * `GET /galleries/{gallery_id}/images`, needs `galleries:read`.
4490
- */
4491
- listGalleryImages(args: {
4492
- path: PluginApiOperations["list_gallery_images"]["path"];
4493
- query?: PluginApiOperations["list_gallery_images"]["query"];
4494
- }): Promise<PluginApiOperations["list_gallery_images"]["answer"]>;
4495
- /**
4496
- * Add one picture to a gallery. Requires write access.
4497
- *
4498
- * `POST /galleries/{gallery_id}/images`, needs `galleries:write`.
4499
- */
4500
- uploadGalleryImage(args: {
4501
- path: PluginApiOperations["upload_gallery_image"]["path"];
4502
- body: PluginApiOperations["upload_gallery_image"]["body"];
4503
- }): Promise<PluginApiOperations["upload_gallery_image"]["answer"]>;
4504
- /**
4505
- * The months this gallery has pictures in, newest first — what the timeline
4506
- * rail is drawn from. Takes the same filters the list does, so the rail is a
4507
- * picture of the list as it currently stands.
4508
- *
4509
- * `GET /galleries/{gallery_id}/images/timeline`, needs `galleries:read`.
4510
- */
4511
- getGalleryImageTimeline(args: {
4512
- path: PluginApiOperations["get_gallery_image_timeline"]["path"];
4513
- query?: PluginApiOperations["get_gallery_image_timeline"]["query"];
4514
- }): Promise<PluginApiOperations["get_gallery_image_timeline"]["answer"]>;
4515
- /**
4516
- * Read Gallery Image
4517
- *
4518
- * `GET /galleries/{gallery_id}/images/{image_id}`, needs `galleries:read`.
4519
- */
4520
- readGalleryImage(args: {
4521
- path: PluginApiOperations["read_gallery_image"]["path"];
4522
- }): Promise<PluginApiOperations["read_gallery_image"]["answer"]>;
4523
- /**
4524
- * Retitle, caption, retag or set the properties of a picture. Requires write
4525
- * access on the gallery.
4526
- *
4527
- * `PATCH /galleries/{gallery_id}/images/{image_id}`, needs `galleries:write`.
4528
- */
4529
- updateGalleryImage(args: {
4530
- path: PluginApiOperations["update_gallery_image"]["path"];
4531
- body: PluginApiOperations["update_gallery_image"]["body"];
4532
- }): Promise<PluginApiOperations["update_gallery_image"]["answer"]>;
4533
- /**
4534
- * Every stored rendition of a picture, newest first.
4535
- *
4536
- * `GET /galleries/{gallery_id}/images/{image_id}/versions`, needs `galleries:read`.
4537
- */
4538
- listGalleryImageVersions(args: {
4539
- path: PluginApiOperations["list_gallery_image_versions"]["path"];
4540
- }): Promise<PluginApiOperations["list_gallery_image_versions"]["answer"]>;
4541
- /**
4542
- * Replace a picture with a new rendition, keeping the old one as history.
4543
- * Requires write access on the gallery.
4544
- *
4545
- * `POST /galleries/{gallery_id}/images/{image_id}/versions`, needs `galleries:write`.
4546
- */
4547
- uploadGalleryImageVersion(args: {
4548
- path: PluginApiOperations["upload_gallery_image_version"]["path"];
4549
- body: PluginApiOperations["upload_gallery_image_version"]["body"];
4550
- }): Promise<PluginApiOperations["upload_gallery_image_version"]["answer"]>;
4551
- /**
4552
- * Delete one rendition of a picture. Owner only. Deleting the current one
4553
- * promotes the previous; deleting the last is refused — remove the picture
4554
- * instead.
4555
- *
4556
- * `DELETE /galleries/{gallery_id}/images/{image_id}/versions/{version_id}`, needs `galleries:write`.
4557
- */
4558
- deleteGalleryImageVersion(args: {
4559
- path: PluginApiOperations["delete_gallery_image_version"]["path"];
4560
- }): Promise<PluginApiOperations["delete_gallery_image_version"]["answer"]>;
4561
4733
  /**
4562
4734
  * Read Wiki
4563
4735
  *
@@ -4798,17 +4970,6 @@ export declare class PluginApi {
4798
4970
  path: PluginApiOperations["set_post_grants"]["path"];
4799
4971
  body: PluginApiOperations["set_post_grants"]["body"];
4800
4972
  }): Promise<PluginApiOperations["set_post_grants"]["answer"]>;
4801
- /**
4802
- * Replace the gallery's entire sharing state in one call — the body is the
4803
- * full list of grants (all-initiative-members / per-user / per-role). Every
4804
- * non-owner grant is rebuilt from it; the owner is always preserved.
4805
- *
4806
- * `PUT /galleries/{gallery_id}/grants`, needs `sharing:write`.
4807
- */
4808
- setGalleryGrants(args: {
4809
- path: PluginApiOperations["set_gallery_grants"]["path"];
4810
- body: PluginApiOperations["set_gallery_grants"]["body"];
4811
- }): Promise<PluginApiOperations["set_gallery_grants"]["answer"]>;
4812
4973
  /**
4813
4974
  * Replace the wiki's entire sharing state in one call — the body is the full
4814
4975
  * list of grants (all-initiative-members / per-user / per-role). Every
@@ -4898,19 +5059,6 @@ export declare class PluginApi {
4898
5059
  path: PluginApiOperations["duplicate_post"]["path"];
4899
5060
  body?: PluginApiOperations["duplicate_post"]["body"];
4900
5061
  }): Promise<PluginApiOperations["duplicate_post"]["answer"]>;
4901
- /**
4902
- * Copy it, with everything inside it, into an initiative: its own unless the
4903
- * body names another. Read is enough to copy a template; anything else needs
4904
- * write. The copy is shared as its source is while it stays in the same
4905
- * initiative, and carries the tags its maker may set: an installed plug-in's
4906
- * copy carries them only when it holds the scope to tag.
4907
- *
4908
- * `POST /galleries/{gallery_id}/duplicate`, needs `galleries:write`.
4909
- */
4910
- duplicateGallery(args: {
4911
- path: PluginApiOperations["duplicate_gallery"]["path"];
4912
- body?: PluginApiOperations["duplicate_gallery"]["body"];
4913
- }): Promise<PluginApiOperations["duplicate_gallery"]["answer"]>;
4914
5062
  /**
4915
5063
  * Copy it, with everything inside it, into an initiative: its own unless the
4916
5064
  * body names another. Read is enough to copy a template; anything else needs
@@ -4927,31 +5075,33 @@ export declare class PluginApi {
4927
5075
  /**
4928
5076
  * Titles for the command palette — a way to reach one thing quickly.
4929
5077
  *
4930
- * `GET /search/suggest`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `galleries:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
5078
+ * `GET /search/suggest`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
4931
5079
  */
4932
5080
  suggestCommunity(args: {
4933
5081
  query: PluginApiOperations["suggest_community"]["query"];
4934
5082
  }): Promise<PluginApiOperations["suggest_community"]["answer"]>;
4935
5083
  /**
4936
- * List property definitions.
5084
+ * List property definitions, or a project's or a collection's metadata.
4937
5085
  *
4938
- * `GET /property-definitions/`, needs one of `calendars:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `galleries:read`, `posts:read`, `projects:read`, `properties:read`, `queues:read`, `wikis:read`.
5086
+ * `GET /property-definitions/`, needs one of `calendars:read`, `counter_groups:read`, `dashboards:read`, `files:read`, `posts:read`, `projects:read`, `properties:read`, `queues:read`, `wikis:read`.
4939
5087
  */
4940
5088
  listPropertyDefinitions(args?: {
4941
5089
  query?: PluginApiOperations["list_property_definitions"]["query"];
4942
5090
  }): Promise<PluginApiOperations["list_property_definitions"]["answer"]>;
4943
5091
  /**
4944
- * Create a new property definition on an initiative.
5092
+ * Create a new property definition on an initiative, or with `project_id` or
5093
+ * `collection_id` that project's or collection's metadata.
4945
5094
  *
4946
- * `POST /property-definitions/`, needs `properties:write`.
5095
+ * `POST /property-definitions/`, needs one of `files:write`, `projects:write`, `properties:write`.
4947
5096
  */
4948
5097
  createPropertyDefinition(args: {
4949
5098
  body: PluginApiOperations["create_property_definition"]["body"];
4950
5099
  }): Promise<PluginApiOperations["create_property_definition"]["answer"]>;
4951
5100
  /**
4952
- * Delete a property definition. Cascades to remove all attached values.
5101
+ * Delete a property definition. Cascades to remove all attached values. A
5102
+ * project's or a collection's metadata is removed by whoever may define it.
4953
5103
  *
4954
- * `DELETE /property-definitions/{definition_id}`, needs `properties:write`.
5104
+ * `DELETE /property-definitions/{definition_id}`, needs one of `files:write`, `projects:write`, `properties:write`.
4955
5105
  */
4956
5106
  deletePropertyDefinition(args: {
4957
5107
  path: PluginApiOperations["delete_property_definition"]["path"];
@@ -4959,7 +5109,7 @@ export declare class PluginApi {
4959
5109
  /**
4960
5110
  * Update a property definition.
4961
5111
  *
4962
- * `PATCH /property-definitions/{definition_id}`, needs `properties:write`.
5112
+ * `PATCH /property-definitions/{definition_id}`, needs one of `files:write`, `projects:write`, `properties:write`.
4963
5113
  */
4964
5114
  updatePropertyDefinition(args: {
4965
5115
  path: PluginApiOperations["update_property_definition"]["path"];