initiative-plugin-sdk 2.0.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.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +656 -0
  3. package/dist/build.d.ts +52 -0
  4. package/dist/build.js +229 -0
  5. package/dist/build.js.map +1 -0
  6. package/dist/cli.d.ts +24 -0
  7. package/dist/cli.js +160 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/client.d.ts +288 -0
  10. package/dist/client.js +539 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/contract.d.ts +1247 -0
  13. package/dist/contract.js +167 -0
  14. package/dist/contract.js.map +1 -0
  15. package/dist/define.d.ts +336 -0
  16. package/dist/define.js +120 -0
  17. package/dist/define.js.map +1 -0
  18. package/dist/dev.d.ts +28 -0
  19. package/dist/dev.js +147 -0
  20. package/dist/dev.js.map +1 -0
  21. package/dist/expression.d.ts +28 -0
  22. package/dist/expression.js +67 -0
  23. package/dist/expression.js.map +1 -0
  24. package/dist/init.d.ts +14 -0
  25. package/dist/init.js +52 -0
  26. package/dist/init.js.map +1 -0
  27. package/dist/keys.d.ts +85 -0
  28. package/dist/keys.js +109 -0
  29. package/dist/keys.js.map +1 -0
  30. package/dist/manifest.d.ts +8 -0
  31. package/dist/manifest.js +8 -0
  32. package/dist/manifest.js.map +1 -0
  33. package/dist/pack.d.ts +35 -0
  34. package/dist/pack.js +84 -0
  35. package/dist/pack.js.map +1 -0
  36. package/dist/plugin-api.generated.d.ts +4263 -0
  37. package/dist/plugin-api.generated.js +1019 -0
  38. package/dist/plugin-api.generated.js.map +1 -0
  39. package/dist/server.d.ts +75 -0
  40. package/dist/server.js +408 -0
  41. package/dist/server.js.map +1 -0
  42. package/dist/testing.d.ts +116 -0
  43. package/dist/testing.js +386 -0
  44. package/dist/testing.js.map +1 -0
  45. package/dist/tokens.d.ts +161 -0
  46. package/dist/tokens.js +215 -0
  47. package/dist/tokens.js.map +1 -0
  48. package/dist/validate.d.ts +86 -0
  49. package/dist/validate.js +997 -0
  50. package/dist/validate.js.map +1 -0
  51. package/dist/widget.d.ts +235 -0
  52. package/dist/widget.js +26 -0
  53. package/dist/widget.js.map +1 -0
  54. package/examples/minimal/README.md +48 -0
  55. package/examples/minimal/assets/avatar.png +0 -0
  56. package/examples/minimal/package.json +22 -0
  57. package/examples/minimal/src/plugin.ts +77 -0
  58. package/examples/minimal/src/widgets/open-issues.ts +11 -0
  59. package/examples/minimal/test/fixtures/issues-statistics.json +9 -0
  60. package/examples/minimal/test/issue-counts.test.ts +48 -0
  61. package/examples/minimal/tsconfig.json +14 -0
  62. package/manifest.contract.json +1886 -0
  63. package/package.json +92 -0
  64. package/schemas/plugin-manifest.json +1747 -0
