@37signals/basecamp 0.18.0 → 0.20.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 (94) hide show
  1. package/README.md +94 -2
  2. package/dist/client.d.ts +6 -6
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +11 -7
  5. package/dist/client.js.map +1 -1
  6. package/dist/download.js +1 -1
  7. package/dist/errors.d.ts +10 -1
  8. package/dist/errors.d.ts.map +1 -1
  9. package/dist/errors.js +42 -13
  10. package/dist/errors.js.map +1 -1
  11. package/dist/generated/metadata.d.ts +1 -2
  12. package/dist/generated/metadata.d.ts.map +1 -1
  13. package/dist/generated/metadata.js +47 -1
  14. package/dist/generated/metadata.js.map +1 -1
  15. package/dist/generated/metadata.ts +48 -3
  16. package/dist/generated/openapi-stripped.json +816 -60
  17. package/dist/generated/path-mapping.d.ts.map +1 -1
  18. package/dist/generated/path-mapping.js +7 -4
  19. package/dist/generated/path-mapping.js.map +1 -1
  20. package/dist/generated/path-mapping.ts +8 -5
  21. package/dist/generated/person-id-sites.d.ts +2 -0
  22. package/dist/generated/person-id-sites.d.ts.map +1 -0
  23. package/dist/generated/person-id-sites.js +689 -0
  24. package/dist/generated/person-id-sites.js.map +1 -0
  25. package/dist/generated/person-id-sites.ts +690 -0
  26. package/dist/generated/schema.d.ts +643 -12
  27. package/dist/generated/services/event-feed.d.ts +92 -0
  28. package/dist/generated/services/event-feed.d.ts.map +1 -0
  29. package/dist/generated/services/event-feed.js +80 -0
  30. package/dist/generated/services/event-feed.js.map +1 -0
  31. package/dist/generated/services/event-feed.ts +153 -0
  32. package/dist/generated/services/gauges.d.ts +7 -3
  33. package/dist/generated/services/gauges.d.ts.map +1 -1
  34. package/dist/generated/services/gauges.js +4 -1
  35. package/dist/generated/services/gauges.js.map +1 -1
  36. package/dist/generated/services/gauges.ts +10 -3
  37. package/dist/generated/services/index.d.ts +1 -1
  38. package/dist/generated/services/index.d.ts.map +1 -1
  39. package/dist/generated/services/index.js +1 -1
  40. package/dist/generated/services/index.js.map +1 -1
  41. package/dist/generated/services/index.ts +1 -1
  42. package/dist/generated/services/lineup.d.ts +13 -0
  43. package/dist/generated/services/lineup.d.ts.map +1 -1
  44. package/dist/generated/services/lineup.js +18 -0
  45. package/dist/generated/services/lineup.js.map +1 -1
  46. package/dist/generated/services/lineup.ts +26 -0
  47. package/dist/index.d.ts +7 -4
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +12 -6
  50. package/dist/index.js.map +1 -1
  51. package/dist/person-id.d.ts +133 -0
  52. package/dist/person-id.d.ts.map +1 -0
  53. package/dist/person-id.js +163 -0
  54. package/dist/person-id.js.map +1 -0
  55. package/dist/retry.d.ts +2 -1
  56. package/dist/retry.d.ts.map +1 -1
  57. package/dist/retry.js +21 -11
  58. package/dist/retry.js.map +1 -1
  59. package/dist/services/base.d.ts +35 -0
  60. package/dist/services/base.d.ts.map +1 -1
  61. package/dist/services/base.js +387 -55
  62. package/dist/services/base.js.map +1 -1
  63. package/dist/services/comments-extensions.d.ts +89 -0
  64. package/dist/services/comments-extensions.d.ts.map +1 -0
  65. package/dist/services/comments-extensions.js +166 -0
  66. package/dist/services/comments-extensions.js.map +1 -0
  67. package/dist/services/mentions.d.ts +255 -0
  68. package/dist/services/mentions.d.ts.map +1 -0
  69. package/dist/services/mentions.js +1431 -0
  70. package/dist/services/mentions.js.map +1 -0
  71. package/dist/services/merge-safe.d.ts +13 -5
  72. package/dist/services/merge-safe.d.ts.map +1 -1
  73. package/dist/services/merge-safe.js +71 -13
  74. package/dist/services/merge-safe.js.map +1 -1
  75. package/dist/services/recordings-extensions.d.ts +354 -0
  76. package/dist/services/recordings-extensions.d.ts.map +1 -0
  77. package/dist/services/recordings-extensions.js +1940 -0
  78. package/dist/services/recordings-extensions.js.map +1 -0
  79. package/package.json +4 -4
  80. package/src/generated/metadata.ts +48 -3
  81. package/src/generated/openapi-stripped.json +816 -60
  82. package/src/generated/path-mapping.ts +8 -5
  83. package/src/generated/person-id-sites.ts +690 -0
  84. package/src/generated/schema.d.ts +643 -12
  85. package/src/generated/services/event-feed.ts +153 -0
  86. package/src/generated/services/gauges.ts +10 -3
  87. package/src/generated/services/index.ts +1 -1
  88. package/src/generated/services/lineup.ts +26 -0
  89. package/dist/generated/services/automation.d.ts +0 -25
  90. package/dist/generated/services/automation.d.ts.map +0 -1
  91. package/dist/generated/services/automation.js +0 -33
  92. package/dist/generated/services/automation.js.map +0 -1
  93. package/dist/generated/services/automation.ts +0 -49
  94. package/src/generated/services/automation.ts +0 -49
