@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.
- package/README.md +94 -2
- package/dist/client.d.ts +6 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +11 -7
- package/dist/client.js.map +1 -1
- package/dist/download.js +1 -1
- package/dist/errors.d.ts +10 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +42 -13
- package/dist/errors.js.map +1 -1
- package/dist/generated/metadata.d.ts +1 -2
- package/dist/generated/metadata.d.ts.map +1 -1
- package/dist/generated/metadata.js +47 -1
- package/dist/generated/metadata.js.map +1 -1
- package/dist/generated/metadata.ts +48 -3
- package/dist/generated/openapi-stripped.json +816 -60
- package/dist/generated/path-mapping.d.ts.map +1 -1
- package/dist/generated/path-mapping.js +7 -4
- package/dist/generated/path-mapping.js.map +1 -1
- package/dist/generated/path-mapping.ts +8 -5
- package/dist/generated/person-id-sites.d.ts +2 -0
- package/dist/generated/person-id-sites.d.ts.map +1 -0
- package/dist/generated/person-id-sites.js +689 -0
- package/dist/generated/person-id-sites.js.map +1 -0
- package/dist/generated/person-id-sites.ts +690 -0
- package/dist/generated/schema.d.ts +643 -12
- package/dist/generated/services/event-feed.d.ts +92 -0
- package/dist/generated/services/event-feed.d.ts.map +1 -0
- package/dist/generated/services/event-feed.js +80 -0
- package/dist/generated/services/event-feed.js.map +1 -0
- package/dist/generated/services/event-feed.ts +153 -0
- package/dist/generated/services/gauges.d.ts +7 -3
- package/dist/generated/services/gauges.d.ts.map +1 -1
- package/dist/generated/services/gauges.js +4 -1
- package/dist/generated/services/gauges.js.map +1 -1
- package/dist/generated/services/gauges.ts +10 -3
- package/dist/generated/services/index.d.ts +1 -1
- package/dist/generated/services/index.d.ts.map +1 -1
- package/dist/generated/services/index.js +1 -1
- package/dist/generated/services/index.js.map +1 -1
- package/dist/generated/services/index.ts +1 -1
- package/dist/generated/services/lineup.d.ts +13 -0
- package/dist/generated/services/lineup.d.ts.map +1 -1
- package/dist/generated/services/lineup.js +18 -0
- package/dist/generated/services/lineup.js.map +1 -1
- package/dist/generated/services/lineup.ts +26 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/dist/person-id.d.ts +133 -0
- package/dist/person-id.d.ts.map +1 -0
- package/dist/person-id.js +163 -0
- package/dist/person-id.js.map +1 -0
- package/dist/retry.d.ts +2 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +21 -11
- package/dist/retry.js.map +1 -1
- package/dist/services/base.d.ts +35 -0
- package/dist/services/base.d.ts.map +1 -1
- package/dist/services/base.js +387 -55
- package/dist/services/base.js.map +1 -1
- package/dist/services/comments-extensions.d.ts +89 -0
- package/dist/services/comments-extensions.d.ts.map +1 -0
- package/dist/services/comments-extensions.js +166 -0
- package/dist/services/comments-extensions.js.map +1 -0
- package/dist/services/mentions.d.ts +255 -0
- package/dist/services/mentions.d.ts.map +1 -0
- package/dist/services/mentions.js +1431 -0
- package/dist/services/mentions.js.map +1 -0
- package/dist/services/merge-safe.d.ts +13 -5
- package/dist/services/merge-safe.d.ts.map +1 -1
- package/dist/services/merge-safe.js +71 -13
- package/dist/services/merge-safe.js.map +1 -1
- package/dist/services/recordings-extensions.d.ts +354 -0
- package/dist/services/recordings-extensions.d.ts.map +1 -0
- package/dist/services/recordings-extensions.js +1940 -0
- package/dist/services/recordings-extensions.js.map +1 -0
- package/package.json +4 -4
- package/src/generated/metadata.ts +48 -3
- package/src/generated/openapi-stripped.json +816 -60
- package/src/generated/path-mapping.ts +8 -5
- package/src/generated/person-id-sites.ts +690 -0
- package/src/generated/schema.d.ts +643 -12
- package/src/generated/services/event-feed.ts +153 -0
- package/src/generated/services/gauges.ts +10 -3
- package/src/generated/services/index.ts +1 -1
- package/src/generated/services/lineup.ts +26 -0
- package/dist/generated/services/automation.d.ts +0 -25
- package/dist/generated/services/automation.d.ts.map +0 -1
- package/dist/generated/services/automation.js +0 -33
- package/dist/generated/services/automation.js.map +0 -1
- package/dist/generated/services/automation.ts +0 -49
- 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
|
-
/**
|
|
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
|
-
/**
|
|
4907
|
-
|
|
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
|
-
/**
|
|
4951
|
-
|
|
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
|
|
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: {
|