@cavuno/board 4.27.0 → 4.29.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/{_spec-B_pBNVUd.d.mts → _spec-CQx5p1cM.d.mts} +117 -20
  3. package/dist/{_spec-B_pBNVUd.d.ts → _spec-CQx5p1cM.d.ts} +117 -20
  4. package/dist/{blog-DzGRUsj5.d.ts → blog-BwyZQX_f.d.ts} +1 -1
  5. package/dist/{blog-fhXRik6k.d.mts → blog-DP06wTDw.d.mts} +1 -1
  6. package/dist/{board-fVAXZ8T5.d.ts → board-C2Y5fz0m.d.ts} +2 -2
  7. package/dist/{board-DEiEHcpe.d.mts → board-C7iju96a.d.mts} +2 -2
  8. package/dist/{breadcrumbs-DNaaP3xa.d.ts → breadcrumbs-BUzF85v3.d.ts} +2 -2
  9. package/dist/{breadcrumbs-qE3CD--N.d.mts → breadcrumbs-Db6UTihw.d.mts} +2 -2
  10. package/dist/browser/cavuno-board.global.min.js +1 -1
  11. package/dist/{chunk-DUTQOLOF.mjs → chunk-EHSB2VAJ.mjs} +4 -0
  12. package/dist/{chunk-T2KC6XGV.mjs → chunk-IVSECNCD.mjs} +54 -7
  13. package/dist/{chunk-OPMJ6YH5.mjs → chunk-KDFKVWTZ.mjs} +1 -1
  14. package/dist/{chunk-BGKNXG4H.mjs → chunk-XXQCESMU.mjs} +4 -0
  15. package/dist/filters.d.mts +2 -2
  16. package/dist/filters.d.ts +2 -2
  17. package/dist/format.d.mts +4 -4
  18. package/dist/format.d.ts +4 -4
  19. package/dist/format.mjs +2 -2
  20. package/dist/go.mjs +1 -1
  21. package/dist/index.d.mts +99 -15
  22. package/dist/index.d.ts +99 -15
  23. package/dist/index.js +44 -4
  24. package/dist/index.mjs +41 -5
  25. package/dist/{jobs-BRysn2m0.d.ts → jobs-BA_PnUCd.d.ts} +9 -7
  26. package/dist/{jobs-R-h3A3kl.d.mts → jobs-BZqtb1gY.d.mts} +9 -7
  27. package/dist/paths.d.mts +8 -1
  28. package/dist/paths.d.ts +8 -1
  29. package/dist/paths.js +5 -1
  30. package/dist/paths.mjs +5 -3
  31. package/dist/{roles-DBgzkvEt.d.ts → roles-Bh3WNF9u.d.mts} +3 -1
  32. package/dist/{roles-DBgzkvEt.d.mts → roles-Bh3WNF9u.d.ts} +3 -1
  33. package/dist/route-contract.d.mts +10 -5
  34. package/dist/route-contract.d.ts +10 -5
  35. package/dist/route-contract.js +53 -5
  36. package/dist/route-contract.mjs +2 -2
  37. package/dist/{search-BlB690ma.d.mts → search-Da3TjcZ0.d.mts} +1 -1
  38. package/dist/{search-BK_zHHNQ.d.ts → search-dsA-Cetf.d.ts} +1 -1
  39. package/dist/{seo-C7gMl6Y7.d.ts → seo-D-n2g6X3.d.ts} +1 -1
  40. package/dist/{seo-0mbZ7M_E.d.mts → seo-D3DhnHk8.d.mts} +1 -1
  41. package/dist/seo-files.d.mts +2 -2
  42. package/dist/seo-files.d.ts +2 -2
  43. package/dist/seo.d.mts +6 -6
  44. package/dist/seo.d.ts +6 -6
  45. package/dist/seo.mjs +2 -2
  46. package/dist/server.d.mts +6 -6
  47. package/dist/server.d.ts +6 -6
  48. package/dist/server.mjs +1 -1
  49. package/dist/sitemap.d.mts +6 -6
  50. package/dist/sitemap.d.ts +6 -6
  51. package/dist/sitemap.mjs +2 -2
  52. package/dist/suggest.d.mts +2 -2
  53. package/dist/suggest.d.ts +2 -2
  54. package/dist/well-known.d.mts +4 -1
  55. package/dist/well-known.d.ts +4 -1
  56. package/dist/well-known.js +30 -1
  57. package/dist/well-known.mjs +5 -3
  58. package/package.json +1 -1
  59. package/skills/cavuno-board-account/SKILL.md +27 -0
  60. package/skills/cavuno-board-errors/SKILL.md +1 -1
  61. package/skills/cavuno-board-filters/SKILL.md +90 -1
  62. package/skills/cavuno-board-format/SKILL.md +52 -0
  63. package/skills/cavuno-board-post-a-job/SKILL.md +24 -0
  64. package/skills/cavuno-board-salaries/SKILL.md +7 -0
  65. package/skills/cavuno-board-talent-access/SKILL.md +7 -0
  66. package/skills/manifest.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,52 @@