@@ -0,0 +1,4263 @@
1
+ /**
2
+ * Generated by scripts/generate-plugin-api.mjs from Initiative 0.74.0's plug-in API
3
+ * (a checkout at 3b06e3609). Do not edit: regenerate.
4
+ */
5
+ import type { Scope } from "./contract.js";
6
+ /**
7
+ * The scope an operation needs: one scope; the scope an argument picks
8
+ * (`by`); or any one of several, when Initiative checks each item (`per`).
9
+ */
10
+ export type PluginApiScope = Scope | {
11
+ by: string;
12
+ scopes: Readonly<Record<string, Scope>>;
13
+ } | {
14
+ per: string;
15
+ any_of: readonly Scope[];
16
+ };
17
+ export interface PluginApiOperation {
18
+ method: "GET" | "PUT" | "POST" | "DELETE" | "PATCH";
19
+ path: string;
20
+ scope: PluginApiScope;
21
+ /** The query parameters sent as one JSON string each. */
22
+ json?: readonly string[];
23
+ }
24
+ export interface PluginApiArgs {
25
+ path?: Record<string, string | number>;
26
+ query?: Record<string, unknown>;
27
+ body?: unknown;
28
+ }
29
+ /** Initiative's schemas, by name: `PluginApiSchemas["TaskRead"]`. */
30
+ export interface PluginApiSchemas {
31
+ /**
32
+ * Things that can be archived.
33
+ */
34
+ ArchivableType: "project" | "document" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki" | "task" | "initiative";
35
+ /**
36
+ * What archiving or unarchiving answers with.
37
+ */
38
+ ArchiveResponse: {
39
+ entity_type: PluginApiSchemas["ArchivableType"];
40
+ entity_id: number;
41
+ archived_at?: string | null;
42
+ };
43
+ CalendarCreate: {
44
+ properties?: PluginApiSchemas["PropertyValueInput"][];
45
+ name: string;
46
+ description?: string | null;
47
+ color?: string;
48
+ initiative_id?: number | null;
49
+ tag_ids?: number[] | null;
50
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
51
+ };
52
+ CalendarEventAttendeeRead: {
53
+ user_id: string;
54
+ user: PluginApiSchemas["PluginPerson"] | null;
55
+ rsvp_status: PluginApiSchemas["RSVPStatus"];
56
+ created_at: string;
57
+ };
58
+ CalendarEventCreate: {
59
+ properties?: PluginApiSchemas["PropertyValueInput"][];
60
+ title: string;
61
+ description?: string | null;
62
+ location?: string | null;
63
+ start_at: string;
64
+ end_at: string;
65
+ all_day?: boolean;
66
+ recurrence?: string | null;
67
+ calendar_id: number;
68
+ tz?: string | null;
69
+ attendee_ids?: string[] | null;
70
+ tag_ids?: number[] | null;
71
+ document_ids?: number[] | null;
72
+ };
73
+ CalendarEventDocumentRead: {
74
+ document_id: number;
75
+ name?: string;
76
+ attached_at: string;
77
+ };
78
+ CalendarEventRead: {
79
+ title: string;
80
+ description: string | null;
81
+ location: string | null;
82
+ start_at: string;
83
+ end_at: string;
84
+ all_day: boolean;
85
+ recurrence: string | null;
86
+ id: number;
87
+ recurrence_shift: number;
88
+ original_start: string | null;
89
+ series_id: number | null;
90
+ calendar_id: number;
91
+ initiative_id: number | null;
92
+ community_id: string;
93
+ created_by: string | null;
94
+ attendee_count: number;
95
+ attendee_names: string[];
96
+ attendee_previews: PluginApiSchemas["PluginPerson"][];
97
+ properties: PluginApiSchemas["PropertySummary"][];
98
+ tags: PluginApiSchemas["TagSummary"][];
99
+ can: PluginApiSchemas["ContentCan"];
100
+ created_at: string;
101
+ updated_at: string;
102
+ attendees: PluginApiSchemas["CalendarEventAttendeeRead"][];
103
+ documents: PluginApiSchemas["CalendarEventDocumentRead"][];
104
+ overridden_fields: string[];
105
+ skipped_starts: string[];
106
+ extra_starts: string[];
107
+ };
108
+ CalendarEventUpdate: {
109
+ properties?: PluginApiSchemas["PropertyValueInput"][] | null;
110
+ title?: string | null;
111
+ description?: string | null;
112
+ location?: string | null;
113
+ start_at?: string | null;
114
+ end_at?: string | null;
115
+ all_day?: boolean | null;
116
+ recurrence?: string | null;
117
+ tz?: string | null;
118
+ calendar_id?: number | null;
119
+ tag_ids?: number[] | null;
120
+ scope?: "this" | "following" | "all" | null;
121
+ occurrence?: string | null;
122
+ };
123
+ CalendarListResponse: {
124
+ total_count: number;
125
+ page: number;
126
+ page_size: number;
127
+ has_next: boolean;
128
+ has_prev: boolean;
129
+ items: PluginApiSchemas["CalendarSummary"][];
130
+ };
131
+ CalendarRead: {
132
+ archived_at: string | null;
133
+ can: PluginApiSchemas["ToolCan"];
134
+ id: number;
135
+ initiative_id: number | null;
136
+ community_id: string;
137
+ created_by: string | null;
138
+ created_at: string;
139
+ updated_at: string;
140
+ comments_enabled: boolean;
141
+ tags: PluginApiSchemas["TagSummary"][];
142
+ properties: PluginApiSchemas["PropertySummary"][];
143
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
144
+ name: string;
145
+ description: string | null;
146
+ color: string;
147
+ };
148
+ CalendarSummary: {
149
+ archived_at: string | null;
150
+ can: PluginApiSchemas["ToolCan"];
151
+ id: number;
152
+ initiative_id: number | null;
153
+ community_id: string;
154
+ created_by: string | null;
155
+ created_at: string;
156
+ updated_at: string;
157
+ comments_enabled: boolean;
158
+ tags: PluginApiSchemas["TagSummary"][];
159
+ properties: PluginApiSchemas["PropertySummary"][];
160
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
161
+ name: string;
162
+ description: string | null;
163
+ color: string;
164
+ };
165
+ CalendarUpdate: {
166
+ name?: string | null;
167
+ description?: string | null;
168
+ color?: string | null;
169
+ };
170
+ /**
171
+ * One checklist line as stored and read back.
172
+ */
173
+ ChecklistItem: {
174
+ id: string;
175
+ /**
176
+ * A person is mentioned as `@[](<reference>)`, by your reference for them,
177
+ * with no name: read who they are from the members search (`members:read`).
178
+ * Write a mention the same way. A stored file comes without its path:
179
+ * `![alt]()`, `[name]()`.
180
+ */
181
+ text: string;
182
+ done: boolean;
183
+ };
184
+ /**
185
+ * One checklist line as written. `id` is optional: an item that arrives
186
+ * without one is given a fresh id.
187
+ */
188
+ ChecklistItemInput: {
189
+ id?: string | null;
190
+ /**
191
+ * A person is mentioned as `@[](<reference>)`, by your reference for them,
192
+ * with no name: read who they are from the members search (`members:read`).
193
+ * Write a mention the same way. A stored file comes without its path:
194
+ * `![alt]()`, `[name]()`.
195
+ */
196
+ text: string;
197
+ done?: boolean;
198
+ };
199
+ /**
200
+ * The one field a tick changes.
201
+ */
202
+ ChecklistItemToggle: {
203
+ done: boolean;
204
+ };
205
+ ChecklistProgress: {
206
+ completed: number;
207
+ total: number;
208
+ };
209
+ /**
210
+ * Who a comment is said to.
211
+ */
212
+ CommentAudience: "members" | "filer";
213
+ CommentCreate: {
214
+ /**
215
+ * A person is mentioned as `@[](<reference>)`, by your reference for them,
216
+ * with no name: read who they are from the members search (`members:read`).
217
+ * Write a mention the same way. A stored file comes without its path:
218
+ * `![alt]()`, `[name]()`.
219
+ */
220
+ content: string;
221
+ task_id?: number | null;
222
+ wiki_page_id?: number | null;
223
+ document_id?: number | null;
224
+ project_id?: number | null;
225
+ queue_id?: number | null;
226
+ counter_group_id?: number | null;
227
+ calendar_id?: number | null;
228
+ dashboard_id?: number | null;
229
+ post_id?: number | null;
230
+ gallery_id?: number | null;
231
+ wiki_id?: number | null;
232
+ parent_comment_id?: number | null;
233
+ audience?: PluginApiSchemas["CommentAudience"];
234
+ };
235
+ /**
236
+ * One page of a thread: `limit` conversations, newest first, each with every
237
+ * reply under it.
238
+ */
239
+ CommentListResponse: {
240
+ comments: PluginApiSchemas["CommentRead"][];
241
+ next_cursor: string | null;
242
+ };
243
+ CommentRead: {
244
+ /**
245
+ * A person is mentioned as `@[](<reference>)`, by your reference for them,
246
+ * with no name: read who they are from the members search (`members:read`).
247
+ * Write a mention the same way. A stored file comes without its path:
248
+ * `![alt]()`, `[name]()`.
249
+ */
250
+ content: string;
251
+ id: number;
252
+ created_by: string | null;
253
+ task_id: number | null;
254
+ wiki_page_id: number | null;
255
+ document_id: number | null;
256
+ queue_id: number | null;
257
+ counter_group_id: number | null;
258
+ calendar_id: number | null;
259
+ dashboard_id: number | null;
260
+ post_id: number | null;
261
+ gallery_id: number | null;
262
+ wiki_id: number | null;
263
+ parent_comment_id: number | null;
264
+ created_at: string;
265
+ updated_at: string | null;
266
+ author: PluginApiSchemas["PluginPerson"] | null;
267
+ imported_author_name: string | null;
268
+ project_id: number | null;
269
+ reactions: PluginApiSchemas["ReactionGroup"][];
270
+ can_remove: boolean;
271
+ audience: PluginApiSchemas["CommentAudience"];
272
+ system_kind: string | null;
273
+ };
274
+ /**
275
+ * What the caller may do to a piece of content, as the server answers it.
276
+ */
277
+ ContentCan: {
278
+ edit: boolean;
279
+ };
280
+ CounterGroupCreate: {
281
+ properties?: PluginApiSchemas["PropertyValueInput"][];
282
+ name: string;
283
+ description?: string | null;
284
+ initiative_id: number;
285
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
286
+ };
287
+ CounterGroupListResponse: {
288
+ total_count: number;
289
+ page: number;
290
+ page_size: number;
291
+ has_next: boolean;
292
+ has_prev: boolean;
293
+ items: PluginApiSchemas["CounterGroupSummary"][];
294
+ };
295
+ CounterGroupRead: {
296
+ archived_at: string | null;
297
+ can: PluginApiSchemas["ToolCan"];
298
+ id: number;
299
+ initiative_id: number;
300
+ community_id: string;
301
+ created_by: string | null;
302
+ created_at: string;
303
+ updated_at: string;
304
+ comments_enabled: boolean;
305
+ tags: PluginApiSchemas["TagSummary"][];
306
+ properties: PluginApiSchemas["PropertySummary"][];
307
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
308
+ name: string;
309
+ description: string | null;
310
+ preview: PluginApiSchemas["CounterPreview"][] | null;
311
+ counters: PluginApiSchemas["CounterRead"][];
312
+ };
313
+ /**
314
+ * A counter group in a list: the group alone, without its counters — unless
315
+ * the list was asked for previews, when its first few come along.
316
+ */
317
+ CounterGroupSummary: {
318
+ archived_at: string | null;
319
+ can: PluginApiSchemas["ToolCan"];
320
+ id: number;
321
+ initiative_id: number;
322
+ community_id: string;
323
+ created_by: string | null;
324
+ created_at: string;
325
+ updated_at: string;
326
+ comments_enabled: boolean;
327
+ tags: PluginApiSchemas["TagSummary"][];
328
+ properties: PluginApiSchemas["PropertySummary"][];
329
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
330
+ name: string;
331
+ description: string | null;
332
+ preview: PluginApiSchemas["CounterPreview"][] | null;
333
+ };
334
+ CounterGroupUpdate: {
335
+ name?: string | null;
336
+ description?: string | null;
337
+ };
338
+ /**
339
+ * One counter as a list's card draws it: its name, colour and count.
340
+ */
341
+ CounterPreview: {
342
+ id: number;
343
+ name: string;
344
+ color: string | null;
345
+ count: string;
346
+ };
347
+ /**
348
+ * Serialized counter. Numeric fields are returned as plain decimal strings
349
+ * (e.g. "0", "12.5") rather than `Decimal` so JSON never emits PostgreSQL's
350
+ * exponent notation (`0E-10`) from `Numeric(20, 10)` columns.
351
+ */
352
+ CounterRead: {
353
+ id: number;
354
+ counter_group_id: number;
355
+ community_id: string;
356
+ name: string;
357
+ color: string | null;
358
+ count: string;
359
+ min: string | null;
360
+ max: string | null;
361
+ step: string;
362
+ initial_count: string;
363
+ view_mode: PluginApiSchemas["CounterViewMode"];
364
+ position: string;
365
+ properties: PluginApiSchemas["PropertySummary"][];
366
+ created_at: string;
367
+ updated_at: string;
368
+ };
369
+ CounterSetCountRequest: {
370
+ count: number | string;
371
+ };
372
+ /**
373
+ * Move a counter up or down. `amount` left out moves it by the counter's own
374
+ * `step`; given, it must be more than nothing, since which way the counter
375
+ * goes is `direction`'s to say.
376
+ */
377
+ CounterStepRequest: {
378
+ direction: "up" | "down";
379
+ amount?: number | string | null;
380
+ };
381
+ CounterViewMode: "number" | "progress_bar" | "segmented_clock";
382
+ DocumentCreate: {
383
+ properties?: PluginApiSchemas["PropertyValueInput"][];
384
+ name: string;
385
+ initiative_id: number;
386
+ featured_image_url?: string | null;
387
+ is_template?: boolean;
388
+ content?: Record<string, unknown> | null;
389
+ document_type?: "native" | "whiteboard" | "smart_link" | "spreadsheet";
390
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
391
+ };
392
+ DocumentListResponse: {
393
+ total_count: number;
394
+ page: number;
395
+ page_size: number;
396
+ has_next: boolean;
397
+ has_prev: boolean;
398
+ items: PluginApiSchemas["DocumentSummary"][];
399
+ sort_by: string | null;
400
+ sort_dir: string | null;
401
+ };
402
+ DocumentProjectLink: {
403
+ project_id: number;
404
+ project_name?: string | null;
405
+ project_icon?: string | null;
406
+ project_initiative_id?: number | null;
407
+ attached_at: string;
408
+ };
409
+ DocumentRead: {
410
+ archived_at: string | null;
411
+ can: PluginApiSchemas["ToolCan"];
412
+ id: number;
413
+ initiative_id: number;
414
+ community_id: string;
415
+ created_by: string | null;
416
+ created_at: string;
417
+ updated_at: string;
418
+ comments_enabled: boolean;
419
+ tags: PluginApiSchemas["TagSummary"][];
420
+ properties: PluginApiSchemas["PropertySummary"][];
421
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
422
+ name: string;
423
+ /**
424
+ * A stored file comes as an empty string, without its path. A URL from
425
+ * elsewhere comes as it is.
426
+ */
427
+ featured_image_url: string | null;
428
+ is_template: boolean;
429
+ initiative: PluginApiSchemas["InitiativeSummary"] | null;
430
+ owner: PluginApiSchemas["PluginPerson"] | null;
431
+ owner_plugin: PluginApiSchemas["OwnerPluginSummary"] | null;
432
+ projects: PluginApiSchemas["DocumentProjectLink"][];
433
+ comment_count: number;
434
+ document_type: PluginApiSchemas["DocumentType"];
435
+ /**
436
+ * A stored file comes as an empty string, without its path. A URL from
437
+ * elsewhere comes as it is.
438
+ */
439
+ file_url: string | null;
440
+ file_content_type: string | null;
441
+ file_size: number | null;
442
+ original_filename: string | null;
443
+ smart_link_url: string | null;
444
+ yjs_updated_at: string | null;
445
+ /**
446
+ * A Lexical editor state. A person is mentioned by a node whose
447
+ * `mentionUserId` is your reference for them, with `mentionName` and `text`
448
+ * empty: read who they are from the members search (`members:read`). Write
449
+ * a mention the same way. A stored file comes without its path: an image's
450
+ * `src` and a link's `url` are empty.
451
+ */
452
+ content: Record<string, unknown>;
453
+ content_version: string | null;
454
+ };
455
+ DocumentSummary: {
456
+ archived_at: string | null;
457
+ can: PluginApiSchemas["ToolCan"];
458
+ id: number;
459
+ initiative_id: number;
460
+ community_id: string;
461
+ created_by: string | null;
462
+ created_at: string;
463
+ updated_at: string;
464
+ comments_enabled: boolean;
465
+ tags: PluginApiSchemas["TagSummary"][];
466
+ properties: PluginApiSchemas["PropertySummary"][];
467
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
468
+ name: string;
469
+ /**
470
+ * A stored file comes as an empty string, without its path. A URL from
471
+ * elsewhere comes as it is.
472
+ */
473
+ featured_image_url: string | null;
474
+ is_template: boolean;
475
+ initiative: PluginApiSchemas["InitiativeSummary"] | null;
476
+ owner: PluginApiSchemas["PluginPerson"] | null;
477
+ owner_plugin: PluginApiSchemas["OwnerPluginSummary"] | null;
478
+ projects: PluginApiSchemas["DocumentProjectLink"][];
479
+ comment_count: number;
480
+ document_type: PluginApiSchemas["DocumentType"];
481
+ /**
482
+ * A stored file comes as an empty string, without its path. A URL from
483
+ * elsewhere comes as it is.
484
+ */
485
+ file_url: string | null;
486
+ file_content_type: string | null;
487
+ file_size: number | null;
488
+ original_filename: string | null;
489
+ smart_link_url: string | null;
490
+ yjs_updated_at: string | null;
491
+ };
492
+ /**
493
+ * Discriminator for document type.
494
+ */
495
+ DocumentType: "native" | "file" | "whiteboard" | "smart_link" | "spreadsheet";
496
+ DocumentUpdate: {
497
+ name?: string | null;
498
+ content?: Record<string, unknown> | null;
499
+ content_version?: string | null;
500
+ featured_image_url?: string | null;
501
+ is_template?: boolean | null;
502
+ };
503
+ /**
504
+ * A single field comparison.
505
+ */
506
+ FilterCondition: {
507
+ field: string;
508
+ op?: PluginApiSchemas["FilterOp"];
509
+ value?: unknown;
510
+ negate?: boolean;
511
+ };
512
+ /**
513
+ * Group of conditions combined with AND or OR logic.
514
+ */
515
+ FilterGroup: {
516
+ logic?: "and" | "or";
517
+ negate?: boolean;
518
+ conditions: Array<PluginApiSchemas["FilterCondition"] | PluginApiSchemas["FilterGroup"]>;
519
+ };
520
+ /**
521
+ * Comparison operators for filter conditions.
522
+ */
523
+ FilterOp: "eq" | "lt" | "lte" | "gt" | "gte" | "in_" | "ilike" | "is_null";
524
+ /**
525
+ * What a list draws for a gallery: one picture, at whichever size it has.
526
+ */
527
+ GalleryCover: {
528
+ image_id: number;
529
+ /**
530
+ * A stored file comes as an empty string, without its path. A URL from
531
+ * elsewhere comes as it is.
532
+ */
533
+ file_url: string;
534
+ /**
535
+ * A stored file comes as an empty string, without its path. A URL from
536
+ * elsewhere comes as it is.
537
+ */
538
+ thumbnail_url: string | null;
539
+ width: number | null;
540
+ height: number | null;
541
+ };
542
+ GalleryCreate: {
543
+ properties?: PluginApiSchemas["PropertyValueInput"][];
544
+ name: string;
545
+ description?: string | null;
546
+ initiative_id: number;
547
+ tag_ids?: number[] | null;
548
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
549
+ };
550
+ GalleryImageListResponse: {
551
+ total_count: number;
552
+ page: number;
553
+ page_size: number;
554
+ has_next: boolean;
555
+ has_prev: boolean;
556
+ items: PluginApiSchemas["GalleryImageRead"][];
557
+ };
558
+ GalleryImageRead: {
559
+ id: number;
560
+ gallery_id: number;
561
+ community_id: string;
562
+ title: string | null;
563
+ caption: string | null;
564
+ /**
565
+ * A stored file comes as an empty string, without its path. A URL from
566
+ * elsewhere comes as it is.
567
+ */
568
+ file_url: string;
569
+ /**
570
+ * A stored file comes as an empty string, without its path. A URL from
571
+ * elsewhere comes as it is.
572
+ */
573
+ thumbnail_url: string | null;
574
+ file_content_type: string | null;
575
+ file_size: number | null;
576
+ original_filename: string | null;
577
+ width: number | null;
578
+ height: number | null;
579
+ created_by: string;
580
+ uploader: PluginApiSchemas["PluginPerson"] | null;
581
+ created_at: string;
582
+ updated_at: string;
583
+ version_count: number;
584
+ tags: PluginApiSchemas["TagSummary"][];
585
+ properties: PluginApiSchemas["PropertySummary"][];
586
+ };
587
+ GalleryListResponse: {
588
+ total_count: number;
589
+ page: number;
590
+ page_size: number;
591
+ has_next: boolean;
592
+ has_prev: boolean;
593
+ items: PluginApiSchemas["GallerySummary"][];
594
+ };
595
+ /**
596
+ * A gallery on its own page. The same shape as its summary: the pictures are
597
+ * paged separately, because a gallery is browsed rather than read.
598
+ */
599
+ GalleryRead: {
600
+ archived_at: string | null;
601
+ can: PluginApiSchemas["ToolCan"];
602
+ id: number;
603
+ initiative_id: number;
604
+ community_id: string;
605
+ created_by: string | null;
606
+ created_at: string;
607
+ updated_at: string;
608
+ comments_enabled: boolean;
609
+ tags: PluginApiSchemas["TagSummary"][];
610
+ properties: PluginApiSchemas["PropertySummary"][];
611
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
612
+ name: string;
613
+ description: string | null;
614
+ cover_image_id: number | null;
615
+ cover: PluginApiSchemas["GalleryCover"] | null;
616
+ preview: PluginApiSchemas["GalleryCover"][];
617
+ comment_count: number;
618
+ };
619
+ GallerySummary: {
620
+ archived_at: string | null;
621
+ can: PluginApiSchemas["ToolCan"];
622
+ id: number;
623
+ initiative_id: number;
624
+ community_id: string;
625
+ created_by: string | null;
626
+ created_at: string;
627
+ updated_at: string;
628
+ comments_enabled: boolean;
629
+ tags: PluginApiSchemas["TagSummary"][];
630
+ properties: PluginApiSchemas["PropertySummary"][];
631
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
632
+ name: string;
633
+ description: string | null;
634
+ cover_image_id: number | null;
635
+ cover: PluginApiSchemas["GalleryCover"] | null;
636
+ preview: PluginApiSchemas["GalleryCover"][];
637
+ comment_count: number;
638
+ };
639
+ GalleryUpdate: {
640
+ name?: string | null;
641
+ description?: string | null;
642
+ cover_image_id?: number | null;
643
+ };
644
+ HTTPValidationError: {
645
+ detail?: PluginApiSchemas["ValidationError"][];
646
+ };
647
+ /**
648
+ * What the caller may do in an initiative (:func:`initiative_can`).
649
+ */
650
+ InitiativeCan: {
651
+ manage: boolean;
652
+ moderate: boolean;
653
+ view: PluginApiSchemas["Tool"][];
654
+ create: PluginApiSchemas["Tool"][];
655
+ };
656
+ /**
657
+ * How a guild member may come to hold a membership row in an initiative.
658
+ */
659
+ InitiativeJoinPolicy: "private" | "request" | "open";
660
+ /**
661
+ * Which initiatives `GET /initiatives/` should return.
662
+ */
663
+ InitiativeListScope: "member" | "community";
664
+ /**
665
+ * An initiative: the row, its headcount, what the caller may do in it and the
666
+ * role they hold there. Its roster is read a page at a time from `GET
667
+ * /initiatives/{id}/members`.
668
+ */
669
+ InitiativeRead: {
670
+ projects_enabled: boolean;
671
+ documents_enabled: boolean;
672
+ queues_enabled: boolean;
673
+ counter_groups_enabled: boolean;
674
+ calendars_enabled: boolean;
675
+ dashboards_enabled: boolean;
676
+ posts_enabled: boolean;
677
+ galleries_enabled: boolean;
678
+ wikis_enabled: boolean;
679
+ name: string;
680
+ description: string | null;
681
+ color: string | null;
682
+ id: number;
683
+ community_id: string | null;
684
+ archived_at: string | null;
685
+ join_policy: PluginApiSchemas["InitiativeJoinPolicy"];
686
+ auto_join: boolean;
687
+ keep_content_in: boolean;
688
+ created_at: string;
689
+ updated_at: string;
690
+ can: PluginApiSchemas["InitiativeCan"];
691
+ member_count: number;
692
+ role_display_name: string | null;
693
+ };
694
+ /**
695
+ * An initiative as something else names it: enough to label and link it.
696
+ */
697
+ InitiativeSummary: {
698
+ id: number;
699
+ name: string;
700
+ color: string | null;
701
+ };
702
+ /**
703
+ * A status column as it appears across one initiative's projects.
704
+ */
705
+ InitiativeTaskStatusRead: {
706
+ name: string;
707
+ category: PluginApiSchemas["TaskStatusCategory"];
708
+ color: string;
709
+ icon: string;
710
+ project_count: number;
711
+ projects_total: number;
712
+ };
713
+ OccurrenceRequest: {
714
+ start: string;
715
+ };
716
+ /**
717
+ * An installed plug-in that owns a resource, or may be handed one: the
718
+ * install's id, its name in this community, and its listing's picture.
719
+ */
720
+ OwnerPluginSummary: {
721
+ id: number;
722
+ name: string;
723
+ avatar_url: string | null;
724
+ };
725
+ /**
726
+ * A person, as an installed plug-in receives them wherever one appears.
727
+ */
728
+ PluginPerson: {
729
+ id: string;
730
+ username?: string | null;
731
+ discriminator?: number | null;
732
+ display_name?: string | null;
733
+ /**
734
+ * Where the plug-in reads the picture this member uploaded:
735
+ * `/api/v1/c/0/members/{id}/avatar/{sha256}`, a path on Initiative served
736
+ * under `members:read`. Absent when they have not uploaded one.
737
+ */
738
+ avatar_url?: string | null;
739
+ };
740
+ PollOptionRead: {
741
+ id: number;
742
+ text: string;
743
+ position: number;
744
+ vote_count: number | null;
745
+ voted_by_me: boolean;
746
+ };
747
+ /**
748
+ * One answer, as the author typed it.
749
+ */
750
+ PollOptionWrite: {
751
+ text: string;
752
+ };
753
+ PollRead: {
754
+ id: number;
755
+ question: string | null;
756
+ allows_multiple: boolean;
757
+ is_anonymous: boolean;
758
+ hide_results: boolean;
759
+ closes_at: string | null;
760
+ is_closed: boolean;
761
+ options: PluginApiSchemas["PollOptionRead"][];
762
+ has_voted: boolean;
763
+ results_visible: boolean;
764
+ total_voters: number | null;
765
+ is_locked: boolean;
766
+ };
767
+ /**
768
+ * A whole poll, sent as one thing.
769
+ */
770
+ PollWrite: {
771
+ question?: string | null;
772
+ options: PluginApiSchemas["PollOptionWrite"][];
773
+ allows_multiple?: boolean;
774
+ is_anonymous?: boolean;
775
+ hide_results?: boolean;
776
+ closes_at?: string | null;
777
+ };
778
+ PostCreate: {
779
+ properties?: PluginApiSchemas["PropertyValueInput"][];
780
+ name: string;
781
+ initiative_id: number;
782
+ /**
783
+ * A Lexical editor state. A person is mentioned by a node whose
784
+ * `mentionUserId` is your reference for them, with `mentionName` and `text`
785
+ * empty: read who they are from the members search (`members:read`). Write
786
+ * a mention the same way. A stored file comes without its path: an image's
787
+ * `src` and a link's `url` are empty.
788
+ */
789
+ body?: Record<string, unknown>;
790
+ tag_ids?: number[] | null;
791
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
792
+ scheduled_for?: string | null;
793
+ poll?: PluginApiSchemas["PollWrite"] | null;
794
+ };
795
+ PostListResponse: {
796
+ total_count: number;
797
+ page: number;
798
+ page_size: number;
799
+ has_next: boolean;
800
+ has_prev: boolean;
801
+ items: PluginApiSchemas["PostRead"][];
802
+ };
803
+ /**
804
+ * Pin or unpin one post. `pinned` false clears the expiry with it — an expiry
805
+ * belongs to a pin, and keeping a stale one around would silently apply to
806
+ * the next pin.
807
+ */
808
+ PostPinUpdate: {
809
+ pinned?: boolean;
810
+ expires_at?: string | null;
811
+ };
812
+ PostRead: {
813
+ archived_at: string | null;
814
+ can: PluginApiSchemas["ToolCan"];
815
+ id: number;
816
+ initiative_id: number;
817
+ community_id: string;
818
+ created_by: string | null;
819
+ created_at: string;
820
+ updated_at: string;
821
+ comments_enabled: boolean;
822
+ tags: PluginApiSchemas["TagSummary"][];
823
+ properties: PluginApiSchemas["PropertySummary"][];
824
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
825
+ name: string;
826
+ author: PluginApiSchemas["PluginPerson"] | null;
827
+ /**
828
+ * A person is mentioned as `@[](<reference>)`, by your reference for them,
829
+ * with no name: read who they are from the members search (`members:read`).
830
+ * Write a mention the same way. A stored file comes without its path:
831
+ * `![alt]()`, `[name]()`.
832
+ */
833
+ excerpt: string;
834
+ pinned_at: string | null;
835
+ pinned_by: string | null;
836
+ pin_expires_at: string | null;
837
+ is_pinned: boolean;
838
+ published_at: string | null;
839
+ scheduled_for: string | null;
840
+ is_published: boolean;
841
+ is_read: boolean;
842
+ read_count: number;
843
+ reactions_enabled: boolean;
844
+ comment_count: number;
845
+ reactions: PluginApiSchemas["ReactionGroup"][];
846
+ /**
847
+ * A Lexical editor state. A person is mentioned by a node whose
848
+ * `mentionUserId` is your reference for them, with `mentionName` and `text`
849
+ * empty: read who they are from the members search (`members:read`). Write
850
+ * a mention the same way. A stored file comes without its path: an image's
851
+ * `src` and a link's `url` are empty.
852
+ */
853
+ body: Record<string, unknown>;
854
+ poll: PluginApiSchemas["PollRead"] | null;
855
+ };
856
+ PostUpdate: {
857
+ name?: string | null;
858
+ body?: Record<string, unknown> | null;
859
+ scheduled_for?: string | null;
860
+ };
861
+ ProjectCan: {
862
+ edit: boolean;
863
+ contribute: boolean;
864
+ delete: boolean;
865
+ share: boolean;
866
+ export: boolean;
867
+ unarchive: boolean;
868
+ configure: boolean;
869
+ };
870
+ ProjectCreate: {
871
+ properties?: PluginApiSchemas["PropertyValueInput"][];
872
+ name: string;
873
+ description?: string | null;
874
+ icon?: string | null;
875
+ start_date?: string | null;
876
+ end_date?: string | null;
877
+ initiative_id?: number | null;
878
+ is_template?: boolean;
879
+ template_id?: number | null;
880
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
881
+ };
882
+ ProjectDocumentSummary: {
883
+ document_id: number;
884
+ name: string;
885
+ updated_at: string;
886
+ attached_at: string;
887
+ };
888
+ ProjectListResponse: {
889
+ total_count: number;
890
+ page: number;
891
+ page_size: number;
892
+ has_next: boolean;
893
+ has_prev: boolean;
894
+ items: PluginApiSchemas["ProjectRead"][];
895
+ };
896
+ ProjectRead: {
897
+ archived_at: string | null;
898
+ can: PluginApiSchemas["ProjectCan"];
899
+ name: string;
900
+ description: string | null;
901
+ icon: string | null;
902
+ start_date: string | null;
903
+ end_date: string | null;
904
+ id: number;
905
+ owner_id: string | null;
906
+ initiative_id: number;
907
+ community_id: string | null;
908
+ created_at: string;
909
+ updated_at: string;
910
+ is_template: boolean;
911
+ pinned_at: string | null;
912
+ default_view_mode: string | null;
913
+ owner: PluginApiSchemas["PluginPerson"] | null;
914
+ owner_plugin: PluginApiSchemas["OwnerPluginSummary"] | null;
915
+ initiative: PluginApiSchemas["InitiativeSummary"] | null;
916
+ sort_order: number | null;
917
+ is_favorited: boolean;
918
+ last_viewed_at: string | null;
919
+ documents: PluginApiSchemas["ProjectDocumentSummary"][];
920
+ task_summary: PluginApiSchemas["ProjectTaskSummary"];
921
+ task_statuses: PluginApiSchemas["TaskStatusRead"][];
922
+ comments_enabled: boolean;
923
+ tags: PluginApiSchemas["TagSummary"][];
924
+ properties: PluginApiSchemas["PropertySummary"][];
925
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
926
+ };
927
+ ProjectTaskSummary: {
928
+ total: number;
929
+ completed: number;
930
+ };
931
+ ProjectUpdate: {
932
+ name?: string | null;
933
+ description?: string | null;
934
+ icon?: string | null;
935
+ is_template?: boolean | null;
936
+ pinned?: boolean | null;
937
+ default_view_mode?: "table" | "kanban" | "calendar" | null;
938
+ start_date?: string | null;
939
+ end_date?: string | null;
940
+ };
941
+ PropertyDefinitionRead: {
942
+ name: string;
943
+ type: PluginApiSchemas["PropertyType"];
944
+ position: number;
945
+ color: string | null;
946
+ options: PluginApiSchemas["PropertyOption"][] | null;
947
+ id: number;
948
+ initiative_id: number;
949
+ created_at: string;
950
+ updated_at: string;
951
+ };
952
+ /**
953
+ * One option entry for select / multi_select property definitions.
954
+ */
955
+ PropertyOption: {
956
+ value: string;
957
+ label: string;
958
+ color?: string | null;
959
+ };
960
+ /**
961
+ * Lightweight property value for embedding in entity reads.
962
+ */
963
+ PropertySummary: {
964
+ property_id: number;
965
+ name: string;
966
+ type: PluginApiSchemas["PropertyType"];
967
+ options: PluginApiSchemas["PropertyOption"][] | null;
968
+ /**
969
+ * Shaped by the property's type. For user_reference, a person: id,
970
+ * username, discriminator, display_name and avatar_url, or an PluginPerson
971
+ * when the reader is an installed plug-in.
972
+ */
973
+ value: unknown;
974
+ };
975
+ /**
976
+ * What can carry custom property values: every tool and sub-tool.
977
+ */
978
+ PropertyTarget: "project" | "document" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki" | "task" | "queue_item" | "calendar_event" | "counter" | "gallery_image" | "wiki_page";
979
+ /**
980
+ * Supported value types for a property definition.
981
+ */
982
+ PropertyType: "text" | "number" | "checkbox" | "date" | "datetime" | "url" | "select" | "multi_select" | "user_reference";
983
+ /**
984
+ * A single (property_id, value) pair submitted by the client.
985
+ */
986
+ PropertyValueInput: {
987
+ property_id: number;
988
+ value?: unknown;
989
+ };
990
+ /**
991
+ * Replace-all payload for `PUT /properties/{target}/{entity_id}`.
992
+ */
993
+ PropertyValuesSetRequest: {
994
+ values?: PluginApiSchemas["PropertyValueInput"][];
995
+ };
996
+ QueueCreate: {
997
+ properties?: PluginApiSchemas["PropertyValueInput"][];
998
+ name: string;
999
+ description?: string | null;
1000
+ initiative_id: number;
1001
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
1002
+ };
1003
+ QueueItemDocumentRead: {
1004
+ document_id: number;
1005
+ name?: string;
1006
+ attached_at: string;
1007
+ };
1008
+ QueueItemRead: {
1009
+ label: string;
1010
+ position: number;
1011
+ color: string | null;
1012
+ notes: string | null;
1013
+ is_visible: boolean;
1014
+ id: number;
1015
+ queue_id: number;
1016
+ user_id: string | null;
1017
+ user: PluginApiSchemas["PluginPerson"] | null;
1018
+ tags: PluginApiSchemas["TagSummary"][];
1019
+ properties: PluginApiSchemas["PropertySummary"][];
1020
+ documents: PluginApiSchemas["QueueItemDocumentRead"][];
1021
+ tasks: PluginApiSchemas["QueueItemTaskRead"][];
1022
+ attachment_count: number;
1023
+ held_at_round: number | null;
1024
+ created_at: string;
1025
+ };
1026
+ QueueItemTaskRead: {
1027
+ task_id: number;
1028
+ title?: string;
1029
+ attached_at: string;
1030
+ };
1031
+ QueueItemUpdate: {
1032
+ properties?: PluginApiSchemas["PropertyValueInput"][] | null;
1033
+ label?: string | null;
1034
+ position?: number | null;
1035
+ user_id?: string | null;
1036
+ color?: string | null;
1037
+ notes?: string | null;
1038
+ is_visible?: boolean | null;
1039
+ tag_ids?: number[] | null;
1040
+ };
1041
+ QueueListResponse: {
1042
+ total_count: number;
1043
+ page: number;
1044
+ page_size: number;
1045
+ has_next: boolean;
1046
+ has_prev: boolean;
1047
+ items: PluginApiSchemas["QueueSummary"][];
1048
+ };
1049
+ QueueRead: {
1050
+ archived_at: string | null;
1051
+ can: PluginApiSchemas["ToolCan"];
1052
+ id: number;
1053
+ initiative_id: number;
1054
+ community_id: string;
1055
+ created_by: string | null;
1056
+ created_at: string;
1057
+ updated_at: string;
1058
+ comments_enabled: boolean;
1059
+ tags: PluginApiSchemas["TagSummary"][];
1060
+ properties: PluginApiSchemas["PropertySummary"][];
1061
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
1062
+ name: string;
1063
+ description: string | null;
1064
+ current_round: number;
1065
+ is_active: boolean;
1066
+ preview: PluginApiSchemas["QueueTurnPreview"][] | null;
1067
+ items: PluginApiSchemas["QueueItemRead"][];
1068
+ current_item: PluginApiSchemas["QueueItemRead"] | null;
1069
+ };
1070
+ /**
1071
+ * Options for releasing a held queue item back into the rotation.
1072
+ */
1073
+ QueueReleaseRequest: {
1074
+ reposition?: boolean;
1075
+ };
1076
+ QueueSummary: {
1077
+ archived_at: string | null;
1078
+ can: PluginApiSchemas["ToolCan"];
1079
+ id: number;
1080
+ initiative_id: number;
1081
+ community_id: string;
1082
+ created_by: string | null;
1083
+ created_at: string;
1084
+ updated_at: string;
1085
+ comments_enabled: boolean;
1086
+ tags: PluginApiSchemas["TagSummary"][];
1087
+ properties: PluginApiSchemas["PropertySummary"][];
1088
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
1089
+ name: string;
1090
+ description: string | null;
1091
+ current_round: number;
1092
+ is_active: boolean;
1093
+ preview: PluginApiSchemas["QueueTurnPreview"][] | null;
1094
+ };
1095
+ /**
1096
+ * One turn as a list's card draws it: who, in what colour, and whether it is
1097
+ * theirs now.
1098
+ */
1099
+ QueueTurnPreview: {
1100
+ id: number;
1101
+ label: string;
1102
+ color: string | null;
1103
+ current: boolean;
1104
+ };
1105
+ QueueUpdate: {
1106
+ name?: string | null;
1107
+ description?: string | null;
1108
+ };
1109
+ RSVPStatus: "pending" | "accepted" | "declined" | "tentative";
1110
+ /**
1111
+ * One emoji on one target, and who chose it.
1112
+ */
1113
+ ReactionGroup: {
1114
+ emoji: string;
1115
+ count: number;
1116
+ reacted: boolean;
1117
+ users: PluginApiSchemas["PluginPerson"][];
1118
+ };
1119
+ ResourceAccessLevel: "owner" | "write" | "read";
1120
+ /**
1121
+ * One `resource_grants` row — exactly the columns that define a grant: a
1122
+ * `level` for a user (`user_id`), an initiative role (`role_id`), all
1123
+ * initiative members (`all_initiative_members`), or an installed plug-in
1124
+ * (`plugin_install_id`). Exactly one grantee is set.
1125
+ */
1126
+ ResourceGrantSchema: {
1127
+ level: PluginApiSchemas["ResourceAccessLevel"];
1128
+ user_id?: string | null;
1129
+ role_id?: number | null;
1130
+ all_initiative_members?: boolean;
1131
+ plugin_install_id?: number | null;
1132
+ };
1133
+ SearchEntityType: "calendar" | "calendar_event" | "comment" | "counter" | "counter_group" | "dashboard" | "document" | "gallery" | "gallery_image" | "post" | "project" | "queue" | "queue_item" | "tag" | "task" | "wiki" | "wiki_page";
1134
+ /**
1135
+ * A jump-to target for the command palette: enough to render and route.
1136
+ */
1137
+ SearchSuggestion: {
1138
+ entity_type: PluginApiSchemas["SearchEntityType"];
1139
+ entity_id: number;
1140
+ /**
1141
+ * A person is mentioned as `@[](<reference>)`, by your reference for them,
1142
+ * with no name: read who they are from the members search (`members:read`).
1143
+ * Write a mention the same way. A stored file comes without its path:
1144
+ * `![alt]()`, `[name]()`.
1145
+ */
1146
+ title: string;
1147
+ initiative_id?: number | null;
1148
+ tool?: PluginApiSchemas["Tool"] | null;
1149
+ tool_id?: number | null;
1150
+ can_write?: boolean;
1151
+ tool_title?: string | null;
1152
+ initiative_name?: string | null;
1153
+ };
1154
+ SortDir: "asc" | "desc";
1155
+ SortField: {
1156
+ field: string;
1157
+ dir?: PluginApiSchemas["SortDir"];
1158
+ };
1159
+ /**
1160
+ * Add and/or remove tags across many entities of one type, atomically.
1161
+ */
1162
+ TagBulkEditRequest: {
1163
+ target_type: PluginApiSchemas["TagTarget"];
1164
+ target_ids: number[];
1165
+ add_tag_ids?: number[];
1166
+ remove_tag_ids?: number[];
1167
+ };
1168
+ TagBulkEditResponse: {
1169
+ updated_count: number;
1170
+ };
1171
+ TagRead: {
1172
+ name: string;
1173
+ color: string;
1174
+ id: number;
1175
+ community_id: string;
1176
+ created_at: string;
1177
+ updated_at: string;
1178
+ };
1179
+ /**
1180
+ * Lightweight tag representation for embedding in other schemas.
1181
+ */
1182
+ TagSummary: {
1183
+ id: number;
1184
+ name: string;
1185
+ color: string;
1186
+ };
1187
+ /**
1188
+ * Entity types a bulk tag edit can address.
1189
+ */
1190
+ TagTarget: "project" | "document" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki" | "task" | "queue_item" | "calendar_event" | "gallery_image" | "wiki_page";
1191
+ TaskCreate: {
1192
+ properties?: PluginApiSchemas["PropertyValueInput"][];
1193
+ title: string;
1194
+ priority?: PluginApiSchemas["TaskPriority"];
1195
+ start_date?: string | null;
1196
+ due_date?: string | null;
1197
+ recurrence?: string | null;
1198
+ recurrence_strategy?: "fixed" | "rolling";
1199
+ description?: string | null;
1200
+ project_id: number;
1201
+ tz?: string | null;
1202
+ assignee_ids?: string[];
1203
+ task_status_id?: number | null;
1204
+ tag_ids?: number[];
1205
+ checklist?: PluginApiSchemas["ChecklistItemInput"][];
1206
+ };
1207
+ /**
1208
+ * Lightweight schema for task list endpoints - excludes heavy nested data
1209
+ */
1210
+ TaskListRead: {
1211
+ title: string;
1212
+ priority: PluginApiSchemas["TaskPriority"];
1213
+ start_date: string | null;
1214
+ due_date: string | null;
1215
+ recurrence: string | null;
1216
+ recurrence_strategy: "fixed" | "rolling";
1217
+ description_excerpt: string | null;
1218
+ has_description: boolean;
1219
+ id: number;
1220
+ project_id: number;
1221
+ task_status_id: number;
1222
+ task_status: PluginApiSchemas["TaskStatusRead"];
1223
+ created_at: string;
1224
+ updated_at: string;
1225
+ completed_at: string | null;
1226
+ position: number;
1227
+ archived_at: string | null;
1228
+ created_by: string | null;
1229
+ assignees: PluginApiSchemas["PluginPerson"][];
1230
+ recurrence_occurrence_count: number;
1231
+ recurrence_shift: number;
1232
+ recurrence_until: string | null;
1233
+ comment_count: number;
1234
+ blocked_by_open_count: number;
1235
+ community_id: string | null;
1236
+ community_name: string | null;
1237
+ project_name: string | null;
1238
+ initiative_id: number | null;
1239
+ initiative_name: string | null;
1240
+ initiative_color: string | null;
1241
+ checklist_progress: PluginApiSchemas["ChecklistProgress"] | null;
1242
+ tags: PluginApiSchemas["TagSummary"][];
1243
+ properties: PluginApiSchemas["PropertySummary"][];
1244
+ };
1245
+ TaskListResponse: {
1246
+ total_count: number;
1247
+ page: number;
1248
+ page_size: number;
1249
+ has_next: boolean;
1250
+ has_prev: boolean;
1251
+ items: PluginApiSchemas["TaskListRead"][];
1252
+ sorting: string | null;
1253
+ };
1254
+ TaskMoveRequest: {
1255
+ target_project_id: number;
1256
+ };
1257
+ TaskPriority: "low" | "medium" | "high" | "urgent";
1258
+ TaskProjectSummary: {
1259
+ id: number;
1260
+ name: string;
1261
+ icon: string | null;
1262
+ initiative_id: number | null;
1263
+ initiative: PluginApiSchemas["InitiativeSummary"] | null;
1264
+ archived_at: string | null;
1265
+ is_template: boolean | null;
1266
+ };
1267
+ TaskRead: {
1268
+ title: string;
1269
+ priority: PluginApiSchemas["TaskPriority"];
1270
+ start_date: string | null;
1271
+ due_date: string | null;
1272
+ recurrence: string | null;
1273
+ recurrence_strategy: "fixed" | "rolling";
1274
+ description: string | null;
1275
+ id: number;
1276
+ project_id: number;
1277
+ task_status_id: number;
1278
+ task_status: PluginApiSchemas["TaskStatusRead"];
1279
+ created_at: string;
1280
+ updated_at: string;
1281
+ completed_at: string | null;
1282
+ position: number;
1283
+ archived_at: string | null;
1284
+ created_by: string | null;
1285
+ creator: PluginApiSchemas["PluginPerson"] | null;
1286
+ assignees: PluginApiSchemas["PluginPerson"][];
1287
+ recurrence_occurrence_count: number;
1288
+ recurrence_shift: number;
1289
+ recurrence_until: string | null;
1290
+ series_id: number | null;
1291
+ series_size: number;
1292
+ comment_count: number;
1293
+ blocked_by_open_count: number;
1294
+ project: PluginApiSchemas["TaskProjectSummary"] | null;
1295
+ checklist: PluginApiSchemas["ChecklistItem"][];
1296
+ checklist_progress: PluginApiSchemas["ChecklistProgress"] | null;
1297
+ tags: PluginApiSchemas["TagSummary"][];
1298
+ properties: PluginApiSchemas["PropertySummary"][];
1299
+ };
1300
+ TaskStatusCategory: "backlog" | "todo" | "in_progress" | "done";
1301
+ TaskStatusRead: {
1302
+ name: string;
1303
+ category: PluginApiSchemas["TaskStatusCategory"];
1304
+ position: number;
1305
+ is_default: boolean;
1306
+ color: string;
1307
+ icon: string;
1308
+ id: number;
1309
+ project_id: number;
1310
+ };
1311
+ TaskUpdate: {
1312
+ properties?: PluginApiSchemas["PropertyValueInput"][] | null;
1313
+ title?: string | null;
1314
+ description?: string | null;
1315
+ task_status_id?: number | null;
1316
+ priority?: PluginApiSchemas["TaskPriority"] | null;
1317
+ assignee_ids?: string[] | null;
1318
+ start_date?: string | null;
1319
+ due_date?: string | null;
1320
+ recurrence?: string | null;
1321
+ tz?: string | null;
1322
+ recurrence_strategy?: "fixed" | "rolling" | null;
1323
+ tag_ids?: number[] | null;
1324
+ checklist?: PluginApiSchemas["ChecklistItemInput"][] | null;
1325
+ scope?: "this" | "following" | "all" | null;
1326
+ };
1327
+ Tool: "project" | "document" | "queue" | "counter_group" | "calendar" | "dashboard" | "post" | "gallery" | "wiki";
1328
+ /**
1329
+ * What the caller may do to one of a tool's rows
1330
+ * (`permissions.client_access`).
1331
+ */
1332
+ ToolCan: {
1333
+ edit: boolean;
1334
+ contribute: boolean;
1335
+ delete: boolean;
1336
+ share: boolean;
1337
+ export: boolean;
1338
+ unarchive: boolean;
1339
+ };
1340
+ /**
1341
+ * What a duplicate of any tool may be told. Left out, the copy goes beside
1342
+ * its source as "<name> (Copy)"; in another initiative it keeps the name.
1343
+ */
1344
+ ToolDuplicateRequest: {
1345
+ name?: string | null;
1346
+ target_initiative_id?: number | null;
1347
+ };
1348
+ /**
1349
+ * Paginated envelope for the slim user search/typeahead endpoints.
1350
+ */
1351
+ UserSummaryListResponse: {
1352
+ total_count: number;
1353
+ page: number;
1354
+ page_size: number;
1355
+ has_next: boolean;
1356
+ has_prev: boolean;
1357
+ items: PluginApiSchemas["PluginPerson"][];
1358
+ };
1359
+ ValidationError: {
1360
+ loc: Array<string | number>;
1361
+ msg: string;
1362
+ type: string;
1363
+ input?: unknown;
1364
+ ctx?: Record<string, unknown>;
1365
+ };
1366
+ /**
1367
+ * Body for `POST /api/v1/c/{community_id}/webhooks/subscriptions`.
1368
+ */
1369
+ WebhookSubscriptionCreate: {
1370
+ target_url: string;
1371
+ event_types: string[];
1372
+ fields?: string[] | null;
1373
+ initiative_id?: number | null;
1374
+ };
1375
+ /**
1376
+ * One-time create response — includes the freshly-minted HMAC secret so the
1377
+ * receiver can record it. Never re-emitted on subsequent reads.
1378
+ */
1379
+ WebhookSubscriptionCreated: {
1380
+ id: number;
1381
+ community_ref: string;
1382
+ initiative_id: number | null;
1383
+ created_by_ref: string | null;
1384
+ target_url: string;
1385
+ event_types: string[];
1386
+ fields: string[] | null;
1387
+ active: boolean;
1388
+ dead_letter_count: number;
1389
+ created_at: string;
1390
+ updated_at: string;
1391
+ hmac_secret: string;
1392
+ };
1393
+ WikiCreate: {
1394
+ properties?: PluginApiSchemas["PropertyValueInput"][];
1395
+ name: string;
1396
+ description?: string | null;
1397
+ initiative_id: number;
1398
+ tag_ids?: number[] | null;
1399
+ grants?: PluginApiSchemas["ResourceGrantSchema"][];
1400
+ };
1401
+ WikiListResponse: {
1402
+ total_count: number;
1403
+ page: number;
1404
+ page_size: number;
1405
+ has_next: boolean;
1406
+ has_prev: boolean;
1407
+ items: PluginApiSchemas["WikiSummary"][];
1408
+ };
1409
+ /**
1410
+ * One heading written on a page.
1411
+ */
1412
+ WikiPageHeading: {
1413
+ text: string;
1414
+ level: number;
1415
+ anchor: string;
1416
+ };
1417
+ /**
1418
+ * What a row in a wiki's navigation actually is.
1419
+ */
1420
+ WikiPageKind: "page" | "document";
1421
+ /**
1422
+ * How a wiki's page tree is sorted.
1423
+ */
1424
+ WikiPageOrder: "manual" | "title" | "recently_updated";
1425
+ /**
1426
+ * One page, opened.
1427
+ */
1428
+ WikiPageRead: {
1429
+ id: number;
1430
+ wiki_id: number;
1431
+ community_id: string;
1432
+ kind: PluginApiSchemas["WikiPageKind"];
1433
+ parent_page_id: number | null;
1434
+ position: number;
1435
+ is_draft: boolean;
1436
+ title: string;
1437
+ slug: string;
1438
+ created_by: string | null;
1439
+ created_at: string;
1440
+ updated_at: string;
1441
+ headings: PluginApiSchemas["WikiPageHeading"][];
1442
+ tags: PluginApiSchemas["TagSummary"][];
1443
+ properties: PluginApiSchemas["PropertySummary"][];
1444
+ document_type: string | null;
1445
+ file_content_type: string | null;
1446
+ original_filename: string | null;
1447
+ smart_link_url: string | null;
1448
+ /**
1449
+ * A Lexical editor state. A person is mentioned by a node whose
1450
+ * `mentionUserId` is your reference for them, with `mentionName` and `text`
1451
+ * empty: read who they are from the members search (`members:read`). Write
1452
+ * a mention the same way. A stored file comes without its path: an image's
1453
+ * `src` and a link's `url` are empty.
1454
+ */
1455
+ content: Record<string, unknown>;
1456
+ content_version: string | null;
1457
+ comment_count: number;
1458
+ };
1459
+ /**
1460
+ * One page as the navigation draws it — no body.
1461
+ */
1462
+ WikiPageSummary: {
1463
+ id: number;
1464
+ wiki_id: number;
1465
+ community_id: string;
1466
+ kind: PluginApiSchemas["WikiPageKind"];
1467
+ parent_page_id: number | null;
1468
+ position: number;
1469
+ is_draft: boolean;
1470
+ title: string;
1471
+ slug: string;
1472
+ created_by: string | null;
1473
+ created_at: string;
1474
+ updated_at: string;
1475
+ headings: PluginApiSchemas["WikiPageHeading"][];
1476
+ tags: PluginApiSchemas["TagSummary"][];
1477
+ properties: PluginApiSchemas["PropertySummary"][];
1478
+ document_type: string | null;
1479
+ file_content_type: string | null;
1480
+ original_filename: string | null;
1481
+ smart_link_url: string | null;
1482
+ };
1483
+ /**
1484
+ * Every page of a wiki, in reading order — each page, then what is filed
1485
+ * under it.
1486
+ */
1487
+ WikiPageTree: {
1488
+ items: PluginApiSchemas["WikiPageSummary"][];
1489
+ };
1490
+ /**
1491
+ * A wiki on its own page. The same shape as its summary: the pages are
1492
+ * fetched as a tree of their own, because a wiki is navigated rather than
1493
+ * read end to end.
1494
+ */
1495
+ WikiRead: {
1496
+ archived_at: string | null;
1497
+ can: PluginApiSchemas["ToolCan"];
1498
+ id: number;
1499
+ initiative_id: number;
1500
+ community_id: string;
1501
+ created_by: string | null;
1502
+ created_at: string;
1503
+ updated_at: string;
1504
+ comments_enabled: boolean;
1505
+ tags: PluginApiSchemas["TagSummary"][];
1506
+ properties: PluginApiSchemas["PropertySummary"][];
1507
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
1508
+ name: string;
1509
+ description: string | null;
1510
+ home_page_id: number | null;
1511
+ page_order: PluginApiSchemas["WikiPageOrder"];
1512
+ contents_depth: number;
1513
+ show_connections: boolean;
1514
+ show_updated_at: boolean;
1515
+ reading_width: PluginApiSchemas["WikiReadingWidth"];
1516
+ accent_color: string | null;
1517
+ template_page_id: number | null;
1518
+ comment_count: number;
1519
+ };
1520
+ /**
1521
+ * How wide a page's body runs.
1522
+ */
1523
+ WikiReadingWidth: "wide" | "comfortable";
1524
+ WikiSummary: {
1525
+ archived_at: string | null;
1526
+ can: PluginApiSchemas["ToolCan"];
1527
+ id: number;
1528
+ initiative_id: number;
1529
+ community_id: string;
1530
+ created_by: string | null;
1531
+ created_at: string;
1532
+ updated_at: string;
1533
+ comments_enabled: boolean;
1534
+ tags: PluginApiSchemas["TagSummary"][];
1535
+ properties: PluginApiSchemas["PropertySummary"][];
1536
+ grants: PluginApiSchemas["ResourceGrantSchema"][];
1537
+ name: string;
1538
+ description: string | null;
1539
+ home_page_id: number | null;
1540
+ page_order: PluginApiSchemas["WikiPageOrder"];
1541
+ contents_depth: number;
1542
+ show_connections: boolean;
1543
+ show_updated_at: boolean;
1544
+ reading_width: PluginApiSchemas["WikiReadingWidth"];
1545
+ accent_color: string | null;
1546
+ template_page_id: number | null;
1547
+ comment_count: number;
1548
+ };
1549
+ WikiUpdate: {
1550
+ page_order?: PluginApiSchemas["WikiPageOrder"] | null;
1551
+ contents_depth?: number | null;
1552
+ show_connections?: boolean | null;
1553
+ show_updated_at?: boolean | null;
1554
+ reading_width?: PluginApiSchemas["WikiReadingWidth"] | null;
1555
+ accent_color?: string | null;
1556
+ template_page_id?: number | null;
1557
+ name?: string | null;
1558
+ description?: string | null;
1559
+ home_page_id?: number | null;
1560
+ };
1561
+ }
1562
+ /** Each operation's arguments, by where they go, and its answer. */
1563
+ export interface PluginApiOperations {
1564
+ create_subscription: {
1565
+ body: PluginApiSchemas["WebhookSubscriptionCreate"];
1566
+ answer: PluginApiSchemas["WebhookSubscriptionCreated"];
1567
+ };
1568
+ delete_subscription: {
1569
+ path: {
1570
+ subscription_id: number;
1571
+ };
1572
+ answer: void;
1573
+ };
1574
+ list_projects: {
1575
+ query: {
1576
+ /**
1577
+ * true lists what has been archived instead of what is live. Omit for the
1578
+ * live list, which is what every other view shows.
1579
+ */
1580
+ archived?: boolean | null;
1581
+ /**
1582
+ * Only templates (true) or only projects that are not templates (false).
1583
+ * Omit for both.
1584
+ */
1585
+ is_template?: boolean | null;
1586
+ /**
1587
+ * Full-text match over the row — its name and its description. Reads the
1588
+ * same index the search page does, so a list's filter box and a search
1589
+ * agree about what matches.
1590
+ */
1591
+ search?: string | null;
1592
+ /**
1593
+ * Only projects in this initiative. Omit for every initiative the caller
1594
+ * can see.
1595
+ */
1596
+ initiative_id?: number | null;
1597
+ /**
1598
+ * Return a lightweight projection (id, name, icon, initiative_id, can)
1599
+ * without documents, grants, tags, or the nested initiative. For project
1600
+ * pickers and other list-only callers.
1601
+ */
1602
+ slim?: boolean;
1603
+ /**
1604
+ * Only projects the caller may edit — the pickers that move work into a
1605
+ * project.
1606
+ */
1607
+ writable?: boolean;
1608
+ /**
1609
+ * Order by one of: name, initiative, updated_at. Omit to keep the
1610
+ * reader's own manual order.
1611
+ */
1612
+ sort_by?: string | null;
1613
+ /**
1614
+ * asc (default) or desc.
1615
+ */
1616
+ sort_dir?: string | null;
1617
+ /**
1618
+ * Only projects carrying any of these tags.
1619
+ */
1620
+ tag_ids?: number[] | null;
1621
+ /**
1622
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1623
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1624
+ */
1625
+ property_filters?: string | null;
1626
+ page?: number;
1627
+ page_size?: number;
1628
+ };
1629
+ answer: PluginApiSchemas["ProjectListResponse"];
1630
+ };
1631
+ create_project: {
1632
+ body: PluginApiSchemas["ProjectCreate"];
1633
+ answer: PluginApiSchemas["ProjectRead"];
1634
+ };
1635
+ list_documents: {
1636
+ query: {
1637
+ initiative_id?: number | null;
1638
+ /**
1639
+ * Filter to specific document IDs — for hydrating a known set of
1640
+ * documents without walking a collection. Maximum 100 IDs.
1641
+ */
1642
+ ids?: number[] | null;
1643
+ search?: string | null;
1644
+ /**
1645
+ * Filter by tag IDs
1646
+ */
1647
+ tag_ids?: number[] | null;
1648
+ /**
1649
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1650
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1651
+ */
1652
+ property_filters?: string | null;
1653
+ /**
1654
+ * Filter to documents with no tags
1655
+ */
1656
+ untagged?: boolean | null;
1657
+ /**
1658
+ * Only templates (true) or only documents that are not templates (false).
1659
+ * Omit for both.
1660
+ */
1661
+ is_template?: boolean | null;
1662
+ /**
1663
+ * Filter by document type
1664
+ */
1665
+ document_type?: PluginApiSchemas["DocumentType"] | null;
1666
+ page?: number;
1667
+ page_size?: number;
1668
+ /**
1669
+ * Order by one of: name, initiative, updated_at, created_at.
1670
+ */
1671
+ sort_by?: string | null;
1672
+ /**
1673
+ * asc (default) or desc.
1674
+ */
1675
+ sort_dir?: string | null;
1676
+ /**
1677
+ * true lists what has been archived instead of what is live. Omit for the
1678
+ * live list, which is what every other view shows.
1679
+ */
1680
+ archived?: boolean | null;
1681
+ };
1682
+ answer: PluginApiSchemas["DocumentListResponse"];
1683
+ };
1684
+ create_document: {
1685
+ body: PluginApiSchemas["DocumentCreate"];
1686
+ answer: PluginApiSchemas["DocumentRead"];
1687
+ };
1688
+ list_queues: {
1689
+ query: {
1690
+ initiative_id?: number | null;
1691
+ /**
1692
+ * Full-text match over the row — its name and its description. Reads the
1693
+ * same index the search page does, so a list's filter box and a search
1694
+ * agree about what matches.
1695
+ */
1696
+ search?: string | null;
1697
+ /**
1698
+ * Order by one of: name, initiative, updated_at. Omit for this tool's own
1699
+ * default order.
1700
+ */
1701
+ sort_by?: string | null;
1702
+ /**
1703
+ * asc (default) or desc.
1704
+ */
1705
+ sort_dir?: string | null;
1706
+ /**
1707
+ * Only queues carrying any of these tags.
1708
+ */
1709
+ tag_ids?: number[] | null;
1710
+ /**
1711
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1712
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1713
+ */
1714
+ property_filters?: string | null;
1715
+ /**
1716
+ * true lists what has been archived instead of what is live. Omit for the
1717
+ * live list, which is what every other view shows.
1718
+ */
1719
+ archived?: boolean | null;
1720
+ /**
1721
+ * Only running queues, or only stopped ones.
1722
+ */
1723
+ is_active?: boolean | null;
1724
+ /**
1725
+ * Also send what each row's card shows of what is inside it, read for the
1726
+ * whole page at once.
1727
+ */
1728
+ include_preview?: boolean;
1729
+ page?: number;
1730
+ page_size?: number;
1731
+ };
1732
+ answer: PluginApiSchemas["QueueListResponse"];
1733
+ };
1734
+ create_queue: {
1735
+ body: PluginApiSchemas["QueueCreate"];
1736
+ answer: PluginApiSchemas["QueueRead"];
1737
+ };
1738
+ list_counter_groups: {
1739
+ query: {
1740
+ initiative_id?: number | null;
1741
+ /**
1742
+ * Full-text match over the row — its name and its description. Reads the
1743
+ * same index the search page does, so a list's filter box and a search
1744
+ * agree about what matches.
1745
+ */
1746
+ search?: string | null;
1747
+ /**
1748
+ * Order by one of: name, initiative, updated_at. Omit for this tool's own
1749
+ * default order.
1750
+ */
1751
+ sort_by?: string | null;
1752
+ /**
1753
+ * asc (default) or desc.
1754
+ */
1755
+ sort_dir?: string | null;
1756
+ /**
1757
+ * Only counter groups carrying any of these tags.
1758
+ */
1759
+ tag_ids?: number[] | null;
1760
+ /**
1761
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1762
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1763
+ */
1764
+ property_filters?: string | null;
1765
+ /**
1766
+ * true lists what has been archived instead of what is live. Omit for the
1767
+ * live list, which is what every other view shows.
1768
+ */
1769
+ archived?: boolean | null;
1770
+ /**
1771
+ * Also send what each row's card shows of what is inside it, read for the
1772
+ * whole page at once.
1773
+ */
1774
+ include_preview?: boolean;
1775
+ page?: number;
1776
+ page_size?: number;
1777
+ };
1778
+ answer: PluginApiSchemas["CounterGroupListResponse"];
1779
+ };
1780
+ create_counter_group: {
1781
+ body: PluginApiSchemas["CounterGroupCreate"];
1782
+ answer: PluginApiSchemas["CounterGroupRead"];
1783
+ };
1784
+ list_calendars: {
1785
+ query: {
1786
+ initiative_id?: number | null;
1787
+ scope?: "community" | null;
1788
+ /**
1789
+ * Full-text match over the row — its name and its description. Reads the
1790
+ * same index the search page does, so a list's filter box and a search
1791
+ * agree about what matches.
1792
+ */
1793
+ search?: string | null;
1794
+ /**
1795
+ * Order by one of: name, initiative, updated_at. Omit for this tool's own
1796
+ * default order.
1797
+ */
1798
+ sort_by?: string | null;
1799
+ /**
1800
+ * asc (default) or desc.
1801
+ */
1802
+ sort_dir?: string | null;
1803
+ /**
1804
+ * Only calendars carrying any of these tags.
1805
+ */
1806
+ tag_ids?: number[] | null;
1807
+ /**
1808
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1809
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1810
+ */
1811
+ property_filters?: string | null;
1812
+ /**
1813
+ * true lists what has been archived instead of what is live. Omit for the
1814
+ * live list, which is what every other view shows.
1815
+ */
1816
+ archived?: boolean | null;
1817
+ page?: number;
1818
+ page_size?: number;
1819
+ };
1820
+ answer: PluginApiSchemas["CalendarListResponse"];
1821
+ };
1822
+ create_calendar: {
1823
+ body: PluginApiSchemas["CalendarCreate"];
1824
+ answer: PluginApiSchemas["CalendarRead"];
1825
+ };
1826
+ list_posts: {
1827
+ query: {
1828
+ initiative_id?: number | null;
1829
+ /**
1830
+ * Full-text match over the notice — its headline and its body. Reads the
1831
+ * same index the search page does, so the board's filter and a search
1832
+ * agree about what matches.
1833
+ */
1834
+ search?: string | null;
1835
+ /**
1836
+ * Order by one of: name, initiative, updated_at. Omit for the board order
1837
+ * — live pins first, then newest first.
1838
+ */
1839
+ sort_by?: string | null;
1840
+ /**
1841
+ * asc (default) or desc.
1842
+ */
1843
+ sort_dir?: string | null;
1844
+ /**
1845
+ * Only posts carrying any of these tags.
1846
+ */
1847
+ tag_ids?: number[] | null;
1848
+ /**
1849
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1850
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1851
+ */
1852
+ property_filters?: string | null;
1853
+ /**
1854
+ * true lists what has been archived instead of what is live. Omit for the
1855
+ * live list, which is what every other view shows.
1856
+ */
1857
+ archived?: boolean | null;
1858
+ /**
1859
+ * Only notices this reader has not read yet.
1860
+ */
1861
+ unread?: boolean;
1862
+ /**
1863
+ * Start the board at this instant and go back — inclusive, and measured
1864
+ * by the same date the feed is ordered by. This is how a timeline jumps
1865
+ * to a month without paging through everything since. An anchored board
1866
+ * is strictly chronological: the pinned band steps aside, because a pin
1867
+ * says what matters now rather than what mattered then.
1868
+ */
1869
+ until?: string | null;
1870
+ page?: number;
1871
+ /**
1872
+ * Posts per page. Small by default: a board renders each post's body, so
1873
+ * a page is that many editors to mount.
1874
+ */
1875
+ page_size?: number;
1876
+ };
1877
+ answer: PluginApiSchemas["PostListResponse"];
1878
+ };
1879
+ create_post: {
1880
+ body: PluginApiSchemas["PostCreate"];
1881
+ answer: PluginApiSchemas["PostRead"];
1882
+ };
1883
+ list_galleries: {
1884
+ query: {
1885
+ initiative_id?: number | null;
1886
+ /**
1887
+ * Full-text match over the gallery's name and description, through the
1888
+ * same index the search page reads.
1889
+ */
1890
+ search?: string | null;
1891
+ /**
1892
+ * Order by one of: name, initiative, updated_at. Omit for newest first.
1893
+ */
1894
+ sort_by?: string | null;
1895
+ /**
1896
+ * asc (default) or desc.
1897
+ */
1898
+ sort_dir?: string | null;
1899
+ /**
1900
+ * Only galleries carrying any of these tags.
1901
+ */
1902
+ tag_ids?: number[] | null;
1903
+ /**
1904
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1905
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1906
+ */
1907
+ property_filters?: string | null;
1908
+ /**
1909
+ * true lists what has been archived instead of what is live. Omit for the
1910
+ * live list, which is what every other view shows.
1911
+ */
1912
+ archived?: boolean | null;
1913
+ page?: number;
1914
+ page_size?: number;
1915
+ };
1916
+ answer: PluginApiSchemas["GalleryListResponse"];
1917
+ };
1918
+ create_gallery: {
1919
+ body: PluginApiSchemas["GalleryCreate"];
1920
+ answer: PluginApiSchemas["GalleryRead"];
1921
+ };
1922
+ list_wikis: {
1923
+ query: {
1924
+ initiative_id?: number | null;
1925
+ /**
1926
+ * Full-text match over the wiki's name and description, through the same
1927
+ * index the search page reads.
1928
+ */
1929
+ search?: string | null;
1930
+ /**
1931
+ * Order by one of: name, initiative, updated_at. Omit for newest first.
1932
+ */
1933
+ sort_by?: string | null;
1934
+ /**
1935
+ * asc (default) or desc.
1936
+ */
1937
+ sort_dir?: string | null;
1938
+ /**
1939
+ * Only wikis carrying any of these tags.
1940
+ */
1941
+ tag_ids?: number[] | null;
1942
+ /**
1943
+ * JSON-encoded list of property-value filters, e.g. `[{"property_id": 12,
1944
+ * "op": "eq", "value": "live"}]`. Maximum 5 conditions per request.
1945
+ */
1946
+ property_filters?: string | null;
1947
+ /**
1948
+ * true lists what has been archived instead of what is live. Omit for the
1949
+ * live list, which is what every other view shows.
1950
+ */
1951
+ archived?: boolean | null;
1952
+ page?: number;
1953
+ page_size?: number;
1954
+ };
1955
+ answer: PluginApiSchemas["WikiListResponse"];
1956
+ };
1957
+ create_wiki: {
1958
+ body: PluginApiSchemas["WikiCreate"];
1959
+ answer: PluginApiSchemas["WikiRead"];
1960
+ };
1961
+ read_project: {
1962
+ path: {
1963
+ project_id: number;
1964
+ };
1965
+ query: {
1966
+ /**
1967
+ * Also return the resource if it is in the trash. For reading a resource
1968
+ * back after a deleted event — the row still exists until retention
1969
+ * purges it, and access is checked exactly as for a live one.
1970
+ */
1971
+ include_deleted?: boolean;
1972
+ };
1973
+ answer: PluginApiSchemas["ProjectRead"];
1974
+ };
1975
+ update_project: {
1976
+ path: {
1977
+ project_id: number;
1978
+ };
1979
+ body: PluginApiSchemas["ProjectUpdate"];
1980
+ answer: PluginApiSchemas["ProjectRead"];
1981
+ };
1982
+ list_task_statuses: {
1983
+ path: {
1984
+ project_id: number;
1985
+ };
1986
+ answer: PluginApiSchemas["TaskStatusRead"][];
1987
+ };
1988
+ list_initiative_task_statuses: {
1989
+ path: {
1990
+ initiative_id: number;
1991
+ };
1992
+ answer: PluginApiSchemas["InitiativeTaskStatusRead"][];
1993
+ };
1994
+ list_tasks: {
1995
+ query: {
1996
+ /**
1997
+ * JSON list of filter conditions, AND-ed together. Each object: {"field":
1998
+ * "<column>", "op": "<operator>", "value": <val>}. Any Task column is
1999
+ * valid plus virtual fields: status_category, assignee_ids, tag_ids,
2000
+ * initiative_ids. An object with a "conditions" key is an AND/OR group:
2001
+ * {"logic": "or", "conditions": [...]}.
2002
+ */
2003
+ conditions?: Array<PluginApiSchemas["FilterCondition"] | PluginApiSchemas["FilterGroup"]>;
2004
+ /**
2005
+ * Include archived tasks
2006
+ */
2007
+ include_archived?: boolean;
2008
+ page?: number;
2009
+ page_size?: number;
2010
+ /**
2011
+ * JSON list of sort fields: [{"field": "due_date", "dir": "desc"}]
2012
+ */
2013
+ sorting?: PluginApiSchemas["SortField"][];
2014
+ /**
2015
+ * IANA timezone name (e.g. America/Los_Angeles) for date_group
2016
+ * calculation
2017
+ */
2018
+ tz?: string | null;
2019
+ };
2020
+ answer: PluginApiSchemas["TaskListResponse"];
2021
+ };
2022
+ create_task: {
2023
+ body: PluginApiSchemas["TaskCreate"];
2024
+ answer: PluginApiSchemas["TaskRead"];
2025
+ };
2026
+ read_task: {
2027
+ path: {
2028
+ task_id: number;
2029
+ };
2030
+ query: {
2031
+ /**
2032
+ * Also return the resource if it is in the trash. For reading a resource
2033
+ * back after a deleted event — the row still exists until retention
2034
+ * purges it, and access is checked exactly as for a live one.
2035
+ */
2036
+ include_deleted?: boolean;
2037
+ };
2038
+ answer: PluginApiSchemas["TaskRead"];
2039
+ };
2040
+ update_task: {
2041
+ path: {
2042
+ task_id: number;
2043
+ };
2044
+ body: PluginApiSchemas["TaskUpdate"];
2045
+ answer: PluginApiSchemas["TaskRead"];
2046
+ };
2047
+ move_task: {
2048
+ path: {
2049
+ task_id: number;
2050
+ };
2051
+ body: PluginApiSchemas["TaskMoveRequest"];
2052
+ answer: PluginApiSchemas["TaskRead"];
2053
+ };
2054
+ duplicate_task: {
2055
+ path: {
2056
+ task_id: number;
2057
+ };
2058
+ answer: PluginApiSchemas["TaskRead"];
2059
+ };
2060
+ skip_task: {
2061
+ path: {
2062
+ task_id: number;
2063
+ };
2064
+ answer: PluginApiSchemas["TaskRead"];
2065
+ };
2066
+ toggle_checklist_item: {
2067
+ path: {
2068
+ task_id: number;
2069
+ item_id: string;
2070
+ };
2071
+ body: PluginApiSchemas["ChecklistItemToggle"];
2072
+ answer: PluginApiSchemas["ChecklistItem"][];
2073
+ };
2074
+ list_comments: {
2075
+ query: {
2076
+ task_id?: number | null;
2077
+ document_id?: number | null;
2078
+ project_id?: number | null;
2079
+ queue_id?: number | null;
2080
+ counter_group_id?: number | null;
2081
+ calendar_id?: number | null;
2082
+ dashboard_id?: number | null;
2083
+ post_id?: number | null;
2084
+ gallery_id?: number | null;
2085
+ wiki_id?: number | null;
2086
+ wiki_page_id?: number | null;
2087
+ limit?: number;
2088
+ cursor?: string | null;
2089
+ };
2090
+ answer: PluginApiSchemas["CommentListResponse"];
2091
+ };
2092
+ create_comment: {
2093
+ body: PluginApiSchemas["CommentCreate"];
2094
+ answer: PluginApiSchemas["CommentRead"];
2095
+ };
2096
+ read_comment: {
2097
+ path: {
2098
+ comment_id: number;
2099
+ };
2100
+ query: {
2101
+ /**
2102
+ * Also return the resource if it is in the trash. For reading a resource
2103
+ * back after a deleted event — the row still exists until retention
2104
+ * purges it, and access is checked exactly as for a live one.
2105
+ */
2106
+ include_deleted?: boolean;
2107
+ };
2108
+ answer: PluginApiSchemas["CommentRead"];
2109
+ };
2110
+ list_initiatives: {
2111
+ query: {
2112
+ scope?: PluginApiSchemas["InitiativeListScope"];
2113
+ };
2114
+ answer: PluginApiSchemas["InitiativeRead"][];
2115
+ };
2116
+ get_initiative: {
2117
+ path: {
2118
+ initiative_id: number;
2119
+ };
2120
+ query: {
2121
+ /**
2122
+ * Also return the resource if it is in the trash. For reading a resource
2123
+ * back after a deleted event — the row still exists until retention
2124
+ * purges it, and access is checked exactly as for a live one.
2125
+ */
2126
+ include_deleted?: boolean;
2127
+ };
2128
+ answer: PluginApiSchemas["InitiativeRead"];
2129
+ };
2130
+ read_document: {
2131
+ path: {
2132
+ document_id: number;
2133
+ };
2134
+ query: {
2135
+ /**
2136
+ * Include the document body. Pass false for the metadata alone — a
2137
+ * document's body is the largest thing this API returns, and a caller
2138
+ * reacting to a change (a name, a tag, a property) does not need it.
2139
+ * Everything else is unchanged.
2140
+ */
2141
+ include_content?: boolean;
2142
+ /**
2143
+ * Also return the resource if it is in the trash. For reading a resource
2144
+ * back after a deleted event — the row still exists until retention
2145
+ * purges it, and access is checked exactly as for a live one.
2146
+ */
2147
+ include_deleted?: boolean;
2148
+ };
2149
+ answer: PluginApiSchemas["DocumentRead"];
2150
+ };
2151
+ update_document: {
2152
+ path: {
2153
+ document_id: number;
2154
+ };
2155
+ body: PluginApiSchemas["DocumentUpdate"];
2156
+ answer: PluginApiSchemas["DocumentRead"];
2157
+ };
2158
+ read_queue: {
2159
+ path: {
2160
+ queue_id: number;
2161
+ };
2162
+ query: {
2163
+ /**
2164
+ * Also return the resource if it is in the trash. For reading a resource
2165
+ * back after a deleted event — the row still exists until retention
2166
+ * purges it, and access is checked exactly as for a live one.
2167
+ */
2168
+ include_deleted?: boolean;
2169
+ };
2170
+ answer: PluginApiSchemas["QueueRead"];
2171
+ };
2172
+ update_queue: {
2173
+ path: {
2174
+ queue_id: number;
2175
+ };
2176
+ body: PluginApiSchemas["QueueUpdate"];
2177
+ answer: PluginApiSchemas["QueueRead"];
2178
+ };
2179
+ start_queue: {
2180
+ path: {
2181
+ queue_id: number;
2182
+ };
2183
+ answer: PluginApiSchemas["QueueRead"];
2184
+ };
2185
+ stop_queue: {
2186
+ path: {
2187
+ queue_id: number;
2188
+ };
2189
+ answer: PluginApiSchemas["QueueRead"];
2190
+ };
2191
+ advance_turn: {
2192
+ path: {
2193
+ queue_id: number;
2194
+ };
2195
+ answer: PluginApiSchemas["QueueRead"];
2196
+ };
2197
+ previous_turn: {
2198
+ path: {
2199
+ queue_id: number;
2200
+ };
2201
+ answer: PluginApiSchemas["QueueRead"];
2202
+ };
2203
+ set_active_item: {
2204
+ path: {
2205
+ queue_id: number;
2206
+ item_id: number;
2207
+ };
2208
+ answer: PluginApiSchemas["QueueRead"];
2209
+ };
2210
+ reset_queue: {
2211
+ path: {
2212
+ queue_id: number;
2213
+ };
2214
+ answer: PluginApiSchemas["QueueRead"];
2215
+ };
2216
+ hold_current_turn: {
2217
+ path: {
2218
+ queue_id: number;
2219
+ };
2220
+ answer: PluginApiSchemas["QueueRead"];
2221
+ };
2222
+ release_held_item: {
2223
+ path: {
2224
+ queue_id: number;
2225
+ item_id: number;
2226
+ };
2227
+ body: PluginApiSchemas["QueueReleaseRequest"];
2228
+ answer: PluginApiSchemas["QueueRead"];
2229
+ };
2230
+ read_queue_item: {
2231
+ path: {
2232
+ item_id: number;
2233
+ };
2234
+ query: {
2235
+ /**
2236
+ * Also return the resource if it is in the trash. For reading a resource
2237
+ * back after a deleted event — the row still exists until retention
2238
+ * purges it, and access is checked exactly as for a live one.
2239
+ */
2240
+ include_deleted?: boolean;
2241
+ };
2242
+ answer: PluginApiSchemas["QueueItemRead"];
2243
+ };
2244
+ update_queue_item: {
2245
+ path: {
2246
+ item_id: number;
2247
+ };
2248
+ body: PluginApiSchemas["QueueItemUpdate"];
2249
+ answer: PluginApiSchemas["QueueItemRead"];
2250
+ };
2251
+ duplicate_queue_item: {
2252
+ path: {
2253
+ item_id: number;
2254
+ };
2255
+ answer: PluginApiSchemas["QueueItemRead"];
2256
+ };
2257
+ read_counter_group: {
2258
+ path: {
2259
+ group_id: number;
2260
+ };
2261
+ query: {
2262
+ /**
2263
+ * Also return the resource if it is in the trash. For reading a resource
2264
+ * back after a deleted event — the row still exists until retention
2265
+ * purges it, and access is checked exactly as for a live one.
2266
+ */
2267
+ include_deleted?: boolean;
2268
+ };
2269
+ answer: PluginApiSchemas["CounterGroupRead"];
2270
+ };
2271
+ update_counter_group: {
2272
+ path: {
2273
+ group_id: number;
2274
+ };
2275
+ body: PluginApiSchemas["CounterGroupUpdate"];
2276
+ answer: PluginApiSchemas["CounterGroupRead"];
2277
+ };
2278
+ read_counter: {
2279
+ path: {
2280
+ counter_id: number;
2281
+ };
2282
+ query: {
2283
+ /**
2284
+ * Also return the resource if it is in the trash. For reading a resource
2285
+ * back after a deleted event — the row still exists until retention
2286
+ * purges it, and access is checked exactly as for a live one.
2287
+ */
2288
+ include_deleted?: boolean;
2289
+ };
2290
+ answer: PluginApiSchemas["CounterRead"];
2291
+ };
2292
+ duplicate_counter: {
2293
+ path: {
2294
+ counter_id: number;
2295
+ };
2296
+ answer: PluginApiSchemas["CounterRead"];
2297
+ };
2298
+ set_counter_count: {
2299
+ path: {
2300
+ counter_id: number;
2301
+ };
2302
+ body: PluginApiSchemas["CounterSetCountRequest"];
2303
+ answer: PluginApiSchemas["CounterRead"];
2304
+ };
2305
+ step_counter: {
2306
+ path: {
2307
+ counter_id: number;
2308
+ };
2309
+ body: PluginApiSchemas["CounterStepRequest"];
2310
+ answer: PluginApiSchemas["CounterRead"];
2311
+ };
2312
+ reset_counter: {
2313
+ path: {
2314
+ counter_id: number;
2315
+ };
2316
+ answer: PluginApiSchemas["CounterRead"];
2317
+ };
2318
+ read_calendar: {
2319
+ path: {
2320
+ calendar_id: number;
2321
+ };
2322
+ query: {
2323
+ /**
2324
+ * Also return the resource if it is in the trash. For reading a resource
2325
+ * back after a deleted event — the row still exists until retention
2326
+ * purges it, and access is checked exactly as for a live one.
2327
+ */
2328
+ include_deleted?: boolean;
2329
+ };
2330
+ answer: PluginApiSchemas["CalendarRead"];
2331
+ };
2332
+ update_calendar: {
2333
+ path: {
2334
+ calendar_id: number;
2335
+ };
2336
+ body: PluginApiSchemas["CalendarUpdate"];
2337
+ answer: PluginApiSchemas["CalendarRead"];
2338
+ };
2339
+ read_post: {
2340
+ path: {
2341
+ post_id: number;
2342
+ };
2343
+ query: {
2344
+ /**
2345
+ * Also return the resource if it is in the trash. For reading a resource
2346
+ * back after a deleted event — the row still exists until retention
2347
+ * purges it, and access is checked exactly as for a live one.
2348
+ */
2349
+ include_deleted?: boolean;
2350
+ };
2351
+ answer: PluginApiSchemas["PostRead"];
2352
+ };
2353
+ update_post: {
2354
+ path: {
2355
+ post_id: number;
2356
+ };
2357
+ body: PluginApiSchemas["PostUpdate"];
2358
+ answer: PluginApiSchemas["PostRead"];
2359
+ };
2360
+ set_post_pin: {
2361
+ path: {
2362
+ post_id: number;
2363
+ };
2364
+ body: PluginApiSchemas["PostPinUpdate"];
2365
+ answer: PluginApiSchemas["PostRead"];
2366
+ };
2367
+ read_gallery: {
2368
+ path: {
2369
+ gallery_id: number;
2370
+ };
2371
+ query: {
2372
+ /**
2373
+ * Also return the resource if it is in the trash. For reading a resource
2374
+ * back after a deleted event — the row still exists until retention
2375
+ * purges it, and access is checked exactly as for a live one.
2376
+ */
2377
+ include_deleted?: boolean;
2378
+ };
2379
+ answer: PluginApiSchemas["GalleryRead"];
2380
+ };
2381
+ update_gallery: {
2382
+ path: {
2383
+ gallery_id: number;
2384
+ };
2385
+ body: PluginApiSchemas["GalleryUpdate"];
2386
+ answer: PluginApiSchemas["GalleryRead"];
2387
+ };
2388
+ list_gallery_images: {
2389
+ path: {
2390
+ gallery_id: number;
2391
+ };
2392
+ query: {
2393
+ /**
2394
+ * Only pictures carrying ANY of these tags.
2395
+ */
2396
+ tag_ids?: number[] | null;
2397
+ /**
2398
+ * Match on title, caption or filename.
2399
+ */
2400
+ search?: string | null;
2401
+ /**
2402
+ * Read the gallery in the order it was filled rather than newest first.
2403
+ */
2404
+ oldest_first?: boolean;
2405
+ /**
2406
+ * Start the list at this instant, inclusive, measured by upload time —
2407
+ * which is what the list is ordered by. This is how a timeline jumps to a
2408
+ * month without paging through everything since. It follows the list's
2409
+ * own direction: newest first it is a ceiling and the page walks back
2410
+ * from it, oldest first a floor and the page walks forward, so pair it
2411
+ * with the matching end of the timeline bucket.
2412
+ */
2413
+ until?: string | null;
2414
+ page?: number;
2415
+ page_size?: number;
2416
+ };
2417
+ answer: PluginApiSchemas["GalleryImageListResponse"];
2418
+ };
2419
+ read_wiki: {
2420
+ path: {
2421
+ wiki_id: number;
2422
+ };
2423
+ answer: PluginApiSchemas["WikiRead"];
2424
+ };
2425
+ update_wiki: {
2426
+ path: {
2427
+ wiki_id: number;
2428
+ };
2429
+ body: PluginApiSchemas["WikiUpdate"];
2430
+ answer: PluginApiSchemas["WikiRead"];
2431
+ };
2432
+ list_wiki_pages: {
2433
+ path: {
2434
+ wiki_id: number;
2435
+ };
2436
+ answer: PluginApiSchemas["WikiPageTree"];
2437
+ };
2438
+ read_wiki_page: {
2439
+ path: {
2440
+ page_id: number;
2441
+ };
2442
+ answer: PluginApiSchemas["WikiPageRead"];
2443
+ };
2444
+ duplicate_wiki_page: {
2445
+ path: {
2446
+ page_id: number;
2447
+ };
2448
+ answer: PluginApiSchemas["WikiPageRead"];
2449
+ };
2450
+ read_calendar_event: {
2451
+ path: {
2452
+ event_id: number;
2453
+ };
2454
+ query: {
2455
+ /**
2456
+ * One occurrence of a repeating event, whose answers to show.
2457
+ */
2458
+ occurrence?: string | null;
2459
+ /**
2460
+ * Also return the resource if it is in the trash. For reading a resource
2461
+ * back after a deleted event — the row still exists until retention
2462
+ * purges it, and access is checked exactly as for a live one.
2463
+ */
2464
+ include_deleted?: boolean;
2465
+ };
2466
+ answer: PluginApiSchemas["CalendarEventRead"];
2467
+ };
2468
+ update_calendar_event: {
2469
+ path: {
2470
+ event_id: number;
2471
+ };
2472
+ body: PluginApiSchemas["CalendarEventUpdate"];
2473
+ answer: PluginApiSchemas["CalendarEventRead"];
2474
+ };
2475
+ create_calendar_event: {
2476
+ body: PluginApiSchemas["CalendarEventCreate"];
2477
+ answer: PluginApiSchemas["CalendarEventRead"];
2478
+ };
2479
+ duplicate_calendar_event: {
2480
+ path: {
2481
+ event_id: number;
2482
+ };
2483
+ query: {
2484
+ /**
2485
+ * One date of a repeating event, copied as an event of its own.
2486
+ */
2487
+ occurrence?: string | null;
2488
+ };
2489
+ answer: PluginApiSchemas["CalendarEventRead"];
2490
+ };
2491
+ open_occurrence: {
2492
+ path: {
2493
+ event_id: number;
2494
+ };
2495
+ body: PluginApiSchemas["OccurrenceRequest"];
2496
+ answer: PluginApiSchemas["CalendarEventRead"];
2497
+ };
2498
+ detach_occurrence: {
2499
+ path: {
2500
+ event_id: number;
2501
+ };
2502
+ body: PluginApiSchemas["OccurrenceRequest"];
2503
+ answer: PluginApiSchemas["CalendarEventRead"];
2504
+ };
2505
+ restore_occurrence: {
2506
+ path: {
2507
+ event_id: number;
2508
+ };
2509
+ body: PluginApiSchemas["OccurrenceRequest"];
2510
+ answer: PluginApiSchemas["CalendarEventRead"];
2511
+ };
2512
+ add_occurrence: {
2513
+ path: {
2514
+ event_id: number;
2515
+ };
2516
+ body: PluginApiSchemas["OccurrenceRequest"];
2517
+ answer: PluginApiSchemas["CalendarEventRead"];
2518
+ };
2519
+ set_attendees: {
2520
+ path: {
2521
+ event_id: number;
2522
+ };
2523
+ query: {
2524
+ scope?: "this" | "following" | "all" | null;
2525
+ occurrence?: string | null;
2526
+ };
2527
+ body: string[];
2528
+ answer: PluginApiSchemas["CalendarEventRead"];
2529
+ };
2530
+ list_tags: {
2531
+ answer: PluginApiSchemas["TagRead"][];
2532
+ };
2533
+ bulk_edit_tags: {
2534
+ body: PluginApiSchemas["TagBulkEditRequest"];
2535
+ answer: PluginApiSchemas["TagBulkEditResponse"];
2536
+ };
2537
+ set_project_grants: {
2538
+ path: {
2539
+ project_id: number;
2540
+ };
2541
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2542
+ answer: PluginApiSchemas["ProjectRead"];
2543
+ };
2544
+ set_document_grants: {
2545
+ path: {
2546
+ document_id: number;
2547
+ };
2548
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2549
+ answer: PluginApiSchemas["DocumentRead"];
2550
+ };
2551
+ set_queue_grants: {
2552
+ path: {
2553
+ queue_id: number;
2554
+ };
2555
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2556
+ answer: PluginApiSchemas["QueueRead"];
2557
+ };
2558
+ set_counter_group_grants: {
2559
+ path: {
2560
+ group_id: number;
2561
+ };
2562
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2563
+ answer: PluginApiSchemas["CounterGroupRead"];
2564
+ };
2565
+ set_calendar_grants: {
2566
+ path: {
2567
+ calendar_id: number;
2568
+ };
2569
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2570
+ answer: PluginApiSchemas["CalendarRead"];
2571
+ };
2572
+ set_post_grants: {
2573
+ path: {
2574
+ post_id: number;
2575
+ };
2576
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2577
+ answer: PluginApiSchemas["PostRead"];
2578
+ };
2579
+ set_gallery_grants: {
2580
+ path: {
2581
+ gallery_id: number;
2582
+ };
2583
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2584
+ answer: PluginApiSchemas["GalleryRead"];
2585
+ };
2586
+ set_wiki_grants: {
2587
+ path: {
2588
+ wiki_id: number;
2589
+ };
2590
+ body: PluginApiSchemas["ResourceGrantSchema"][];
2591
+ answer: PluginApiSchemas["WikiRead"];
2592
+ };
2593
+ duplicate_project: {
2594
+ path: {
2595
+ project_id: number;
2596
+ };
2597
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2598
+ answer: PluginApiSchemas["ProjectRead"];
2599
+ };
2600
+ duplicate_document: {
2601
+ path: {
2602
+ document_id: number;
2603
+ };
2604
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2605
+ answer: PluginApiSchemas["DocumentRead"];
2606
+ };
2607
+ duplicate_queue: {
2608
+ path: {
2609
+ queue_id: number;
2610
+ };
2611
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2612
+ answer: PluginApiSchemas["QueueRead"];
2613
+ };
2614
+ duplicate_counter_group: {
2615
+ path: {
2616
+ group_id: number;
2617
+ };
2618
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2619
+ answer: PluginApiSchemas["CounterGroupRead"];
2620
+ };
2621
+ duplicate_calendar: {
2622
+ path: {
2623
+ calendar_id: number;
2624
+ };
2625
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2626
+ answer: PluginApiSchemas["CalendarRead"];
2627
+ };
2628
+ duplicate_post: {
2629
+ path: {
2630
+ post_id: number;
2631
+ };
2632
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2633
+ answer: PluginApiSchemas["PostRead"];
2634
+ };
2635
+ duplicate_gallery: {
2636
+ path: {
2637
+ gallery_id: number;
2638
+ };
2639
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2640
+ answer: PluginApiSchemas["GalleryRead"];
2641
+ };
2642
+ duplicate_wiki: {
2643
+ path: {
2644
+ wiki_id: number;
2645
+ };
2646
+ body: PluginApiSchemas["ToolDuplicateRequest"] | null;
2647
+ answer: PluginApiSchemas["WikiRead"];
2648
+ };
2649
+ suggest_community: {
2650
+ query: {
2651
+ /**
2652
+ * What to jump to.
2653
+ */
2654
+ search: string;
2655
+ /**
2656
+ * Restrict to these entity types. Omit for the default scope (calendar,
2657
+ * calendar_event, counter, counter_group, dashboard, document, gallery,
2658
+ * gallery_image, post, project, queue, queue_item, tag, task, wiki,
2659
+ * wiki_page); naming a type reaches it explicitly.
2660
+ */
2661
+ types?: PluginApiSchemas["SearchEntityType"][] | null;
2662
+ /**
2663
+ * Restrict to one initiative.
2664
+ */
2665
+ initiative_id?: number | null;
2666
+ /**
2667
+ * Omit for both. `true` returns only templates (a template picker),
2668
+ * `false` only real content (a picker choosing where content goes).
2669
+ */
2670
+ is_template?: boolean | null;
2671
+ /**
2672
+ * The thing being written in, as a reference (`document:12`). It is left
2673
+ * out of the answer: a thing does not point at itself. A reference that
2674
+ * names nothing narrows nothing.
2675
+ */
2676
+ subject?: string | null;
2677
+ limit?: number;
2678
+ };
2679
+ answer: PluginApiSchemas["SearchSuggestion"][];
2680
+ };
2681
+ list_property_definitions: {
2682
+ query: {
2683
+ initiative_id?: number | null;
2684
+ };
2685
+ answer: PluginApiSchemas["PropertyDefinitionRead"][];
2686
+ };
2687
+ set_properties: {
2688
+ path: {
2689
+ target: PluginApiSchemas["PropertyTarget"];
2690
+ entity_id: number;
2691
+ };
2692
+ body: PluginApiSchemas["PropertyValuesSetRequest"];
2693
+ answer: PluginApiSchemas["PropertySummary"][];
2694
+ };
2695
+ archive_entity: {
2696
+ path: {
2697
+ entity_type: PluginApiSchemas["ArchivableType"];
2698
+ entity_id: number;
2699
+ };
2700
+ answer: PluginApiSchemas["ArchiveResponse"];
2701
+ };
2702
+ search_users: {
2703
+ query: {
2704
+ /**
2705
+ * Matches the handle's name part. Type the whole handle (`foobar#1234`)
2706
+ * to pin one member; a partial number after `#` is a prefix of the four
2707
+ * digits as rendered. Display names members set here are matched too.
2708
+ */
2709
+ search?: string | null;
2710
+ user_id?: string[] | null;
2711
+ /**
2712
+ * Only members of this initiative. The caller must reach it: be in it,
2713
+ * administer the community, or (a plug-in) be placed there.
2714
+ */
2715
+ initiative_id?: number | null;
2716
+ /**
2717
+ * With `resource_id`: only the people who can open that row, which is who
2718
+ * may be named on content inside it (assignees, attendees, person
2719
+ * properties). The caller must be able to open it too. For a person's
2720
+ * picker; an installed plug-in's search does not take it.
2721
+ */
2722
+ tool?: PluginApiSchemas["Tool"] | null;
2723
+ resource_id?: number | null;
2724
+ /**
2725
+ * List the caller first, wherever the rest of the order would put them.
2726
+ * For the community's members page, where your own row is where you set
2727
+ * your name.
2728
+ */
2729
+ self_first?: boolean;
2730
+ page?: number;
2731
+ page_size?: number;
2732
+ };
2733
+ answer: PluginApiSchemas["UserSummaryListResponse"];
2734
+ };
2735
+ read_member_avatar: {
2736
+ path: {
2737
+ person: string;
2738
+ digest: string;
2739
+ };
2740
+ answer: Blob;
2741
+ };
2742
+ }
2743
+ /**
2744
+ * Each operation a plug-in may call: its method, its path after `/api/v1/c/0`, the
2745
+ * scope it needs, and the query parameters it takes as JSON.
2746
+ */
2747
+ export declare const pluginApiOperations: {
2748
+ readonly create_subscription: {
2749
+ readonly method: "POST";
2750
+ readonly path: "/webhooks/subscriptions";
2751
+ readonly scope: {
2752
+ readonly per: "event_type";
2753
+ readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "documents:read", "galleries:read", "initiatives:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
2754
+ };
2755
+ };
2756
+ readonly delete_subscription: {
2757
+ readonly method: "DELETE";
2758
+ readonly path: "/webhooks/subscriptions/{subscription_id}";
2759
+ readonly scope: {
2760
+ readonly per: "event_type";
2761
+ readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "documents:read", "galleries:read", "initiatives:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
2762
+ };
2763
+ };
2764
+ readonly list_projects: {
2765
+ readonly method: "GET";
2766
+ readonly path: "/projects/";
2767
+ readonly scope: "projects:read";
2768
+ };
2769
+ readonly create_project: {
2770
+ readonly method: "POST";
2771
+ readonly path: "/projects/";
2772
+ readonly scope: "projects:write";
2773
+ };
2774
+ readonly list_documents: {
2775
+ readonly method: "GET";
2776
+ readonly path: "/documents/";
2777
+ readonly scope: "documents:read";
2778
+ };
2779
+ readonly create_document: {
2780
+ readonly method: "POST";
2781
+ readonly path: "/documents/";
2782
+ readonly scope: "documents:write";
2783
+ };
2784
+ readonly list_queues: {
2785
+ readonly method: "GET";
2786
+ readonly path: "/queues/";
2787
+ readonly scope: "queues:read";
2788
+ };
2789
+ readonly create_queue: {
2790
+ readonly method: "POST";
2791
+ readonly path: "/queues/";
2792
+ readonly scope: "queues:write";
2793
+ };
2794
+ readonly list_counter_groups: {
2795
+ readonly method: "GET";
2796
+ readonly path: "/counter-groups/";
2797
+ readonly scope: "counter_groups:read";
2798
+ };
2799
+ readonly create_counter_group: {
2800
+ readonly method: "POST";
2801
+ readonly path: "/counter-groups/";
2802
+ readonly scope: "counter_groups:write";
2803
+ };
2804
+ readonly list_calendars: {
2805
+ readonly method: "GET";
2806
+ readonly path: "/calendars/";
2807
+ readonly scope: "calendars:read";
2808
+ };
2809
+ readonly create_calendar: {
2810
+ readonly method: "POST";
2811
+ readonly path: "/calendars/";
2812
+ readonly scope: "calendars:write";
2813
+ };
2814
+ readonly list_posts: {
2815
+ readonly method: "GET";
2816
+ readonly path: "/posts/";
2817
+ readonly scope: "posts:read";
2818
+ };
2819
+ readonly create_post: {
2820
+ readonly method: "POST";
2821
+ readonly path: "/posts/";
2822
+ readonly scope: "posts:write";
2823
+ };
2824
+ readonly list_galleries: {
2825
+ readonly method: "GET";
2826
+ readonly path: "/galleries/";
2827
+ readonly scope: "galleries:read";
2828
+ };
2829
+ readonly create_gallery: {
2830
+ readonly method: "POST";
2831
+ readonly path: "/galleries/";
2832
+ readonly scope: "galleries:write";
2833
+ };
2834
+ readonly list_wikis: {
2835
+ readonly method: "GET";
2836
+ readonly path: "/wikis/";
2837
+ readonly scope: "wikis:read";
2838
+ };
2839
+ readonly create_wiki: {
2840
+ readonly method: "POST";
2841
+ readonly path: "/wikis/";
2842
+ readonly scope: "wikis:write";
2843
+ };
2844
+ readonly read_project: {
2845
+ readonly method: "GET";
2846
+ readonly path: "/projects/{project_id}";
2847
+ readonly scope: "projects:read";
2848
+ };
2849
+ readonly update_project: {
2850
+ readonly method: "PATCH";
2851
+ readonly path: "/projects/{project_id}";
2852
+ readonly scope: "projects:write";
2853
+ };
2854
+ readonly list_task_statuses: {
2855
+ readonly method: "GET";
2856
+ readonly path: "/projects/{project_id}/task-statuses/";
2857
+ readonly scope: "projects:read";
2858
+ };
2859
+ readonly list_initiative_task_statuses: {
2860
+ readonly method: "GET";
2861
+ readonly path: "/initiatives/{initiative_id}/task-statuses/";
2862
+ readonly scope: "projects:read";
2863
+ };
2864
+ readonly list_tasks: {
2865
+ readonly method: "GET";
2866
+ readonly path: "/tasks/";
2867
+ readonly scope: "projects:read";
2868
+ readonly json: readonly ["conditions", "sorting"];
2869
+ };
2870
+ readonly create_task: {
2871
+ readonly method: "POST";
2872
+ readonly path: "/tasks/";
2873
+ readonly scope: "projects:write";
2874
+ };
2875
+ readonly read_task: {
2876
+ readonly method: "GET";
2877
+ readonly path: "/tasks/{task_id}";
2878
+ readonly scope: "projects:read";
2879
+ };
2880
+ readonly update_task: {
2881
+ readonly method: "PATCH";
2882
+ readonly path: "/tasks/{task_id}";
2883
+ readonly scope: "projects:write";
2884
+ };
2885
+ readonly move_task: {
2886
+ readonly method: "POST";
2887
+ readonly path: "/tasks/{task_id}/move";
2888
+ readonly scope: "projects:write";
2889
+ };
2890
+ readonly duplicate_task: {
2891
+ readonly method: "POST";
2892
+ readonly path: "/tasks/{task_id}/duplicate";
2893
+ readonly scope: "projects:write";
2894
+ };
2895
+ readonly skip_task: {
2896
+ readonly method: "POST";
2897
+ readonly path: "/tasks/{task_id}/skip";
2898
+ readonly scope: "projects:write";
2899
+ };
2900
+ readonly toggle_checklist_item: {
2901
+ readonly method: "PATCH";
2902
+ readonly path: "/tasks/{task_id}/checklist/{item_id}";
2903
+ readonly scope: "projects:write";
2904
+ };
2905
+ readonly list_comments: {
2906
+ readonly method: "GET";
2907
+ readonly path: "/comments/";
2908
+ readonly scope: "comments:read";
2909
+ };
2910
+ readonly create_comment: {
2911
+ readonly method: "POST";
2912
+ readonly path: "/comments/";
2913
+ readonly scope: "comments:write";
2914
+ };
2915
+ readonly read_comment: {
2916
+ readonly method: "GET";
2917
+ readonly path: "/comments/{comment_id}";
2918
+ readonly scope: "comments:read";
2919
+ };
2920
+ readonly list_initiatives: {
2921
+ readonly method: "GET";
2922
+ readonly path: "/initiatives/";
2923
+ readonly scope: "initiatives:read";
2924
+ };
2925
+ readonly get_initiative: {
2926
+ readonly method: "GET";
2927
+ readonly path: "/initiatives/{initiative_id}";
2928
+ readonly scope: "initiatives:read";
2929
+ };
2930
+ readonly read_document: {
2931
+ readonly method: "GET";
2932
+ readonly path: "/documents/{document_id}";
2933
+ readonly scope: "documents:read";
2934
+ };
2935
+ readonly update_document: {
2936
+ readonly method: "PATCH";
2937
+ readonly path: "/documents/{document_id}";
2938
+ readonly scope: "documents:write";
2939
+ };
2940
+ readonly read_queue: {
2941
+ readonly method: "GET";
2942
+ readonly path: "/queues/{queue_id}";
2943
+ readonly scope: "queues:read";
2944
+ };
2945
+ readonly update_queue: {
2946
+ readonly method: "PATCH";
2947
+ readonly path: "/queues/{queue_id}";
2948
+ readonly scope: "queues:write";
2949
+ };
2950
+ readonly start_queue: {
2951
+ readonly method: "POST";
2952
+ readonly path: "/queues/{queue_id}/start";
2953
+ readonly scope: "queues:write";
2954
+ };
2955
+ readonly stop_queue: {
2956
+ readonly method: "POST";
2957
+ readonly path: "/queues/{queue_id}/stop";
2958
+ readonly scope: "queues:write";
2959
+ };
2960
+ readonly advance_turn: {
2961
+ readonly method: "POST";
2962
+ readonly path: "/queues/{queue_id}/next";
2963
+ readonly scope: "queues:write";
2964
+ };
2965
+ readonly previous_turn: {
2966
+ readonly method: "POST";
2967
+ readonly path: "/queues/{queue_id}/previous";
2968
+ readonly scope: "queues:write";
2969
+ };
2970
+ readonly set_active_item: {
2971
+ readonly method: "POST";
2972
+ readonly path: "/queues/{queue_id}/set-active/{item_id}";
2973
+ readonly scope: "queues:write";
2974
+ };
2975
+ readonly reset_queue: {
2976
+ readonly method: "POST";
2977
+ readonly path: "/queues/{queue_id}/reset";
2978
+ readonly scope: "queues:write";
2979
+ };
2980
+ readonly hold_current_turn: {
2981
+ readonly method: "POST";
2982
+ readonly path: "/queues/{queue_id}/hold";
2983
+ readonly scope: "queues:write";
2984
+ };
2985
+ readonly release_held_item: {
2986
+ readonly method: "POST";
2987
+ readonly path: "/queues/{queue_id}/release/{item_id}";
2988
+ readonly scope: "queues:write";
2989
+ };
2990
+ readonly read_queue_item: {
2991
+ readonly method: "GET";
2992
+ readonly path: "/queue-items/{item_id}";
2993
+ readonly scope: "queues:read";
2994
+ };
2995
+ readonly update_queue_item: {
2996
+ readonly method: "PATCH";
2997
+ readonly path: "/queue-items/{item_id}";
2998
+ readonly scope: "queues:write";
2999
+ };
3000
+ readonly duplicate_queue_item: {
3001
+ readonly method: "POST";
3002
+ readonly path: "/queue-items/{item_id}/duplicate";
3003
+ readonly scope: "queues:write";
3004
+ };
3005
+ readonly read_counter_group: {
3006
+ readonly method: "GET";
3007
+ readonly path: "/counter-groups/{group_id}";
3008
+ readonly scope: "counter_groups:read";
3009
+ };
3010
+ readonly update_counter_group: {
3011
+ readonly method: "PATCH";
3012
+ readonly path: "/counter-groups/{group_id}";
3013
+ readonly scope: "counter_groups:write";
3014
+ };
3015
+ readonly read_counter: {
3016
+ readonly method: "GET";
3017
+ readonly path: "/counters/{counter_id}";
3018
+ readonly scope: "counter_groups:read";
3019
+ };
3020
+ readonly duplicate_counter: {
3021
+ readonly method: "POST";
3022
+ readonly path: "/counters/{counter_id}/duplicate";
3023
+ readonly scope: "counter_groups:write";
3024
+ };
3025
+ readonly set_counter_count: {
3026
+ readonly method: "POST";
3027
+ readonly path: "/counters/{counter_id}/set";
3028
+ readonly scope: "counter_groups:write";
3029
+ };
3030
+ readonly step_counter: {
3031
+ readonly method: "POST";
3032
+ readonly path: "/counters/{counter_id}/step";
3033
+ readonly scope: "counter_groups:write";
3034
+ };
3035
+ readonly reset_counter: {
3036
+ readonly method: "POST";
3037
+ readonly path: "/counters/{counter_id}/reset";
3038
+ readonly scope: "counter_groups:write";
3039
+ };
3040
+ readonly read_calendar: {
3041
+ readonly method: "GET";
3042
+ readonly path: "/calendars/{calendar_id}";
3043
+ readonly scope: "calendars:read";
3044
+ };
3045
+ readonly update_calendar: {
3046
+ readonly method: "PATCH";
3047
+ readonly path: "/calendars/{calendar_id}";
3048
+ readonly scope: "calendars:write";
3049
+ };
3050
+ readonly read_post: {
3051
+ readonly method: "GET";
3052
+ readonly path: "/posts/{post_id}";
3053
+ readonly scope: "posts:read";
3054
+ };
3055
+ readonly update_post: {
3056
+ readonly method: "PATCH";
3057
+ readonly path: "/posts/{post_id}";
3058
+ readonly scope: "posts:write";
3059
+ };
3060
+ readonly set_post_pin: {
3061
+ readonly method: "PUT";
3062
+ readonly path: "/posts/{post_id}/pin";
3063
+ readonly scope: "posts:write";
3064
+ };
3065
+ readonly read_gallery: {
3066
+ readonly method: "GET";
3067
+ readonly path: "/galleries/{gallery_id}";
3068
+ readonly scope: "galleries:read";
3069
+ };
3070
+ readonly update_gallery: {
3071
+ readonly method: "PATCH";
3072
+ readonly path: "/galleries/{gallery_id}";
3073
+ readonly scope: "galleries:write";
3074
+ };
3075
+ readonly list_gallery_images: {
3076
+ readonly method: "GET";
3077
+ readonly path: "/galleries/{gallery_id}/images";
3078
+ readonly scope: "galleries:read";
3079
+ };
3080
+ readonly read_wiki: {
3081
+ readonly method: "GET";
3082
+ readonly path: "/wikis/{wiki_id}";
3083
+ readonly scope: "wikis:read";
3084
+ };
3085
+ readonly update_wiki: {
3086
+ readonly method: "PATCH";
3087
+ readonly path: "/wikis/{wiki_id}";
3088
+ readonly scope: "wikis:write";
3089
+ };
3090
+ readonly list_wiki_pages: {
3091
+ readonly method: "GET";
3092
+ readonly path: "/wikis/{wiki_id}/pages";
3093
+ readonly scope: "wikis:read";
3094
+ };
3095
+ readonly read_wiki_page: {
3096
+ readonly method: "GET";
3097
+ readonly path: "/wiki-pages/{page_id}";
3098
+ readonly scope: "wikis:read";
3099
+ };
3100
+ readonly duplicate_wiki_page: {
3101
+ readonly method: "POST";
3102
+ readonly path: "/wiki-pages/{page_id}/duplicate";
3103
+ readonly scope: "wikis:write";
3104
+ };
3105
+ readonly read_calendar_event: {
3106
+ readonly method: "GET";
3107
+ readonly path: "/calendar-events/{event_id}";
3108
+ readonly scope: "calendars:read";
3109
+ };
3110
+ readonly update_calendar_event: {
3111
+ readonly method: "PATCH";
3112
+ readonly path: "/calendar-events/{event_id}";
3113
+ readonly scope: "calendars:write";
3114
+ };
3115
+ readonly create_calendar_event: {
3116
+ readonly method: "POST";
3117
+ readonly path: "/calendar-events/";
3118
+ readonly scope: "calendars:write";
3119
+ };
3120
+ readonly duplicate_calendar_event: {
3121
+ readonly method: "POST";
3122
+ readonly path: "/calendar-events/{event_id}/duplicate";
3123
+ readonly scope: "calendars:write";
3124
+ };
3125
+ readonly open_occurrence: {
3126
+ readonly method: "POST";
3127
+ readonly path: "/calendar-events/{event_id}/occurrences";
3128
+ readonly scope: "calendars:write";
3129
+ };
3130
+ readonly detach_occurrence: {
3131
+ readonly method: "POST";
3132
+ readonly path: "/calendar-events/{event_id}/occurrences/detach";
3133
+ readonly scope: "calendars:write";
3134
+ };
3135
+ readonly restore_occurrence: {
3136
+ readonly method: "POST";
3137
+ readonly path: "/calendar-events/{event_id}/occurrences/restore";
3138
+ readonly scope: "calendars:write";
3139
+ };
3140
+ readonly add_occurrence: {
3141
+ readonly method: "POST";
3142
+ readonly path: "/calendar-events/{event_id}/occurrences/add";
3143
+ readonly scope: "calendars:write";
3144
+ };
3145
+ readonly set_attendees: {
3146
+ readonly method: "PUT";
3147
+ readonly path: "/calendar-events/{event_id}/attendees";
3148
+ readonly scope: "calendars:write";
3149
+ };
3150
+ readonly list_tags: {
3151
+ readonly method: "GET";
3152
+ readonly path: "/tags/";
3153
+ readonly scope: "tags:read";
3154
+ };
3155
+ readonly bulk_edit_tags: {
3156
+ readonly method: "POST";
3157
+ readonly path: "/tags/bulk";
3158
+ readonly scope: "tags:write";
3159
+ };
3160
+ readonly set_project_grants: {
3161
+ readonly method: "PUT";
3162
+ readonly path: "/projects/{project_id}/grants";
3163
+ readonly scope: "sharing:write";
3164
+ };
3165
+ readonly set_document_grants: {
3166
+ readonly method: "PUT";
3167
+ readonly path: "/documents/{document_id}/grants";
3168
+ readonly scope: "sharing:write";
3169
+ };
3170
+ readonly set_queue_grants: {
3171
+ readonly method: "PUT";
3172
+ readonly path: "/queues/{queue_id}/grants";
3173
+ readonly scope: "sharing:write";
3174
+ };
3175
+ readonly set_counter_group_grants: {
3176
+ readonly method: "PUT";
3177
+ readonly path: "/counter-groups/{group_id}/grants";
3178
+ readonly scope: "sharing:write";
3179
+ };
3180
+ readonly set_calendar_grants: {
3181
+ readonly method: "PUT";
3182
+ readonly path: "/calendars/{calendar_id}/grants";
3183
+ readonly scope: "sharing:write";
3184
+ };
3185
+ readonly set_post_grants: {
3186
+ readonly method: "PUT";
3187
+ readonly path: "/posts/{post_id}/grants";
3188
+ readonly scope: "sharing:write";
3189
+ };
3190
+ readonly set_gallery_grants: {
3191
+ readonly method: "PUT";
3192
+ readonly path: "/galleries/{gallery_id}/grants";
3193
+ readonly scope: "sharing:write";
3194
+ };
3195
+ readonly set_wiki_grants: {
3196
+ readonly method: "PUT";
3197
+ readonly path: "/wikis/{wiki_id}/grants";
3198
+ readonly scope: "sharing:write";
3199
+ };
3200
+ readonly duplicate_project: {
3201
+ readonly method: "POST";
3202
+ readonly path: "/projects/{project_id}/duplicate";
3203
+ readonly scope: "projects:write";
3204
+ };
3205
+ readonly duplicate_document: {
3206
+ readonly method: "POST";
3207
+ readonly path: "/documents/{document_id}/duplicate";
3208
+ readonly scope: "documents:write";
3209
+ };
3210
+ readonly duplicate_queue: {
3211
+ readonly method: "POST";
3212
+ readonly path: "/queues/{queue_id}/duplicate";
3213
+ readonly scope: "queues:write";
3214
+ };
3215
+ readonly duplicate_counter_group: {
3216
+ readonly method: "POST";
3217
+ readonly path: "/counter-groups/{group_id}/duplicate";
3218
+ readonly scope: "counter_groups:write";
3219
+ };
3220
+ readonly duplicate_calendar: {
3221
+ readonly method: "POST";
3222
+ readonly path: "/calendars/{calendar_id}/duplicate";
3223
+ readonly scope: "calendars:write";
3224
+ };
3225
+ readonly duplicate_post: {
3226
+ readonly method: "POST";
3227
+ readonly path: "/posts/{post_id}/duplicate";
3228
+ readonly scope: "posts:write";
3229
+ };
3230
+ readonly duplicate_gallery: {
3231
+ readonly method: "POST";
3232
+ readonly path: "/galleries/{gallery_id}/duplicate";
3233
+ readonly scope: "galleries:write";
3234
+ };
3235
+ readonly duplicate_wiki: {
3236
+ readonly method: "POST";
3237
+ readonly path: "/wikis/{wiki_id}/duplicate";
3238
+ readonly scope: "wikis:write";
3239
+ };
3240
+ readonly suggest_community: {
3241
+ readonly method: "GET";
3242
+ readonly path: "/search/suggest";
3243
+ readonly scope: {
3244
+ readonly per: "entity_type";
3245
+ readonly any_of: readonly ["calendars:read", "comments:read", "counter_groups:read", "dashboards:read", "documents:read", "galleries:read", "posts:read", "projects:read", "queues:read", "tags:read", "wikis:read"];
3246
+ };
3247
+ };
3248
+ readonly list_property_definitions: {
3249
+ readonly method: "GET";
3250
+ readonly path: "/property-definitions/";
3251
+ readonly scope: "initiatives:read";
3252
+ };
3253
+ readonly set_properties: {
3254
+ readonly method: "PUT";
3255
+ readonly path: "/properties/{target}/{entity_id}";
3256
+ readonly scope: {
3257
+ readonly by: "target";
3258
+ readonly scopes: {
3259
+ readonly calendar: "calendars:write";
3260
+ readonly calendar_event: "calendars:write";
3261
+ readonly counter: "counter_groups:write";
3262
+ readonly counter_group: "counter_groups:write";
3263
+ readonly dashboard: "dashboards:write";
3264
+ readonly document: "documents:write";
3265
+ readonly gallery: "galleries:write";
3266
+ readonly gallery_image: "galleries:write";
3267
+ readonly post: "posts:write";
3268
+ readonly project: "projects:write";
3269
+ readonly queue: "queues:write";
3270
+ readonly queue_item: "queues:write";
3271
+ readonly task: "projects:write";
3272
+ readonly wiki: "wikis:write";
3273
+ readonly wiki_page: "wikis:write";
3274
+ };
3275
+ };
3276
+ };
3277
+ readonly archive_entity: {
3278
+ readonly method: "POST";
3279
+ readonly path: "/archive/{entity_type}/{entity_id}";
3280
+ readonly scope: {
3281
+ readonly by: "entity_type";
3282
+ readonly scopes: {
3283
+ readonly calendar: "calendars:write";
3284
+ readonly counter_group: "counter_groups:write";
3285
+ readonly dashboard: "dashboards:write";
3286
+ readonly document: "documents:write";
3287
+ readonly gallery: "galleries:write";
3288
+ readonly post: "posts:write";
3289
+ readonly project: "projects:write";
3290
+ readonly queue: "queues:write";
3291
+ readonly task: "projects:write";
3292
+ readonly wiki: "wikis:write";
3293
+ };
3294
+ };
3295
+ };
3296
+ readonly search_users: {
3297
+ readonly method: "GET";
3298
+ readonly path: "/users/search";
3299
+ readonly scope: "members:read";
3300
+ };
3301
+ readonly read_member_avatar: {
3302
+ readonly method: "GET";
3303
+ readonly path: "/members/{person}/avatar/{digest}";
3304
+ readonly scope: "members:read";
3305
+ };
3306
+ };
3307
+ export type PluginApiOperationId = keyof typeof pluginApiOperations;
3308
+ /** Every route Initiative's plug-in API describes, as a typed method. A client's `api` is one. */
3309
+ export declare class PluginApi {
3310
+ private readonly call;
3311
+ constructor(call: (operation: PluginApiOperationId, args?: PluginApiArgs) => Promise<unknown>);
3312
+ /**
3313
+ * Register a new webhook subscription.
3314
+ *
3315
+ * `POST /webhooks/subscriptions`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `documents:read`, `galleries:read`, `initiatives:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
3316
+ */
3317
+ createSubscription(args: {
3318
+ body: PluginApiOperations["create_subscription"]["body"];
3319
+ }): Promise<PluginApiOperations["create_subscription"]["answer"]>;
3320
+ /**
3321
+ * Hard-delete a subscription. Who may is the DELETE policy, the same gates
3322
+ * that govern the content it watches; a cross-guild lookup is a 404. An
3323
+ * installed plug-in reaches only the subscriptions it registered, and any
3324
+ * other is a 404.
3325
+ *
3326
+ * `DELETE /webhooks/subscriptions/{subscription_id}`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `documents:read`, `galleries:read`, `initiatives:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
3327
+ */
3328
+ deleteSubscription(args: {
3329
+ path: PluginApiOperations["delete_subscription"]["path"];
3330
+ }): Promise<PluginApiOperations["delete_subscription"]["answer"]>;
3331
+ /**
3332
+ * List Projects
3333
+ *
3334
+ * `GET /projects/`, needs `projects:read`.
3335
+ */
3336
+ listProjects(args?: {
3337
+ query?: PluginApiOperations["list_projects"]["query"];
3338
+ }): Promise<PluginApiOperations["list_projects"]["answer"]>;
3339
+ /**
3340
+ * Create Project
3341
+ *
3342
+ * `POST /projects/`, needs `projects:write`.
3343
+ */
3344
+ createProject(args: {
3345
+ body: PluginApiOperations["create_project"]["body"];
3346
+ }): Promise<PluginApiOperations["create_project"]["answer"]>;
3347
+ /**
3348
+ * List documents in the active guild visible to the current user.
3349
+ *
3350
+ * `GET /documents/`, needs `documents:read`.
3351
+ */
3352
+ listDocuments(args?: {
3353
+ query?: PluginApiOperations["list_documents"]["query"];
3354
+ }): Promise<PluginApiOperations["list_documents"]["answer"]>;
3355
+ /**
3356
+ * Create Document
3357
+ *
3358
+ * `POST /documents/`, needs `documents:write`.
3359
+ */
3360
+ createDocument(args: {
3361
+ body: PluginApiOperations["create_document"]["body"];
3362
+ }): Promise<PluginApiOperations["create_document"]["answer"]>;
3363
+ /**
3364
+ * List queues visible to the current user.
3365
+ *
3366
+ * `GET /queues/`, needs `queues:read`.
3367
+ */
3368
+ listQueues(args?: {
3369
+ query?: PluginApiOperations["list_queues"]["query"];
3370
+ }): Promise<PluginApiOperations["list_queues"]["answer"]>;
3371
+ /**
3372
+ * Create a new queue in an initiative.
3373
+ *
3374
+ * `POST /queues/`, needs `queues:write`.
3375
+ */
3376
+ createQueue(args: {
3377
+ body: PluginApiOperations["create_queue"]["body"];
3378
+ }): Promise<PluginApiOperations["create_queue"]["answer"]>;
3379
+ /**
3380
+ * List Counter Groups
3381
+ *
3382
+ * `GET /counter-groups/`, needs `counter_groups:read`.
3383
+ */
3384
+ listCounterGroups(args?: {
3385
+ query?: PluginApiOperations["list_counter_groups"]["query"];
3386
+ }): Promise<PluginApiOperations["list_counter_groups"]["answer"]>;
3387
+ /**
3388
+ * Create Counter Group
3389
+ *
3390
+ * `POST /counter-groups/`, needs `counter_groups:write`.
3391
+ */
3392
+ createCounterGroup(args: {
3393
+ body: PluginApiOperations["create_counter_group"]["body"];
3394
+ }): Promise<PluginApiOperations["create_counter_group"]["answer"]>;
3395
+ /**
3396
+ * List calendars visible to the current user (guild admins see all).
3397
+ *
3398
+ * `GET /calendars/`, needs `calendars:read`.
3399
+ */
3400
+ listCalendars(args?: {
3401
+ query?: PluginApiOperations["list_calendars"]["query"];
3402
+ }): Promise<PluginApiOperations["list_calendars"]["answer"]>;
3403
+ /**
3404
+ * Create a calendar.
3405
+ *
3406
+ * `POST /calendars/`, needs `calendars:write`.
3407
+ */
3408
+ createCalendar(args: {
3409
+ body: PluginApiOperations["create_calendar"]["body"];
3410
+ }): Promise<PluginApiOperations["create_calendar"]["answer"]>;
3411
+ /**
3412
+ * List posts visible to the current user (guild admins see all).
3413
+ *
3414
+ * `GET /posts/`, needs `posts:read`.
3415
+ */
3416
+ listPosts(args?: {
3417
+ query?: PluginApiOperations["list_posts"]["query"];
3418
+ }): Promise<PluginApiOperations["list_posts"]["answer"]>;
3419
+ /**
3420
+ * Post a notice to an initiative's board. Requires create_posts permission on
3421
+ * the initiative (or guild admin); the author gets the owner grant.
3422
+ *
3423
+ * `POST /posts/`, needs `posts:write`.
3424
+ */
3425
+ createPost(args: {
3426
+ body: PluginApiOperations["create_post"]["body"];
3427
+ }): Promise<PluginApiOperations["create_post"]["answer"]>;
3428
+ /**
3429
+ * List galleries visible to the current user (guild admins see all).
3430
+ *
3431
+ * `GET /galleries/`, needs `galleries:read`.
3432
+ */
3433
+ listGalleries(args?: {
3434
+ query?: PluginApiOperations["list_galleries"]["query"];
3435
+ }): Promise<PluginApiOperations["list_galleries"]["answer"]>;
3436
+ /**
3437
+ * Create a gallery. Requires create_galleries permission on the initiative
3438
+ * (or guild admin); the creator gets the owner grant.
3439
+ *
3440
+ * `POST /galleries/`, needs `galleries:write`.
3441
+ */
3442
+ createGallery(args: {
3443
+ body: PluginApiOperations["create_gallery"]["body"];
3444
+ }): Promise<PluginApiOperations["create_gallery"]["answer"]>;
3445
+ /**
3446
+ * List wikis visible to the current user (guild admins see all).
3447
+ *
3448
+ * `GET /wikis/`, needs `wikis:read`.
3449
+ */
3450
+ listWikis(args?: {
3451
+ query?: PluginApiOperations["list_wikis"]["query"];
3452
+ }): Promise<PluginApiOperations["list_wikis"]["answer"]>;
3453
+ /**
3454
+ * Create a wiki. Requires create_wikis permission on the initiative (or guild
3455
+ * admin); the creator gets the owner grant.
3456
+ *
3457
+ * `POST /wikis/`, needs `wikis:write`.
3458
+ */
3459
+ createWiki(args: {
3460
+ body: PluginApiOperations["create_wiki"]["body"];
3461
+ }): Promise<PluginApiOperations["create_wiki"]["answer"]>;
3462
+ /**
3463
+ * Read Project
3464
+ *
3465
+ * `GET /projects/{project_id}`, needs `projects:read`.
3466
+ */
3467
+ readProject(args: {
3468
+ path: PluginApiOperations["read_project"]["path"];
3469
+ query?: PluginApiOperations["read_project"]["query"];
3470
+ }): Promise<PluginApiOperations["read_project"]["answer"]>;
3471
+ /**
3472
+ * Update Project
3473
+ *
3474
+ * `PATCH /projects/{project_id}`, needs `projects:write`.
3475
+ */
3476
+ updateProject(args: {
3477
+ path: PluginApiOperations["update_project"]["path"];
3478
+ body: PluginApiOperations["update_project"]["body"];
3479
+ }): Promise<PluginApiOperations["update_project"]["answer"]>;
3480
+ /**
3481
+ * List Task Statuses
3482
+ *
3483
+ * `GET /projects/{project_id}/task-statuses/`, needs `projects:read`.
3484
+ */
3485
+ listTaskStatuses(args: {
3486
+ path: PluginApiOperations["list_task_statuses"]["path"];
3487
+ }): Promise<PluginApiOperations["list_task_statuses"]["answer"]>;
3488
+ /**
3489
+ * The distinct status columns across the initiative's readable projects.
3490
+ *
3491
+ * `GET /initiatives/{initiative_id}/task-statuses/`, needs `projects:read`.
3492
+ */
3493
+ listInitiativeTaskStatuses(args: {
3494
+ path: PluginApiOperations["list_initiative_task_statuses"]["path"];
3495
+ }): Promise<PluginApiOperations["list_initiative_task_statuses"]["answer"]>;
3496
+ /**
3497
+ * List Tasks
3498
+ *
3499
+ * `GET /tasks/`, needs `projects:read`.
3500
+ */
3501
+ listTasks(args?: {
3502
+ query?: PluginApiOperations["list_tasks"]["query"];
3503
+ }): Promise<PluginApiOperations["list_tasks"]["answer"]>;
3504
+ /**
3505
+ * Create Task
3506
+ *
3507
+ * `POST /tasks/`, needs `projects:write`.
3508
+ */
3509
+ createTask(args: {
3510
+ body: PluginApiOperations["create_task"]["body"];
3511
+ }): Promise<PluginApiOperations["create_task"]["answer"]>;
3512
+ /**
3513
+ * Read Task
3514
+ *
3515
+ * `GET /tasks/{task_id}`, needs `projects:read`.
3516
+ */
3517
+ readTask(args: {
3518
+ path: PluginApiOperations["read_task"]["path"];
3519
+ query?: PluginApiOperations["read_task"]["query"];
3520
+ }): Promise<PluginApiOperations["read_task"]["answer"]>;
3521
+ /**
3522
+ * Update Task
3523
+ *
3524
+ * `PATCH /tasks/{task_id}`, needs `projects:write`.
3525
+ */
3526
+ updateTask(args: {
3527
+ path: PluginApiOperations["update_task"]["path"];
3528
+ body: PluginApiOperations["update_task"]["body"];
3529
+ }): Promise<PluginApiOperations["update_task"]["answer"]>;
3530
+ /**
3531
+ * Move Task
3532
+ *
3533
+ * `POST /tasks/{task_id}/move`, needs `projects:write`.
3534
+ */
3535
+ moveTask(args: {
3536
+ path: PluginApiOperations["move_task"]["path"];
3537
+ body: PluginApiOperations["move_task"]["body"];
3538
+ }): Promise<PluginApiOperations["move_task"]["answer"]>;
3539
+ /**
3540
+ * Copy the task beside itself, at the end of its project, as "<title>
3541
+ * (Copy)", with its assignees, tags, links and properties; its checklist
3542
+ * starts unticked.
3543
+ *
3544
+ * `POST /tasks/{task_id}/duplicate`, needs `projects:write`.
3545
+ */
3546
+ duplicateTask(args: {
3547
+ path: PluginApiOperations["duplicate_task"]["path"];
3548
+ }): Promise<PluginApiOperations["duplicate_task"]["answer"]>;
3549
+ /**
3550
+ * Move a repeating task on to its next occurrence without completing it.
3551
+ *
3552
+ * `POST /tasks/{task_id}/skip`, needs `projects:write`.
3553
+ */
3554
+ skipTask(args: {
3555
+ path: PluginApiOperations["skip_task"]["path"];
3556
+ }): Promise<PluginApiOperations["skip_task"]["answer"]>;
3557
+ /**
3558
+ * Tick or untick one checklist item.
3559
+ *
3560
+ * `PATCH /tasks/{task_id}/checklist/{item_id}`, needs `projects:write`.
3561
+ */
3562
+ toggleChecklistItem(args: {
3563
+ path: PluginApiOperations["toggle_checklist_item"]["path"];
3564
+ body: PluginApiOperations["toggle_checklist_item"]["body"];
3565
+ }): Promise<PluginApiOperations["toggle_checklist_item"]["answer"]>;
3566
+ /**
3567
+ * One page of a thread: `limit` conversations, newest first, each with every
3568
+ * reply under it. Follow `next_cursor` for older conversations.
3569
+ *
3570
+ * `GET /comments/`, needs `comments:read`.
3571
+ */
3572
+ listComments(args?: {
3573
+ query?: PluginApiOperations["list_comments"]["query"];
3574
+ }): Promise<PluginApiOperations["list_comments"]["answer"]>;
3575
+ /**
3576
+ * Create Comment
3577
+ *
3578
+ * `POST /comments/`, needs `comments:write`.
3579
+ */
3580
+ createComment(args: {
3581
+ body: PluginApiOperations["create_comment"]["body"];
3582
+ }): Promise<PluginApiOperations["create_comment"]["answer"]>;
3583
+ /**
3584
+ * One comment by id — the read-back for a `comments.*` event.
3585
+ *
3586
+ * `GET /comments/{comment_id}`, needs `comments:read`.
3587
+ */
3588
+ readComment(args: {
3589
+ path: PluginApiOperations["read_comment"]["path"];
3590
+ query?: PluginApiOperations["read_comment"]["query"];
3591
+ }): Promise<PluginApiOperations["read_comment"]["answer"]>;
3592
+ /**
3593
+ * The initiatives the caller belongs to, or — for a guild admin asking for
3594
+ * `scope=community` — every initiative in the guild.
3595
+ *
3596
+ * `GET /initiatives/`, needs `initiatives:read`.
3597
+ */
3598
+ listInitiatives(args?: {
3599
+ query?: PluginApiOperations["list_initiatives"]["query"];
3600
+ }): Promise<PluginApiOperations["list_initiatives"]["answer"]>;
3601
+ /**
3602
+ * Get Initiative
3603
+ *
3604
+ * `GET /initiatives/{initiative_id}`, needs `initiatives:read`.
3605
+ */
3606
+ getInitiative(args: {
3607
+ path: PluginApiOperations["get_initiative"]["path"];
3608
+ query?: PluginApiOperations["get_initiative"]["query"];
3609
+ }): Promise<PluginApiOperations["get_initiative"]["answer"]>;
3610
+ /**
3611
+ * Read Document
3612
+ *
3613
+ * `GET /documents/{document_id}`, needs `documents:read`.
3614
+ */
3615
+ readDocument(args: {
3616
+ path: PluginApiOperations["read_document"]["path"];
3617
+ query?: PluginApiOperations["read_document"]["query"];
3618
+ }): Promise<PluginApiOperations["read_document"]["answer"]>;
3619
+ /**
3620
+ * Update Document
3621
+ *
3622
+ * `PATCH /documents/{document_id}`, needs `documents:write`.
3623
+ */
3624
+ updateDocument(args: {
3625
+ path: PluginApiOperations["update_document"]["path"];
3626
+ body: PluginApiOperations["update_document"]["body"];
3627
+ }): Promise<PluginApiOperations["update_document"]["answer"]>;
3628
+ /**
3629
+ * Read Queue
3630
+ *
3631
+ * `GET /queues/{queue_id}`, needs `queues:read`.
3632
+ */
3633
+ readQueue(args: {
3634
+ path: PluginApiOperations["read_queue"]["path"];
3635
+ query?: PluginApiOperations["read_queue"]["query"];
3636
+ }): Promise<PluginApiOperations["read_queue"]["answer"]>;
3637
+ /**
3638
+ * Update queue name/description. Requires write access.
3639
+ *
3640
+ * `PATCH /queues/{queue_id}`, needs `queues:write`.
3641
+ */
3642
+ updateQueue(args: {
3643
+ path: PluginApiOperations["update_queue"]["path"];
3644
+ body: PluginApiOperations["update_queue"]["body"];
3645
+ }): Promise<PluginApiOperations["update_queue"]["answer"]>;
3646
+ /**
3647
+ * Start the queue: set active, reset to first item, round 1.
3648
+ *
3649
+ * `POST /queues/{queue_id}/start`, needs `queues:write`.
3650
+ */
3651
+ startQueue(args: {
3652
+ path: PluginApiOperations["start_queue"]["path"];
3653
+ }): Promise<PluginApiOperations["start_queue"]["answer"]>;
3654
+ /**
3655
+ * Stop the queue: set inactive but keep current position.
3656
+ *
3657
+ * `POST /queues/{queue_id}/stop`, needs `queues:write`.
3658
+ */
3659
+ stopQueue(args: {
3660
+ path: PluginApiOperations["stop_queue"]["path"];
3661
+ }): Promise<PluginApiOperations["stop_queue"]["answer"]>;
3662
+ /**
3663
+ * Advance to the next visible item. Wraps around and increments round.
3664
+ *
3665
+ * `POST /queues/{queue_id}/next`, needs `queues:write`.
3666
+ */
3667
+ advanceTurn(args: {
3668
+ path: PluginApiOperations["advance_turn"]["path"];
3669
+ }): Promise<PluginApiOperations["advance_turn"]["answer"]>;
3670
+ /**
3671
+ * Move to the previous visible item. Wraps around and decrements round.
3672
+ *
3673
+ * `POST /queues/{queue_id}/previous`, needs `queues:write`.
3674
+ */
3675
+ previousTurn(args: {
3676
+ path: PluginApiOperations["previous_turn"]["path"];
3677
+ }): Promise<PluginApiOperations["previous_turn"]["answer"]>;
3678
+ /**
3679
+ * Jump to a specific item in the queue.
3680
+ *
3681
+ * `POST /queues/{queue_id}/set-active/{item_id}`, needs `queues:write`.
3682
+ */
3683
+ setActiveItem(args: {
3684
+ path: PluginApiOperations["set_active_item"]["path"];
3685
+ }): Promise<PluginApiOperations["set_active_item"]["answer"]>;
3686
+ /**
3687
+ * Reset the queue to round 1, first visible item.
3688
+ *
3689
+ * `POST /queues/{queue_id}/reset`, needs `queues:write`.
3690
+ */
3691
+ resetQueue(args: {
3692
+ path: PluginApiOperations["reset_queue"]["path"];
3693
+ }): Promise<PluginApiOperations["reset_queue"]["answer"]>;
3694
+ /**
3695
+ * Hold the current turn — the item leaves the rotation until it acts.
3696
+ *
3697
+ * `POST /queues/{queue_id}/hold`, needs `queues:write`.
3698
+ */
3699
+ holdCurrentTurn(args: {
3700
+ path: PluginApiOperations["hold_current_turn"]["path"];
3701
+ }): Promise<PluginApiOperations["hold_current_turn"]["answer"]>;
3702
+ /**
3703
+ * Release a held item back into the rotation.
3704
+ *
3705
+ * `POST /queues/{queue_id}/release/{item_id}`, needs `queues:write`.
3706
+ */
3707
+ releaseHeldItem(args: {
3708
+ path: PluginApiOperations["release_held_item"]["path"];
3709
+ body?: PluginApiOperations["release_held_item"]["body"];
3710
+ }): Promise<PluginApiOperations["release_held_item"]["answer"]>;
3711
+ /**
3712
+ * One queue item by id — the read-back for a `queue_items.*` event.
3713
+ *
3714
+ * `GET /queue-items/{item_id}`, needs `queues:read`.
3715
+ */
3716
+ readQueueItem(args: {
3717
+ path: PluginApiOperations["read_queue_item"]["path"];
3718
+ query?: PluginApiOperations["read_queue_item"]["query"];
3719
+ }): Promise<PluginApiOperations["read_queue_item"]["answer"]>;
3720
+ /**
3721
+ * Update a queue item. Requires write access on the queue.
3722
+ *
3723
+ * `PATCH /queue-items/{item_id}`, needs `queues:write`.
3724
+ */
3725
+ updateQueueItem(args: {
3726
+ path: PluginApiOperations["update_queue_item"]["path"];
3727
+ body: PluginApiOperations["update_queue_item"]["body"];
3728
+ }): Promise<PluginApiOperations["update_queue_item"]["answer"]>;
3729
+ /**
3730
+ * Copy the item beside itself, at the same place in the turn order, as
3731
+ * "<label> (Copy)", with its person, tags, links and properties.
3732
+ *
3733
+ * `POST /queue-items/{item_id}/duplicate`, needs `queues:write`.
3734
+ */
3735
+ duplicateQueueItem(args: {
3736
+ path: PluginApiOperations["duplicate_queue_item"]["path"];
3737
+ }): Promise<PluginApiOperations["duplicate_queue_item"]["answer"]>;
3738
+ /**
3739
+ * Read Counter Group
3740
+ *
3741
+ * `GET /counter-groups/{group_id}`, needs `counter_groups:read`.
3742
+ */
3743
+ readCounterGroup(args: {
3744
+ path: PluginApiOperations["read_counter_group"]["path"];
3745
+ query?: PluginApiOperations["read_counter_group"]["query"];
3746
+ }): Promise<PluginApiOperations["read_counter_group"]["answer"]>;
3747
+ /**
3748
+ * Update Counter Group
3749
+ *
3750
+ * `PATCH /counter-groups/{group_id}`, needs `counter_groups:write`.
3751
+ */
3752
+ updateCounterGroup(args: {
3753
+ path: PluginApiOperations["update_counter_group"]["path"];
3754
+ body: PluginApiOperations["update_counter_group"]["body"];
3755
+ }): Promise<PluginApiOperations["update_counter_group"]["answer"]>;
3756
+ /**
3757
+ * One counter by id — the read-back for a `counters.*` event.
3758
+ *
3759
+ * `GET /counters/{counter_id}`, needs `counter_groups:read`.
3760
+ */
3761
+ readCounter(args: {
3762
+ path: PluginApiOperations["read_counter"]["path"];
3763
+ query?: PluginApiOperations["read_counter"]["query"];
3764
+ }): Promise<PluginApiOperations["read_counter"]["answer"]>;
3765
+ /**
3766
+ * Copy the counter to the end of its group as "<name> (Copy)", with its
3767
+ * count, tags and properties.
3768
+ *
3769
+ * `POST /counters/{counter_id}/duplicate`, needs `counter_groups:write`.
3770
+ */
3771
+ duplicateCounter(args: {
3772
+ path: PluginApiOperations["duplicate_counter"]["path"];
3773
+ }): Promise<PluginApiOperations["duplicate_counter"]["answer"]>;
3774
+ /**
3775
+ * Put a counter at a number, held within its bounds.
3776
+ *
3777
+ * `POST /counters/{counter_id}/set`, needs `counter_groups:write`.
3778
+ */
3779
+ setCounterCount(args: {
3780
+ path: PluginApiOperations["set_counter_count"]["path"];
3781
+ body: PluginApiOperations["set_counter_count"]["body"];
3782
+ }): Promise<PluginApiOperations["set_counter_count"]["answer"]>;
3783
+ /**
3784
+ * Move a counter up or down, by `amount` or by its own step, held within its
3785
+ * bounds. Two steps landing together each count.
3786
+ *
3787
+ * `POST /counters/{counter_id}/step`, needs `counter_groups:write`.
3788
+ */
3789
+ stepCounter(args: {
3790
+ path: PluginApiOperations["step_counter"]["path"];
3791
+ body: PluginApiOperations["step_counter"]["body"];
3792
+ }): Promise<PluginApiOperations["step_counter"]["answer"]>;
3793
+ /**
3794
+ * Put a counter back to the value it starts from.
3795
+ *
3796
+ * `POST /counters/{counter_id}/reset`, needs `counter_groups:write`.
3797
+ */
3798
+ resetCounter(args: {
3799
+ path: PluginApiOperations["reset_counter"]["path"];
3800
+ }): Promise<PluginApiOperations["reset_counter"]["answer"]>;
3801
+ /**
3802
+ * Read Calendar
3803
+ *
3804
+ * `GET /calendars/{calendar_id}`, needs `calendars:read`.
3805
+ */
3806
+ readCalendar(args: {
3807
+ path: PluginApiOperations["read_calendar"]["path"];
3808
+ query?: PluginApiOperations["read_calendar"]["query"];
3809
+ }): Promise<PluginApiOperations["read_calendar"]["answer"]>;
3810
+ /**
3811
+ * Rename/update a calendar. Asks the edit action, which on a guild calendar
3812
+ * is the guild admin's: a write grant on one writes its events.
3813
+ *
3814
+ * `PATCH /calendars/{calendar_id}`, needs `calendars:write`.
3815
+ */
3816
+ updateCalendar(args: {
3817
+ path: PluginApiOperations["update_calendar"]["path"];
3818
+ body: PluginApiOperations["update_calendar"]["body"];
3819
+ }): Promise<PluginApiOperations["update_calendar"]["answer"]>;
3820
+ /**
3821
+ * Read one notice. A scheduled one is its writers' until it goes up; to
3822
+ * anyone else it is not there (the posts read policy).
3823
+ *
3824
+ * `GET /posts/{post_id}`, needs `posts:read`.
3825
+ */
3826
+ readPost(args: {
3827
+ path: PluginApiOperations["read_post"]["path"];
3828
+ query?: PluginApiOperations["read_post"]["query"];
3829
+ }): Promise<PluginApiOperations["read_post"]["answer"]>;
3830
+ /**
3831
+ * Edit a notice — its headline, its body, or a schedule not yet reached.
3832
+ * Requires write access.
3833
+ *
3834
+ * `PATCH /posts/{post_id}`, needs `posts:write`.
3835
+ */
3836
+ updatePost(args: {
3837
+ path: PluginApiOperations["update_post"]["path"];
3838
+ body: PluginApiOperations["update_post"]["body"];
3839
+ }): Promise<PluginApiOperations["update_post"]["answer"]>;
3840
+ /**
3841
+ * Pin a notice to the top of the board, or take it back down.
3842
+ *
3843
+ * `PUT /posts/{post_id}/pin`, needs `posts:write`.
3844
+ */
3845
+ setPostPin(args: {
3846
+ path: PluginApiOperations["set_post_pin"]["path"];
3847
+ body: PluginApiOperations["set_post_pin"]["body"];
3848
+ }): Promise<PluginApiOperations["set_post_pin"]["answer"]>;
3849
+ /**
3850
+ * Read Gallery
3851
+ *
3852
+ * `GET /galleries/{gallery_id}`, needs `galleries:read`.
3853
+ */
3854
+ readGallery(args: {
3855
+ path: PluginApiOperations["read_gallery"]["path"];
3856
+ query?: PluginApiOperations["read_gallery"]["query"];
3857
+ }): Promise<PluginApiOperations["read_gallery"]["answer"]>;
3858
+ /**
3859
+ * Rename, describe, or choose the cover. Requires write access.
3860
+ *
3861
+ * `PATCH /galleries/{gallery_id}`, needs `galleries:write`.
3862
+ */
3863
+ updateGallery(args: {
3864
+ path: PluginApiOperations["update_gallery"]["path"];
3865
+ body: PluginApiOperations["update_gallery"]["body"];
3866
+ }): Promise<PluginApiOperations["update_gallery"]["answer"]>;
3867
+ /**
3868
+ * One page of a gallery's pictures, newest first.
3869
+ *
3870
+ * `GET /galleries/{gallery_id}/images`, needs `galleries:read`.
3871
+ */
3872
+ listGalleryImages(args: {
3873
+ path: PluginApiOperations["list_gallery_images"]["path"];
3874
+ query?: PluginApiOperations["list_gallery_images"]["query"];
3875
+ }): Promise<PluginApiOperations["list_gallery_images"]["answer"]>;
3876
+ /**
3877
+ * Read Wiki
3878
+ *
3879
+ * `GET /wikis/{wiki_id}`, needs `wikis:read`.
3880
+ */
3881
+ readWiki(args: {
3882
+ path: PluginApiOperations["read_wiki"]["path"];
3883
+ }): Promise<PluginApiOperations["read_wiki"]["answer"]>;
3884
+ /**
3885
+ * Update Wiki
3886
+ *
3887
+ * `PATCH /wikis/{wiki_id}`, needs `wikis:write`.
3888
+ */
3889
+ updateWiki(args: {
3890
+ path: PluginApiOperations["update_wiki"]["path"];
3891
+ body: PluginApiOperations["update_wiki"]["body"];
3892
+ }): Promise<PluginApiOperations["update_wiki"]["answer"]>;
3893
+ /**
3894
+ * Every page of a wiki, in reading order.
3895
+ *
3896
+ * `GET /wikis/{wiki_id}/pages`, needs `wikis:read`.
3897
+ */
3898
+ listWikiPages(args: {
3899
+ path: PluginApiOperations["list_wiki_pages"]["path"];
3900
+ }): Promise<PluginApiOperations["list_wiki_pages"]["answer"]>;
3901
+ /**
3902
+ * One page by its own id, which is all a link to it, a mention or a stored
3903
+ * notification names.
3904
+ *
3905
+ * `GET /wiki-pages/{page_id}`, needs `wikis:read`.
3906
+ */
3907
+ readWikiPage(args: {
3908
+ path: PluginApiOperations["read_wiki_page"]["path"];
3909
+ }): Promise<PluginApiOperations["read_wiki_page"]["answer"]>;
3910
+ /**
3911
+ * Copy the page, without the pages under it, to the end of where it is filed,
3912
+ * as "<title> (Copy)", with its tags, links and properties.
3913
+ *
3914
+ * `POST /wiki-pages/{page_id}/duplicate`, needs `wikis:write`.
3915
+ */
3916
+ duplicateWikiPage(args: {
3917
+ path: PluginApiOperations["duplicate_wiki_page"]["path"];
3918
+ }): Promise<PluginApiOperations["duplicate_wiki_page"]["answer"]>;
3919
+ /**
3920
+ * Read Calendar Event
3921
+ *
3922
+ * `GET /calendar-events/{event_id}`, needs `calendars:read`.
3923
+ */
3924
+ readCalendarEvent(args: {
3925
+ path: PluginApiOperations["read_calendar_event"]["path"];
3926
+ query?: PluginApiOperations["read_calendar_event"]["query"];
3927
+ }): Promise<PluginApiOperations["read_calendar_event"]["answer"]>;
3928
+ /**
3929
+ * Update a calendar event. Requires write access on the calendar (and on the
3930
+ * target calendar when moving the event).
3931
+ *
3932
+ * `PATCH /calendar-events/{event_id}`, needs `calendars:write`.
3933
+ */
3934
+ updateCalendarEvent(args: {
3935
+ path: PluginApiOperations["update_calendar_event"]["path"];
3936
+ body: PluginApiOperations["update_calendar_event"]["body"];
3937
+ }): Promise<PluginApiOperations["update_calendar_event"]["answer"]>;
3938
+ /**
3939
+ * Create a calendar event. Requires write access on the calendar.
3940
+ *
3941
+ * `POST /calendar-events/`, needs `calendars:write`.
3942
+ */
3943
+ createCalendarEvent(args: {
3944
+ body: PluginApiOperations["create_calendar_event"]["body"];
3945
+ }): Promise<PluginApiOperations["create_calendar_event"]["answer"]>;
3946
+ /**
3947
+ * Copy the event beside itself as "<title> (Copy)", with its invitees, who
3948
+ * are invited to it as to a new event, its tags, links and properties. A
3949
+ * repeating event comes with its occurrences changed on their own; one
3950
+ * changed occurrence, or the `occurrence` named, is copied as an event of its
3951
+ * own.
3952
+ *
3953
+ * `POST /calendar-events/{event_id}/duplicate`, needs `calendars:write`.
3954
+ */
3955
+ duplicateCalendarEvent(args: {
3956
+ path: PluginApiOperations["duplicate_calendar_event"]["path"];
3957
+ query?: PluginApiOperations["duplicate_calendar_event"]["query"];
3958
+ }): Promise<PluginApiOperations["duplicate_calendar_event"]["answer"]>;
3959
+ /**
3960
+ * The occurrence starting at `start` as a row of its own, made from the
3961
+ * series the first time it is asked for, so it can change, carry its own
3962
+ * attendees or be linked to alone. Requires write access on the calendar.
3963
+ *
3964
+ * `POST /calendar-events/{event_id}/occurrences`, needs `calendars:write`.
3965
+ */
3966
+ openOccurrence(args: {
3967
+ path: PluginApiOperations["open_occurrence"]["path"];
3968
+ body: PluginApiOperations["open_occurrence"]["body"];
3969
+ }): Promise<PluginApiOperations["open_occurrence"]["answer"]>;
3970
+ /**
3971
+ * Copy the occurrence at `start` out into an event of its own, which the
3972
+ * series then skips.
3973
+ *
3974
+ * `POST /calendar-events/{event_id}/occurrences/detach`, needs `calendars:write`.
3975
+ */
3976
+ detachOccurrence(args: {
3977
+ path: PluginApiOperations["detach_occurrence"]["path"];
3978
+ body: PluginApiOperations["detach_occurrence"]["body"];
3979
+ }): Promise<PluginApiOperations["detach_occurrence"]["answer"]>;
3980
+ /**
3981
+ * Bring back a skipped occurrence of the series.
3982
+ *
3983
+ * `POST /calendar-events/{event_id}/occurrences/restore`, needs `calendars:write`.
3984
+ */
3985
+ restoreOccurrence(args: {
3986
+ path: PluginApiOperations["restore_occurrence"]["path"];
3987
+ body: PluginApiOperations["restore_occurrence"]["body"];
3988
+ }): Promise<PluginApiOperations["restore_occurrence"]["answer"]>;
3989
+ /**
3990
+ * Give the series an extra occurrence at `start`.
3991
+ *
3992
+ * `POST /calendar-events/{event_id}/occurrences/add`, needs `calendars:write`.
3993
+ */
3994
+ addOccurrence(args: {
3995
+ path: PluginApiOperations["add_occurrence"]["path"];
3996
+ body: PluginApiOperations["add_occurrence"]["body"];
3997
+ }): Promise<PluginApiOperations["add_occurrence"]["answer"]>;
3998
+ /**
3999
+ * Set attendees. Requires write access on the calendar.
4000
+ *
4001
+ * `PUT /calendar-events/{event_id}/attendees`, needs `calendars:write`.
4002
+ */
4003
+ setAttendees(args: {
4004
+ path: PluginApiOperations["set_attendees"]["path"];
4005
+ query?: PluginApiOperations["set_attendees"]["query"];
4006
+ body: PluginApiOperations["set_attendees"]["body"];
4007
+ }): Promise<PluginApiOperations["set_attendees"]["answer"]>;
4008
+ /**
4009
+ * List all tags in the current guild.
4010
+ *
4011
+ * `GET /tags/`, needs `tags:read`.
4012
+ */
4013
+ listTags(): Promise<PluginApiOperations["list_tags"]["answer"]>;
4014
+ /**
4015
+ * Add and/or remove tags across many entities of one type, atomically.
4016
+ *
4017
+ * `POST /tags/bulk`, needs `tags:write`.
4018
+ */
4019
+ bulkEditTags(args: {
4020
+ body: PluginApiOperations["bulk_edit_tags"]["body"];
4021
+ }): Promise<PluginApiOperations["bulk_edit_tags"]["answer"]>;
4022
+ /**
4023
+ * Replace the project's entire sharing state in one call — the body is the
4024
+ * full list of grants (all-initiative-members / per-user / per-role). Every
4025
+ * non-owner grant is rebuilt from it; the owner is always preserved.
4026
+ *
4027
+ * `PUT /projects/{project_id}/grants`, needs `sharing:write`.
4028
+ */
4029
+ setProjectGrants(args: {
4030
+ path: PluginApiOperations["set_project_grants"]["path"];
4031
+ body: PluginApiOperations["set_project_grants"]["body"];
4032
+ }): Promise<PluginApiOperations["set_project_grants"]["answer"]>;
4033
+ /**
4034
+ * Replace the document's entire sharing state in one call — the body is the
4035
+ * full list of grants (all-initiative-members / per-user / per-role). Every
4036
+ * non-owner grant is rebuilt from it; the owner is always preserved.
4037
+ *
4038
+ * `PUT /documents/{document_id}/grants`, needs `sharing:write`.
4039
+ */
4040
+ setDocumentGrants(args: {
4041
+ path: PluginApiOperations["set_document_grants"]["path"];
4042
+ body: PluginApiOperations["set_document_grants"]["body"];
4043
+ }): Promise<PluginApiOperations["set_document_grants"]["answer"]>;
4044
+ /**
4045
+ * Replace the queue's entire sharing state in one call — the body is the full
4046
+ * list of grants (all-initiative-members / per-user / per-role). Every
4047
+ * non-owner grant is rebuilt from it; the owner is always preserved.
4048
+ *
4049
+ * `PUT /queues/{queue_id}/grants`, needs `sharing:write`.
4050
+ */
4051
+ setQueueGrants(args: {
4052
+ path: PluginApiOperations["set_queue_grants"]["path"];
4053
+ body: PluginApiOperations["set_queue_grants"]["body"];
4054
+ }): Promise<PluginApiOperations["set_queue_grants"]["answer"]>;
4055
+ /**
4056
+ * Replace the counter group's entire sharing state in one call — the body is
4057
+ * the full list of grants (all-initiative-members / per-user / per-role).
4058
+ * Every non-owner grant is rebuilt from it; the owner is always preserved.
4059
+ *
4060
+ * `PUT /counter-groups/{group_id}/grants`, needs `sharing:write`.
4061
+ */
4062
+ setCounterGroupGrants(args: {
4063
+ path: PluginApiOperations["set_counter_group_grants"]["path"];
4064
+ body: PluginApiOperations["set_counter_group_grants"]["body"];
4065
+ }): Promise<PluginApiOperations["set_counter_group_grants"]["answer"]>;
4066
+ /**
4067
+ * Replace the calendar's entire sharing state in one call — the body is the
4068
+ * full list of grants (all-initiative-members / per-user / per-role). Every
4069
+ * non-owner grant is rebuilt from it; the owner is always preserved.
4070
+ *
4071
+ * `PUT /calendars/{calendar_id}/grants`, needs `sharing:write`.
4072
+ */
4073
+ setCalendarGrants(args: {
4074
+ path: PluginApiOperations["set_calendar_grants"]["path"];
4075
+ body: PluginApiOperations["set_calendar_grants"]["body"];
4076
+ }): Promise<PluginApiOperations["set_calendar_grants"]["answer"]>;
4077
+ /**
4078
+ * Replace the post's entire sharing state in one call — the body is the full
4079
+ * list of grants (all-initiative-members / per-user / per-role). Every
4080
+ * non-owner grant is rebuilt from it; the owner is always preserved.
4081
+ *
4082
+ * `PUT /posts/{post_id}/grants`, needs `sharing:write`.
4083
+ */
4084
+ setPostGrants(args: {
4085
+ path: PluginApiOperations["set_post_grants"]["path"];
4086
+ body: PluginApiOperations["set_post_grants"]["body"];
4087
+ }): Promise<PluginApiOperations["set_post_grants"]["answer"]>;
4088
+ /**
4089
+ * Replace the gallery's entire sharing state in one call — the body is the
4090
+ * full list of grants. Every non-owner grant is rebuilt from it; the owner is
4091
+ * always preserved.
4092
+ *
4093
+ * `PUT /galleries/{gallery_id}/grants`, needs `sharing:write`.
4094
+ */
4095
+ setGalleryGrants(args: {
4096
+ path: PluginApiOperations["set_gallery_grants"]["path"];
4097
+ body: PluginApiOperations["set_gallery_grants"]["body"];
4098
+ }): Promise<PluginApiOperations["set_gallery_grants"]["answer"]>;
4099
+ /**
4100
+ * Set Wiki Grants
4101
+ *
4102
+ * `PUT /wikis/{wiki_id}/grants`, needs `sharing:write`.
4103
+ */
4104
+ setWikiGrants(args: {
4105
+ path: PluginApiOperations["set_wiki_grants"]["path"];
4106
+ body: PluginApiOperations["set_wiki_grants"]["body"];
4107
+ }): Promise<PluginApiOperations["set_wiki_grants"]["answer"]>;
4108
+ /**
4109
+ * Copy it, with everything inside it, into an initiative: its own unless the
4110
+ * body names another. Read is enough to copy a template; anything else needs
4111
+ * write. The copy is shared as its source is while it stays in the same
4112
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4113
+ * copy carries them only when it holds the scope to tag.
4114
+ *
4115
+ * `POST /projects/{project_id}/duplicate`, needs `projects:write`.
4116
+ */
4117
+ duplicateProject(args: {
4118
+ path: PluginApiOperations["duplicate_project"]["path"];
4119
+ body?: PluginApiOperations["duplicate_project"]["body"];
4120
+ }): Promise<PluginApiOperations["duplicate_project"]["answer"]>;
4121
+ /**
4122
+ * Copy it, with everything inside it, into an initiative: its own unless the
4123
+ * body names another. Read is enough to copy a template; anything else needs
4124
+ * write. The copy is shared as its source is while it stays in the same
4125
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4126
+ * copy carries them only when it holds the scope to tag.
4127
+ *
4128
+ * `POST /documents/{document_id}/duplicate`, needs `documents:write`.
4129
+ */
4130
+ duplicateDocument(args: {
4131
+ path: PluginApiOperations["duplicate_document"]["path"];
4132
+ body?: PluginApiOperations["duplicate_document"]["body"];
4133
+ }): Promise<PluginApiOperations["duplicate_document"]["answer"]>;
4134
+ /**
4135
+ * Copy it, with everything inside it, into an initiative: its own unless the
4136
+ * body names another. Read is enough to copy a template; anything else needs
4137
+ * write. The copy is shared as its source is while it stays in the same
4138
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4139
+ * copy carries them only when it holds the scope to tag.
4140
+ *
4141
+ * `POST /queues/{queue_id}/duplicate`, needs `queues:write`.
4142
+ */
4143
+ duplicateQueue(args: {
4144
+ path: PluginApiOperations["duplicate_queue"]["path"];
4145
+ body?: PluginApiOperations["duplicate_queue"]["body"];
4146
+ }): Promise<PluginApiOperations["duplicate_queue"]["answer"]>;
4147
+ /**
4148
+ * Copy it, with everything inside it, into an initiative: its own unless the
4149
+ * body names another. Read is enough to copy a template; anything else needs
4150
+ * write. The copy is shared as its source is while it stays in the same
4151
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4152
+ * copy carries them only when it holds the scope to tag.
4153
+ *
4154
+ * `POST /counter-groups/{group_id}/duplicate`, needs `counter_groups:write`.
4155
+ */
4156
+ duplicateCounterGroup(args: {
4157
+ path: PluginApiOperations["duplicate_counter_group"]["path"];
4158
+ body?: PluginApiOperations["duplicate_counter_group"]["body"];
4159
+ }): Promise<PluginApiOperations["duplicate_counter_group"]["answer"]>;
4160
+ /**
4161
+ * Copy it, with everything inside it, into an initiative: its own unless the
4162
+ * body names another. Read is enough to copy a template; anything else needs
4163
+ * write. The copy is shared as its source is while it stays in the same
4164
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4165
+ * copy carries them only when it holds the scope to tag.
4166
+ *
4167
+ * `POST /calendars/{calendar_id}/duplicate`, needs `calendars:write`.
4168
+ */
4169
+ duplicateCalendar(args: {
4170
+ path: PluginApiOperations["duplicate_calendar"]["path"];
4171
+ body?: PluginApiOperations["duplicate_calendar"]["body"];
4172
+ }): Promise<PluginApiOperations["duplicate_calendar"]["answer"]>;
4173
+ /**
4174
+ * Copy it, with everything inside it, into an initiative: its own unless the
4175
+ * body names another. Read is enough to copy a template; anything else needs
4176
+ * write. The copy is shared as its source is while it stays in the same
4177
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4178
+ * copy carries them only when it holds the scope to tag.
4179
+ *
4180
+ * `POST /posts/{post_id}/duplicate`, needs `posts:write`.
4181
+ */
4182
+ duplicatePost(args: {
4183
+ path: PluginApiOperations["duplicate_post"]["path"];
4184
+ body?: PluginApiOperations["duplicate_post"]["body"];
4185
+ }): Promise<PluginApiOperations["duplicate_post"]["answer"]>;
4186
+ /**
4187
+ * Copy it, with everything inside it, into an initiative: its own unless the
4188
+ * body names another. Read is enough to copy a template; anything else needs
4189
+ * write. The copy is shared as its source is while it stays in the same
4190
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4191
+ * copy carries them only when it holds the scope to tag.
4192
+ *
4193
+ * `POST /galleries/{gallery_id}/duplicate`, needs `galleries:write`.
4194
+ */
4195
+ duplicateGallery(args: {
4196
+ path: PluginApiOperations["duplicate_gallery"]["path"];
4197
+ body?: PluginApiOperations["duplicate_gallery"]["body"];
4198
+ }): Promise<PluginApiOperations["duplicate_gallery"]["answer"]>;
4199
+ /**
4200
+ * Copy it, with everything inside it, into an initiative: its own unless the
4201
+ * body names another. Read is enough to copy a template; anything else needs
4202
+ * write. The copy is shared as its source is while it stays in the same
4203
+ * initiative, and carries the tags its maker may set: an installed plug-in's
4204
+ * copy carries them only when it holds the scope to tag.
4205
+ *
4206
+ * `POST /wikis/{wiki_id}/duplicate`, needs `wikis:write`.
4207
+ */
4208
+ duplicateWiki(args: {
4209
+ path: PluginApiOperations["duplicate_wiki"]["path"];
4210
+ body?: PluginApiOperations["duplicate_wiki"]["body"];
4211
+ }): Promise<PluginApiOperations["duplicate_wiki"]["answer"]>;
4212
+ /**
4213
+ * Titles for the command palette — a way to reach one thing quickly.
4214
+ *
4215
+ * `GET /search/suggest`, needs one of `calendars:read`, `comments:read`, `counter_groups:read`, `dashboards:read`, `documents:read`, `galleries:read`, `posts:read`, `projects:read`, `queues:read`, `tags:read`, `wikis:read`.
4216
+ */
4217
+ suggestCommunity(args: {
4218
+ query: PluginApiOperations["suggest_community"]["query"];
4219
+ }): Promise<PluginApiOperations["suggest_community"]["answer"]>;
4220
+ /**
4221
+ * List property definitions.
4222
+ *
4223
+ * `GET /property-definitions/`, needs `initiatives:read`.
4224
+ */
4225
+ listPropertyDefinitions(args?: {
4226
+ query?: PluginApiOperations["list_property_definitions"]["query"];
4227
+ }): Promise<PluginApiOperations["list_property_definitions"]["answer"]>;
4228
+ /**
4229
+ * Replace the custom property values on one tool or sub-tool.
4230
+ *
4231
+ * `PUT /properties/{target}/{entity_id}`, needs the scope its `target` names.
4232
+ */
4233
+ setProperties(args: {
4234
+ path: PluginApiOperations["set_properties"]["path"];
4235
+ body: PluginApiOperations["set_properties"]["body"];
4236
+ }): Promise<PluginApiOperations["set_properties"]["answer"]>;
4237
+ /**
4238
+ * Mark a thing finished with, and everything inside it. Idempotent: an
4239
+ * already-archived row keeps the stamp it has, so the date means when it was
4240
+ * archived, not when it was last asked about.
4241
+ *
4242
+ * `POST /archive/{entity_type}/{entity_id}`, needs the scope its `entity_type` names.
4243
+ */
4244
+ archiveEntity(args: {
4245
+ path: PluginApiOperations["archive_entity"]["path"];
4246
+ }): Promise<PluginApiOperations["archive_entity"]["answer"]>;
4247
+ /**
4248
+ * Slim, searchable, paginated roster for typeahead/pickers.
4249
+ *
4250
+ * `GET /users/search`, needs `members:read`.
4251
+ */
4252
+ searchUsers(args?: {
4253
+ query?: PluginApiOperations["search_users"]["query"];
4254
+ }): Promise<PluginApiOperations["search_users"]["answer"]>;
4255
+ /**
4256
+ * Serve the picture a member of this community uploaded.
4257
+ *
4258
+ * `GET /members/{person}/avatar/{digest}`, needs `members:read`.
4259
+ */
4260
+ readMemberAvatar(args: {
4261
+ path: PluginApiOperations["read_member_avatar"]["path"];
4262
+ }): Promise<PluginApiOperations["read_member_avatar"]["answer"]>;
4263
+ }