@curviate/sdk 0.31.0 → 0.33.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/CHANGELOG.md CHANGED
@@ -7,6 +7,102 @@ Versioning: semantic. Minor for additive changes, patch for bug fixes; no stabil
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.33.0] - 2026-09-17
11
+
12
+ The InMail subject on the message reads, now typed. Fixture and types
13
+ regenerated against the deployed production document
14
+ (`https://api.curviate.com`, 127 paths, server `a38f685e`); the exact source
15
+ commit is recorded in `fixtures/PROVENANCE.json`.
16
+
17
+ ### Added
18
+
19
+ - **`MessageDetail["specifics"]`** types as `{ subject?: string | null }`, on
20
+ `messaging.getMessage()` and each item of `messaging.listMessages()`. The
21
+ served object is narrowed to `subject` alone (`additionalProperties: false`).
22
+ `getChat()`, `listChats()` and `inboxes.listChats()` carry no `specifics` on
23
+ their embedded `last_message`.
24
+
25
+ ### Changed
26
+
27
+ - **`recruiter.startChat()` `follow_up.subject` retention copy corrected.** It
28
+ previously read "Never stored and never logged, on any path", which is not
29
+ supportable: a Recruiter follow-up is an InMail, so once sent it lands in the
30
+ classic InMail inbox that the chat reads harvest. The served document now
31
+ states the conditional, and the regenerated types and fixture carry it.
32
+ - **`messages.sendInmail()` `text`** and the `last_message` descriptions on the
33
+ chat reads carry the same corrected retention wording.
34
+
35
+ ### Documented
36
+
37
+ - **`messaging.listMessages()` / `messaging.getMessage()`**: an InMail thread's
38
+ subject line arrives on a message as `specifics.subject`, set on the thread's
39
+ opening message. The chat object carries no subject at all, and `chat.name` is
40
+ the counterpart's display name, so the subject is read off the first message
41
+ and not off the chat. An ordinary message returns `specifics: {}`. The served
42
+ `specifics` object is narrowed to `subject` alone.
43
+ - **`messaging.getChat()` / `listChats()` / `inboxes.listChats()`**: a chat read
44
+ carries no subject anywhere, its embedded `last_message` included. The preview
45
+ is deliberately narrower than a message read so that a chat read returns the
46
+ same fields whether it was answered live or from Curviate's stored copy. Read
47
+ the chat's messages to get a subject.
48
+
49
+ ### Fixture drift swept in by the refresh
50
+
51
+ The refresh also picked up already-deployed drift the previous fixture lagged
52
+ (it was captured from staging `c98d526`, 2026-09-15). All of it is real served
53
+ state, verified against both `api.curviate.com` and `api.staging.curviate.com`:
54
+
55
+ - Error-response `examples` blocks removed on **144** operations (343 response
56
+ slots), on status codes 409, 422, 503 and 504 only. This is server commit
57
+ `57afde5c5`, "error examples use only codes the API emits", which landed
58
+ immediately after the previous fixture's base. The earlier estimate of ~38
59
+ operations undercounted.
60
+ - Prose corrections to a handful of already-served descriptions: the 503 on the
61
+ applicant-résumé read now names its code, the Sales Navigator chat 422 names
62
+ only the code it emits, the auth-intent 402 describes both codes it can
63
+ carry, and the safety-policy descriptions drop raw path templates and say
64
+ "tenant" rather than "workspace".
65
+
66
+ ---
67
+
68
+ ## [0.32.0] - 2026-09-15
69
+
70
+ Seat discovery for connecting an account. Additive; nothing removed or renamed.
71
+
72
+ Fixture and types regenerated against the deployed staging document
73
+ (`https://api.staging.curviate.com`, 127 paths); the exact source commit is
74
+ recorded in `fixtures/PROVENANCE.json`.
75
+
76
+ ### Added
77
+
78
+ - **`accounts.listSeats()`** (`GET /v1/accounts/seats`). Returns
79
+ `{ object: "seat_list", items: { seat_id, occupied, account_id }[] }`: the
80
+ workspace's live seats, whether an account occupies each, and that account
81
+ (`null` when free). Not paginated. An empty seat is listed only when
82
+ connecting an account to it would be accepted right now, so an empty seat
83
+ that is provisional, cancelling, on an ended trial or blocked by billing is
84
+ left out, and `items` can be `[]` while the workspace still has seats. Any seat with `occupied: false` is a valid `seat_id` for connecting a new
85
+ account with `auth.intent`, so a connect no longer needs a seat id copied
86
+ from the dashboard. Carries no billing fields. The response type is
87
+ exported as `SeatList`.
88
+
89
+ - **Types only: `GET` and `PATCH /v1/safety-policy`** (tenant-wide safety
90
+ defaults per limit profile and budget row). The generated `paths` type now
91
+ describes them; there is no resource method yet, so call them through your
92
+ own request if you need them today.
93
+
94
+ ### Changed
95
+
96
+ - `auth.intent` documentation now points to `accounts.listSeats()` for finding
97
+ a free seat, matching the regenerated `seat_id` description.
98
+ - Regenerated descriptions on `GET` and `PATCH /v1/{account_id}/safety-policy`:
99
+ an account's values now resolve from its own setting, then the tenant
100
+ default for its `limit_profile`, then the Curviate default, and `null` on the
101
+ account write restores the tenant default where one is set. Documentation
102
+ only; no type moved.
103
+
104
+ ---
105
+
10
106
  ## [0.31.0] - 2026-09-11
11
107
 
12
108
  Step two of the tier retirement, plus one billing refusal this SDK was about to
package/README.md CHANGED
@@ -113,7 +113,8 @@ try {
113
113
  // Curviate's OWN account-safety ceiling, not a request-rate limit:
114
114
  // nothing reached LinkedIn and nothing was spent, so backing off is the
115
115
  // wrong move. Wait until err.resetAt, or raise the setting the hint
116
- // names on PATCH /v1/{account_id}/safety-policy.
116
+ // names on PATCH /v1/{account_id}/safety-policy. The ceiling comes from the
117
+ // account's safety policy or the tenant default (GET/PATCH /v1/safety-policy).
117
118
  // resetAt is null in the two cases no clock frees: the pending_invites
118
119
  // backlog, and an InMail credit pool LinkedIn regrants on its own schedule.
119
120
  console.warn(`${err.budgetRow} is spent until ${err.resetAt ?? "no fixed time"}`);