@37signals/basecamp 0.14.0 → 0.16.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 (96) hide show
  1. package/README.md +1 -1
  2. package/dist/client.d.ts +5 -2
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +4 -2
  5. package/dist/client.js.map +1 -1
  6. package/dist/download.d.ts +3 -1
  7. package/dist/download.d.ts.map +1 -1
  8. package/dist/download.js +87 -23
  9. package/dist/download.js.map +1 -1
  10. package/dist/errors.d.ts +40 -0
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js +132 -15
  13. package/dist/errors.js.map +1 -1
  14. package/dist/generated/metadata.d.ts.map +1 -1
  15. package/dist/generated/metadata.js +115 -1
  16. package/dist/generated/metadata.js.map +1 -1
  17. package/dist/generated/metadata.ts +115 -1
  18. package/dist/generated/openapi-stripped.json +1412 -209
  19. package/dist/generated/path-mapping.d.ts.map +1 -1
  20. package/dist/generated/path-mapping.js +9 -0
  21. package/dist/generated/path-mapping.js.map +1 -1
  22. package/dist/generated/path-mapping.ts +9 -0
  23. package/dist/generated/schema.d.ts +1136 -85
  24. package/dist/generated/services/bubble-ups.d.ts +48 -0
  25. package/dist/generated/services/bubble-ups.d.ts.map +1 -0
  26. package/dist/generated/services/bubble-ups.js +67 -0
  27. package/dist/generated/services/bubble-ups.js.map +1 -0
  28. package/dist/generated/services/bubble-ups.ts +98 -0
  29. package/dist/generated/services/checkins.d.ts +1 -1
  30. package/dist/generated/services/checkins.d.ts.map +1 -1
  31. package/dist/generated/services/checkins.ts +1 -1
  32. package/dist/generated/services/gauges.d.ts +3 -2
  33. package/dist/generated/services/gauges.d.ts.map +1 -1
  34. package/dist/generated/services/gauges.ts +2 -2
  35. package/dist/generated/services/index.d.ts +1 -0
  36. package/dist/generated/services/index.d.ts.map +1 -1
  37. package/dist/generated/services/index.js +1 -0
  38. package/dist/generated/services/index.js.map +1 -1
  39. package/dist/generated/services/index.ts +1 -0
  40. package/dist/generated/services/projects.d.ts +22 -0
  41. package/dist/generated/services/projects.d.ts.map +1 -1
  42. package/dist/generated/services/projects.js +42 -0
  43. package/dist/generated/services/projects.js.map +1 -1
  44. package/dist/generated/services/projects.ts +53 -0
  45. package/dist/generated/services/recordings.d.ts +24 -0
  46. package/dist/generated/services/recordings.d.ts.map +1 -1
  47. package/dist/generated/services/recordings.js +49 -0
  48. package/dist/generated/services/recordings.js.map +1 -1
  49. package/dist/generated/services/recordings.ts +59 -0
  50. package/dist/generated/services/search.d.ts +2 -1
  51. package/dist/generated/services/search.d.ts.map +1 -1
  52. package/dist/generated/services/search.ts +1 -1
  53. package/dist/generated/services/templates.d.ts +46 -0
  54. package/dist/generated/services/templates.d.ts.map +1 -1
  55. package/dist/generated/services/templates.js +70 -0
  56. package/dist/generated/services/templates.js.map +1 -1
  57. package/dist/generated/services/templates.ts +98 -0
  58. package/dist/index.d.ts +3 -2
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +2 -1
  61. package/dist/index.js.map +1 -1
  62. package/dist/oauth/authorization-document.d.ts +18 -11
  63. package/dist/oauth/authorization-document.d.ts.map +1 -1
  64. package/dist/oauth/authorization-document.js +16 -11
  65. package/dist/oauth/authorization-document.js.map +1 -1
  66. package/dist/oauth/device.d.ts.map +1 -1
  67. package/dist/oauth/device.js +9 -71
  68. package/dist/oauth/device.js.map +1 -1
  69. package/dist/oauth/exchange.d.ts.map +1 -1
  70. package/dist/oauth/exchange.js +55 -16
  71. package/dist/oauth/exchange.js.map +1 -1
  72. package/dist/oauth/limits.d.ts +33 -2
  73. package/dist/oauth/limits.d.ts.map +1 -1
  74. package/dist/oauth/limits.js +76 -2
  75. package/dist/oauth/limits.js.map +1 -1
  76. package/dist/retry.d.ts +23 -0
  77. package/dist/retry.d.ts.map +1 -1
  78. package/dist/retry.js +45 -10
  79. package/dist/retry.js.map +1 -1
  80. package/dist/services/base.d.ts +25 -2
  81. package/dist/services/base.d.ts.map +1 -1
  82. package/dist/services/base.js +85 -15
  83. package/dist/services/base.js.map +1 -1
  84. package/package.json +6 -4
  85. package/src/generated/metadata.ts +115 -1
  86. package/src/generated/openapi-stripped.json +1412 -209
  87. package/src/generated/path-mapping.ts +9 -0
  88. package/src/generated/schema.d.ts +1136 -85
  89. package/src/generated/services/bubble-ups.ts +98 -0
  90. package/src/generated/services/checkins.ts +1 -1
  91. package/src/generated/services/gauges.ts +2 -2
  92. package/src/generated/services/index.ts +1 -0
  93. package/src/generated/services/projects.ts +53 -0
  94. package/src/generated/services/recordings.ts +59 -0
  95. package/src/generated/services/search.ts +1 -1
  96. package/src/generated/services/templates.ts +98 -0
@@ -1731,6 +1731,31 @@ export interface paths {
1731
1731
  patch?: never;
1732
1732
  trace?: never;
1733
1733
  };
