@curviate/sdk 0.37.0 → 0.37.1

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
@@ -9,6 +9,48 @@ Versioning: semantic. Minor for additive changes, patch for bug fixes; no stabil
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.37.1] - 2026-09-23
13
+
14
+ Fixture and types regenerated against the deployed production document
15
+ (`https://api.curviate.com`, 127 paths, server
16
+ `0b33680536a45681ed5ffe420006cb05c85fe683`). Description changes only; no type
17
+ shape changed.
18
+
19
+ ### Changed
20
+
21
+ - **Generated type descriptions follow the served document.** `is_sender` on
22
+ chat messages now documents that it is omitted when the connected account
23
+ cannot yet be identified (treat a missing value as unknown, not as received).
24
+ Recruiter search and project filters, and the job read's `sections`
25
+ parameter, are documented as trimmed before use rather than forwarded
26
+ verbatim.
27
+
28
+ ### Fixed
29
+
30
+ - **The retry decision now honours `retry_hint.kind: "never"`.** A retryable
31
+ code (`INTERNAL`, `PLATFORM_ERROR`, `PLATFORM_RATE_LIMIT`,
32
+ `RATE_LIMIT_ACCOUNT`, `RATE_LIMIT_TENANT`) whose envelope carries
33
+ `retry_hint: { kind: "never" }`, an explicit server instruction that this
34
+ exact refusal will not change on a retry (for example, an upstream response
35
+ in a shape this API cannot read), is no longer retried on GETs. Previously
36
+ the retry gate consulted only the code table, so a structural-drift 502
37
+ (`PLATFORM_ERROR` with `retry_likely_to_succeed: false` and
38
+ `retry_hint.kind: "never"`) was retried up to three times against an answer
39
+ that could not change.
40
+
41
+ `retry_likely_to_succeed` is still not consulted by the retry decision. The
42
+ server currently defaults it to `false` on several generic
43
+ "unresolved error" paths that are not a per-cause verdict, and honouring it
44
+ as written would have silently stopped retrying most undecoded server
45
+ errors. Filed back rather than shipped; unaffected callers see no
46
+ behaviour change.
47
+
48
+ - **An empty but present `Retry-After` header no longer reads as "retry in
49
+ 0ms".** `Number("")` is `0`, which is finite and non-negative, so it passed
50
+ the same check a real delay does; it now falls back to the same
51
+ conservative 30s the unparseable HTTP-date form already gets. Found in
52
+ passing while touching this file for the fix above; unrelated to it.
53
+
12
54
  ## [0.37.0] - 2026-09-22
13
55
 
14
56
  Fixture and types regenerated against the deployed production document
package/dist/index.d.ts CHANGED
@@ -2904,7 +2904,7 @@ interface components {
2904
2904
  }[];
2905
2905
  /** @description ISO-8601 UTC send timestamp. */
2906
2906
  timestamp?: string;
2907
- /** @description True if the connected account sent this message. */
2907
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
2908
2908
  is_sender?: boolean;
2909
2909
  is_seen?: boolean;
2910
2910
  is_delivered?: boolean;
@@ -10378,7 +10378,7 @@ interface operations {
10378
10378
  }[];
10379
10379
  /** @description ISO-8601 UTC send timestamp. */
10380
10380
  timestamp?: string;
10381
- /** @description True if the connected account sent this message. */
10381
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
10382
10382
  is_sender?: boolean;
10383
10383
  is_seen?: boolean;
10384
10384
  is_delivered?: boolean;
@@ -10803,7 +10803,7 @@ interface operations {
10803
10803
  }[];
10804
10804
  /** @description ISO-8601 UTC send timestamp. */
10805
10805
  timestamp?: string;
10806
- /** @description True if the connected account sent this message. */
10806
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
10807
10807
  is_sender?: boolean;
10808
10808
  is_seen?: boolean;
10809
10809
  is_delivered?: boolean;
@@ -11173,7 +11173,7 @@ interface operations {
11173
11173
  }[];
11174
11174
  /** @description ISO-8601 UTC send timestamp. */
11175
11175
  timestamp?: string;
11176
- /** @description True if the connected account sent this message. */
11176
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
11177
11177
  is_sender?: boolean;
11178
11178
  is_seen?: boolean;
11179
11179
  is_delivered?: boolean;
