@curviate/sdk 0.15.0 → 0.17.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,121 @@ Versioning: semantic — minor for additive changes, patch for bug fixes; no sta
7
7
 
8
8
  ---
9
9
 
10
+ ## [Unreleased]
11
+
12
+ ## [0.17.0] — 2026-07-17
13
+
14
+ ### Added
15
+
16
+ - **`companies.followInvite(identifier, body)`**: invite the connected
17
+ account's 1st-degree connections to follow a company page it administers with the
18
+ invite-to-follow entitlement. Pass the `AC…` member ids from an `invitableFollowers()`
19
+ read. `POST /v1/{account_id}/companies/{identifier}/follow-invite`. All-or-nothing:
20
+ for an all-valid request, resolves to one outcome per requested invitee, in request
21
+ order (`status: "invited" | "already_invited" | "ineligible" | "not_found"`); if any
22
+ invitee id is invalid, the whole request rejects with a 404, not a partial result.
23
+ Re-inviting an already-invited member is a safe no-op (the same `invitation_id`,
24
+ never a duplicate).
25
+
26
+ ## [0.16.0] — 2026-07-17
27
+
28
+ Mostly additive, plus one breaking removal on the connect/reconnect body.
29
+
30
+ ### Breaking
31
+
32
+ - **`disabled_features` is removed from `auth.intent()`'s request body**
33
+ (`AuthIntentBody`). The negative-list model could not express the `company`
34
+ product or the one-Premium-per-profile XOR. Connection scope (which
35
+ LinkedIn products get synced) is now **seat-derived**: there is no products
36
+ input on connect/reconnect at all. Drop any `disabled_features` you were
37
+ passing: a body still carrying it is now rejected 400 by the server. The
38
+ scope actually recorded for an account reads back as the new
39
+ `requested_products` field (see Added, below). A reconnect that changes
40
+ scope must use `auth_method: "credentials"`, since a cookie replay cannot
41
+ change scope and now throws `CurviateError(code: "REAUTH_REQUIRED")`.
42
+
43
+ ### Added
44
+
45
+ - **New account-scoped `inboxes` namespace (2 methods, Beta), the reply-as-a-page
46
+ surface.** `inboxes.list(query?)` discovers the account's personal inbox
47
+ plus, when the company product is attached, one entry per company page (id
48
+ like `"COMPANY_83734124_PRIMARY"`). `inboxes.listChats(inboxId, query?)`
49
+ lists a single inbox's conversations, cursor-paginated. Every returned chat
50
+ `id` is send-ready: pass it straight to the existing `messaging.sendMessage()`
51
+ to reply, no separate start/send endpoint. Company pages are reply-only
52
+ (`reply_only: true`) and cannot start a new conversation. **Beta:**
53
+ single-page listing is verified; deep pagination against a busier inbox is
54
+ still being validated.
55
+ - **`sendMessage()` echoes the acting identity as `sent_as`,** additive on
56
+ the existing send-message response. A `COMPANY_` chat id (from
57
+ `inboxes.listChats()`) sends AS THE PAGE and echoes
58
+ `sent_as: { kind: "company", company_id, name }` (`company_id` is `null`
59
+ when the page could not be correlated to a managed page). Any other chat id
60
+ sends as the connected member and echoes `sent_as: { kind: "personal" }`.
61
+ Never infer the acting identity from a message's `sender` field, only from
62
+ `sent_as`.
63
+ - **`accounts.list()` / `accounts.get()` gain `requested_products`,** the
64
+ seat-derived connection scope (e.g. `["classic", "company",
65
+ "sales_navigator"]`) the account was last connected with. `null` for
66
+ accounts connected before this was recorded, and not attachment truth for
67
+ Company Pages (that is decidable only via `inboxes.list()`).
68
+ - **Two new error codes:** `PREMIUM_CONFLICT` (a seat resolving to both
69
+ individual-Premium tiers at once, since LinkedIn permits only one per
70
+ profile; `user_fixable`, never retryable) and `REAUTH_REQUIRED` (a
71
+ scope-changing reconnect attempted with a cookie instead of credentials;
72
+ `user_fixable`, never retryable).
73
+ - **New account-scoped `profile` namespace (4 methods)** — the connected
74
+ account's own insight surface: `profile.subscription()`, `profile.analytics()`,
75
+ `profile.visitors(query?)`, `profile.ssi()`. Distinct from the retired
76
+ `profiles` namespace (renamed to `users` in 0.15.0).
77
+ - **New account-scoped `groups` namespace (3 methods)** — `groups.list(query?)`
78
+ (own groups by default, or another member's via `{ profile }`),
79
+ `groups.get(group)`, and `groups.members(group, query?)` (with the folded-in
80
+ `{ name }` member search).
81
+ - **New account-scoped `feed` namespace (1 method)** — `feed.home(query?)` reads
82
+ the connected account's home feed as agent-actionable posts, with `relevant`
83
+ or `recent` sort orders.
84
+ - **`companies` gains 3 company-insights methods** — `companies.managed(query?)`
85
+ lists the pages the connected account administers; `companies.followers(identifier,
86
+ query?)` lists a page's followers (**re-added** under a different item shape —
87
+ `company_follower`, carrying `degree`/`followed_at` — than the pre-0.15.0
88
+ method of the same name); `companies.invitableFollowers(identifier, query?)`
89
+ lists connections invitable to follow the page. All three require the
90
+ connected account to administer the target page.
91
+ - **`companies` gains 5 Beta company-inbox methods** — `companies.chats(identifier,
92
+ query?)`, `companies.chat(identifier, chatId)`, `companies.messages(identifier,
93
+ chatId, query?)`, `companies.message(identifier, chatId, messageId)`, and
94
+ `companies.searchChats(identifier, query?)` (exactly one of `query`/`topic`/
95
+ `unread` per call). A distinct conversation surface from the account's own
96
+ `messaging` namespace, scoped to one administered company page. **Beta:**
97
+ single-page listing and termination are verified; deep pagination (many
98
+ pages / large cursor round-trips) is still being validated against a busier
99
+ inbox. `companies` is now 12 methods (was 4).
100
+ - **`search` gains 3 methods** — `search.groups(query)` searches LinkedIn
101
+ groups by keyword; `search.services(body & query)` searches Services
102
+ Marketplace providers with structured filters; `search.getServiceParameters(query)`
103
+ resolves human-readable service-category/location terms into the opaque
104
+ filter ids `services()` accepts. `search` is now 9 methods (was 6).
105
+ - **`messaging` gains 1 method** — `messaging.searchChats(params)` free-text
106
+ searches the account's own inbox (participant names and message content).
107
+ `messaging` is now 13 methods (was 12).
108
+ - **`posts` gains 3 saved-posts methods** — `posts.listSaved(query?)` lists the
109
+ connected account's own saved posts (a self resource — previews only,
110
+ `snippet` capped at ≤140 chars, never the full body); `posts.save(postId)`
111
+ and `posts.unsave(postId)` add/remove a bookmark, both idempotent and
112
+ accepting either `urn:li:activity:<id>` or a bare numeric id. `posts` is now
113
+ 12 methods (was 9).
114
+ - **New account-scoped `notifications` namespace (3 methods)** — the connected
115
+ account's own notification centre: `notifications.list(query?)` (cards +
116
+ the account-level `unread_count`/`latest_published_at`);
117
+ `notifications.delete(cardUrn)` and `notifications.showLess(cardUrn)`, two
118
+ self-action writes on the account's own cards. Both writes are idempotent
119
+ and take effect within a few seconds — a list read immediately after may
120
+ still show the card for a moment, which is not a failure signal. The SDK
121
+ percent-encodes `cardUrn` (which embeds `(`, `)`, `:`, `,`) into the path.
122
+ - **Parity pin: 143 methods across 18 namespaces** (was 135 / 16 at the start
123
+ of this release cycle). The `inboxes` namespace is the final addition.
124
+
10
125
  ## [0.15.0] — 2026-07-11
11
126
 
12
127
  Full v2 parity. The SDK is re-aligned 1:1 to the served API surface: every
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  The official TypeScript SDK for the [Curviate API](https://docs.curviate.com) — agent-native
4
4
  LinkedIn infrastructure for AI engineers and agent builders.
5
5
 
6
- > **Status:** `0.15.0` — pre-1.0. Full v2 API parity; the surface is public but not yet stability-promised.
6
+ > **Status:** `0.16.0` — pre-1.0. Full v2 API parity; the surface is public but not yet stability-promised.
7
7
 
8
8
  ---
9
9