@curviate/cli 0.11.0 → 0.13.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 +60 -1
- package/README.md +75 -5
- package/dist/{account-P5K5UDWF.js → account-7AUDAMIK.js} +226 -131
- package/dist/{chunk-OSQ643UW.js → chunk-HMAGEMF7.js} +1 -0
- package/dist/cli.js +12 -12
- package/dist/company-RU2CA5DY.js +337 -0
- package/dist/{connect-J5NPWKAQ.js → connect-QT6ZOS75.js} +8 -8
- package/dist/{exit-codes-2ASIFXGR.js → exit-codes-ZTY2NY3X.js} +1 -1
- package/dist/{inbox-5P5TB6AI.js → inbox-DN7X7CM2.js} +1 -1
- package/dist/{job-EIXYBDF6.js → job-FGGQEXSU.js} +1 -1
- package/dist/{message-646BIYRH.js → message-6K5E3CUF.js} +1 -1
- package/dist/{post-TI6KV26J.js → post-2JQZ3OSF.js} +4 -4
- package/dist/{profile-TUIZZKM7.js → profile-DD5GMGNL.js} +8 -8
- package/dist/{recruiter-7K56E2QA.js → recruiter-XHVMQWK6.js} +4 -4
- package/dist/{sales-nav-I2KMQFFF.js → sales-nav-QTSTJMKA.js} +290 -12
- package/dist/{search-TF6OOEUE.js → search-ZGTS45BT.js} +5 -5
- package/dist/{webhook-VHREWB56.js → webhook-XPWBI675.js} +4 -4
- package/package.json +2 -2
- package/dist/company-IMAVQBZL.js +0 -92
package/CHANGELOG.md
CHANGED
|
@@ -6,7 +6,66 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
6
6
|
Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html):
|
|
7
7
|
a new command or flag is a minor; a breaking command/flag/exit-code change is a major; a fix is a patch.
|
|
8
8
|
|
|
9
|
-
## [
|
|
9
|
+
## [0.13.0] - 2026-07-05
|
|
10
|
+
|
|
11
|
+
Accounts/Auth surface migration — the coupled release with `@curviate/sdk` 0.13.0. This is a
|
|
12
|
+
**breaking** minor (pre-1.0): the account connection and checkpoint commands were reshaped to
|
|
13
|
+
match the new account-in-path grammar.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **`account reconnect-link <account_id>`** — mint a one-time hosted **re-authorization** link for an existing disconnected account (the hosted counterpart of `account reconnect`). Same open+wait UX as `account connect-link`: on an interactive TTY the URL auto-opens and the command waits for the account to reconnect (exit `0` resolved, `9` expired/failed, `12` on a wait-window timeout); non-interactively it prints the url + session_id and returns immediately. Optional `--expires-in-seconds` / `--redirect-url`.
|
|
18
|
+
- **`account update --metadata '<json>'`** — set the account's custom metadata (a flat JSON object that replaces the store wholesale). **`account update --clear-proxy`** — clear the custom proxy (revert to automatic proxy protection).
|
|
19
|
+
- **New connect/checkpoint response fields ride through `--json` output** (coupled with the SDK 0.13.0 connect-fix regen — the CLI duck-types the response, so the fields pass through verbatim with no code change):
|
|
20
|
+
- `recovered` (boolean) on `account link` and `account checkpoint solve` completions — `true` when the connect reclaimed a LinkedIn identity already present on the workspace rather than connecting a brand-new one.
|
|
21
|
+
- the completed-account `status` is widened to `active | reconnect_needed | restricted | disconnected` (a recovered identity often reports needing a reconnect); the CLI reads `status` as a free-form string, so the wider set is unaffected.
|
|
22
|
+
- `challenge_type` (`mobile_app_approval`) + `recovery_hint` on an `account checkpoint poll` that returns `status: "expired"` (a mobile-approval timeout).
|
|
23
|
+
Surfacing `recovered` in the human-readable (non-`--json`) success line is a deferred UX follow-up — it would need consistent treatment across the direct-link, interactive-solve, and standalone-solve completion paths.
|
|
24
|
+
|
|
25
|
+
### Changed (BREAKING)
|
|
26
|
+
|
|
27
|
+
- **Checkpoint commands are now account-in-path (positional), not `--checkpoint`.**
|
|
28
|
+
- `account checkpoint submit --checkpoint <id> --code <c>` → **`account checkpoint solve <account_id> --code <c>`**.
|
|
29
|
+
- `account checkpoint resend --checkpoint <id>` → **`account checkpoint request <account_id>`**.
|
|
30
|
+
- `account checkpoint poll --checkpoint <id>` → **`account checkpoint poll <account_id>`** (the `--checkpoint` flag becomes the account_id positional; `--wait`/`--timeout` unchanged).
|
|
31
|
+
- Update scripts: replace `checkpoint submit --checkpoint X --code Y` with `checkpoint solve X --code Y`, `checkpoint resend --checkpoint X` with `checkpoint request X`, and `checkpoint poll --checkpoint X` with `checkpoint poll X`.
|
|
32
|
+
- **`account refresh <account_id>` removed** — accounts restart and re-sync automatically now; there is no replacement command. Status freshness comes from the account-status webhook, the nightly reconcile, and `account get`.
|
|
33
|
+
- **`account connect-link` is create-only** — the `--purpose` and `--account-id` flags are removed; it only mints a link to connect a **new** account. Use `account reconnect-link <account_id>` for hosted re-auth of an existing account.
|
|
34
|
+
- **`account update` reshaped** — the managed `--country` / `--ip` flags are removed (a managed location is now chosen at connect time). The command now takes `--metadata` and/or a custom proxy (`--proxy-*` / `--clear-proxy`).
|
|
35
|
+
- **`account link` / `account reconnect` require `--user-agent` for cookie auth** — connecting by session cookie (`--auth-method cookie`) without a `--user-agent` fails fast at exit `2` (it stays optional for `--auth-method credentials`). Under `--preview` the check is skipped (a render never exits).
|
|
36
|
+
- SDK-parity manifest (`test/parity.test.ts`) repoints the checkpoint entries (`solve`/`request`/`poll`) and swaps `account refresh` → `account reconnect-link`; the manifest and SDK method count stay at 93 (`accounts` stays 12 methods).
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- **`account connect-session poll` now interpolates the session id correctly.** It previously passed the session id as an object to the SDK, producing a request path of `/v1/accounts/connect-sessions/[object Object]` (broken `--wait` loops). It now passes the id as a string. A regression test asserts the interpolated path is `/v1/accounts/connect-sessions/<session_id>`, never `[object Object]`.
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
|
|
44
|
+
- `@curviate/sdk` dependency bumped to `^0.13.0` — the coupled release carrying the reshaped `accounts` surface (see the SDK's own CHANGELOG). The CLI duck-types the SDK, so its commands are covered by the parity manifest against that release.
|
|
45
|
+
|
|
46
|
+
## [0.12.0] - 2026-07-05
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- **`company employees <id>`** — list people who currently work at the company (facade over people search with the company filter). `--keywords` and `--location` narrow the result; pagination flags apply. `<id>` must be the company's numeric provider_id (the `id` field of `company <id>`).
|
|
51
|
+
- **`company posts <id>`** — list the company's posts (facade over post search). Pagination flags apply; post `text` prints verbatim.
|
|
52
|
+
- **`company jobs <id>`** — list the company's open job postings (facade over job search). `--keywords` narrows the result. An empty list is a valid result (the company currently has no open postings), not an error.
|
|
53
|
+
- **`company followers <id>`** — list the company's followers (native — the same seam that backs `profile <id> --followers`). Requires the acting account to administer the target company page; a non-admin company returns the exit code for `RESOURCE_ACCESS_RESTRICTED` (new, see below).
|
|
54
|
+
- All four new subcommands support `--all` (NDJSON page streaming) alongside the existing pagination flags, and reject `--preview` (exit `2`) like every other read command.
|
|
55
|
+
- `--account` is now required on `company <id>` (retrieve) — the underlying endpoint always requires `account_id`; previously the command silently fell back to an unscoped call.
|
|
56
|
+
- **Sales Navigator v2 list surface — 5 new subcommands.** `sales-nav account-lists --account <id>` and `sales-nav lead-lists --account <id>` list the operator's saved-account/saved-lead lists (`--limit`/`--cursor`/`--all` paginate). `sales-nav browse-account-list <list_id> --account <id> [--filter --sort-by --sort-order]` and `sales-nav browse-lead-list <list_id> --account <id> [--spotlight --sort-by --sort-order]` browse the saved items in one list — genuine paginated reads, so they keep all pagination flags. `sales-nav save-account <company_id> --list <id> --account <id>` saves a company into an account list (write, `--preview` supported, no pagination flags in `--help`). All five call the SDK's new `salesNavigator` methods (`accountLists`/`leadLists`/`browseAccountList`/`browseLeadList`/`saveAccount`) — no re-implementation of the HTTP call.
|
|
57
|
+
|
|
58
|
+
### Changed (BREAKING)
|
|
59
|
+
|
|
60
|
+
- **`company <id>` now routes to the SDK's `companies.get()`** instead of the retired `profiles.getCompany()` — an internal repoint (the hard-moved server endpoint), not a CLI UX change: flags, output shape, and slim projection are unchanged. `--account` becoming required (above) is the one user-visible behavior change.
|
|
61
|
+
- SDK-parity manifest (`test/parity.test.ts`) repoints `company get` → `companies.get` and gains `company employees` / `company posts` / `company jobs` / `company followers`; the manifest and SDK method count both move from 84 to 88.
|
|
62
|
+
- `@curviate/sdk` dependency bumped to `^0.12.0` — the released build carrying the `companies` resource and the v2 `salesNavigator` list-surface cascade (see the SDK's own CHANGELOG).
|
|
63
|
+
- **`sales-nav save-lead` re-signed for the v2 save-lead surface.** The old `save-lead <user_id> [--list-id <id>]` (list optional) is **retired, no alias** — the v2 op always saves into a specific list. The replacement is `save-lead <user_id> --list <id>`: `--list` is now **required** and the flag is renamed from `--list-id`. Update scripts: `save-lead <id> --list-id <l>` → `save-lead <id> --list <l>`.
|
|
64
|
+
- SDK-parity manifest gains the 5 new `sales-nav` v2 subcommands; the manifest and SDK method count both move from 88 to 93 (`salesNavigator` 7→12 methods).
|
|
65
|
+
|
|
66
|
+
### Fixed
|
|
67
|
+
|
|
68
|
+
- **`RESOURCE_ACCESS_RESTRICTED`** — a new SDK error code (the non-admin mapping for `company followers`) is now present in `EXIT_CODE_MAP` (exit `8`, grouped with `ACCOUNT_RESTRICTED`); the exhaustiveness test would otherwise have silently mapped it to the default `1`.
|
|
10
69
|
|
|
11
70
|
## [0.11.0] - 2026-07-04
|
|
12
71
|
|
package/README.md
CHANGED
|
@@ -172,13 +172,44 @@ curviate search jobs --keywords "founding engineer" --location "Berlin" --accoun
|
|
|
172
172
|
curviate job get "https://www.linkedin.com/jobs/view/4428113858" --account acc_1
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
+
## Company
|
|
176
|
+
|
|
177
|
+
Company commands (`curviate company ...`) are Core-tier reads. `company <id>` accepts a public
|
|
178
|
+
handle (the slug in `linkedin.com/company/<handle>`) or a numeric id; the four sub-resource
|
|
179
|
+
commands require the company's **numeric provider id** — the `id` field `company <id>` returns.
|
|
180
|
+
`--account` (or a configured default account) is required on all of them.
|
|
181
|
+
|
|
182
|
+
### 1. Retrieve a company, then list its employees
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
curviate company t-systems --account acc_1 --json | jq -r '.id' \
|
|
186
|
+
| xargs -I{} curviate company employees {} --keywords "engineer" --limit 10 --account acc_1 --json
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 2. Page through a company's posts and jobs
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
curviate company posts 112013061 --limit 5 --account acc_1 --json
|
|
193
|
+
curviate company jobs 112013061 --all --account acc_1 --json # streams every page
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 3. List a company's followers (page admins only)
|
|
197
|
+
|
|
198
|
+
Followers are only retrievable for a company page the acting account **administers** — a
|
|
199
|
+
non-administered company returns a `RESOURCE_NOT_FOUND` error (exit code `4`), the same shape as
|
|
200
|
+
an unknown company.
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
curviate company followers 112013061 --limit 25 --account acc_1 --json
|
|
204
|
+
```
|
|
205
|
+
|
|
175
206
|
## Sales Navigator
|
|
176
207
|
|
|
177
208
|
Sales Navigator commands (`curviate sales-nav ...`) require an account with the Sales Navigator
|
|
178
209
|
add-on tier attached. A call against an account without it fails with **exit code `5`** and a
|
|
179
210
|
`TIER_NOT_ACTIVE` error body naming the required tier (`sales_nav`) — branch on the exit code the
|
|
180
|
-
same way as example 4 above. Write commands (`save-lead`, `message new`) accept
|
|
181
|
-
render the request without sending it.
|
|
211
|
+
same way as example 4 above. Write commands (`save-lead`, `save-account`, `message new`) accept
|
|
212
|
+
`--preview` to render the request without sending it.
|
|
182
213
|
|
|
183
214
|
### 1. Search Sales Navigator profiles, then get one full profile
|
|
184
215
|
|
|
@@ -193,15 +224,15 @@ curviate sales-nav search people \
|
|
|
193
224
|
|
|
194
225
|
### 2. Save a lead to a specific lead list
|
|
195
226
|
|
|
196
|
-
Preview first, then send
|
|
227
|
+
Preview first, then send. `--list` is required — the save always targets a specific list.
|
|
197
228
|
|
|
198
229
|
```bash
|
|
199
230
|
curviate sales-nav save-lead ACwAAA1234567 \
|
|
200
231
|
--account acc_1 \
|
|
201
|
-
--list
|
|
232
|
+
--list 987654 \
|
|
202
233
|
--preview
|
|
203
234
|
|
|
204
|
-
curviate sales-nav save-lead ACwAAA1234567 --account acc_1 --list
|
|
235
|
+
curviate sales-nav save-lead ACwAAA1234567 --account acc_1 --list 987654
|
|
205
236
|
```
|
|
206
237
|
|
|
207
238
|
### 3. Start a new Sales Navigator chat
|
|
@@ -223,6 +254,45 @@ curviate sales-nav search companies \
|
|
|
223
254
|
| jq -r '.items[] | "\(.id)\t\(.name)"'
|
|
224
255
|
```
|
|
225
256
|
|
|
257
|
+
### 5. List saved-account and saved-lead lists
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
curviate sales-nav account-lists --account acc_1
|
|
261
|
+
curviate sales-nav lead-lists --account acc_1
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 6. Browse a saved-account list, filtered to starred accounts
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
curviate sales-nav browse-account-list 987654 \
|
|
268
|
+
--account acc_1 \
|
|
269
|
+
--filter STARRED \
|
|
270
|
+
--sort-by NAME \
|
|
271
|
+
--json \
|
|
272
|
+
| jq -r '.items[] | "\(.id)\t\(.display_name)"'
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 7. Browse a saved-lead list, spotlighting recent job changes
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
curviate sales-nav browse-lead-list 456789 \
|
|
279
|
+
--account acc_1 \
|
|
280
|
+
--spotlight RECENT_POSITION_CHANGE \
|
|
281
|
+
--json \
|
|
282
|
+
| jq -r '.items[] | "\(.id)\t\(.display_name)"'
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### 8. Save a company into an account list
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
curviate sales-nav save-account 112013061 \
|
|
289
|
+
--account acc_1 \
|
|
290
|
+
--list 987654 \
|
|
291
|
+
--preview
|
|
292
|
+
|
|
293
|
+
curviate sales-nav save-account 112013061 --account acc_1 --list 987654
|
|
294
|
+
```
|
|
295
|
+
|
|
226
296
|
## Recruiter
|
|
227
297
|
|
|
228
298
|
Recruiter commands (`curviate recruiter ...`) require an account with the Recruiter add-on tier
|