@@ -11557,7 +11557,7 @@ interface operations {
11557
11557
  }[];
11558
11558
  /** @description ISO-8601 UTC send timestamp. */
11559
11559
  timestamp?: string;
11560
- /** @description True if the connected account sent this message. */
11560
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
11561
11561
  is_sender?: boolean;
11562
11562
  is_seen?: boolean;
11563
11563
  is_delivered?: boolean;
@@ -12752,7 +12752,7 @@ interface operations {
12752
12752
  }[];
12753
12753
  /** @description ISO-8601 UTC send timestamp. */
12754
12754
  timestamp?: string;
12755
- /** @description True if the connected account sent this message. */
12755
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
12756
12756
  is_sender?: boolean;
12757
12757
  is_seen?: boolean;
12758
12758
  is_delivered?: boolean;
@@ -16514,7 +16514,7 @@ interface operations {
16514
16514
  getV1AccountIdJobsJobId: {
16515
16515
  parameters: {
16516
16516
  query?: {
16517
- /** @description Which additional sections to include on the response (e.g. hiring_team, salary, benefits). The exact set of accepted values is not finalized, supply the section names you need, comma-separated for more than one, and they are forwarded verbatim. Omit for the base fields only. */
16517
+ /** @description Which additional sections to include on the response (e.g. hiring_team, salary, benefits). The exact set of accepted values is not finalized, supply the section names you need, comma-separated for more than one; each name is trimmed before use. Omit for the base fields only. */
16518
16518
  with_sections?: string[];
16519
16519
  };
16520
16520
  header?: never;
@@ -20436,7 +20436,7 @@ interface operations {
20436
20436
  requestBody: {
20437
20437
  content: {
20438
20438
  "application/json": {
20439
- /** @description Free-text keyword search. Content, forwarded verbatim, never persisted. */
20439
+ /** @description Free-text keyword search. Trimmed before use; never persisted. */
20440
20440
  keywords?: string;
20441
20441
  /** @description Filter by candidate spotlight tags. */
20442
20442
  spotlights?: string[];
@@ -20509,9 +20509,9 @@ interface operations {
20509
20509
  project?: string;
20510
20510
  /** @description Resolved JOB_FUNCTION parameter ids. */
20511
20511
  job_function?: string[];
20512
- /** @description Content, forwarded verbatim, never persisted. */
20512
+ /** @description Filter by first name (trimmed before use; never persisted). */
20513
20513
  first_name?: string;
20514
- /** @description Content, forwarded verbatim, never persisted. */
20514
+ /** @description Filter by last name (trimmed before use; never persisted). */
20515
20515
  last_name?: string;
20516
20516
  /** @description Filter to members who recently joined LinkedIn. */
20517
20517
  recently_joined?: boolean;
@@ -20534,7 +20534,7 @@ interface operations {
20534
20534
  group?: string[];
20535
20535
  /** @description Filter to members who previously applied. */
20536
20536
  is_past_applicant?: boolean;
20537
- /** @description Content, forwarded verbatim, never persisted. */
20537
+ /** @description Filter by an existing note's content (trimmed before use; never persisted). */
20538
20538
  notes?: string;
20539
20539
  /** @description Resolved TAG parameter ids. */
20540
20540
  tags?: string[];
@@ -20922,7 +20922,7 @@ interface operations {
20922
20922
  status?: ("ACTIVE" | "CLOSED" | "DRAFT" | "REVIEW")[];
20923
20923
  /** @description Field to sort results by. Defaults to LAST_USED_BY_ME. */
20924
20924
  sort_by?: "LAST_USED_BY_ME" | "MOST_USED_BY_ME" | "LAST_VIEWED_BY_ME" | "NEWEST_TO_OLDEST" | "OLDEST_TO_NEWEST" | "ALPHABETICAL" | "REVERSE_ALPHABETICAL";
20925
- /** @description Filter by project name (content, forwarded verbatim, never persisted). */
20925
+ /** @description Filter by project name (trimmed before use; never persisted). */
20926
20926
  keywords?: string;
20927
20927
  /** @description Number of projects to return (1-100). Defaults to 10. */
20928
20928
  limit?: number;
@@ -21785,7 +21785,7 @@ interface operations {
21785
21785
  requestBody: {
21786
21786
  content: {
21787
21787
  "application/json": {
21788
- /** @description Free-text keyword search. Content, forwarded verbatim, never persisted. */
21788
+ /** @description Free-text keyword search. Trimmed before use; never persisted. */
21789
21789
  keywords?: string;
21790
21790
  /** @description Filter by candidate spotlight tags. */
21791
21791
  spotlights?: string[];
@@ -21858,9 +21858,9 @@ interface operations {
21858
21858
  project?: string;
21859
21859
  /** @description Resolved JOB_FUNCTION parameter ids. */
21860
21860
  job_function?: string[];
21861
- /** @description Content, forwarded verbatim, never persisted. */
21861
+ /** @description Filter by first name (trimmed before use; never persisted). */
21862
21862
  first_name?: string;
21863
- /** @description Content, forwarded verbatim, never persisted. */
21863
+ /** @description Filter by last name (trimmed before use; never persisted). */
21864
21864
  last_name?: string;
21865
21865
  /** @description Filter to members who recently joined LinkedIn. */
21866
21866
  recently_joined?: boolean;
@@ -21883,7 +21883,7 @@ interface operations {
21883
21883
  group?: string[];
21884
21884
  /** @description Filter to members who previously applied. */
21885
21885
  is_past_applicant?: boolean;
21886
- /** @description Content, forwarded verbatim, never persisted. */
21886
+ /** @description Filter by an existing note's content (trimmed before use; never persisted). */
21887
21887
  notes?: string;
21888
21888
  /** @description Resolved TAG parameter ids. */
21889
21889
  tags?: string[];
@@ -23203,7 +23203,7 @@ interface operations {
23203
23203
  reject_unqualified_applicants?: boolean;
23204
23204
  reject_out_of_country_applicants?: boolean;
23205
23205
  };
23206
- /** @description Content; the new project's name, forwarded verbatim, never persisted. */
23206
+ /** @description The new project's name (trimmed before use); never persisted. */
23207
23207
  project_name: string;
23208
23208
  };
23209
23209
  };
@@ -24221,7 +24221,7 @@ interface operations {
24221
24221
  "application/json": {
24222
24222
  /** @description The ID of the JOB_POSTING channel from the Talent Pool. SDK-confirmed REQUIRED. */
24223
24223
  channel_id: string;
24224
- /** @description Free-text keyword search. Content, forwarded verbatim, never persisted. */
24224
+ /** @description Free-text keyword search. Trimmed before use; never persisted. */
24225
24225
  keywords?: string;
24226
24226
  /**
24227
24227
  * @description Sort order for the applicant list.
package/dist/index.js CHANGED
@@ -259,8 +259,11 @@ function defaultSleep(ms) {
259
259
  }
260
260
  function parseRetryAfterMs(header) {
261
261
  if (header == null) return void 0;
262
- const seconds = Number(header);
263
- if (Number.isFinite(seconds) && seconds >= 0) return seconds * 1e3;
262
+ const trimmed = header.trim();
263
+ if (trimmed !== "") {
264
+ const seconds = Number(trimmed);
265
+ if (Number.isFinite(seconds) && seconds >= 0) return seconds * 1e3;
266
+ }
264
267
  return 3e4;
265
268
  }
266
269
  function backoffDelay(n, jitter) {
@@ -404,7 +407,8 @@ async function execute(method, path, opts) {
404
407
  }
405
408
  const err = await errorFromResponse(res);
406
409
  const namesBudgetRow = err.budgetRow !== void 0;
407
- const retryable = !isWrite && !namesBudgetRow && RETRYABLE_CODES.has(err.code) && attempt < opts.maxRetries;
410
+ const neverRetry = err.retryHint?.kind === "never";
411
+ const retryable = !isWrite && !namesBudgetRow && !neverRetry && RETRYABLE_CODES.has(err.code) && attempt < opts.maxRetries;
408
412
  if (retryable) {
409
413
  await sleep(retryDelay(err, attempt + 1, jitterFn()));
410
414
  attempt += 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curviate/sdk",
3
- "version": "0.37.0",
3
+ "version": "0.37.1",
4
4
  "private": false,
5
5
  "description": "TypeScript SDK for the Curviate API.",
6
6
  "license": "MIT",
@@ -2807,7 +2807,7 @@ export interface components {
2807
2807
  }[];
2808
2808
  /** @description ISO-8601 UTC send timestamp. */
2809
2809
  timestamp?: string;
2810
- /** @description True if the connected account sent this message. */
2810
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
2811
2811
  is_sender?: boolean;
2812
2812
  is_seen?: boolean;
2813
2813
  is_delivered?: boolean;
@@ -10282,7 +10282,7 @@ export interface operations {
10282
10282
  }[];
10283
10283
  /** @description ISO-8601 UTC send timestamp. */
10284
10284
  timestamp?: string;
10285
- /** @description True if the connected account sent this message. */
10285
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
10286
10286
  is_sender?: boolean;
10287
10287
  is_seen?: boolean;
10288
10288
  is_delivered?: boolean;
@@ -10707,7 +10707,7 @@ export interface operations {
10707
10707
  }[];
10708
10708
  /** @description ISO-8601 UTC send timestamp. */
10709
10709
  timestamp?: string;
10710
- /** @description True if the connected account sent this message. */
10710
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
10711
10711
  is_sender?: boolean;
10712
10712
  is_seen?: boolean;
10713
10713
  is_delivered?: boolean;
@@ -11077,7 +11077,7 @@ export interface operations {
11077
11077
  }[];
11078
11078
  /** @description ISO-8601 UTC send timestamp. */
11079
11079
  timestamp?: string;
11080
- /** @description True if the connected account sent this message. */
11080
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
11081
11081
  is_sender?: boolean;
11082
11082
  is_seen?: boolean;
11083
11083
  is_delivered?: boolean;
@@ -11461,7 +11461,7 @@ export interface operations {
11461
11461
  }[];
11462
11462
  /** @description ISO-8601 UTC send timestamp. */
11463
11463
  timestamp?: string;
11464
- /** @description True if the connected account sent this message. */
11464
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
11465
11465
  is_sender?: boolean;
11466
11466
  is_seen?: boolean;
11467
11467
  is_delivered?: boolean;
@@ -12656,7 +12656,7 @@ export interface operations {
12656
12656
  }[];
12657
12657
  /** @description ISO-8601 UTC send timestamp. */
12658
12658
  timestamp?: string;
12659
- /** @description True if the connected account sent this message. */
12659
+ /** @description True if the connected account sent this message. Omitted when Curviate cannot yet identify the connected account; treat a missing value as unknown, not as received. */
12660
12660
  is_sender?: boolean;
12661
12661
  is_seen?: boolean;
12662
12662
  is_delivered?: boolean;
@@ -16418,7 +16418,7 @@ export interface operations {
16418
16418
  getV1AccountIdJobsJobId: {
16419
16419
  parameters: {
16420
16420
  query?: {
16421
- /** @description Which additional sections to include on the response (e.g. hiring_team, salary, benefits). The exact set of accepted values is not finalized, supply the section names you need, comma-separated for more than one, and they are forwarded verbatim. Omit for the base fields only. */
16421
+ /** @description Which additional sections to include on the response (e.g. hiring_team, salary, benefits). The exact set of accepted values is not finalized, supply the section names you need, comma-separated for more than one; each name is trimmed before use. Omit for the base fields only. */
16422
16422
  with_sections?: string[];
16423
16423
  };
16424
16424
  header?: never;
@@ -20340,7 +20340,7 @@ export interface operations {
20340
20340
  requestBody: {
20341
20341
  content: {
20342
20342
  "application/json": {
20343
- /** @description Free-text keyword search. Content, forwarded verbatim, never persisted. */
20343
+ /** @description Free-text keyword search. Trimmed before use; never persisted. */
20344
20344
  keywords?: string;
20345
20345
  /** @description Filter by candidate spotlight tags. */
20346
20346
  spotlights?: string[];
@@ -20413,9 +20413,9 @@ export interface operations {
20413
20413
  project?: string;
20414
20414
  /** @description Resolved JOB_FUNCTION parameter ids. */
20415
20415
  job_function?: string[];
20416
- /** @description Content, forwarded verbatim, never persisted. */
20416
+ /** @description Filter by first name (trimmed before use; never persisted). */
20417
20417
  first_name?: string;
20418
- /** @description Content, forwarded verbatim, never persisted. */
20418
+ /** @description Filter by last name (trimmed before use; never persisted). */
20419
20419
  last_name?: string;
20420
20420
  /** @description Filter to members who recently joined LinkedIn. */
20421
20421
  recently_joined?: boolean;
@@ -20438,7 +20438,7 @@ export interface operations {
20438
20438
  group?: string[];
20439
20439
  /** @description Filter to members who previously applied. */
20440
20440
  is_past_applicant?: boolean;
20441
- /** @description Content, forwarded verbatim, never persisted. */
20441
+ /** @description Filter by an existing note's content (trimmed before use; never persisted). */
20442
20442
  notes?: string;
20443
20443
  /** @description Resolved TAG parameter ids. */
20444
20444
  tags?: string[];
@@ -20826,7 +20826,7 @@ export interface operations {
20826
20826
  status?: ("ACTIVE" | "CLOSED" | "DRAFT" | "REVIEW")[];
20827
20827
  /** @description Field to sort results by. Defaults to LAST_USED_BY_ME. */
20828
20828
  sort_by?: "LAST_USED_BY_ME" | "MOST_USED_BY_ME" | "LAST_VIEWED_BY_ME" | "NEWEST_TO_OLDEST" | "OLDEST_TO_NEWEST" | "ALPHABETICAL" | "REVERSE_ALPHABETICAL";
20829
- /** @description Filter by project name (content, forwarded verbatim, never persisted). */
20829
+ /** @description Filter by project name (trimmed before use; never persisted). */
20830
20830
  keywords?: string;
20831
20831
  /** @description Number of projects to return (1-100). Defaults to 10. */
20832
20832
  limit?: number;
@@ -21689,7 +21689,7 @@ export interface operations {
21689
21689
  requestBody: {
21690
21690
  content: {
21691
21691
  "application/json": {
21692
- /** @description Free-text keyword search. Content, forwarded verbatim, never persisted. */
21692
+ /** @description Free-text keyword search. Trimmed before use; never persisted. */
21693
21693
  keywords?: string;
21694
21694
  /** @description Filter by candidate spotlight tags. */
21695
21695
  spotlights?: string[];
@@ -21762,9 +21762,9 @@ export interface operations {
21762
21762
  project?: string;
21763
21763
  /** @description Resolved JOB_FUNCTION parameter ids. */
21764
21764
  job_function?: string[];
21765
- /** @description Content, forwarded verbatim, never persisted. */
21765
+ /** @description Filter by first name (trimmed before use; never persisted). */
21766
21766
  first_name?: string;
21767
- /** @description Content, forwarded verbatim, never persisted. */
21767
+ /** @description Filter by last name (trimmed before use; never persisted). */
21768
21768
  last_name?: string;
21769
21769
  /** @description Filter to members who recently joined LinkedIn. */
21770
21770
  recently_joined?: boolean;
@@ -21787,7 +21787,7 @@ export interface operations {
21787
21787
  group?: string[];
21788
21788
  /** @description Filter to members who previously applied. */
21789
21789
  is_past_applicant?: boolean;
21790
- /** @description Content, forwarded verbatim, never persisted. */
21790
+ /** @description Filter by an existing note's content (trimmed before use; never persisted). */
21791
21791
  notes?: string;
21792
21792
  /** @description Resolved TAG parameter ids. */
21793
21793
  tags?: string[];
@@ -23107,7 +23107,7 @@ export interface operations {
23107
23107
  reject_unqualified_applicants?: boolean;
23108
23108
  reject_out_of_country_applicants?: boolean;
23109
23109
  };
23110
- /** @description Content; the new project's name, forwarded verbatim, never persisted. */
23110
+ /** @description The new project's name (trimmed before use); never persisted. */
23111
23111
  project_name: string;
23112
23112
  };
23113
23113
  };
@@ -24125,7 +24125,7 @@ export interface operations {
24125
24125
  "application/json": {
24126
24126
  /** @description The ID of the JOB_POSTING channel from the Talent Pool. SDK-confirmed REQUIRED. */
24127
24127
  channel_id: string;
24128
- /** @description Free-text keyword search. Content, forwarded verbatim, never persisted. */
24128
+ /** @description Free-text keyword search. Trimmed before use; never persisted. */
24129
24129
  keywords?: string;
24130
24130
  /**
24131
24131
  * @description Sort order for the applicant list.