3
3
  This changelog records changes that affect Board API compatibility, exported
4
4
  types, runtime behavior, or supported integration patterns.
5
5
 
6
+ ## 4.29.0 — 2026-09-29
7
+
8
+ - **Candidate profile route.** `talentProfilePath(handle)` from
9
+ `@cavuno/board/paths` builds the default profile address, `/p/{handle}`.
10
+ The route contract gains an optional `talentProfile` role (param `handle`),
11
+ so a board can serve profiles at another shape with fixed text around the
12
+ handle, such as `/@{handle}`, and mark that route with
13
+ `export const cavunoPage = 'talentProfile'`. A profile address that is only
14
+ the handle (`/{handle}`) is rejected. Route templates may now contain `@`,
15
+ and TanStack route files with a `prefix{$param}` segment (for example
16
+ `@{$handle}.tsx`) are recognised.
17
+
18
+ ## 4.28.0 — 2026-09-25
19
+
20
+ - **Resolve global location selections.** `board.locations.search` finds places
21
+ beyond a board’s existing jobs. Pass the same session token to
22
+ `board.locations.resolve` when a suggestion is selected, then use its
23
+ canonical location ID when submitting an office. `LocationResolveInput`
24
+ describes the selection request.
25
+
26
+ - **Custom-field values on job cards.** Every `PublicJobCard` (jobs list,
27
+ search, similar, company jobs, embed, recommended and saved jobs) carries
28
+ `customFieldValues` for the job and `company.customFieldValues` for its
29
+ company, keyed by field key and `{}` when empty. Only `single_select`,
30
+ `multi_select`, `boolean` and `number` values are included; select values
31
+ are option keys. Text values stay on the full job and company, and private
32
+ company fields are never included. Job values are checked against the
33
+ board's current job custom-field definitions, so values of removed fields
34
+ or options are left out. A listing can now render custom-field badges
35
+ without fetching each job.
36
+ - **Filter jobs by company custom fields.** `board.jobs.search` accepts
37
+ `filters.companyCustomFields`, matched against the public profile fields
38
+ of each job's company, with the same clauses as `filters.customFields`:
39
+ a field `key` and its accepted `values` (option keys, booleans or
40
+ numbers), AND across clauses and OR within one, up to 10 of each. Keys and
41
+ options come from `board.profileFields.retrieve('company')`. An unknown or
42
+ private key, or an undefined option key, returns `400 invalid_filter`. Job
43
+ and company keys never collide, so both lists may use the same key. When a
44
+ company's values change, its jobs follow in search within seconds. If the
45
+ filter cannot be served yet on a board, the search returns `503
46
+ search_filter_unavailable` with `details.filter: "companyCustomFields"`;
47
+ the same search without it works.
48
+ - `JobsSearchBody` is now the spec's search body type as generated; its
49
+ `customFields` and `companyCustomFields` clauses stay identical to
50
+ `CustomFieldFilter`.
51
+
6
52
  ## 4.27.0 — 2026-09-23