@@ -1112,6 +1112,79 @@ export interface paths {
1112
1112
  patch?: never;
1113
1113
  trace?: never;
1114
1114
  };
1115
+ "/events.json": {
1116
+ parameters: {
1117
+ query?: never;
1118
+ header?: never;
1119
+ path?: never;
1120
+ cookie?: never;
1121
+ };
1122
+ /**
1123
+ * @description Poll the account event feed for events after a position (oldest first, strict event-id order, up to 100 per page).
1124
+ *
1125
+ * **Entry.** With neither `since` nor `position` the feed begins at the present
1126
+ * (equivalent to `since=now`). `since=<event id>` starts after that id and
1127
+ * `since=0` replays all served history back to the feed's epoch; `since` is a
1128
+ * signed 64-bit integer written in decimal, or the literal `now`. `position`
1129
+ * resumes from a token a previous page issued — signed, opaque, bound to the
1130
+ * account and the filter set.
1131
+ *
1132
+ * **Pagination**: cursor style — the body envelope, not the Link header.
1133
+ * `position` is the durable cursor (persist it only after processing the
1134
+ * page's events); `next` is an absolute continuation URL present only while
1135
+ * this walk has more to serve. One call answers one page; no generator emits
1136
+ * a walk for the cursor style — see the section note.
1137
+ *
1138
+ * **Errors.** 400 (FeedRequestError) for a malformed position (resume with
1139
+ * `since=`) or a malformed filter (fix the filters; a position reset will not
1140
+ * help), told apart by its optional `reason` and undifferentiated when `reason`
1141
+ * is absent. 409 (FeedFilterMismatchError) when the position was minted for a
1142
+ * different filter set. 410 (FeedPositionGoneError) when the position predates
1143
+ * the feed's epoch; its `resume` re-enters at the epoch.
1144
+ */
1145
+ get: operations["PollEvents"];
1146
+ put?: never;
1147
+ post?: never;
1148
+ delete?: never;
1149
+ options?: never;
1150
+ head?: never;
1151
+ patch?: never;
1152
+ trace?: never;
1153
+ };
1154
+ "/events/stream_ticket.json": {
1155
+ parameters: {
1156
+ query?: never;
1157
+ header?: never;
1158
+ path?: never;
1159
+ cookie?: never;
1160
+ };
1161
+ get?: never;
1162
+ put?: never;
1163
+ /**
1164
+ * @description Mint a short-lived stream ticket and the exact WebSocket URL to open a live event stream with.
1165
+ *
1166
+ * The ticket is signed and lives about two minutes; the response's `url` is
1167
+ * the one to connect to. Connect to `url` verbatim — never assemble the WebSocket URL (scheme, host,
1168
+ * path, account prefix) client-side; the topology is the server's to change.
1169
+ * Mint a fresh ticket for every connection attempt: tickets expire and are not
1170
+ * refreshed by an open socket. The mint is a stateless signed capability with
1171
+ * no server-side consumption, so a replayed POST is harmless and the operation
1172
+ * is marked idempotent (safe to retry) — deliberately not a claim that two
1173
+ * mints return the same ticket. The ticket is a replayable bearer credential
1174
+ * within its window; `ticket` and `url` are marked sensitive (see StreamTicket).
1175
+ *
1176
+ * Serves agent principals as well as people: an agent's client-credentials
1177
+ * token can mint tickets for its own live stream. A ticket minted on a
1178
+ * delegated request carries its agent, so `self` on the socket it opens
1179
+ * resolves to that agent.
1180
+ */
1181
+ post: operations["CreateStreamTicket"];
1182
+ delete?: never;
1183
+ options?: never;
1184
+ head?: never;
1185
+ patch?: never;
1186
+ trace?: never;
1187
+ };
1115
1188
  "/files.json": {
1116
1189
  parameters: {
1117
1190
  query?: never;
@@ -1207,6 +1280,51 @@ export interface paths {
1207
1280
  patch?: never;
1208
1281
  trace?: never;
1209
1282
  };
1283
+ "/inbox.json": {
1284
+ parameters: {
1285
+ query?: never;
1286
+ header?: never;
1287
+ path?: never;
1288
+ cookie?: never;
1289
+ };
1290
+ /**
1291
+ * @description Poll the authenticated agent's inbox for the items that addressed it (oldest first, strict item-id order); people receive 403.
1292
+ *
1293
+ * The inbox is the low-noise "someone addressed you" lane as its own resource
1294
+ * rather than a filter over the account feed. **Agents only for now**: any
1295
+ * other principal receives 403.
1296
+ *
1297
+ * An item is a first-class delivery with its own identity: one event can
1298
+ * address the same principal for several reasons, and each reason is its own
1299
+ * item. Deduplicate by `addressing_id`, never by event id. Items are never
1300
+ * self-addressed, are kept for 30 days, and are dropped at read time when the
1301
+ * event is no longer readable.
1302
+ *
1303
+ * **Entry**: `since=0` replays the earliest retained items, `since=now` enters
1304
+ * at the present, `position` resumes. Inbox positions are bound to the
1305
+ * account, the principal, and the filter set, and are never interchangeable
1306
+ * with feed positions.
1307
+ *
1308
+ * **Pagination**: cursor style, exactly as PollEvents — the body envelope
1309
+ * (`items`, `position`, `next`), not the Link header and not the generic
1310
+ * paginator. Up to 100 items per page.
1311
+ *
1312
+ * **Errors** follow PollEvents (FeedRequestError 400, FeedFilterMismatchError
1313
+ * 409), except that 403 carries no body — the agent guard's bare
1314
+ * `head :forbidden` (BareForbiddenError) — and that the 410 is the inbox's own
1315
+ * InboxPositionGoneError: the position fell behind the retention window, there
1316
+ * is no epoch, and `resume` re-enters at `since=0`, the earliest retained item
1317
+ * — not the feed's recovery, and not interchangeable with it.
1318
+ */
1319
+ get: operations["PollInbox"];
1320
+ put?: never;
1321
+ post?: never;
1322
+ delete?: never;
1323
+ options?: never;
1324
+ head?: never;
1325
+ patch?: never;
1326
+ trace?: never;
1327
+ };
1210
1328
  "/inbox_forwards/{forwardId}": {
1211
1329
  parameters: {
1212
1330
  query?: never;
@@ -4288,7 +4406,13 @@ export interface components {
4288
4406
  CreateFolderResponseContent: components["schemas"]["FolderWithProjects"];
4289
4407
  CreateGaugeNeedleRequestContent: {
4290
4408
  gauge_needle: components["schemas"]["GaugeNeedlePayload"];
4291
- /** @description Who to notify: "everyone", "working_on", "custom", or omit for nobody */
4409
+ /**
4410
+ * @description Who to notify: "everyone", "default" (the project's existing
4411
+ * subscribers), or "custom" (the people in `subscriptions`). Omit for
4412
+ * nobody: bc3 defaults `notify` to "custom", which with no `subscriptions`
4413
+ * notifies no one, and any unrecognized value (`Subscribers#find_subscribers`
4414
+ * accepts exactly these three) falls through to nobody as well.
4415
+ */
4292
4416
  notify?: string;
4293
4417
  /** @description Array of people IDs to notify (only used when notify is "custom") */
4294
4418
  subscriptions?: number[];
@@ -4437,6 +4561,29 @@ export interface components {
4437
4561
  visible_to_clients?: boolean;
4438
4562
  };
4439
4563
  CreateScheduleEntryResponseContent: components["schemas"]["ScheduleEntry"];
4564
+ /**
4565
+ * @description A minted stream ticket. `url` already carries the ticket in its query
4566
+ * string; connect to it verbatim.
4567
+ */
4568
+ CreateStreamTicketResponseContent: {
4569
+ /**
4570
+ * Format: password
4571
+ * @description The signed ticket — an opaque bearer credential, never parsed or logged.
4572
+ */
4573
+ ticket: string;
4574
+ /**
4575
+ * Format: int32
4576
+ * @description Ticket lifetime in seconds (about 120). Server-owned: expiry is arbitrated
4577
+ * by the server, so mint fresh per connection rather than scheduling on it.
4578
+ */
4579
+ expires_in: number;
4580
+ /**
4581
+ * Format: password
4582
+ * @description The exact WebSocket URL to connect to, ticket included. Sensitive because
4583
+ * it embeds the ticket.
4584
+ */
4585
+ url: string;
4586
+ };
4440
4587
  CreateTemplateLibraryCopyRequestContent: {
4441
4588
  /** Format: int64 */
4442
4589
  template_recording_id: number;
@@ -4654,6 +4801,7 @@ export interface components {
4654
4801
  details?: components["schemas"]["EventDetails"];
4655
4802
  created_at: string;
4656
4803
  creator: components["schemas"]["Person"];
4804
+ performed_by?: components["schemas"]["Person"];
4657
4805
  /** Format: int32 */
4658
4806
  boosts_count?: number;
4659
4807
  boosts_url?: string;
@@ -4729,6 +4877,120 @@ export interface components {
4729
4877
  content?: string;
4730
4878
  content_attachments?: components["schemas"]["RichTextAttachment"][];
4731
4879
  };
4880
+ /**
4881
+ * @description One feed row: a thin pointer, not resource state. Refetch the referenced
4882
+ * recording through the canonical resource APIs before acting on it. The same
4883
+ * shape rides the inbox (`InboxItem.event`) and, with two transport-only
4884
+ * extras, the live stream.
4885
+ */
4886
+ FeedEvent: {
4887
+ /**
4888
+ * Format: int64
4889
+ * @description Feed-global event id; the poll lane serves ids in strict ascending order.
4890
+ */
4891
+ id: number;
4892
+ /** @description Event kind (e.g. `message_created`). */
4893
+ kind: string;
4894
+ /** @description The action that produced the event (e.g. `created`). */
4895
+ action: string;
4896
+ /** @description Cataloged event type (e.g. `message.created`). Only cataloged types are served. */
4897
+ event_type: string;
4898
+ /**
4899
+ * Format: int64
4900
+ * @description The bucket (project or circle) the recording lives in.
4901
+ */
4902
+ bucket_id: number;
4903
+ /**
4904
+ * Format: int64
4905
+ * @description The person the action is attributed to.
4906
+ */
4907
+ creator_id: number;
4908
+ /**
4909
+ * Format: int64
4910
+ * @description The agent that carried out a delegated action; `null` on the wire when the
4911
+ * action was performed directly. The effective performer — used by the
4912
+ * `performers`/`exclude_performers` filters — is this when present, else
4913
+ * `creator_id`.
4914
+ */
4915
+ performed_by_id?: number | null;
4916
+ /**
4917
+ * Format: int64
4918
+ * @description The recording the event references.
4919
+ */
4920
+ recording_id: number;
4921
+ created_at: string;
4922
+ /**
4923
+ * @description Type-specific details, carried verbatim as a JSON document — present only
4924
+ * for the types that publish one, absent (not empty) for every other type.
4925
+ * `boost.created` publishes `boost_id`, plus `boosted_event_id` and
4926
+ * `boosted_event_type`, both `null` for a boost on the recording itself
4927
+ * (`boosted_event_type` also `null` when the boosted event's kind is not
4928
+ * cataloged); `card.moved` publishes `column_id` and `previous_column_id`,
4929
+ * the containing columns (going on hold within a column reports the same
4930
+ * column twice). Verbatim on purpose: the connector's push lane delivers
4931
+ * the same object, and a typed projection would drop explicit nulls and
4932
+ * any member a newly cataloged type adds, making the two lanes disagree.
4933
+ * Go carries it as `json.RawMessage`; TypeScript `unknown`; Python `Any`;
4934
+ * Ruby a Hash; Kotlin `JsonElement`; Rust `serde_json::Value`; Swift the
4935
+ * SDK's `JSONValue` (numbers as `Double`).
4936
+ */
4937
+ details?: unknown;
4938
+ };
4939
+ /**
4940
+ * @description 409 from the event feed's poll lanes (PollEvents, PollInbox): the held
4941
+ * `position` was minted for a different filter set than the request presented.
4942
+ * Positions are bound to their filter set; re-enter with `since=<id>` or
4943
+ * `since=now` to acknowledge the filter change. Both digests are the bare
4944
+ * 16-lowercase-hex `srv2` filter digest BC3 publishes in
4945
+ * doc/api/sections/event_feed.md ("Filter digests").
4946
+ */
4947
+ FeedFilterMismatchErrorResponseContent: {
4948
+ error: string;
4949
+ /** @description The digest of the filter set the position was minted for. */
4950
+ position_digest: string;
4951
+ /** @description The digest of the filter set this request presented. */
4952
+ filters_digest: string;
4953
+ };
4954
+ /**
4955
+ * @description 410 from PollEvents: the held `position` predates the feed's epoch — an
4956
+ * operational fence that can be raised. `epoch_after_id` names the epoch and
4957
+ * `resume` is an absolute URL that re-enters the feed AT THE EPOCH
4958
+ * (`since=<epoch_after_id>`) with the request's canonical filters preserved,
4959
+ * so the servable history above the fence is not skipped. Not interchangeable
4960
+ * with the inbox's InboxPositionGoneError, whose recovery re-enters at
4961
+ * `since=0`. Consumers validate the URL (same origin as the API base, no scheme
4962
+ * downgrade) before following it — SPEC.md §23 "Continuation and Resume URL
4963
+ * Validation".
4964
+ */
4965
+ FeedPositionGoneErrorResponseContent: {
4966
+ error: string;
4967
+ /**
4968
+ * Format: int64
4969
+ * @description The feed's epoch: the event id after which history is servable.
4970
+ */
4971
+ epoch_after_id: number;
4972
+ /** @description Absolute re-entry URL for the feed, at the epoch, filters preserved. */
4973
+ resume: string;
4974
+ };
4975
+ /**
4976
+ * @description 400 from the event feed's poll lanes (PollEvents, PollInbox). Two distinct
4977
+ * cases share the status: a malformed `position` (recover by re-entering with
4978
+ * `since=`) and a malformed filter (fix the filters; a position reset will not
4979
+ * help). `reason` tells them apart — `invalid_position` or `invalid_filter`
4980
+ * (bc3 #13362) — and is OPTIONAL: a server that has not shipped it answers the
4981
+ * flat `{error}` body, and a consumer that finds `reason` absent must treat the
4982
+ * 400 as undifferentiated and surface it rather than guess between recovering
4983
+ * and stopping.
4984
+ */
4985
+ FeedRequestErrorResponseContent: {
4986
+ error: string;
4987
+ /**
4988
+ * @description `invalid_position` (re-enter with `since=`) or `invalid_filter` (fix the
4989
+ * filters). Absent from servers that predate bc3 #13362: then the 400 is
4990
+ * undifferentiated.
4991
+ */
4992
+ reason?: string;
4993
+ };
4732
4994
  FieldErrorMap: {
4733
4995
  [key: string]: string[];
4734
4996
  };
@@ -4903,8 +5165,15 @@ export interface components {
4903
5165
  last_needle_color?: string;
4904
5166
  /** Format: int32 */
4905
5167
  last_needle_position?: number;
4906
- /** Format: int32 */
4907
- previous_needle_position?: number;
5168
+ /**
5169
+ * Format: int32
5170
+ * @description Emitted alongside the other needle keys (so optional, like them), and
5171
+ * JSON `null` for a gauge whose only needle is its first — there is no
5172
+ * previous position yet. The enhance pass layers `nullable: true` onto the
5173
+ * OpenAPI so the static SDKs type the value as nullable rather than
5174
+ * flattening the first needle's null into a real 0.
5175
+ */
5176
+ previous_needle_position?: number | null;
4908
5177
  };
4909
5178
  GaugeNeedle: {
4910
5179
  /** Format: int64 */
@@ -4934,6 +5203,14 @@ export interface components {
4934
5203
  color?: string;
4935
5204
  /** Format: int32 */
4936
5205
  position?: number;
5206
+ /**
5207
+ * Format: int32
5208
+ * @description Comment count of the needle: the singular branch-partial key that
5209
+ * gauges/needles/_needle.json.jbuilder emits unconditionally, distinct from
5210
+ * the envelope's plural `comments_count`, which a needle also carries. The
5211
+ * same pair SearchResult models.
5212
+ */
5213
+ comment_count: number;
4937
5214
  };
4938
5215
  GaugeNeedlePayload: {
4939
5216
  /**
@@ -4947,8 +5224,13 @@ export interface components {
4947
5224
  description?: string;
4948
5225
  };
4949
5226
  GaugeNeedleUpdatePayload: {
4950
- /** @description Rich text (HTML) description */
4951
- description?: string;
5227
+ /**
5228
+ * @description Rich text (HTML) description. Required: it is the only member bc3's
5229
+ * update accepts (`needle_params.except(:color, :position)`), and
5230
+ * `params.require(:gauge_needle)` rejects an empty wrapper as missing, so a
5231
+ * payload without it is the same 400 as no wrapper at all.
5232
+ */
5233
+ description: string;
4952
5234
  };
4953
5235
  GaugeTogglePayload: {
4954
5236
  enabled: boolean;
@@ -5182,6 +5464,37 @@ export interface components {
5182
5464
  forwards_count?: number;
5183
5465
  forwards_url?: string;
5184
5466
  };
5467
+ /**
5468
+ * @description One addressed delivery. `addressing_id` is the item's own identity — the
5469
+ * dedupe key — since one event can address the same principal for several
5470
+ * reasons.
5471
+ */
5472
+ InboxItem: {
5473
+ /** Format: int64 */
5474
+ addressing_id: number;
5475
+ /**
5476
+ * @description Why the principal was addressed: `mentioned`, `assigned`, `subscribed`,
5477
+ * `watched`, `pinged`, or `boosted`.
5478
+ */
5479
+ reason: string;
5480
+ addressed_at: string;
5481
+ event: components["schemas"]["FeedEvent"];
5482
+ };
5483
+ /**
5484
+ * @description 410 from PollInbox: the held `position` fell behind the inbox's 30-day
5485
+ * retention window. There is no epoch; `resume` is an absolute URL that
5486
+ * re-enters the inbox at `since=0`, the earliest retained item — exactly-once
5487
+ * continuation, since a stale position has seen none of the retained backlog.
5488
+ * A distinct shape from the feed's FeedPositionGoneError on purpose: the two
5489
+ * recoveries are not interchangeable, and a consumer must not handle one lane's
5490
+ * 410 with the other's arm. Validate the URL before following it, as for the
5491
+ * feed.
5492
+ */
5493
+ InboxPositionGoneErrorResponseContent: {
5494
+ error: string;
5495
+ /** @description Absolute re-entry URL for the inbox, at `since=0`, filters preserved. */
5496
+ resume: string;
5497
+ };
5185
5498
  InternalServerErrorResponseContent: {
5186
5499
  error: string;
5187
5500
  message?: string;
@@ -5497,20 +5810,20 @@ export interface components {
5497
5810
  /** Format: password */
5498
5811
  name: string;
5499
5812
  /** Format: password */
5500
- email_address?: string;
5813
+ email_address?: string | null;
5501
5814
  personable_type?: string;
5502
5815
  /** Format: password */
5503
- title?: string;
5816
+ title?: string | null;
5504
5817
  /** Format: password */
5505
- bio?: string;
5818
+ bio?: string | null;
5506
5819
  /**
5507
5820
  * Format: password
5508
5821
  * @description Alias of `bio` introduced in BC5. BC3 emits both keys with identical content;
5509
5822
  * older BC4 responses may omit `tagline`. Prefer `bio` for cross-version reads.
5510
5823
  */
5511
- tagline?: string;
5824
+ tagline?: string | null;
5512
5825
  /** Format: password */
5513
- location?: string;
5826
+ location?: string | null;
5514
5827
  created_at?: string;
5515
5828
  updated_at?: string;
5516
5829
  admin?: boolean;
@@ -5533,6 +5846,42 @@ export interface components {
5533
5846
  /** Format: password */
5534
5847
  name: string;
5535
5848
  };
5849
+ /**
5850
+ * @description The poll envelope. Every 200 carries `events` and `position`; `next` only
5851
+ * while the walk continues.
5852
+ */
5853
+ PollEventsResponseContent: {
5854
+ /**
5855
+ * @description Up to 100 events, oldest first, strict event-id order. A page may be empty
5856
+ * while the walk crosses history the filters exclude — keep following `next`.
5857
+ */
5858
+ events: components["schemas"]["FeedEvent"][];
5859
+ /**
5860
+ * @description Durable position token for resuming later. Persist only after the page's
5861
+ * events have been processed.
5862
+ */
5863
+ position: string;
5864
+ /**
5865
+ * @description Absolute continuation URL, present only while the current walk has more
5866
+ * to serve; absent means the walk reached its (frozen) head — poll again
5867
+ * later from `position`.
5868
+ */
5869
+ next?: string;
5870
+ };
5871
+ /**
5872
+ * @description The inbox envelope: `items` and `position` on every 200, `next` while the
5873
+ * walk continues.
5874
+ */
5875
+ PollInboxResponseContent: {
5876
+ items: components["schemas"]["InboxItem"][];
5877
+ /**
5878
+ * @description Durable inbox position. Persist only after the page's items have been
5879
+ * processed.
5880
+ */
5881
+ position: string;
5882
+ /** @description Absolute continuation URL, present only while the walk has more to serve. */
5883
+ next?: string;
5884
+ };
5536
5885
  Preferences: {
5537
5886
  url?: string;
5538
5887
  app_url?: string;
@@ -7220,7 +7569,7 @@ export interface components {
7220
7569
  };
7221
7570
  UpdateFolderResponseContent: components["schemas"]["FolderWithProjects"];
7222
7571
  UpdateGaugeNeedleRequestContent: {
7223
- gauge_needle?: components["schemas"]["GaugeNeedleUpdatePayload"];
7572
+ gauge_needle: components["schemas"]["GaugeNeedleUpdatePayload"];
7224
7573
  };
7225
7574
  UpdateGaugeNeedleResponseContent: components["schemas"]["GaugeNeedle"];
7226
7575
  UpdateGoogleDocumentRequestContent: {
@@ -7560,6 +7909,7 @@ export interface components {
7560
7909
  created_at?: string;
7561
7910
  recording?: components["schemas"]["Recording"];
7562
7911
  creator?: components["schemas"]["Person"];
7912
+ performed_by?: components["schemas"]["Person"];
7563
7913
  copy?: components["schemas"]["WebhookCopy"];
7564
7914
  };
7565
7915
  WebhookHeadersMap: {
@@ -12918,6 +13268,180 @@ export interface operations {
12918
13268
  };
12919
13269
  };
12920
13270
  };
13271
+ PollEvents: {
13272
+ parameters: {
13273
+ query?: {
13274
+ /**
13275
+ * @description Entry point: a decimal event id (start after it; `0` replays served
13276
+ * history back to the epoch), or the literal `now` (skip history). Mutually
13277
+ * exclusive with `position` in practice; omit both to enter at the present.
13278
+ */
13279
+ since?: string;
13280
+ /**
13281
+ * @description Resume token from a previous page's `position`. Opaque and signed; never
13282
+ * constructed or parsed client-side.
13283
+ */
13284
+ position?: string;
13285
+ /** @description Comma-separated event types from the catalog (e.g. `message.created,comment.created`). */
13286
+ types?: string;
13287
+ /** @description Comma-separated bucket (project) ids, at most 100. */
13288
+ buckets?: string;
13289
+ /** @description Comma-separated creator person ids, at most 100. */
13290
+ creators?: string;
13291
+ /**
13292
+ * @description Comma-separated effective-performer ids (the agent on a delegated action,
13293
+ * else the creator), at most 100. The literal `self` means the request's own
13294
+ * effective actor and is resolved server-side before filtering.
13295
+ */
13296
+ performers?: string;
13297
+ /**
13298
+ * @description Comma-separated effective-performer ids to exclude, at most 100; `self`
13299
+ * as on `performers`. `exclude_performers=self` is the loop guard for an
13300
+ * agent that acts on what it hears.
13301
+ */
13302
+ exclude_performers?: string;
13303
+ /**
13304
+ * @description Comma-separated actor kinds: `agent`, `person`, or both. A filter, not a
13305
+ * default — agent activity is real account activity.
13306
+ */
13307
+ actor_types?: string;
13308
+ };
13309
+ header?: never;
13310
+ path?: never;
13311
+ cookie?: never;
13312
+ };
13313
+ requestBody?: never;
13314
+ responses: {
13315
+ /** @description PollEvents 200 response */
13316
+ 200: {
13317
+ headers: {
13318
+ [name: string]: unknown;
13319
+ };
13320
+ content: {
13321
+ "application/json": components["schemas"]["PollEventsResponseContent"];
13322
+ };
13323
+ };
13324
+ /** @description FeedRequestError 400 response */
13325
+ 400: {
13326
+ headers: {
13327
+ [name: string]: unknown;
13328
+ };
13329
+ content: {
13330
+ "application/json": components["schemas"]["FeedRequestErrorResponseContent"];
13331
+ };
13332
+ };
13333
+ /** @description UnauthorizedError 401 response */
13334
+ 401: {
13335
+ headers: {
13336
+ [name: string]: unknown;
13337
+ };
13338
+ content: {
13339
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
13340
+ };
13341
+ };
13342
+ /** @description ForbiddenError 403 response */
13343
+ 403: {
13344
+ headers: {
13345
+ [name: string]: unknown;
13346
+ };
13347
+ content: {
13348
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
13349
+ };
13350
+ };
13351
+ /** @description FeedFilterMismatchError 409 response */
13352
+ 409: {
13353
+ headers: {
13354
+ [name: string]: unknown;
13355
+ };
13356
+ content: {
13357
+ "application/json": components["schemas"]["FeedFilterMismatchErrorResponseContent"];
13358
+ };
13359
+ };
13360
+ /** @description FeedPositionGoneError 410 response */
13361
+ 410: {
13362
+ headers: {
13363
+ [name: string]: unknown;
13364
+ };
13365
+ content: {
13366
+ "application/json": components["schemas"]["FeedPositionGoneErrorResponseContent"];
13367
+ };
13368
+ };
13369
+ /** @description RateLimitError 429 response */
13370
+ 429: {
13371
+ headers: {
13372
+ [name: string]: unknown;
13373
+ };
13374
+ content: {
13375
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
13376
+ };
13377
+ };
13378
+ /** @description InternalServerError 500 response */
13379
+ 500: {
13380
+ headers: {
13381
+ [name: string]: unknown;
13382
+ };
13383
+ content: {
13384
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
13385
+ };
13386
+ };
13387
+ };
13388
+ };
13389
+ CreateStreamTicket: {
13390
+ parameters: {
13391
+ query?: never;
13392
+ header?: never;
13393
+ path?: never;
13394
+ cookie?: never;
13395
+ };
13396
+ requestBody?: never;
13397
+ responses: {
13398
+ /** @description CreateStreamTicket 200 response */
13399
+ 200: {
13400
+ headers: {
13401
+ [name: string]: unknown;
13402
+ };
13403
+ content: {
13404
+ "application/json": components["schemas"]["CreateStreamTicketResponseContent"];
13405
+ };
13406
+ };
13407
+ /** @description UnauthorizedError 401 response */
13408
+ 401: {
13409
+ headers: {
13410
+ [name: string]: unknown;
13411
+ };
13412
+ content: {
13413
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
13414
+ };
13415
+ };
13416
+ /** @description ForbiddenError 403 response */
13417
+ 403: {
13418
+ headers: {
13419
+ [name: string]: unknown;
13420
+ };
13421
+ content: {
13422
+ "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
13423
+ };
13424
+ };
13425
+ /** @description RateLimitError 429 response */
13426
+ 429: {
13427
+ headers: {
13428
+ [name: string]: unknown;
13429
+ };
13430
+ content: {
13431
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
13432
+ };
13433
+ };
13434
+ /** @description InternalServerError 500 response */
13435
+ 500: {
13436
+ headers: {
13437
+ [name: string]: unknown;
13438
+ };
13439
+ content: {
13440
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
13441
+ };
13442
+ };
13443
+ };
13444
+ };
12921
13445
  GetEverythingFiles: {
12922
13446
  parameters: {
12923
13447
  query?: {
@@ -13107,7 +13631,7 @@ export interface operations {
13107
13631
  };
13108
13632
  cookie?: never;
13109
13633
  };
13110
- requestBody?: {
13634
+ requestBody: {
13111
13635
  content: {
13112
13636
  "application/json": components["schemas"]["UpdateGaugeNeedleRequestContent"];
13113
13637
  };
@@ -13372,6 +13896,104 @@ export interface operations {
13372
13896
  };
13373
13897
  };
13374
13898
  };
13899
+ PollInbox: {
13900
+ parameters: {
13901
+ query?: {
13902
+ /**
13903
+ * @description Entry point: `0` (earliest retained), `now` (present), or a decimal item
13904
+ * id to start after.
13905
+ */
13906
+ since?: string;
13907
+ /** @description Resume token from a previous inbox page's `position`. */
13908
+ position?: string;
13909
+ /**
13910
+ * @description Comma-separated addressing reasons: `mentioned`, `assigned`, `subscribed`,
13911
+ * `watched`, `pinged`, `boosted`.
13912
+ */
13913
+ reasons?: string;
13914
+ /** @description Comma-separated event types, as a narrowing filter. */
13915
+ types?: string;
13916
+ /** @description Comma-separated bucket ids, as a narrowing filter (at most 100). */
13917
+ buckets?: string;
13918
+ };
13919
+ header?: never;
13920
+ path?: never;
13921
+ cookie?: never;
13922
+ };
13923
+ requestBody?: never;
13924
+ responses: {
13925
+ /** @description PollInbox 200 response */
13926
+ 200: {
13927
+ headers: {
13928
+ [name: string]: unknown;
13929
+ };
13930
+ content: {
13931
+ "application/json": components["schemas"]["PollInboxResponseContent"];
13932
+ };
13933
+ };
13934
+ /** @description FeedRequestError 400 response */
13935
+ 400: {
13936
+ headers: {
13937
+ [name: string]: unknown;
13938
+ };
13939
+ content: {
13940
+ "application/json": components["schemas"]["FeedRequestErrorResponseContent"];
13941
+ };
13942
+ };
13943
+ /** @description UnauthorizedError 401 response */
13944
+ 401: {
13945
+ headers: {
13946
+ [name: string]: unknown;
13947
+ };
13948
+ content: {
13949
+ "application/json": components["schemas"]["UnauthorizedErrorResponseContent"];
13950
+ };
13951
+ };
13952
+ /** @description BareForbiddenError 403 response */
13953
+ 403: {
13954
+ headers: {
13955
+ [name: string]: unknown;
13956
+ };
13957
+ content?: never;
13958
+ };
13959
+ /** @description FeedFilterMismatchError 409 response */
13960
+ 409: {
13961
+ headers: {
13962
+ [name: string]: unknown;
13963
+ };
13964
+ content: {
13965
+ "application/json": components["schemas"]["FeedFilterMismatchErrorResponseContent"];
13966
+ };
13967
+ };
13968
+ /** @description InboxPositionGoneError 410 response */
13969
+ 410: {
13970
+ headers: {
13971
+ [name: string]: unknown;
13972
+ };
13973
+ content: {
13974
+ "application/json": components["schemas"]["InboxPositionGoneErrorResponseContent"];
13975
+ };
13976
+ };
13977
+ /** @description RateLimitError 429 response */
13978
+ 429: {
13979
+ headers: {
13980
+ [name: string]: unknown;
13981
+ };
13982
+ content: {
13983
+ "application/json": components["schemas"]["RateLimitErrorResponseContent"];
13984
+ };
13985
+ };
13986
+ /** @description InternalServerError 500 response */
13987
+ 500: {
13988
+ headers: {
13989
+ [name: string]: unknown;
13990
+ };
13991
+ content: {
13992
+ "application/json": components["schemas"]["InternalServerErrorResponseContent"];
13993
+ };
13994
+ };
13995
+ };
13996
+ };
13375
13997
  GetForward: {
13376
13998
  parameters: {
13377
13999
  query?: never;
@@ -16308,6 +16930,15 @@ export interface operations {
16308
16930
  "application/json": components["schemas"]["ForbiddenErrorResponseContent"];
16309
16931
  };
16310
16932
  };
16933
+ /** @description NotFoundError 404 response */
16934
+ 404: {
16935
+ headers: {
16936
+ [name: string]: unknown;
16937
+ };
16938
+ content: {
16939
+ "application/json": components["schemas"]["NotFoundErrorResponseContent"];
16940
+ };
16941
+ };
16311
16942
  /** @description RateLimitError 429 response */
16312
16943
  429: {
16313
16944
  headers: {