1734
+ "/my/recent_projects.json": {
1735
+ parameters: {
1736
+ query?: never;
1737
+ header?: never;
1738
+ path?: never;
1739
+ cookie?: never;
1740
+ };
1741
+ /**
1742
+ * @description List the projects the current user has most recently visited, most recent visit first.
1743
+ * Reads the per-user visit log — capped at the 50 most recent visits, keeping
1744
+ * only active projects the user can still access — not the home grid's
1745
+ * pinned-exclusion and padding. This endpoint is not paginated. Each entry is
1746
+ * the standard project projection plus the current user's bookmarked flag. A
1747
+ * visit is recorded when the user opens a project in Basecamp, when they
1748
+ * create one, and by RecordProjectVisit.
1749
+ */
1750
+ get: operations["ListRecentProjects"];
1751
+ put?: never;
1752
+ post?: never;
1753
+ delete?: never;
1754
+ options?: never;
1755
+ head?: never;
1756
+ patch?: never;
1757
+ trace?: never;
1758
+ };
1734
1759
  "/my/unreads.json": {
1735
1760
  parameters: {
1736
1761
  query?: never;
@@ -1950,6 +1975,28 @@ export interface paths {
1950
1975
  patch?: never;
1951
1976
  trace?: never;
1952
1977
  };
1978
+ "/projects/{projectId}/recent_visit.json": {
1979
+ parameters: {
1980
+ query?: never;
1981
+ header?: never;
1982
+ path?: never;
1983
+ cookie?: never;
1984
+ };
1985
+ get?: never;
1986
+ put?: never;
1987
+ /**
1988
+ * @description Record that the current user visited a project, moving it to the front of ListRecentProjects (returns 204 No Content).
1989
+ * Idempotent: re-recording a visit refreshes the same entry. Visits to
1990
+ * archived or trashed projects are accepted but not recorded, and an
1991
+ * inaccessible project answers 404.
1992
+ */
1993
+ post: operations["RecordProjectVisit"];
1994
+ delete?: never;
1995
+ options?: never;
1996
+ head?: never;
1997
+ patch?: never;
1998
+ trace?: never;
1999
+ };
1953
2000
  "/projects/{projectId}/status/active.json": {
1954
2001
  parameters: {
1955
2002
  query?: never;
@@ -2265,6 +2312,42 @@ export interface paths {
2265
2312
  patch?: never;
2266
2313
  trace?: never;
2267
2314
  };
2315
+ "/recordings/{recordingId}/bubble_up.json": {
2316
+ parameters: {
2317
+ query?: never;
2318
+ header?: never;
2319
+ path?: never;
2320
+ cookie?: never;
2321
+ };
2322
+ get?: never;
2323
+ put?: never;
2324
+ /**
2325
+ * @description Bubble up a recording for the current user, resurfacing it in the current
2326
+ * user's readings (the BC5 successor to "save"). Returns 204 No Content with
2327
+ * no body.
2328
+ *
2329
+ * The `at` field controls timing. Send `"now"` to bubble up immediately, or a
2330
+ * scheduling keyword (`"today"`, `"tomorrow"`, `"weekend"`, `"next_week"`) or
2331
+ * an ISO8601 date (e.g. `"2026-09-10"`) to schedule it to resurface later.
2332
+ * NOTE: bc3 currently requires `at` — omitting it raises on the server
2333
+ * (`Date.iso8601(nil)`), so send `"now"` for the immediate case. The field is
2334
+ * modeled optional (not `@required`) so a future bc3 default (`params[:at] ||=
2335
+ * "now"`) makes omission mean "now" without an SDK change.
2336
+ *
2337
+ * Idempotent: bubbling up an already-bubbled recording is set-membership and
2338
+ * still returns 204.
2339
+ */
2340
+ post: operations["CreateBubbleUp"];
2341
+ /**
2342
+ * @description Remove the current user's bubble-up from a recording (returns 204 No Content).
2343
+ * Idempotent: popping an absent bubble-up also returns 204.
2344
+ */
2345
+ delete: operations["DeleteBubbleUp"];
2346
+ options?: never;
2347
+ head?: never;
2348
+ patch?: never;
2349
+ trace?: never;
2350
+ };
2268
2351
  "/recordings/{recordingId}/client_visibility.json": {
2269
2352
  parameters: {
2270
2353
  query?: never;
@@ -2345,6 +2428,30 @@ export interface paths {
2345
2428
  patch?: never;
2346
2429
  trace?: never;
2347
2430
  };
2431
+ "/recordings/{recordingId}/spotlight.json": {
2432
+ parameters: {
2433
+ query?: never;
2434
+ header?: never;
2435
+ path?: never;
2436
+ cookie?: never;
2437
+ };
2438
+ get?: never;
2439
+ put?: never;
2440
+ /**
2441
+ * @description Put a recording's card in the spotlight area on its project or template home page.
2442
+ * Idempotent: spotlighting an already-spotlighted recording still returns 201.
2443
+ */
2444
+ post: operations["SpotlightRecording"];
2445
+ /**
2446
+ * @description Remove a recording from the spotlight area.
2447
+ * Idempotent: removing an absent spotlight also returns 204.
2448
+ */
2449
+ delete: operations["UnspotlightRecording"];
2450
+ options?: never;
2451
+ head?: never;
2452
+ patch?: never;
2453
+ trace?: never;
2454
+ };
2348
2455
  "/recordings/{recordingId}/status/active.json": {
2349
2456
  parameters: {
2350
2457
  query?: never;
@@ -2830,6 +2937,57 @@ export interface paths {
2830
2937
  patch?: never;
2831
2938
  trace?: never;
2832
2939
  };
2940
+ "/template_library.json": {
2941
+ parameters: {
2942
+ query?: never;
2943
+ header?: never;
2944
+ path?: never;
2945
+ cookie?: never;
2946
+ };
2947
+ /** @description Get the account's to-do list template library */
2948
+ get: operations["GetTemplateLibrary"];
2949
+ put?: never;
2950
+ post?: never;
2951
+ delete?: never;
2952
+ options?: never;
2953
+ head?: never;
2954
+ patch?: never;
2955
+ trace?: never;
2956
+ };
2957
+ "/template_library/copies.json": {
2958
+ parameters: {
2959
+ query?: never;
2960
+ header?: never;
2961
+ path?: never;
2962
+ cookie?: never;
2963
+ };
2964
+ get?: never;
2965
+ put?: never;
2966
+ /** @description Start copying a to-do list template into a project */
2967
+ post: operations["CreateTemplateLibraryCopy"];
2968
+ delete?: never;
2969
+ options?: never;
2970
+ head?: never;
2971
+ patch?: never;
2972
+ trace?: never;
2973
+ };
2974
+ "/template_library/copies/{copyId}": {
2975
+ parameters: {
2976
+ query?: never;
2977
+ header?: never;
2978
+ path?: never;
2979
+ cookie?: never;
2980
+ };
2981
+ /** @description Get the current status of a to-do list template copy */
2982
+ get: operations["GetTemplateLibraryCopy"];
2983
+ put?: never;
2984
+ post?: never;
2985
+ delete?: never;
2986
+ options?: never;
2987
+ head?: never;
2988
+ patch?: never;
2989
+ trace?: never;
2990
+ };
2833
2991
  "/templates.json": {
2834
2992
  parameters: {
2835
2993
  query?: never;
@@ -3729,9 +3887,11 @@ export interface components {
3729
3887
  created_at: string;
3730
3888
  updated_at: string;
3731
3889
  service_name: string;
3890
+ /** @description Only present when the requester is an account administrator; possession of this URL is enough to command the bot. */
3732
3891
  command_url?: string;
3733
3892
  url?: string;
3734
3893
  app_url?: string;
3894
+ /** @description Only present when the requester is an account administrator; possession of this URL is enough to post lines as the bot. */
3735
3895
  lines_url?: string;
3736
3896
  };
3737
3897
  ClientApproval: {
@@ -3927,6 +4087,16 @@ export interface components {
3927
4087
  attachable_sgid?: string;
3928
4088
  };
3929
4089
  CreateBookmarkResponseContent: components["schemas"]["Bookmark"];
4090
+ CreateBubbleUpRequestContent: {
4091
+ /**
4092
+ * @description Timing for the bubble-up. `"now"` bubbles up immediately; a scheduling
4093
+ * keyword (`"today"`, `"tomorrow"`, `"weekend"`, `"next_week"`) or an ISO8601
4094
+ * date (e.g. `"2026-09-10"`) schedules it to resurface later. bc3 requires a
4095
+ * value — omitting `at` errors server-side (`Date.iso8601(nil)`) — so send
4096
+ * `"now"` for the immediate case.
4097
+ */
4098
+ at?: string;
4099
+ };
3930
4100
  CreateCampfireLineRequestContent: {
3931
4101
  content: string;
3932
4102
  content_type?: string;
@@ -4161,6 +4331,15 @@ export interface components {
4161
4331
  visible_to_clients?: boolean;
4162
4332
  };
4163
4333
  CreateScheduleEntryResponseContent: components["schemas"]["ScheduleEntry"];
4334
+ CreateTemplateLibraryCopyRequestContent: {
4335
+ /** Format: int64 */
4336
+ template_recording_id: number;
4337
+ /** Format: int64 */
4338
+ destination_parent_id: number;
4339
+ /** @description Confirm granting destination-project access to people referenced by the template. */
4340
+ adding_people_confirmed?: boolean;
4341
+ };
4342
+ CreateTemplateLibraryCopyResponseContent: components["schemas"]["TemplateLibraryCopy"];
4164
4343
  CreateTemplateRequestContent: {
4165
4344
  name: string;
4166
4345
  description?: string;
@@ -4769,8 +4948,8 @@ export interface components {
4769
4948
  over_three_months_late?: components["schemas"]["Todo"][];
4770
4949
  };
4771
4950
  GetPersonProgressResponseContent: {
4772
- person?: components["schemas"]["Person"];
4773
- events?: components["schemas"]["TimelineEvent"][];
4951
+ person: components["schemas"]["Person"];
4952
+ events: components["schemas"]["TimelineEvent"][];
4774
4953
  };
4775
4954
  GetPersonResponseContent: components["schemas"]["Person"];
4776
4955
  GetProgressReportResponseContent: components["schemas"]["TimelineEvent"][];
@@ -4787,6 +4966,8 @@ export interface components {
4787
4966
  GetScheduleResponseContent: components["schemas"]["Schedule"];
4788
4967
  GetSearchMetadataResponseContent: components["schemas"]["SearchMetadata"];
4789
4968
  GetSubscriptionResponseContent: components["schemas"]["Subscription"];
4969
+ GetTemplateLibraryCopyResponseContent: components["schemas"]["TemplateLibraryCopy"];
4970
+ GetTemplateLibraryResponseContent: components["schemas"]["TemplateLibrary"];
4790
4971
  GetTemplateResponseContent: components["schemas"]["Template"];
4791
4972
  GetTimesheetEntryResponseContent: components["schemas"]["TimesheetEntry"];
4792
4973
  GetTimesheetReportResponseContent: components["schemas"]["TimesheetEntry"][];
@@ -4935,6 +5116,7 @@ export interface components {
4935
5116
  ListProjectsResponseContent: components["schemas"]["Project"][];
4936
5117
  ListQuestionAnswerersResponseContent: components["schemas"]["Person"][];
4937
5118
  ListQuestionsResponseContent: components["schemas"]["Question"][];
5119
+ ListRecentProjectsResponseContent: components["schemas"]["Project"][];
4938
5120
  ListRecordingBoostsResponseContent: components["schemas"]["Boost"][];
4939
5121
  ListRecordingsResponseContent: components["schemas"]["Recording"][];
4940
5122
  ListScheduleEntriesResponseContent: components["schemas"]["ScheduleEntry"][];
@@ -5047,13 +5229,19 @@ export interface components {
5047
5229
  parent?: components["schemas"]["MyAssignmentParent"];
5048
5230
  children?: components["schemas"]["MyAssignment"][];
5049
5231
  };
5232
+ /**
5233
+ * @description A person as bc3's `people/_person_minimal.json.jbuilder` renders them —
5234
+ * the same three-key partial behind UpcomingSchedulePerson and
5235
+ * OutOfOfficePerson. All three keys are emitted unconditionally, so all
5236
+ * three are required.
5237
+ */
5050
5238
  MyAssignmentAssignee: {
5051
5239
  /** Format: int64 */
5052
5240
  id: number;
5053
5241
  /** Format: password */
5054
- name?: string;
5242
+ name: string;
5055
5243
  /** Format: password */
5056
- avatar_url?: string;
5244
+ avatar_url: string;
5057
5245
  };
5058
5246
  MyAssignmentBucket: {
5059
5247
  /** Format: int64 */
@@ -5167,17 +5355,31 @@ export interface components {
5167
5355
  /** @description End date in ISO 8601 format (YYYY-MM-DD) */
5168
5356
  end_date: string;
5169
5357
  };
5358
+ /**
5359
+ * @description A person as bc3's `people/_person_minimal.json.jbuilder` renders them —
5360
+ * the same three-key partial behind UpcomingSchedulePerson and
5361
+ * MyAssignmentAssignee. All three keys are emitted unconditionally, so all
5362
+ * three are required.
5363
+ */
5170
5364
  OutOfOfficePerson: {
5171
5365
  /** Format: int64 */
5172
5366
  id: number;
5173
5367
  /** Format: password */
5174
- name?: string;
5368
+ name: string;
5175
5369
  /** Format: password */
5176
- avatar_url?: string;
5370
+ avatar_url: string;
5177
5371
  };
5178
5372
  PauseQuestionResponseContent: {
5179
5373
  paused?: boolean;
5180
5374
  };
5375
+ /**
5376
+ * @description The copy requires confirmation before granting destination-project access
5377
+ * to people referenced by the template.
5378
+ */
5379
+ PeopleConfirmationRequiredErrorResponseContent: {
5380
+ error: string;
5381
+ people: components["schemas"]["TemplateLibraryConfirmationPerson"][];
5382
+ };
5181
5383
  Person: {
5182
5384
  /** Format: int64 */
5183
5385
  id: number;
@@ -5279,10 +5481,18 @@ export interface components {
5279
5481
  end_date?: string;
5280
5482
  clients_enabled?: boolean;
5281
5483
  bookmark_url?: string;
5484
+ /** @description Bucket stars collection for this project (`/buckets/{id}/stars.json`). */
5485
+ star_url?: string;
5282
5486
  url: string;
5283
5487
  app_url: string;
5284
5488
  dock?: components["schemas"]["DockItem"][];
5489
+ /**
5490
+ * @description True when the project is pinned on the current user's home page at all,
5491
+ * whether starred or filed into a stack.
5492
+ */
5285
5493
  bookmarked?: boolean;
5494
+ /** @description True only when the project carries a star on the current user's home page. */
5495
+ starred?: boolean;
5286
5496
  client_company?: components["schemas"]["ClientCompany"];
5287
5497
  /** @deprecated */
5288
5498
  clientside?: components["schemas"]["ClientSide"];
@@ -5815,19 +6025,61 @@ export interface components {
5815
6025
  default_type_label: string;
5816
6026
  };
5817
6027
  SearchResponseContent: components["schemas"]["SearchResult"][];
6028
+ /**
6029
+ * @description One hit from account-wide search — a polymorphic projection over every
6030
+ * searchable recording type.
6031
+ *
6032
+ * Most result types render the common recording envelope
6033
+ * (`recordings/_recording.json.jbuilder`) plus their own recordable partial,
6034
+ * but `api_search_result_template_path` special-cases four branches — chat
6035
+ * lines, kanban (card table) lists, file attachments and gauge needles — and
6036
+ * the file-attachment branch writes its own projection from scratch instead
6037
+ * of the envelope. Members are therefore optional unless every branch emits
6038
+ * them; the doc comments name the branches that carry each optional member.
6039
+ */
5818
6040
  SearchResult: {
5819
- /** Format: int64 */
5820
- id: number;
6041
+ /**
6042
+ * Format: int64
6043
+ * @description The recording id. Optional only because the file-attachment branch
6044
+ * (`searches/_attachment.json.jbuilder`) skips the recording envelope and
6045
+ * emits none of the top-level id/title/type/url/app_url keys; every other
6046
+ * branch emits all five.
6047
+ */
6048
+ id?: number;
5821
6049
  status?: string;
5822
6050
  visible_to_clients?: boolean;
5823
6051
  created_at?: string;
5824
6052
  updated_at?: string;
5825
- title: string;
6053
+ /**
6054
+ * @description See `id` — omitted by the file-attachment branch, emitted by every other
6055
+ * branch.
6056
+ */
6057
+ title?: string;
5826
6058
  inherits_status?: boolean;
5827
- type: string;
5828
- url: string;
5829
- app_url: string;
6059
+ /**
6060
+ * @description See `id` — omitted by the file-attachment branch, emitted by every other
6061
+ * branch. A file-attachment hit is therefore recognizable by the absence
6062
+ * of this key (its file keys, `filename` through `app_download_url`, are
6063
+ * the positive signal).
6064
+ */
6065
+ type?: string;
6066
+ /**
6067
+ * @description See `id` — omitted by the file-attachment branch, emitted by every other
6068
+ * branch.
6069
+ */
6070
+ url?: string;
6071
+ /**
6072
+ * @description See `id` — omitted by the file-attachment branch, emitted by every other
6073
+ * branch.
6074
+ */
6075
+ app_url?: string;
5830
6076
  bookmark_url?: string;
6077
+ /**
6078
+ * @description Subscription URL, emitted by the common recording envelope for any
6079
+ * subscribable result — kanban lists and gauge needles among the special
6080
+ * branches, plus subscribable generic-branch types (messages, todos, …).
6081
+ */
6082
+ subscription_url?: string;
5831
6083
  /**
5832
6084
  * @description URL of the Bubble Up record for this recording (BC5 addition). Optional
5833
6085
  * here because this is a polymorphic projection:
@@ -5877,22 +6129,173 @@ export interface components {
5877
6129
  * the array matching its rich-text attribute (`content_attachments` for a
5878
6130
  * Comment/Message, `description_attachments` for a Todo); a webhook-sourced
5879
6131
  * result carries neither. Optional (no `@required`), non-nullable.
5880
- *
5881
- * Search results additionally repeat this same array under a generic
5882
- * `attachments` key. It is a redundant projection, not a distinct
5883
- * aggregate: `searches/show.json.jbuilder` emits
5884
- * `recording.downloadable_attachments`, which delegates to the recordable's
5885
- * sole `rich_text_content`, through the same `attachments/_attachment`
5886
- * partial that `recordings/_rich_text.json.jbuilder` uses to build the
5887
- * companion array. `RichText.rich_text_attribute` permits exactly one
5888
- * rich-text attribute per model, so the two keys always carry identical
5889
- * elements. Modeling `attachments` would duplicate the field, so it is
5890
- * deliberately not modeled.
5891
6132
  */
5892
6133
  content_attachments?: components["schemas"]["RichTextAttachment"][];
5893
6134
  /** @description See `content_attachments` — the description-attribute companion array. */
5894
6135
  description_attachments?: components["schemas"]["RichTextAttachment"][];
6136
+ /**
6137
+ * @description File attachments on the result, in either of two wire shapes — see
6138
+ * `SearchResultAttachment`.
6139
+ *
6140
+ * For a result whose recordable carries downloadable rich-text
6141
+ * attachments, `searches/show.json.jbuilder` emits this key through the
6142
+ * same `attachments/_attachment` partial that builds the rich-text
6143
+ * companion array above, so it repeats that array's elements. For a chat
6144
+ * *upload* line, `chats/lines/_upload.json.jbuilder` instead builds a
6145
+ * bespoke six-key aggregate inline — and because upload lines have no
6146
+ * rich-text attribute, the show template never overwrites it, so that
6147
+ * distinct shape survives to the wire.
6148
+ */
6149
+ attachments?: components["schemas"]["SearchResultAttachment"][];
5895
6150
  subject?: string;
6151
+ /**
6152
+ * Format: int32
6153
+ * @description Boost count, emitted by the recording envelope when the branch passes
6154
+ * `boostable` — chat lines and gauge needles.
6155
+ */
6156
+ boosts_count?: number;
6157
+ /** @description See `boosts_count` — the companion URL. */
6158
+ boosts_url?: string;
6159
+ /**
6160
+ * @description Language of a code chat line (`chats/lines/_code.json.jbuilder`);
6161
+ * validated present on the model, so never null when the key is emitted.
6162
+ */
6163
+ language?: string;
6164
+ /**
6165
+ * @description Image URL of a soundtracked (play-kind) chat line whose sound carries an
6166
+ * image; such a line emits `image_url` in place of `content`.
6167
+ */
6168
+ image_url?: string;
6169
+ /** @description Sound URL of a play-kind chat line; always emitted for that kind. */
6170
+ sound_url?: string;
6171
+ /** @description Everyone subscribed to the kanban list, as full Person projections. */
6172
+ subscribers?: components["schemas"]["Person"][];
6173
+ /**
6174
+ * @description Color of a kanban list or gauge needle. Emitted unconditionally by both
6175
+ * branches with a null value when unset, so it is nullable (the enhance
6176
+ * pass layers `nullable: true` onto the OpenAPI).
6177
+ */
6178
+ color?: string | null;
6179
+ /**
6180
+ * Format: int32
6181
+ * @description Number of cards in the kanban list.
6182
+ */
6183
+ cards_count?: number;
6184
+ /**
6185
+ * Format: int32
6186
+ * @description Comment count of a kanban list or gauge needle (branch-partial key,
6187
+ * singular `comment_count` — distinct from the envelope's
6188
+ * `comments_count`, which a needle also carries).
6189
+ */
6190
+ comment_count?: number;
6191
+ /** @description API URL of the kanban list's cards. */
6192
+ cards_url?: string;
6193
+ on_hold?: components["schemas"]["CardColumnOnHold"];
6194
+ /**
6195
+ * Format: int32
6196
+ * @description Comment count, emitted by the recording envelope when the branch passes
6197
+ * `commentable` — gauge needles among the special branches, plus
6198
+ * commentable generic-branch types.
6199
+ */
6200
+ comments_count?: number;
6201
+ /** @description See `comments_count` — the companion URL. */
6202
+ comments_url?: string;
6203
+ /**
6204
+ * Format: int32
6205
+ * @description Position of the result. Two emitters share the key: the recording
6206
+ * envelope emits list position for positioned recordings (kanban lists
6207
+ * among the special branches), and the gauge-needle branch overwrites it
6208
+ * with the needle's own 0–100 gauge position.
6209
+ */
6210
+ position?: number;
6211
+ /**
6212
+ * @description Filename of a file-attachment hit. This and the following file keys are
6213
+ * emitted only by the file-attachment branch — the one branch that omits
6214
+ * the id/title/type/url/app_url envelope keys.
6215
+ */
6216
+ filename?: string;
6217
+ /** @description MIME type of a file-attachment hit. */
6218
+ content_type?: string;
6219
+ /**
6220
+ * Format: int64
6221
+ * @description Size in bytes of a file-attachment hit.
6222
+ */
6223
+ byte_size?: number;
6224
+ /** @description Whether the file can be previewed. */
6225
+ previewable?: boolean;
6226
+ /**
6227
+ * Format: int32
6228
+ * @description Pixel width, emitted only when the file is previewable. May be
6229
+ * float-spelled (`1024.0`) and nullable, like every other blob dimension —
6230
+ * see `RichTextAttachment.width` for the cross-SDK typing note.
6231
+ */
6232
+ width?: number | null;
6233
+ /**
6234
+ * Format: int32
6235
+ * @description See `width` — same conditional emission and nullable/float-spelled
6236
+ * behavior.
6237
+ */
6238
+ height?: number | null;
6239
+ /** @description Full-size preview URL of a file-attachment hit. */
6240
+ preview_url?: string;
6241
+ /** @description Thumbnail URL of a file-attachment hit. */
6242
+ thumbnail_url?: string;
6243
+ /** @description Authenticated download URL of a file-attachment hit. */
6244
+ download_url?: string;
6245
+ /** @description Web (app-host) download URL of a file-attachment hit. */
6246
+ app_download_url?: string;
6247
+ };
6248
+ /**
6249
+ * @description A file attached to a search result, in either of two wire shapes.
6250
+ *
6251
+ * This is an optional-field superset over the two variants the search
6252
+ * projection emits (the TimelineAttachment approach): the rich-text
6253
+ * attachment/blob shape rendered through `attachments/_attachment` +
6254
+ * `blobs/_blob` — the same emitters `RichTextAttachment` models — and the
6255
+ * bespoke six-key aggregate a chat upload line builds inline in
6256
+ * `chats/lines/_upload.json.jbuilder`. Only the four keys both variants
6257
+ * always emit are `@required`; the rest identify their variant.
6258
+ */
6259
+ SearchResultAttachment: {
6260
+ /** @description Original filename (both variants). */
6261
+ filename: string;
6262
+ /** @description MIME type of the file (both variants). */
6263
+ content_type: string;
6264
+ /**
6265
+ * Format: int64
6266
+ * @description Size of the file in bytes (both variants).
6267
+ */
6268
+ byte_size: number;
6269
+ /** @description Authenticated download URL for the file (both variants). */
6270
+ download_url: string;
6271
+ /**
6272
+ * Format: int64
6273
+ * @description Attachment id (rich-text variant).
6274
+ */
6275
+ id?: number;
6276
+ /** @description Signed global id of the attachment (rich-text variant). */
6277
+ sgid?: string;
6278
+ /** @description Whether the blob can be previewed (rich-text variant). */
6279
+ previewable?: boolean;
6280
+ /** @description Full-size preview URL (rich-text variant). */
6281
+ preview_url?: string;
6282
+ /** @description Thumbnail URL (rich-text variant). */
6283
+ thumbnail_url?: string;
6284
+ /**
6285
+ * Format: int32
6286
+ * @description Pixel width (rich-text variant) — null for non-image blobs and may be
6287
+ * float-spelled (`1024.0`); see `RichTextAttachment.width`.
6288
+ */
6289
+ width?: number | null;
6290
+ /**
6291
+ * Format: int32
6292
+ * @description See `width` (rich-text variant).
6293
+ */
6294
+ height?: number | null;
6295
+ /** @description Title of the attachment recording (chat upload-line variant). */
6296
+ title?: string;
6297
+ /** @description Browser preview URL of the blob (chat upload-line variant). */
6298
+ url?: string;
5896
6299
  };
5897
6300
  /**
5898
6301
  * @description A selectable search filter option. `key` is the value passed back as a
@@ -5923,6 +6326,7 @@ export interface components {
5923
6326
  visible_to_clients: boolean;
5924
6327
  };
5925
6328
  SetClientVisibilityResponseContent: components["schemas"]["Recording"];
6329
+ SpotlightRecordingResponseContent: components["schemas"]["Recording"];
5926
6330
  /**
5927
6331
  * @description The account has reached its file storage limit.
5928
6332
  *
@@ -5954,14 +6358,39 @@ export interface components {
5954
6358
  app_url?: string;
5955
6359
  dock?: components["schemas"]["DockItem"][];
5956
6360
  };
5957
- /**
5958
- * @description A single timeline-event attachment. This is an optional-field superset over
5959
- * two wire variants — a full Upload recording (upload-kind recordings, rendered
5960
- * by BC3's uploads/_upload partial: the complete recording projection + rich-
5961
- * text description + the upload body) and a rich-text attachment/blob partial
5962
- * (all other recordings) — so one element type decodes either. Every field is
5963
- * optional; a given instance populates only the fields of the variant it
5964
- * represents. The upload-recording variant enumerates the full documented
6361
+ TemplateLibrary: {
6362
+ bucket: components["schemas"]["RecordingBucket"];
6363
+ todoset: components["schemas"]["RecordingParent"];
6364
+ todolists: components["schemas"]["Todolist"][];
6365
+ };
6366
+ TemplateLibraryConfirmationPerson: {
6367
+ /** Format: int64 */
6368
+ id: number;
6369
+ /** Format: password */
6370
+ name: string;
6371
+ /** Format: password */
6372
+ avatar_url: string;
6373
+ };
6374
+ TemplateLibraryCopy: {
6375
+ /** Format: int64 */
6376
+ id: number;
6377
+ /** @description pending|processing|completed|failed */
6378
+ status: string;
6379
+ /** Format: int64 */
6380
+ source_recording_id: number;
6381
+ /** Format: int64 */
6382
+ destination_parent_id: number;
6383
+ url: string;
6384
+ destination_todolist?: components["schemas"]["Todolist"];
6385
+ };
6386
+ /**
6387
+ * @description A single timeline-event attachment. This is an optional-field superset over
6388
+ * two wire variants — a full Upload recording (upload-kind recordings, rendered
6389
+ * by BC3's uploads/_upload partial: the complete recording projection + rich-
6390
+ * text description + the upload body) and a rich-text attachment/blob partial
6391
+ * (all other recordings) — so one element type decodes either. Every field is
6392
+ * optional; a given instance populates only the fields of the variant it
6393
+ * represents. The upload-recording variant enumerates the full documented
5965
6394
  * projection so no documented field is silently dropped on decode.
5966
6395
  */
5967
6396
  TimelineAttachment: {
@@ -6372,16 +6801,41 @@ export interface components {
6372
6801
  /** Format: int64 */
6373
6802
  id: number;
6374
6803
  status?: string;
6804
+ visible_to_clients: boolean;
6375
6805
  created_at: string;
6376
6806
  updated_at: string;
6377
6807
  title: string;
6378
- name: string;
6379
- enabled: boolean;
6380
- /** Format: int32 */
6381
- position?: number;
6808
+ inherits_status: boolean;
6809
+ /** @description The tool's recordable type, e.g. `Chat::Transcript`, `Todoset`, `Vault`. */
6810
+ type: string;
6382
6811
  url?: string;
6383
6812
  app_url?: string;
6813
+ bookmark_url?: string;
6814
+ /** @description Absent for tool types that are not subscribable. */
6815
+ subscription_url?: string;
6816
+ /**
6817
+ * Format: int32
6818
+ * @description Emitted only for a positioned recording. For a docked tool that makes an
6819
+ * absent position the disabled signal — disabling removes the tool from the
6820
+ * dock without deleting it. Positioning is independent of dockedness, so
6821
+ * this does not generalize: a nested vault is not docked and is positioned.
6822
+ */
6823
+ position?: number;
6824
+ parent?: components["schemas"]["RecordingParent"];
6384
6825
  bucket?: components["schemas"]["RecordingBucket"];
6826
+ creator: components["schemas"]["Person"];
6827
+ /**
6828
+ * @description Not emitted by this projection. The dock array on a project
6829
+ * (`DockItem$name`) carries the tool's slug; this key is absent from every
6830
+ * GetTool/CreateTool/UpdateTool response.
6831
+ */
6832
+ name?: string;
6833
+ /**
6834
+ * @description Not emitted by this projection. The dock array on a project
6835
+ * (`DockItem$enabled`) is the authoritative enabled flag; on a docked tool's
6836
+ * own response, an absent `position` is the equivalent signal.
6837
+ */
6838
+ enabled?: boolean;
6385
6839
  };
6386
6840
  UnauthorizedErrorResponseContent: {
6387
6841
  error: string;
@@ -14743,6 +15197,62 @@ export interface operations {
14743
15197
  };
14744
15198
  };
14745
15199
  };
15200
+ ListRecentProjects: {
15201
+ parameters: {
15202
+ query?: never;
15203
+ header?: never;
15204
+ path?: never;
15205
+ cookie?: never;
15206
+ };
15207
+ requestBody?: never;
15208
+ responses: {
15209
+ /** @description ListRecentProjects 200 response */
15210
+ 200: {
15211
+ headers: {
15212
+ [name: string]: unknown;
15213
+ };
15214
+ content: {
15215
+ "application/json": components["schemas"]["ListRecentProjectsResponseContent"];
15216
+ };
15217
+ };
15218
+ /** @description UnauthorizedError 401 response */
15219
+ 401: {
15220
+ headers: {
15221
+ [name: string]: unknown;
15222
+ };
15223
+ content: {
15224
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
15225
+ };
15226
+ };
15227
+ /** @description ForbiddenError 403 response */
15228
+ 403: {
15229
+ headers: {
15230
+ [name: string]: unknown;
15231
+ };
15232
+ content: {
15233
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
15234
+ };
15235
+ };
15236
+ /** @description RateLimitError 429 response */
15237
+ 429: {
15238
+ headers: {
15239
+ [name: string]: unknown;
15240
+ };
15241
+ content: {
15242
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
15243
+ };
15244
+ };
15245
+ /** @description InternalServerError 500 response */
15246
+ 500: {
15247
+ headers: {
15248
+ [name: string]: unknown;
15249
+ };
15250
+ content: {
15251
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
15252
+ };
15253
+ };
15254
+ };
15255
+ };
14746
15256
  MarkAsRead: {
14747
15257
  parameters: {
14748
15258
  query?: never;
@@ -15837,6 +16347,71 @@ export interface operations {
15837
16347
  };
15838
16348
  };
15839
16349
  };
16350
+ RecordProjectVisit: {
16351
+ parameters: {
16352
+ query?: never;
16353
+ header?: never;
16354
+ path: {
16355
+ projectId: number;
16356
+ };
16357
+ cookie?: never;
16358
+ };
16359
+ requestBody?: never;
16360
+ responses: {
16361
+ /** @description RecordProjectVisit 204 response */
16362
+ 204: {
16363
+ headers: {
16364
+ [name: string]: unknown;
16365
+ };
16366
+ content?: never;
16367
+ };
16368
+ /** @description UnauthorizedError 401 response */
16369
+ 401: {
16370
+ headers: {
16371
+ [name: string]: unknown;
16372
+ };
16373
+ content: {
16374
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
16375
+ };
16376
+ };
16377
+ /** @description ForbiddenError 403 response */
16378
+ 403: {
16379
+ headers: {
16380
+ [name: string]: unknown;
16381
+ };
16382
+ content: {
16383
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
16384
+ };
16385
+ };
16386
+ /** @description NotFoundError 404 response */
16387
+ 404: {
16388
+ headers: {
16389
+ [name: string]: unknown;
16390
+ };
16391
+ content: {
16392
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
16393
+ };
16394
+ };
16395
+ /** @description RateLimitError 429 response */
16396
+ 429: {
16397
+ headers: {
16398
+ [name: string]: unknown;
16399
+ };
16400
+ content: {
16401
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
16402
+ };
16403
+ };
16404
+ /** @description InternalServerError 500 response */
16405
+ 500: {
16406
+ headers: {
16407
+ [name: string]: unknown;
16408
+ };
16409
+ content: {
16410
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
16411
+ };
16412
+ };
16413
+ };
16414
+ };
15840
16415
  UnarchiveProject: {
15841
16416
  parameters: {
15842
16417
  query?: never;
@@ -17456,7 +18031,7 @@ export interface operations {
17456
18031
  };
17457
18032
  };
17458
18033
  };
17459
- SetClientVisibility: {
18034
+ CreateBubbleUp: {
17460
18035
  parameters: {
17461
18036
  query?: never;
17462
18037
  header?: never;
@@ -17465,20 +18040,18 @@ export interface operations {
17465
18040
  };
17466
18041
  cookie?: never;
17467
18042
  };
17468
- requestBody: {
18043
+ requestBody?: {
17469
18044
  content: {
17470
- "application/json": components["schemas"]["SetClientVisibilityRequestContent"];
18045
+ "application/json": components["schemas"]["CreateBubbleUpRequestContent"];
17471
18046
  };
17472
18047
  };
17473
18048
  responses: {
17474
- /** @description SetClientVisibility 200 response */
17475
- 200: {
18049
+ /** @description CreateBubbleUp 204 response */
18050
+ 204: {
17476
18051
  headers: {
17477
18052
  [name: string]: unknown;
17478
18053
  };
17479
- content: {
17480
- "application/json": components["schemas"]["SetClientVisibilityResponseContent"];
17481
- };
18054
+ content?: never;
17482
18055
  };
17483
18056
  /** @description UnauthorizedError 401 response */
17484
18057
  401: {
@@ -17507,13 +18080,13 @@ export interface operations {
17507
18080
  "application/json": components["schemas"]["NotFoundErrorResponseContent"];
17508
18081
  };
17509
18082
  };
17510
- /** @description ValidationError 422 response */
17511
- 422: {
18083
+ /** @description RateLimitError 429 response */
18084
+ 429: {
17512
18085
  headers: {
17513
18086
  [name: string]: unknown;
17514
18087
  };
17515
18088
  content: {
17516
- "application/json": components["schemas"]["ValidationErrorResponseContent"];
18089
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
17517
18090
  };
17518
18091
  };
17519
18092
  /** @description InternalServerError 500 response */
@@ -17527,12 +18100,9 @@ export interface operations {
17527
18100
  };
17528
18101
  };
17529
18102
  };
17530
- ListComments: {
18103
+ DeleteBubbleUp: {
17531
18104
  parameters: {
17532
- query?: {
17533
- /** @description Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
17534
- page?: number;
17535
- };
18105
+ query?: never;
17536
18106
  header?: never;
17537
18107
  path: {
17538
18108
  recordingId: number;
@@ -17541,14 +18111,12 @@ export interface operations {
17541
18111
  };
17542
18112
  requestBody?: never;
17543
18113
  responses: {
17544
- /** @description ListComments 200 response */
17545
- 200: {
18114
+ /** @description DeleteBubbleUp 204 response */
18115
+ 204: {
17546
18116
  headers: {
17547
18117
  [name: string]: unknown;
17548
18118
  };
17549
- content: {
17550
- "application/json": components["schemas"]["ListCommentsResponseContent"];
17551
- };
18119
+ content?: never;
17552
18120
  };
17553
18121
  /** @description UnauthorizedError 401 response */
17554
18122
  401: {
@@ -17568,6 +18136,15 @@ export interface operations {
17568
18136
  "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
17569
18137
  };
17570
18138
  };
18139
+ /** @description NotFoundError 404 response */
18140
+ 404: {
18141
+ headers: {
18142
+ [name: string]: unknown;
18143
+ };
18144
+ content: {
18145
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
18146
+ };
18147
+ };
17571
18148
  /** @description RateLimitError 429 response */
17572
18149
  429: {
17573
18150
  headers: {
@@ -17588,7 +18165,7 @@ export interface operations {
17588
18165
  };
17589
18166
  };
17590
18167
  };
17591
- CreateComment: {
18168
+ SetClientVisibility: {
17592
18169
  parameters: {
17593
18170
  query?: never;
17594
18171
  header?: never;
@@ -17599,17 +18176,17 @@ export interface operations {
17599
18176
  };
17600
18177
  requestBody: {
17601
18178
  content: {
17602
- "application/json": components["schemas"]["CreateCommentRequestContent"];
18179
+ "application/json": components["schemas"]["SetClientVisibilityRequestContent"];
17603
18180
  };
17604
18181
  };
17605
18182
  responses: {
17606
- /** @description CreateComment 201 response */
17607
- 201: {
18183
+ /** @description SetClientVisibility 200 response */
18184
+ 200: {
17608
18185
  headers: {
17609
18186
  [name: string]: unknown;
17610
18187
  };
17611
18188
  content: {
17612
- "application/json": components["schemas"]["CreateCommentResponseContent"];
18189
+ "application/json": components["schemas"]["SetClientVisibilityResponseContent"];
17613
18190
  };
17614
18191
  };
17615
18192
  /** @description UnauthorizedError 401 response */
@@ -17630,22 +18207,22 @@ export interface operations {
17630
18207
  "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
17631
18208
  };
17632
18209
  };
17633
- /** @description ValidationError 422 response */
17634
- 422: {
18210
+ /** @description NotFoundError 404 response */
18211
+ 404: {
17635
18212
  headers: {
17636
18213
  [name: string]: unknown;
17637
18214
  };
17638
18215
  content: {
17639
- "application/json": components["schemas"]["ValidationErrorResponseContent"];
18216
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
17640
18217
  };
17641
18218
  };
17642
- /** @description RateLimitError 429 response */
17643
- 429: {
18219
+ /** @description ValidationError 422 response */
18220
+ 422: {
17644
18221
  headers: {
17645
18222
  [name: string]: unknown;
17646
18223
  };
17647
18224
  content: {
17648
- "application/json": components["schemas"]["RateLimitErrorResponseContent"];
18225
+ "application/json": components["schemas"]["ValidationErrorResponseContent"];
17649
18226
  };
17650
18227
  };
17651
18228
  /** @description InternalServerError 500 response */
@@ -17659,7 +18236,7 @@ export interface operations {
17659
18236
  };
17660
18237
  };
17661
18238
  };
17662
- ListEvents: {
18239
+ ListComments: {
17663
18240
  parameters: {
17664
18241
  query?: {
17665
18242
  /** @description Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
@@ -17673,13 +18250,13 @@ export interface operations {
17673
18250
  };
17674
18251
  requestBody?: never;
17675
18252
  responses: {
17676
- /** @description ListEvents 200 response */
18253
+ /** @description ListComments 200 response */
17677
18254
  200: {
17678
18255
  headers: {
17679
18256
  [name: string]: unknown;
17680
18257
  };
17681
18258
  content: {
17682
- "application/json": components["schemas"]["ListEventsResponseContent"];
18259
+ "application/json": components["schemas"]["ListCommentsResponseContent"];
17683
18260
  };
17684
18261
  };
17685
18262
  /** @description UnauthorizedError 401 response */
@@ -17720,28 +18297,28 @@ export interface operations {
17720
18297
  };
17721
18298
  };
17722
18299
  };
17723
- ListEventBoosts: {
18300
+ CreateComment: {
17724
18301
  parameters: {
17725
- query?: {
17726
- /** @description Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
17727
- page?: number;
17728
- };
18302
+ query?: never;
17729
18303
  header?: never;
17730
18304
  path: {
17731
18305
  recordingId: number;
17732
- eventId: number;
17733
18306
  };
17734
18307
  cookie?: never;
17735
18308
  };
17736
- requestBody?: never;
18309
+ requestBody: {
18310
+ content: {
18311
+ "application/json": components["schemas"]["CreateCommentRequestContent"];
18312
+ };
18313
+ };
17737
18314
  responses: {
17738
- /** @description ListEventBoosts 200 response */
17739
- 200: {
18315
+ /** @description CreateComment 201 response */
18316
+ 201: {
17740
18317
  headers: {
17741
18318
  [name: string]: unknown;
17742
18319
  };
17743
18320
  content: {
17744
- "application/json": components["schemas"]["ListEventBoostsResponseContent"];
18321
+ "application/json": components["schemas"]["CreateCommentResponseContent"];
17745
18322
  };
17746
18323
  };
17747
18324
  /** @description UnauthorizedError 401 response */
@@ -17762,17 +18339,149 @@ export interface operations {
17762
18339
  "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
17763
18340
  };
17764
18341
  };
17765
- /** @description NotFoundError 404 response */
17766
- 404: {
18342
+ /** @description ValidationError 422 response */
18343
+ 422: {
17767
18344
  headers: {
17768
18345
  [name: string]: unknown;
17769
18346
  };
17770
18347
  content: {
17771
- "application/json": components["schemas"]["NotFoundErrorResponseContent"];
18348
+ "application/json": components["schemas"]["ValidationErrorResponseContent"];
17772
18349
  };
17773
18350
  };
17774
- /** @description InternalServerError 500 response */
17775
- 500: {
18351
+ /** @description RateLimitError 429 response */
18352
+ 429: {
18353
+ headers: {
18354
+ [name: string]: unknown;
18355
+ };
18356
+ content: {
18357
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
18358
+ };
18359
+ };
18360
+ /** @description InternalServerError 500 response */
18361
+ 500: {
18362
+ headers: {
18363
+ [name: string]: unknown;
18364
+ };
18365
+ content: {
18366
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
18367
+ };
18368
+ };
18369
+ };
18370
+ };
18371
+ ListEvents: {
18372
+ parameters: {
18373
+ query?: {
18374
+ /** @description Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
18375
+ page?: number;
18376
+ };
18377
+ header?: never;
18378
+ path: {
18379
+ recordingId: number;
18380
+ };
18381
+ cookie?: never;
18382
+ };
18383
+ requestBody?: never;
18384
+ responses: {
18385
+ /** @description ListEvents 200 response */
18386
+ 200: {
18387
+ headers: {
18388
+ [name: string]: unknown;
18389
+ };
18390
+ content: {
18391
+ "application/json": components["schemas"]["ListEventsResponseContent"];
18392
+ };
18393
+ };
18394
+ /** @description UnauthorizedError 401 response */
18395
+ 401: {
18396
+ headers: {
18397
+ [name: string]: unknown;
18398
+ };
18399
+ content: {
18400
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
18401
+ };
18402
+ };
18403
+ /** @description ForbiddenError 403 response */
18404
+ 403: {
18405
+ headers: {
18406
+ [name: string]: unknown;
18407
+ };
18408
+ content: {
18409
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
18410
+ };
18411
+ };
18412
+ /** @description RateLimitError 429 response */
18413
+ 429: {
18414
+ headers: {
18415
+ [name: string]: unknown;
18416
+ };
18417
+ content: {
18418
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
18419
+ };
18420
+ };
18421
+ /** @description InternalServerError 500 response */
18422
+ 500: {
18423
+ headers: {
18424
+ [name: string]: unknown;
18425
+ };
18426
+ content: {
18427
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
18428
+ };
18429
+ };
18430
+ };
18431
+ };
18432
+ ListEventBoosts: {
18433
+ parameters: {
18434
+ query?: {
18435
+ /** @description Page number for paginating through results. Defaults to 1. A positive value selects exactly that page, not a starting offset; see SPEC section 8. */
18436
+ page?: number;
18437
+ };
18438
+ header?: never;
18439
+ path: {
18440
+ recordingId: number;
18441
+ eventId: number;
18442
+ };
18443
+ cookie?: never;
18444
+ };
18445
+ requestBody?: never;
18446
+ responses: {
18447
+ /** @description ListEventBoosts 200 response */
18448
+ 200: {
18449
+ headers: {
18450
+ [name: string]: unknown;
18451
+ };
18452
+ content: {
18453
+ "application/json": components["schemas"]["ListEventBoostsResponseContent"];
18454
+ };
18455
+ };
18456
+ /** @description UnauthorizedError 401 response */
18457
+ 401: {
18458
+ headers: {
18459
+ [name: string]: unknown;
18460
+ };
18461
+ content: {
18462
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
18463
+ };
18464
+ };
18465
+ /** @description ForbiddenError 403 response */
18466
+ 403: {
18467
+ headers: {
18468
+ [name: string]: unknown;
18469
+ };
18470
+ content: {
18471
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
18472
+ };
18473
+ };
18474
+ /** @description NotFoundError 404 response */
18475
+ 404: {
18476
+ headers: {
18477
+ [name: string]: unknown;
18478
+ };
18479
+ content: {
18480
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
18481
+ };
18482
+ };
18483
+ /** @description InternalServerError 500 response */
18484
+ 500: {
17776
18485
  headers: {
17777
18486
  [name: string]: unknown;
17778
18487
  };
@@ -17854,6 +18563,147 @@ export interface operations {
17854
18563
  };
17855
18564
  };
17856
18565
  };
18566
+ SpotlightRecording: {
18567
+ parameters: {
18568
+ query?: never;
18569
+ header?: never;
18570
+ path: {
18571
+ recordingId: number;
18572
+ };
18573
+ cookie?: never;
18574
+ };
18575
+ requestBody?: never;
18576
+ responses: {
18577
+ /** @description SpotlightRecording 201 response */
18578
+ 201: {
18579
+ headers: {
18580
+ [name: string]: unknown;
18581
+ };
18582
+ content: {
18583
+ "application/json": components["schemas"]["SpotlightRecordingResponseContent"];
18584
+ };
18585
+ };
18586
+ /** @description UnauthorizedError 401 response */
18587
+ 401: {
18588
+ headers: {
18589
+ [name: string]: unknown;
18590
+ };
18591
+ content: {
18592
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
18593
+ };
18594
+ };
18595
+ /** @description ForbiddenError 403 response */
18596
+ 403: {
18597
+ headers: {
18598
+ [name: string]: unknown;
18599
+ };
18600
+ content: {
18601
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
18602
+ };
18603
+ };
18604
+ /** @description NotFoundError 404 response */
18605
+ 404: {
18606
+ headers: {
18607
+ [name: string]: unknown;
18608
+ };
18609
+ content: {
18610
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
18611
+ };
18612
+ };
18613
+ /** @description ValidationError 422 response */
18614
+ 422: {
18615
+ headers: {
18616
+ [name: string]: unknown;
18617
+ };
18618
+ content: {
18619
+ "application/json": components["schemas"]["ValidationErrorResponseContent"];
18620
+ };
18621
+ };
18622
+ /** @description RateLimitError 429 response */
18623
+ 429: {
18624
+ headers: {
18625
+ [name: string]: unknown;
18626
+ };
18627
+ content: {
18628
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
18629
+ };
18630
+ };
18631
+ /** @description InternalServerError 500 response */
18632
+ 500: {
18633
+ headers: {
18634
+ [name: string]: unknown;
18635
+ };
18636
+ content: {
18637
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
18638
+ };
18639
+ };
18640
+ };
18641
+ };
18642
+ UnspotlightRecording: {
18643
+ parameters: {
18644
+ query?: never;
18645
+ header?: never;
18646
+ path: {
18647
+ recordingId: number;
18648
+ };
18649
+ cookie?: never;
18650
+ };
18651
+ requestBody?: never;
18652
+ responses: {
18653
+ /** @description UnspotlightRecording 204 response */
18654
+ 204: {
18655
+ headers: {
18656
+ [name: string]: unknown;
18657
+ };
18658
+ content?: never;
18659
+ };
18660
+ /** @description UnauthorizedError 401 response */
18661
+ 401: {
18662
+ headers: {
18663
+ [name: string]: unknown;
18664
+ };
18665
+ content: {
18666
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
18667
+ };
18668
+ };
18669
+ /** @description ForbiddenError 403 response */
18670
+ 403: {
18671
+ headers: {
18672
+ [name: string]: unknown;
18673
+ };
18674
+ content: {
18675
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
18676
+ };
18677
+ };
18678
+ /** @description NotFoundError 404 response */
18679
+ 404: {
18680
+ headers: {
18681
+ [name: string]: unknown;
18682
+ };
18683
+ content: {
18684
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
18685
+ };
18686
+ };
18687
+ /** @description RateLimitError 429 response */
18688
+ 429: {
18689
+ headers: {
18690
+ [name: string]: unknown;
18691
+ };
18692
+ content: {
18693
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
18694
+ };
18695
+ };
18696
+ /** @description InternalServerError 500 response */
18697
+ 500: {
18698
+ headers: {
18699
+ [name: string]: unknown;
18700
+ };
18701
+ content: {
18702
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
18703
+ };
18704
+ };
18705
+ };
18706
+ };
17857
18707
  UnarchiveRecording: {
17858
18708
  parameters: {
17859
18709
  query?: never;
@@ -20061,6 +20911,207 @@ export interface operations {
20061
20911
  };
20062
20912
  };
20063
20913
  };
20914
+ GetTemplateLibrary: {
20915
+ parameters: {
20916
+ query?: never;
20917
+ header?: never;
20918
+ path?: never;
20919
+ cookie?: never;
20920
+ };
20921
+ requestBody?: never;
20922
+ responses: {
20923
+ /** @description GetTemplateLibrary 200 response */
20924
+ 200: {
20925
+ headers: {
20926
+ [name: string]: unknown;
20927
+ };
20928
+ content: {
20929
+ "application/json": components["schemas"]["GetTemplateLibraryResponseContent"];
20930
+ };
20931
+ };
20932
+ /** @description UnauthorizedError 401 response */
20933
+ 401: {
20934
+ headers: {
20935
+ [name: string]: unknown;
20936
+ };
20937
+ content: {
20938
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
20939
+ };
20940
+ };
20941
+ /** @description ForbiddenError 403 response */
20942
+ 403: {
20943
+ headers: {
20944
+ [name: string]: unknown;
20945
+ };
20946
+ content: {
20947
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
20948
+ };
20949
+ };
20950
+ /** @description RateLimitError 429 response */
20951
+ 429: {
20952
+ headers: {
20953
+ [name: string]: unknown;
20954
+ };
20955
+ content: {
20956
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
20957
+ };
20958
+ };
20959
+ /** @description InternalServerError 500 response */
20960
+ 500: {
20961
+ headers: {
20962
+ [name: string]: unknown;
20963
+ };
20964
+ content: {
20965
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
20966
+ };
20967
+ };
20968
+ };
20969
+ };
20970
+ CreateTemplateLibraryCopy: {
20971
+ parameters: {
20972
+ query?: never;
20973
+ header?: never;
20974
+ path?: never;
20975
+ cookie?: never;
20976
+ };
20977
+ requestBody: {
20978
+ content: {
20979
+ "application/json": components["schemas"]["CreateTemplateLibraryCopyRequestContent"];
20980
+ };
20981
+ };
20982
+ responses: {
20983
+ /** @description CreateTemplateLibraryCopy 201 response */
20984
+ 201: {
20985
+ headers: {
20986
+ [name: string]: unknown;
20987
+ };
20988
+ content: {
20989
+ "application/json": components["schemas"]["CreateTemplateLibraryCopyResponseContent"];
20990
+ };
20991
+ };
20992
+ /** @description UnauthorizedError 401 response */
20993
+ 401: {
20994
+ headers: {
20995
+ [name: string]: unknown;
20996
+ };
20997
+ content: {
20998
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
20999
+ };
21000
+ };
21001
+ /** @description ForbiddenError 403 response */
21002
+ 403: {
21003
+ headers: {
21004
+ [name: string]: unknown;
21005
+ };
21006
+ content: {
21007
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
21008
+ };
21009
+ };
21010
+ /** @description NotFoundError 404 response */
21011
+ 404: {
21012
+ headers: {
21013
+ [name: string]: unknown;
21014
+ };
21015
+ content: {
21016
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
21017
+ };
21018
+ };
21019
+ /** @description PeopleConfirmationRequiredError 422 response */
21020
+ 422: {
21021
+ headers: {
21022
+ [name: string]: unknown;
21023
+ };
21024
+ content: {
21025
+ "application/json": components["schemas"]["PeopleConfirmationRequiredErrorResponseContent"];
21026
+ };
21027
+ };
21028
+ /** @description RateLimitError 429 response */
21029
+ 429: {
21030
+ headers: {
21031
+ [name: string]: unknown;
21032
+ };
21033
+ content: {
21034
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
21035
+ };
21036
+ };
21037
+ /** @description InternalServerError 500 response */
21038
+ 500: {
21039
+ headers: {
21040
+ [name: string]: unknown;
21041
+ };
21042
+ content: {
21043
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
21044
+ };
21045
+ };
21046
+ };
21047
+ };
21048
+ GetTemplateLibraryCopy: {
21049
+ parameters: {
21050
+ query?: never;
21051
+ header?: never;
21052
+ path: {
21053
+ copyId: number;
21054
+ };
21055
+ cookie?: never;
21056
+ };
21057
+ requestBody?: never;
21058
+ responses: {
21059
+ /** @description GetTemplateLibraryCopy 200 response */
21060
+ 200: {
21061
+ headers: {
21062
+ [name: string]: unknown;
21063
+ };
21064
+ content: {
21065
+ "application/json": components["schemas"]["GetTemplateLibraryCopyResponseContent"];
21066
+ };
21067
+ };
21068
+ /** @description UnauthorizedError 401 response */
21069
+ 401: {
21070
+ headers: {
21071
+ [name: string]: unknown;
21072
+ };
21073
+ content: {
21074
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
21075
+ };
21076
+ };
21077
+ /** @description ForbiddenError 403 response */
21078
+ 403: {
21079
+ headers: {
21080
+ [name: string]: unknown;
21081
+ };
21082
+ content: {
21083
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
21084
+ };
21085
+ };
21086
+ /** @description NotFoundError 404 response */
21087
+ 404: {
21088
+ headers: {
21089
+ [name: string]: unknown;
21090
+ };
21091
+ content: {
21092
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
21093
+ };
21094
+ };
21095
+ /** @description RateLimitError 429 response */
21096
+ 429: {
21097
+ headers: {
21098
+ [name: string]: unknown;
21099
+ };
21100
+ content: {
21101
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
21102
+ };
21103
+ };
21104
+ /** @description InternalServerError 500 response */
21105
+ 500: {
21106
+ headers: {
21107
+ [name: string]: unknown;
21108
+ };
21109
+ content: {
21110
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
21111
+ };
21112
+ };
21113
+ };
21114
+ };
20064
21115
  ListTemplates: {
20065
21116
  parameters: {
20066
21117
  query?: {