7
53
 
8
54
  - **Collections and profile fields.** Company and talent responses carry
@@ -61,6 +107,17 @@ types, runtime behavior, or supported integration patterns.
61
107
  job. This applies to any edit of an existing job that has an office
62
108
  location but no work arrangement, even one that changes only other fields:
63
109
  send an allowed `remoteOption` with it.
110
+ - **Employer checkout can return `pending_approval`.** When a board requires
111
+ approval of free jobs, a free employer post (and an invoice post that
112
+ publishes on issue) is held as a draft for the operator to publish instead
113
+ of going live, and `POST
114
+ /boards/{identifier}/me/companies/{slug}/jobs/{id}/checkout` answers
115
+ `status: "pending_approval"` with the `jobId`. Treat it as "submitted, not
116
+ live": do not link the job as published. Bundle, subscription and
117
+ member-credit posts still publish immediately (`status: "published"`), as
118
+ does a free post on a board without approval. The board operator now also
119
+ receives the job-submission notification for employer posts, matching the
120
+ public posting form.
64
121
  - **`jobs_constraint_violation` errors carry structured details.**
65
122
  `error.details.violations` lists each broken rule as `{ code, path, params }`
66
123
  (for example `{ code: "custom_field_required", path: ["customFieldValues",
@@ -163,6 +163,15 @@ interface components {
163
163
  /** Format: date-time */
164
164
  expiresAt: string;
165
165
  };
166
+ AudienceAttribution: {
167
+ channel?: string;
168
+ source?: string;
169
+ campaign?: string;
170
+ location?: string;
171
+ browser?: string;
172
+ os?: string;
173
+ device?: string;
174
+ };
166
175
  Block: {
167
176
  /** @enum {string} */
168
177
  object: "block";
@@ -238,10 +247,12 @@ interface components {
238
247
  /** @description Minimum 8 characters. */
239
248
  password: string;
240
249
  displayName: string;
250
+ audienceAttribution?: components["schemas"]["AudienceAttribution"];
241
251
  /** @description True only when the person ticked a marketing checkbox your UI displayed with its disclosure wording. Omit when no checkbox was shown; false and absent both record nothing. */
242
252
  marketingConsent?: boolean;
243
253
  };
244
254
  BoardAuthRequestMagicLinkBody: {
255
+ audienceAttribution?: components["schemas"]["AudienceAttribution"];
245
256
  /** Format: email */
246
257
  email: string;
247
258
  /** @description Optional same-origin path to carry through the email link. */
@@ -787,6 +798,9 @@ interface components {
787
798
  ConvertSourcedCandidateBody: {
788
799
  stage: string;
789
800
  };
801
+ CreateAlertBody: components["schemas"]["AlertBody"] & {
802
+ audienceAttribution?: components["schemas"]["AudienceAttribution"];
803
+ };
790
804
  CreateApplyApprovalBody: {
791
805
  sessionKey: string;
792
806
  };
@@ -853,10 +867,19 @@ interface components {
853
867
  employmentType: string;
854
868
  remoteOption: string;
855
869
  officeLocations: {
856
- /** @enum {string} */
870
+ /**
871
+ * @deprecated
872
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
873
+ * @enum {string}
874
+ */
857
875
  provider?: "mapbox";
876
+ /**
877
+ * @deprecated
878
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
879
+ */
858
880
  providerPlaceId?: string;
859
- displayName: string;
881
+ /** @description Display text for the location. Required unless `locationId` is sent; with `locationId` it defaults to the location's full name (locality, city, region, country), e.g. `Lyon, Auvergne-Rhône-Alpes, France`. */
882
+ displayName?: string;
860
883
  countryCode?: string;
861
884
  region?: string;
862
885
  locality?: string;
@@ -864,6 +887,10 @@ interface components {
864
887
  latitude?: number;
865
888
  longitude?: number;
866
889
  boundingBox?: number[];
890
+ /**
891
+ * @deprecated
892
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
893
+ */
867
894
  raw?: {
868
895
  suggestion?: {
869
896
  [key: string]: unknown;
@@ -872,6 +899,8 @@ interface components {
872
899
  [key: string]: unknown;
873
900
  };
874
901
  };
902
+ /** @description Opaque location id from `GET /locations/search` or `GET /places` (`id`) — the preferred way to send a location. Resolved server-side to the full place; the other fields are then ignored except `displayName`. An unknown id returns `400 locations_invalid_id`. If the lookup is temporarily unavailable the entry is kept with `displayName` alone, or the request fails with `503 locations_unavailable` when there is none. */
903
+ locationId?: string;
875
904
  }[];
876
905
  inOfficePeriod?: string;
877
906
  inOfficeFrequency?: number;
@@ -1044,7 +1073,7 @@ interface components {
1044
1073
  /** @enum {string} */
1045
1074
  object: "employer_checkout";
1046
1075
  /** @enum {string} */
1047
- status: "checkout" | "published" | "invoice_sent";
1076
+ status: "checkout" | "published" | "pending_approval" | "invoice_sent";
1048
1077
  /** @description The Stripe Checkout / hosted-invoice URL, or `null`. */
1049
1078
  checkoutUrl: string | null;
1050
1079
  jobId: string;
@@ -1193,8 +1222,8 @@ interface components {
1193
1222
  inOfficePeriod?: "per_week" | "per_month" | "per_year";
1194
1223
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
1195
1224
  inOfficeFrequency?: number;
1196
- /** @description Physical office locations associated with the job. Prefer `{query: "City, Country"}` for free-form input; `{city, country, region?, locality?}` is also accepted when you already have structured fields. Each entry is resolved server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
1197
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1225
+ /** @description Physical office locations associated with the job. Prefer `{locationId}` with an `id` from `GET /locations/search` (what a location picker returns); `{query: "City, Country"}` for free-form text and `{city, country, region?, locality?}` are also accepted and geocoded server-side (a country mismatch returns `400 jobs_unresolvable_location`). A location outside the board's job-form `allowedCountries` returns `400 jobs_constraint_violation`. */
1226
+ officeLocations?: components["schemas"]["EmployerJobOfficeLocationInput"][];
1198
1227
  /** @description Collection-reference selections keyed by the configured job collection field key. Values are arrays of record IDs, including for single-select fields. On PATCH omitted keys are preserved; send null or an empty array to clear a field. */
1199
1228
  collectionValues?: {
1200
1229
  [key: string]: string[] | unknown;
@@ -1263,6 +1292,24 @@ interface components {
1263
1292
  */
1264
1293
  public: string | null;
1265
1294
  };
1295
+ EmployerJobOfficeLocationInput: {
1296
+ /** @description Opaque location id from `GET /locations/search` or `GET /places` (`id`). Resolved server-side to the full place (country, region, city, locality). An unknown id returns `400 locations_invalid_id`; `503 locations_unavailable` while the lookup is temporarily down. */
1297
+ locationId: string;
1298
+ /** @description Display text for the location. Defaults to the location's full name (locality, city, region, country), e.g. `Lyon, Auvergne-Rhône-Alpes, France`. */
1299
+ displayName?: string;
1300
+ } | {
1301
+ /** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Utrecht, Netherlands"`, `"Mountain View, California, USA"`). Resolved server-side; rejected when no high-confidence match is found. */
1302
+ query: string;
1303
+ } | {
1304
+ /** @description Neighborhood or sub-locality. */
1305
+ locality?: string;
1306
+ /** @description City. */
1307
+ city: string;
1308
+ /** @description Region, state, or province. */
1309
+ region?: string;
1310
+ /** @description ISO 3166-1 alpha-2 country code OR recognized country name/alias. Aliases are normalized to canonical alpha-2 server-side (e.g. `US`, `USA`, `United States` → `US`; `UK`, `GB`, `United Kingdom` → `GB`). */
1311
+ country: string;
1312
+ };
1266
1313
  EmployerJobStat: {
1267
1314
  /** @enum {string} */
1268
1315
  object: "employer_job_stat";
@@ -1470,8 +1517,8 @@ interface components {
1470
1517
  inOfficePeriod?: "per_week" | "per_month" | "per_year";
1471
1518
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
1472
1519
  inOfficeFrequency?: number;
1473
- /** @description Physical office locations associated with the job. Prefer `{query: "City, Country"}` for free-form input; `{city, country, region?, locality?}` is also accepted when you already have structured fields. Each entry is resolved server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
1474
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1520
+ /** @description Physical office locations associated with the job. Prefer `{locationId}` with an `id` from `GET /locations/search` (what a location picker returns); `{query: "City, Country"}` for free-form text and `{city, country, region?, locality?}` are also accepted and geocoded server-side (a country mismatch returns `400 jobs_unresolvable_location`). A location outside the board's job-form `allowedCountries` returns `400 jobs_constraint_violation`. */
1521
+ officeLocations?: components["schemas"]["EmployerJobOfficeLocationInput"][];
1475
1522
  /** @description Collection-reference selections keyed by the configured job collection field key. Values are arrays of record IDs, including for single-select fields. On PATCH omitted keys are preserved; send null or an empty array to clear a field. */
1476
1523
  collectionValues?: {
1477
1524
  [key: string]: string[] | unknown;
@@ -1574,19 +1621,6 @@ interface components {
1574
1621
  /** @description Pre-formatted display name for the location, or `null` if not resolved. */
1575
1622
  displayName: string | null;
1576
1623
  };
1577
- JobOfficeLocationInput: {
1578
- /** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Utrecht, Netherlands"`, `"Mountain View, California, USA"`). Resolved server-side; rejected when no high-confidence match is found. */
1579
- query: string;
1580
- } | {
1581
- /** @description Neighborhood or sub-locality. */
1582
- locality?: string;
1583
- /** @description City. */
1584
- city: string;
1585
- /** @description Region, state, or province. */
1586
- region?: string;
1587
- /** @description ISO 3166-1 alpha-2 country code OR recognized country name/alias. Aliases are normalized to canonical alpha-2 server-side (e.g. `US`, `USA`, `United States` → `US`; `UK`, `GB`, `United Kingdom` → `GB`). */
1588
- country: string;
1589
- };
1590
1624
  JobPostingBillingOptions: {
1591
1625
  /** @enum {string} */
1592
1626
  object: "job_posting_billing_options";
@@ -1680,6 +1714,12 @@ interface components {
1680
1714
  /** Format: email */
1681
1715
  email: string;
1682
1716
  };
1717
+ LocationResolveInput: {
1718
+ /** @description Opaque id returned by location search. */
1719
+ locationId: string;
1720
+ /** @description The same opaque session id used for the search interaction that returned this location. */
1721
+ session: string;
1722
+ };
1683
1723
  LocationSalaryDetail: {
1684
1724
  /** @enum {string} */
1685
1725
  object: "location_salary_detail";
@@ -1702,6 +1742,8 @@ interface components {
1702
1742
  } | null;
1703
1743
  childLocations: {
1704
1744
  placeName: string;
1745
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1746
+ placeLabel: string;
1705
1747
  placeSlug: string;
1706
1748
  countryCode: string;
1707
1749
  avgSalaryMin: number;
@@ -1718,6 +1760,8 @@ interface components {
1718
1760
  regionSlug: string;
1719
1761
  cities: {
1720
1762
  placeName: string;
1763
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1764
+ placeLabel: string;
1721
1765
  placeSlug: string;
1722
1766
  countryCode: string;
1723
1767
  avgSalaryMin: number;
@@ -1746,6 +1790,8 @@ interface components {
1746
1790
  }[];
1747
1791
  siblingLocations: {
1748
1792
  placeName: string;
1793
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1794
+ placeLabel: string;
1749
1795
  placeSlug: string;
1750
1796
  countryCode: string;
1751
1797
  avgSalaryMin: number;
@@ -2524,6 +2570,10 @@ interface components {
2524
2570
  slug: string;
2525
2571
  name: string;
2526
2572
  logoUrl: string | null;
2573
+ /** @description The company's public custom-field values of the select, boolean, and number types, keyed by field key; select values are option `key`s. Private fields and text types are omitted (the full company carries text values). `{}` when none. */
2574
+ customFieldValues: {
2575
+ [key: string]: string | string[] | boolean | number;
2576
+ };
2527
2577
  } | null;
2528
2578
  /** @description Job categories (slug + board display name). Guaranteed resolvable: every emitted slug resolves via `GET /v1/boards/:identifier/categories/:slug`. */
2529
2579
  categories: {
@@ -2535,6 +2585,10 @@ interface components {
2535
2585
  slug: string;
2536
2586
  name: string;
2537
2587
  }[];
2588
+ /** @description The job's custom-field values of the select, boolean, and number types, keyed by each field's `key`; select values are option `key`s. Resolve labels via the board's `customFields.job` definitions (see `GET /v1/boards/:identifier`). Values of fields no longer defined, and removed options, are omitted; text types are only on the full job (`PublicJob`). `{}` when none. */
2589
+ customFieldValues: {
2590
+ [key: string]: string | string[] | boolean | number;
2591
+ };
2538
2592
  links: {
2539
2593
  /**
2540
2594
  * Format: uri
@@ -2553,6 +2607,25 @@ interface components {
2553
2607
  */
2554
2608
  public: string | null;
2555
2609
  };
2610
+ PublicLocation: {
2611
+ /** @enum {string} */
2612
+ object: "location";
2613
+ /** @description Opaque location id. Complete the pick through `POST /locations/resolve` with this id and the search session before using it in a later submission. Shares its id space with `PublicPlace.id`. */
2614
+ id: string;
2615
+ /** @description The location’s own name, e.g. `Berlin`. */
2616
+ name: string;
2617
+ /** @description Name with its parent context, for display in the input once picked, e.g. `Berlin, Germany`. */
2618
+ fullName: string;
2619
+ /** @description The parent context alone, for a secondary line in the result list, e.g. `Germany` for Berlin or `Berlin, Germany` for Kreuzberg; `null` for a country. */
2620
+ contextLabel: string | null;
2621
+ /**
2622
+ * @description Same vocabulary as `PublicPlace.placeType`: `country`, `region`, `city`, or `locality`.
2623
+ * @enum {string}
2624
+ */
2625
+ placeType: "country" | "region" | "city" | "locality";
2626
+ /** @description ISO 3166-1 alpha-2 country code, or `null` if unknown. */
2627
+ countryCode: string | null;
2628
+ };
2556
2629
  PublicPlace: {
2557
2630
  /** @enum {string} */
2558
2631
  object: "place";
@@ -2617,6 +2690,11 @@ interface components {
2617
2690
  key: string;
2618
2691
  values: (string | number | boolean)[];
2619
2692
  }[];
2693
+ /** @description Public custom company profile fields, matched against each job's company. Keys and option keys come from the board's public company profile field definitions (`GET /v1/boards/{identifier}/profile-fields/company`). Clauses are AND-matched; values within a clause are OR-matched. Up to 10 clauses and 10 values per clause. An unknown or private key, or an undefined option key, is rejected with `400 invalid_filter`. Kept separate from `customFields`, so a job field and a company field may share a key. */
2694
+ companyCustomFields?: {
2695
+ key: string;
2696
+ values: (string | number | boolean)[];
2697
+ }[];
2620
2698
  };
2621
2699
  /** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
2622
2700
  cursor?: string;
@@ -2921,6 +2999,8 @@ interface components {
2921
2999
  object: "salary_location";
2922
3000
  placeSlug: string;
2923
3001
  placeName: string;
3002
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3003
+ placeLabel: string;
2924
3004
  /** @description Slug of the parent place; `null` for a top-level node. */
2925
3005
  parentSlug: string | null;
2926
3006
  avgSalaryMin: number;
@@ -3023,6 +3103,8 @@ interface components {
3023
3103
  childLocations: {
3024
3104
  placeSlug: string;
3025
3105
  placeName: string;
3106
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3107
+ placeLabel: string;
3026
3108
  avgSalaryMin: number;
3027
3109
  avgSalaryMax: number;
3028
3110
  jobCount: number;
@@ -3033,6 +3115,8 @@ interface components {
3033
3115
  cities: {
3034
3116
  placeSlug: string;
3035
3117
  placeName: string;
3118
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3119
+ placeLabel: string;
3036
3120
  avgSalaryMin: number;
3037
3121
  avgSalaryMax: number;
3038
3122
  jobCount: number;
@@ -3041,6 +3125,8 @@ interface components {
3041
3125
  otherLocations: {
3042
3126
  placeSlug: string;
3043
3127
  placeName: string;
3128
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3129
+ placeLabel: string;
3044
3130
  avgSalaryMin: number;
3045
3131
  avgSalaryMax: number;
3046
3132
  jobCount: number;
@@ -3111,6 +3197,8 @@ interface components {
3111
3197
  avgSalaryMax: number;
3112
3198
  jobCount: number;
3113
3199
  placeName: string;
3200
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3201
+ placeLabel: string;
3114
3202
  placeSlug: string;
3115
3203
  countryCode: string;
3116
3204
  }[];
@@ -3436,6 +3524,8 @@ interface components {
3436
3524
  childLocations: {
3437
3525
  placeSlug: string;
3438
3526
  placeName: string;
3527
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3528
+ placeLabel: string;
3439
3529
  avgSalaryMin: number;
3440
3530
  avgSalaryMax: number;
3441
3531
  jobCount: number;
@@ -3446,6 +3536,8 @@ interface components {
3446
3536
  cities: {
3447
3537
  placeSlug: string;
3448
3538
  placeName: string;
3539
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3540
+ placeLabel: string;
3449
3541
  avgSalaryMin: number;
3450
3542
  avgSalaryMax: number;
3451
3543
  jobCount: number;
@@ -3454,6 +3546,8 @@ interface components {
3454
3546
  otherLocations: {
3455
3547
  placeSlug: string;
3456
3548
  placeName: string;
3549
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3550
+ placeLabel: string;
3457
3551
  avgSalaryMin: number;
3458
3552
  avgSalaryMax: number;
3459
3553
  jobCount: number;
@@ -3528,6 +3622,8 @@ interface components {
3528
3622
  avgSalaryMax: number;
3529
3623
  jobCount: number;
3530
3624
  placeName: string;
3625
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3626
+ placeLabel: string;
3531
3627
  placeSlug: string;
3532
3628
  countryCode: string;
3533
3629
  }[];
@@ -3636,6 +3732,7 @@ interface components {
3636
3732
  /** @enum {string} */
3637
3733
  channel: "messageEmails" | "applicationEmails" | "recommendedJobEmails";
3638
3734
  subscribed: boolean;
3735
+ audienceAttribution?: components["schemas"]["AudienceAttribution"];
3639
3736
  };
3640
3737
  UpdatePasswordBody: {
3641
3738
  currentPassword: string;